Slurm超算集群跑代码教程

Slurm超算集群跑代码教程,第1张

Slurm超算集群跑代码教程

SLURM(Simple Linux Utility for Resource Management)是一种可扩展的工作负载管理器,已被全世界的国家级超级计算机中心广泛采用。 在算力中心GPU计算集群上,用户的所有计算任务和程序需要编写 SLURM 脚本,并在登 陆节点提交 SLURM 脚本。SLURM 脚本包含三个部分:
(1)预定义的任务资 源需求;
(2)预定义的环境设定或变量;
(3)命令行形式的可执行程序或脚本。

文章目录
  • Slurm超算集群跑代码教程
  • 登陆集群
  • 配置anaconda以及python虚拟环境
  • Slurm脚本编写规范
    • CPU任务:
    • GPU任务
  • 提交运算任务
  • 特别注意


登陆集群

首先用easyconnect登陆集群专属vpn,例如(此处需要vpn的用户和密码)

登陆完vpn之后,才有权限使用ssh远程连接集群

使用远程ssh登陆集群,
此处需要服务器的用户名和密码
登陆完后,连接的是mgmt01节点,例如

配置anaconda以及python虚拟环境

和正常我们配置服务器环境的方法一样
anaconda可以放在home盘,环境都放home盘,代码数据要放在自己的data盘
配置环境可以参考我的科研第一步

配置完环境之后,运行代码的时候,不能直接使用python指令,而是需要在激活虚拟环境的前提下,编写slurm脚本来提交运算任务

Slurm脚本编写规范 CPU任务:


--nodes=1,表明使用一个运算节点(节点等于机器数)
--tasks=1,表明使用一个计算任务
--cpu-per-task=1,表明每个每个任务使用的cpu核数
--mem-per-cpu=4G,表明使用的每个cpu核的内存是4G
因此申请资源的部分就是前面这些带着#SBATCH的行,如果需要多线程任务,或者多核任务的话,可以更改cpu-per-task和mem-per-cpu,但是注意每个节点有cpu核数量上限。如果使用多任务的话,需要更改ntasks

GPU任务

单机n卡样例(已经足够用,最多单机8卡,A100 8卡已经很猛了)

#!/bin/bash 
#SBATCH --job-name=Fans    # create a short name for your job 
#SBATCH --nodes=1   # node count 
#SBATCH --ntasks=4   # total number of tasks across all nodes 
#SBATCH --cpus-per-task=4  # cpu-cores per task (>1 if multi-threaded tasks) 
#SBATCH --mem-per-cpu=4G   
#SBATCH --gres=gpu:4       # number of GPUs per node 
#SBATCH --mail-type=ALL   
#SBATCH --mail-user=shuaifan@stu.xmu.edu.cn
python -m torch.distributed.launch --nproc_per_node=4 --master_port=8880 Electra_Pretrain.py          

这里的配置就可以解读为,
使用单机(一个nodes),
4个task(因为在4个GPU上面运行程序),
每个任务使用4个cpu核,
每个cpu是4G
gpu要申请4个

下面的python运行代码,是因为要使用DDP所以需要加
–master_port使用nccl的时候一定要加,因为我们如果需要提交多个运算任务的话,这个port要设成不一样,不然只有一个运算任务被执行

同理多机n卡
只需要更改node数目和task数目以及gpu数目
但是在自己的代码中要写成多机多卡版本(涉及到多机之间的通讯)即rank和local_rank

提交运算任务

编写完slurm脚本之后,保存成job_name.slurm
然后使用
sbatch job_name.slurm提交到队列中
可以使用squeue -u user_name来查询自己的运算任务的运行情况,user_name是你的用户名
例如提交之后查询,会有下面的队列

jobid表示你的运算任务id,如果这个任务死机(存在,比如迟迟不运行(out文件一直都是0byte)),可以使用scancel jobid 杀掉这个运算任务
ST表示state,PD表示等待
ST=PD且ndelist(reason)=QOSGrpGRES,那么说明超出了资源配额,建议将申请的资源减少(最多8卡,16卡基本没戏)
然后运行的时候会在当前目录输出一个.out文件,方便你查看运行情况,例如:

会默认以jobid命名,比较方便找

特别注意
  • 在运行python代码中,不允许使用python代码下载模型以及数据
    因此在调用别人的开源模型和数据集的时候,提前下好,然后上传到集群中,才可以
  • 因为提交集群比较繁琐,因此推荐在自己本地debug,并且确认多卡能跑通之后,再用这个服务器,不然会因为程序问题一直占用gpu资源
  • gpu资源涉及到抢占,因此尽量将代码运行的结果输出到txt文件中方便查看运行到哪一步被抢掉了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存