我已经在之前的文章介绍过Slurm基本指令,接下来将结合之前的内容记录如何在在超算平台搭建深度学习环境。
本文章会根据超算平台的更新、本人的实践经验进行更新,所以大家可以收藏这页,如果遇到新的BUG看看本文有没有提出
查看队列
第一步我们需要通过命令行查看自己能够在什么队列提交任务:whichpartition
输出结果:
PartitionName=染念最帅
这说明,我们将要在队列名是”染念最帅“上提交任务。
知道队列之后,我们就可以提交任务,经过前面的学习,我们知道有salloc
、srun
和sbatch
三种方式。
使用超算预置环境
我们可以通过module avail
看到超算预置的软件环境,例如我看到apps/Pytorch/llama_py38
,那就可以通过module load
加载,愉快的使用了。
自定义conda环境
除了上面可能已经预置好的conda环境,我们也可以通过超算预置的apps/anaconda3/5.2.0
或者自己在home目录安装minconda来自定义环境。最近,我发现如果你选择源码编译python包,最好自己安装一个minconda,使用集群的环境会有一些编译权限问题,导致安装失败!
预置下的自定义
module load apps/anaconda3/5.2.0
conda create -n torch python=3.10
创建环境,建议python3.10,许多包也只有3.10版本source activate torch
激活环境(注销是:source deactivate
)在
/public/software/apps/DeepLearning
查询自己要安装的whl包,在选择DTK版本的时候,越新越好,这与英伟达约旧约好不一样。
每次进入命令行,都要这样执行,如果觉得麻烦,可以把上面的命令统一写到文件里面,例如一个文件名为env.sh
的代码为:#!/bin/bash module purge # 根据最新情况进行更改,第一次进入命令行就module list看看基础是什么,在此基础上灵活更改 module load compiler/devtoolset/7.3.1 mpi/hpcx/2.11.0/gcc-7.3.1 compiler/dtk/24.04 apps/anaconda3/5.2.0 source activate torch
执行方式:
source env.sh
miniconda
选择这个的理由我在前面也说过,下载安装包到自己的home目录,然后直接安装到这,具体步骤不用多说。
切记,不要自己在超算执行init操作,而是直接使用下面的env.sh
的代码:#!/bin/bash module purge module load compiler/devtoolset/7.3.1 mpi/hpcx/2.11.0/gcc-7.3.1 compiler/dtk/24.04 source ~/miniconda3/bin/activate conda activate llama
注意这里激活是conda,而不是source,可以根据这个文件在命令行分步骤执行。
可能的问题
- 有时候输出
sbatch: error: Batch job submission failed: Requested node configuration is not available
,说明申请的资源超过了限制。 - 在AC平台,并不是例如可用资源:CPU64核,加速卡8卡,在一个节点申请中就能全部用上,你还要看可访问的队列支持什么情况。例如你的AC首页写着队列情况是
7285-32C-128G-4卡
,说明单节点最高配置为32核4卡。在单节点的时候,你可以跑1卡,2卡,3卡,4卡,但在多节点,例如2节点的时候,最好跑8卡。如果是5卡,那么就要设置5个节点,每节点1卡,非常浪费资源,说了这么多,一般我们只要测试1卡,2卡,4卡,8卡...2的几次方。这样可以充分使用资源。 - 如果你跑奇数卡,很容易报错:
RuntimeError: HIP/CUDA error: invalid device ordinal
识别不了GPU设备个数的错误 - 如果报错:
More processors requested than permitted
或者你提交的任务一直在排队,是因为申请的CPU核对不上你的任务要求。 - 有时候你觉得按上面的日志产生太多了,你可以把
#SBATCH -o %j.out
改成#SBATCH -o ./logs/%j.out
,把#SBATCH -e %j.err
改成#SBATCH -e ./logs/%j.err
,这样会在指定目录生成,但是AC平台还很坑的是,有时候你的任务一直在排队,还可能是因为你这个指定目录他没法创建,所以自己创建更保险,有时候他又会自动创建,真的很玄学。 - pip安装的时候出现
Local version label can only be used with
==or
!=operators
,通过pip install pip==24.0
降级 libglog.so
、libgalaxyhip.so
丢失,看看自己的DTK版本环境变量和安装的包对不对应
小技巧
提交作业之后,因为我们的sh包含了输出日志,因此可以通过tail -f 日志名
查看。
我们还可以ssh登录计算节点,使用watch rocm-smi
,默认1秒看dcu显存情况,如果要更改时间,使用watch -n x rocm-smi
,x秒刷新一次。
嗯?计算节点id忘了怎么办?squeue查看到的nodelist下面对应的内容😜
最后,提醒大家:
丹规千万条,核时第一条。关炉不规范,钞票两行泪!