Gáb*_*dős 4 python python-3.x slurm
我有一个4 * 64 CPU集群。我安装了SLURM,它似乎正在工作,好像我打电话给sbatch我一样,得到了正确的分配和排队。但是,如果我使用64个以上的内核(基本上是1个以上的节点),则它会完美分配正确数量的节点,但是如果我ssh将这些内核分配到分配的节点中,则只能看到其中一个的实际工作。其余的只是坐在那里什么都不做。
我的代码很复杂,并且使用multiprocessing。我打电话给有300名工人的游泳池,所以我想这应该不是问题。
我想实现的目标是调用sbatch myscript.py200个内核,而SLURM应该在这200个内核上分配我的运行,而不仅仅是分配正确数量的节点,而实际上只使用一个。
我的python脚本的标头如下所示:
#!/usr/bin/python3
#SBATCH --output=SLURM_%j.log
#SBATCH --partition=part
#SBATCH -n 200
Run Code Online (Sandbox Code Playgroud)
我用调用脚本sbatch myscript.py。
不幸的是,multiprocessing不允许在多个节点上工作。从文档中:
多重处理模块允许程序员充分利用给定机器上的多个处理器
通常与Slurm一起使用的一种选择是使用MPI(与MPI4PY软件包一起使用),但MPI被认为是“并行编程的汇编语言”,您将需要扩展修改代码。
另一种选择是查看“ 并行处理”软件包,以找到适合您的需求并且需要对代码进行最少更改的软件包。另请参阅其他问题以获取更多见解。
最后一点:将#SBATCH指令放在Python脚本中并使用Python shebang 是完全可以的。但是当Slurm执行脚本的副本而不是脚本本身时,您必须添加一行,例如
sys.path.append(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
在脚本的开头(但在各#SBATCH行之后)以确保Python找到目录中的任何模块。
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |