我已经在之前的文章介绍过 Slurm 基本指令,接下来将结合之前的内容记录如何在在超算平台搭建深度学习环境。

本文章会根据超算平台的更新、本人的实践经验进行更新,所以大家可以收藏这页,如果遇到新的 BUG 看看本文有没有提出

查看队列 #

第一步我们需要通过命令行查看自己能够在什么队列提交任务:whichpartition

输出结果: PartitionName=染念最帅 这说明,我们将要在队列名是”染念最帅“上提交任务。

知道队列之后,我们就可以提交任务,经过前面的学习,我们知道有sallocsrunsbatch三种方式。

使用超算预置环境 #

我们可以通过module avail看到超算预置的软件环境,例如我看到apps/Pytorch/llama_py38,那就可以通过module load加载,愉快的使用了。

自定义 conda 环境 #

除了上面可能已经预置好的 conda 环境,我们也可以通过超算预置的apps/anaconda3/5.2.0或者自己在 home 目录安装 minconda 来自定义环境。最近,我发现如果你选择源码编译 python 包,最好自己安装一个 minconda,使用集群的环境会有一些编译权限问题,导致安装失败!

预置下的自定义 #

  1. module load apps/anaconda3/5.2.0
  2. conda create -n torch python=3.10 创建环境,建议 python3.10,许多包也只有 3.10 版本
  3. source activate torch 激活环境(注销是:source deactivate)
  4. /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,可以根据这个文件在命令行分步骤执行。

可能的问题 #

  1. 有时候输出 sbatch: error: Batch job submission failed: Requested node configuration is not available,说明申请的资源超过了限制。
  2. 在 AC 平台,并不是例如可用资源:CPU64 核,加速卡 8 卡,在一个节点申请中就能全部用上,你还要看可访问的队列支持什么情况。例如你的 AC 首页写着队列情况是7285-32C-128G-4卡,说明单节点最高配置为 32 核 4 卡。在单节点的时候,你可以跑 1 卡,2 卡,3 卡,4 卡,但在多节点,例如 2 节点的时候,最好跑 8 卡。如果是 5 卡,那么就要设置 5 个节点,每节点 1 卡,非常浪费资源,说了这么多,一般我们只要测试 1 卡,2 卡,4 卡,8 卡...2 的几次方。这样可以充分使用资源。
  3. 如果你跑奇数卡,很容易报错:RuntimeError: HIP/CUDA error: invalid device ordinal识别不了 GPU 设备个数的错误
  4. 如果报错:More processors requested than permitted或者你提交的任务一直在排队,是因为申请的 CPU 核对不上你的任务要求。
  5. 有时候你觉得按上面的日志产生太多了,你可以把#SBATCH -o %j.out改成#SBATCH -o ./logs/%j.out,把#SBATCH -e %j.err 改成#SBATCH -e ./logs/%j.err,这样会在指定目录生成,但是 AC 平台还很坑的是,有时候你的任务一直在排队,还可能是因为你这个指定目录他没法创建,所以自己创建更保险,有时候他又会自动创建,真的很玄学。
  6. pip 安装的时候出现Local version label can only be used with ==or!= operators,通过pip install pip==24.0降级
  7. libglog.solibgalaxyhip.so丢失,看看自己的 DTK 版本环境变量和安装的包对不对应

小技巧 #

提交作业之后,因为我们的 sh 包含了输出日志,因此可以通过tail -f 日志名查看。

我们还可以 ssh 登录计算节点,使用watch rocm-smi,默认 1 秒看 dcu 显存情况,如果要更改时间,使用watch -n x rocm-smi,x 秒刷新一次。 嗯?计算节点 id 忘了怎么办?squeue 查看到的 nodelist 下面对应的内容 😜

最后,提醒大家:

丹规千万条,核时第一条。关炉不规范,钞票两行泪!