第一次接触曙光DCU计算平台时,最让人头疼的就是环境配置。记得我第一次尝试时,光是安装conda就折腾了大半天。这里分享几个实用技巧,帮你少走弯路。
首先,conda的安装确实是个技术活。建议直接从曙光计算官网下载miniconda,而不是完整版的anaconda。完整版体积太大,上传到服务器时容易出问题。我实测miniconda3-latest-Linux-x86_64.sh这个版本最稳定,文件大小不到100MB,用快传客户端上传速度能到50MB/s左右。
安装时有个细节容易被忽略:source命令执行后需要重启终端才能生效。我第一次安装时conda命令死活不认,后来发现是没重启终端。安装完成后,建议立即创建一个Python3.8的虚拟环境:
bash复制conda create -n dcu_env python=3.8 -y
注意:曙光DCU基于AMD架构,与常见的NVIDIA GPU不同,必须使用特定版本的PyTorch。这个坑我踩过,直接pip install torch会报错。
DCU对PyTorch的适配是个大问题。经过多次尝试,我发现/public/software/apps/DeepLearning/whl/dtk-22.10/pytorch/这个路径下的whl文件最稳定。具体安装步骤如下:
bash复制pip install /public/software/apps/DeepLearning/whl/dtk-22.10/pytorch/torch-1.10.0a0+git36449ea-cp38-cp38-linux_x86_64.whl
pip install /public/software/apps/DeepLearning/whl/dtk-22.10/pytorch/torchvision-0.10.0a0+300a8a4-cp38-cp38-linux_x86_64.whl
安装完成后,一定要测试DCU是否可用:
python复制import torch
print(torch.cuda.is_available()) # 应该返回True
print(torch.version.hip) # 查看ROCm版本
如果返回False,八成是没加载正确的ROCm编译器。这时候需要执行:
bash复制module rm compiler/rocm/3.3
module load compiler/rocm/dtk-22.10
申请计算节点是使用DCU的关键一步。曙光平台的队列系统有点特别,队列名首字母必须小写。先用whichpartition查看可用队列,然后这样申请资源:
bash复制salloc -p hebhdnormal -N 1 -n 32 --gres=dcu:4
这个命令申请了1个计算节点、32个CPU核心和4块DCU卡。申请成功后,用ssh登录计算节点:
bash复制ssh a01r3n02
登录后有个常见问题:conda环境会失效。这时候需要重新激活:
bash复制source /path/to/conda.sh
conda activate dcu_env
我建议把这些命令写成脚本,每次登录直接运行。还可以用hy-smi命令查看DCU状态,类似NVIDIA的nvidia-smi。
在DCU上跑模型和普通GPU有些不同。最稳妥的方式是用nohup挂后台:
bash复制nohup python train.py > train.log 2>&1 &
但更专业的做法是写sbatch脚本。这是我常用的模板:
bash复制#!/bin/bash
#SBATCH -p hebhdnormal
#SBATCH -N 1
#SBATCH -n 32
#SBATCH --gres=dcu:4
#SBATCH -o %j.out
#SBATCH -e %j.err
module purge
module load compiler/rocm/dtk-22.10
source /path/to/conda.sh
conda activate dcu_env
python train.py
保存为train.sh后,用sbatch提交:
bash复制sbatch train.sh
用squeue查看任务状态。如果任务卡住了,可以用scancel终止。
DCU的性能调优有几个关键点:
常见问题排查:
我常用的监控命令组合:
bash复制watch -n 1 "hy-smi && squeue -u $USER"
这个命令每1秒刷新一次DCU状态和任务队列情况。
以ImageNet分类任务为例,完整流程如下:
关键参数配置:
python复制torch.backends.cudnn.benchmark = True
torch.backends.cudnn.enabled = True
model = model.to('hip') # 注意不是'cuda'
训练脚本要特别注意数据加载器的num_workers设置,建议设为CPU核心数的1/4。
曙光DCU支持PyTorch的DDP多卡训练。关键配置:
python复制import torch.distributed as dist
dist.init_process_group('hccl')
model = DDP(model, device_ids=[local_rank])
混合精度训练能显著提升速度:
python复制scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
outputs = model(inputs)
loss = criterion(outputs, targets)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
记得在sbatch脚本中加上:
bash复制#SBATCH --gres=dcu:4
#SBATCH --ntasks-per-node=4
除了hy-smi,这些工具也很实用:
我常用的监控脚本:
bash复制#!/bin/bash
while true; do
clear
hy-smi
squeue -u $USER
sleep 5
done
保存为monitor.sh,用chmod +x赋予执行权限后运行。