计算化学公社

标题: 双路双卡节点如何正确使用SLURM对Gromacs进行线程绑定? [打印本页]

作者
Author:
snljty2    时间: 2022-8-9 17:03
标题: 双路双卡节点如何正确使用SLURM对Gromacs进行线程绑定?
机器配置是4214R双路,两块CPU每块都是12核24线程。有两张3080Ti显卡,0号显卡跟0号CPU主板上直连,1号显卡跟1号CPU直连。
作业系统是slurm 19.05.6版本。
在使用GPU加速版Gromacs的时候,经过测试发现如果只跑一个任务,-pin off比-pin on计算效率要低大约12%。由于没有NVLink,我们平时都是用一块CPU(12个核,thread-MPI + OpenMP版本,通常用-ntmpi 1 -ntomp 12)和一块GPU跑一个任务的,一个节点最多同时跑两个任务。如果用的CPU和GPU不是直连的,效率也会下降。

请问应该如何写SLURM脚本,使得每个任务都能自动内核绑定,而且用第0块GPU的时候全绑定在第0块CPU,第1块同理?直接改-pinoffset为0或者24感觉太不优雅而且很容易出现问题。谢谢!

作者
Author:
abin    时间: 2022-8-9 18:43
不用手动指定。
具体查看Slurm GPU ,
也就是gres部分。

你应该可以搞定的。

别看中文资料。
作者
Author:
snljty2    时间: 2022-8-12 18:05
abin 发表于 2022-8-9 18:43
不用手动指定。
具体查看Slurm GPU ,
也就是gres部分。

谢谢王老师,在您的提示下我找到了一种方法,不知道是不是优雅。CUDA_VISIBLE_DEVICES这个环境变量是当前shell允许使用的Nvidia的GPU编号。比如0,1,2,3。在SLURM提交脚本里指定比如#SBATCH --gres=gpu:3080ti:1,就是用1块之前配置文件里名字叫3080ti的GPU。这时候SLURM会自动把CUDA_VISIBLE_DEVICES指定为该分配给该脚本的GPU的编号。由于Gromacs这时候只能“看见”这一块GPU,所以gmx mdrun的参数-gpu_id这种情况下只能设成0。然后根据CUDA_VISIBLE_DEVICES的值设置相应的-pinoffset,对于我这种配置,开了超线程,就是-pinoffset ${CUDA_VISIBLE_DEVICES}*每路有多少线程。这样就可以按照我前面提到的进行绑定了。
作者
Author:
abin    时间: 2022-8-12 19:23
我手边没有机器,没法测试。

cgroup 会把分派的资源锁定,
Slurm 会自动bind
具体取决于你的配置。

手册有详细描述。

能达到预期效果就好。

就是花时间调试。

作者
Author:
angervlf    时间: 2024-8-14 11:07
snljty2 发表于 2022-8-12 18:05
谢谢王老师,在您的提示下我找到了一种方法,不知道是不是优雅。CUDA_VISIBLE_DEVICES这个环境变量是当前 ...

想请问一下这个方法可以吗?因为我是自己组的电脑,现在只有一块gpu,想加一块不同型号的gpu,我想每次提交任务的时候指定不同的gpu,一直没找到好的方法,想问一下这个方法,就是先指定CUDA_VISIBLE_DEVICES的编号,再提交slurm脚本,就可以实现想用哪个gpu用哪个了吗?
作者
Author:
snljty2    时间: 2024-8-14 15:19
angervlf 发表于 2024-8-14 11:07
想请问一下这个方法可以吗?因为我是自己组的电脑,现在只有一块gpu,想加一块不同型号的gpu,我想每次提 ...

你这个情况不一样。CUDA_VISIBLE_DEVICES是SLURM自动给分配的。建议设置好SLURM配置文件(默认/etc/slurm下)的slurm.conf和gres.conf,指定/dev/nvidia0和/dev/nvidia1分别叫什么名字的gres,然后提交作业脚本里面指定要用哪个名字的gres。
作者
Author:
Entropy.S.I    时间: 2024-9-7 20:18
本帖最后由 Entropy.S.I 于 2024-9-7 21:03 编辑

http://bbs.keinsci.com/thread-47879-1-1.html  #5楼 有对此贴的回应





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3