计算化学公社

 找回密码 Forget password
 注册 Register
Views: 2012|回复 Reply: 6
打印 Print 上一主题 Last thread 下一主题 Next thread

[GPU加速] 双路双卡节点如何正确使用SLURM对Gromacs进行线程绑定?

[复制链接 Copy URL]

353

帖子

1

威望

1971

eV
积分
2344

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
机器配置是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感觉太不优雅而且很容易出现问题。谢谢!

846

帖子

16

威望

4634

eV
积分
5800

Level 6 (一方通行)

小屁孩

7#
发表于 Post on 2024-9-7 20:18:05 | 只看该作者 Only view this author
本帖最后由 Entropy.S.I 于 2024-9-7 21:03 编辑

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

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
snljty2 + 5 谢谢大佬!

查看全部评分 View all ratings

- 向着虚无前进 -

353

帖子

1

威望

1971

eV
积分
2344

Level 5 (御坂)

6#
 楼主 Author| 发表于 Post on 2024-8-14 15:19:27 | 只看该作者 Only view this author
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。

11

帖子

0

威望

564

eV
积分
575

Level 4 (黑子)

5#
发表于 Post on 2024-8-14 11:07:25 | 只看该作者 Only view this author
snljty2 发表于 2022-8-12 18:05
谢谢王老师,在您的提示下我找到了一种方法,不知道是不是优雅。CUDA_VISIBLE_DEVICES这个环境变量是当前 ...

想请问一下这个方法可以吗?因为我是自己组的电脑,现在只有一块gpu,想加一块不同型号的gpu,我想每次提交任务的时候指定不同的gpu,一直没找到好的方法,想问一下这个方法,就是先指定CUDA_VISIBLE_DEVICES的编号,再提交slurm脚本,就可以实现想用哪个gpu用哪个了吗?

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

4#
发表于 Post on 2022-8-12 19:23:49 | 只看该作者 Only view this author
我手边没有机器,没法测试。

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

手册有详细描述。

能达到预期效果就好。

就是花时间调试。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

353

帖子

1

威望

1971

eV
积分
2344

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2022-8-12 18:05:54 | 只看该作者 Only view this author
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}*每路有多少线程。这样就可以按照我前面提到的进行绑定了。

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

2#
发表于 Post on 2022-8-9 18:43:25 | 只看该作者 Only view this author
不用手动指定。
具体查看Slurm GPU ,
也就是gres部分。

你应该可以搞定的。

别看中文资料。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 12:31 , Processed in 0.220196 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list