限制 OMPython 使用的内核数
Limit number of cores used by OMPython
背景
我需要运行块模拟。我已经使用 OMEdit 创建了系统,我调用 omc 来 运行 使用 OMPython 和 zmq 进行消息传递的模拟。模拟工作正常,但现在我需要将它移到服务器上以长时间模拟系统。
由于服务器由一组人共享,因此它使用 slurm 对作业进行排队。服务器有 32 个内核,但他们要求我在调整脚本时只使用 8 个内核,然后在我想要 运行 我的最终模拟时使用 24 个内核。
我已将 slurm 配置为按以下方式调用我的脚本:
#!/bin/bash
#
#SBATCH --job-name=simulation_Test_ADC2_pipe_4096s
#SBATCH --output=simulation_Test_ADC2_pipe_4096s.txt
#
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=10000
source activate /home/jabozzo/conda_envs/py27
#which python
python ./Test_ADC2_pipe_4096s.py
然后我使用 sbatch 执行 slurm 文件。
问题
omc 编译工作正常。当它开始模拟时,服务器的所有 32 个核心都已加载,即使它被配置为仅使用 8 个。
我试过了
有 compilation and simulation 个标志可以传递给 omc。我试过使用 --numProcs
(一个编译标志),但这似乎只适用于编译过程,不会影响最终的可执行文件。我扫描了模拟标志页面以寻找相关内容,但似乎没有更改 cpu 用法的选项。
我们在并行进行 OpenModelica 测试时唯一添加的是添加 GC_MARKERS=1
环境变量和 --numProcs=1
;这使得我们每晚对 10000 个测试进行的库测试全部 运行 连续进行。但是 GC_MARKERS
不应该影响模拟,除非它们正在分配大量内存。除此之外,OpenModelica 模拟是串行的,除非您使用并行 blas/lapack/sundials 库,该库可能会在 OpenModelica 对它一无所知的情况下使用更多内核;在这种情况下,您需要阅读消耗所有资源的库的文档。
还有点令人惊讶的是 slurm
允许您的进程消耗比您设置的更多的 CPU;它可以使用 taskset
命令让内核强制进程只使用某些 CPU。
我的服务器管理员不确定 taskset
是否会干扰 slurm 内部结构。所以我们找到了另一个选择。如果 omc 使用 openMP 进行编译,我们还可以限制核心数,将 slurm 文件的最后一行替换为:
OMP_NUM_THREADS=8 python ./Test_ADC2_pipe_4096s.py
我将此答案留在此处以补充 答案
背景
我需要运行块模拟。我已经使用 OMEdit 创建了系统,我调用 omc 来 运行 使用 OMPython 和 zmq 进行消息传递的模拟。模拟工作正常,但现在我需要将它移到服务器上以长时间模拟系统。
由于服务器由一组人共享,因此它使用 slurm 对作业进行排队。服务器有 32 个内核,但他们要求我在调整脚本时只使用 8 个内核,然后在我想要 运行 我的最终模拟时使用 24 个内核。
我已将 slurm 配置为按以下方式调用我的脚本:
#!/bin/bash
#
#SBATCH --job-name=simulation_Test_ADC2_pipe_4096s
#SBATCH --output=simulation_Test_ADC2_pipe_4096s.txt
#
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=10000
source activate /home/jabozzo/conda_envs/py27
#which python
python ./Test_ADC2_pipe_4096s.py
然后我使用 sbatch 执行 slurm 文件。
问题
omc 编译工作正常。当它开始模拟时,服务器的所有 32 个核心都已加载,即使它被配置为仅使用 8 个。
我试过了
有 compilation and simulation 个标志可以传递给 omc。我试过使用 --numProcs
(一个编译标志),但这似乎只适用于编译过程,不会影响最终的可执行文件。我扫描了模拟标志页面以寻找相关内容,但似乎没有更改 cpu 用法的选项。
我们在并行进行 OpenModelica 测试时唯一添加的是添加 GC_MARKERS=1
环境变量和 --numProcs=1
;这使得我们每晚对 10000 个测试进行的库测试全部 运行 连续进行。但是 GC_MARKERS
不应该影响模拟,除非它们正在分配大量内存。除此之外,OpenModelica 模拟是串行的,除非您使用并行 blas/lapack/sundials 库,该库可能会在 OpenModelica 对它一无所知的情况下使用更多内核;在这种情况下,您需要阅读消耗所有资源的库的文档。
还有点令人惊讶的是 slurm
允许您的进程消耗比您设置的更多的 CPU;它可以使用 taskset
命令让内核强制进程只使用某些 CPU。
我的服务器管理员不确定 taskset
是否会干扰 slurm 内部结构。所以我们找到了另一个选择。如果 omc 使用 openMP 进行编译,我们还可以限制核心数,将 slurm 文件的最后一行替换为:
OMP_NUM_THREADS=8 python ./Test_ADC2_pipe_4096s.py
我将此答案留在此处以补充