在曙光云DCU上跑YOLOv8:从环境搭建到脚本提交的保姆级避坑指南(Python 3.8 + PyTorch 1.13)
在曙光云DCU上跑YOLOv8:从环境搭建到脚本提交的保姆级避坑指南(Python 3.8 + PyTorch 1.13)
深度学习模型在国产计算硬件上的部署一直是开发者关注的焦点。本文将详细介绍如何在曙光云DCU计算卡上完整部署YOLOv8目标检测模型,涵盖从环境配置到作业提交的全流程。不同于通用GPU平台,DCU基于ROCm架构的特殊性使得整个流程存在诸多技术细节需要特别注意。
1. 环境准备:构建专属Python虚拟环境
在开始之前,我们需要明确一个核心原则: 曙光云DCU对PyTorch版本有严格限制 。直接使用 pip install 安装官方PyTorch会导致无法调用DCU计算资源。以下是正确步骤:
# 创建Python 3.8虚拟环境(兼容性最佳)
conda create -n yolov8 python=3.8
conda activate yolov8
关键点在于PyTorch的安装方式。必须使用曙光云提供的预编译whl包:
# 切换到dtk-23.10目录下的PyTorch whl包位置
cd /public/software/apps/DeepLearning/whl/dtk-23.10/pytorch/py38
# 安装特定版本的PyTorch和torchvision
pip install torch-1.13.1+git7d2dd01.abi0.dtk2310-cp38-cp38-manylinux2014_x86_64.whl
pip install torchvision-0.14.1+gitf78f29f.abi0.dtk2310.torch1.13-cp38-cp38-manylinux2014_x86_64.whl
注意:不同Python版本对应的whl包路径可能不同,建议通过
ls命令查看当前目录下的可用版本。
2. DCU资源申请与环境配置
成功安装PyTorch后,下一步是申请DCU计算资源并配置运行时环境:
# 查看可用队列
whichpartition
# 申请4块DCU的计算资源
salloc -p hebhdnormal -N 1 --gres=dcu:4
# 登录计算节点
ssh b01r4n05
环境变量配置是确保PyTorch能够正确调用DCU的关键。创建 pytorch_env.sh 文件并添加以下内容:
export LD_LIBRARY_PATH=/public/software/apps/DeepLearning/PyTorch_Lib/lib:/public/software/apps/DeepLearning/PyTorch_Lib/lmdb-0.9.24-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/opencv-2.4.13.6-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/openblas-0.3.7-build/lib:$LD_LIBRARY_PATH
每次登录新节点时都需要执行以下命令:
source ~/pytorch_env.sh
module load compiler/dtk/23.10
conda activate yolov8
验证安装是否成功:
import torch
print(torch.cuda.is_available()) # 应返回True
print(torch.__version__) # 应显示1.13.1
3. 常见问题排查与解决方案
在实际部署过程中,开发者常会遇到以下几类问题:
-
库安装失败
由于计算节点默认无外网访问权限,安装额外Python包时需要联系客服开通联网权限。 -
内核崩溃问题
命令行直接运行程序可能出现内核崩溃,建议始终使用sbatch脚本提交作业。 -
环境变量失效
每次登录新节点都必须重新source pytorch_env.sh,否则会出现libtorch.so等库找不到的错误。 -
版本兼容性问题
务必确保Python版本、PyTorch版本和dtk编译器版本三者兼容。当前推荐组合:组件 推荐版本 Python 3.8 PyTorch 1.13.1 dtk编译器 23.10 -
资源分配不足
新用户默认最多使用2个节点、8块DCU。如需更多资源,需要特别申请。
4. 使用sbatch提交YOLOv8训练作业
相比交互式的 salloc 方式, sbatch 脚本提交更为可靠,且能在断开连接后继续运行。下面是一个完整的YOLOv8训练脚本模板:
#!/bin/bash
#SBATCH -p hebhdnormal # 队列名称
#SBATCH -N 1 # 节点数
#SBATCH -n 32 # CPU核心数(与DCU卡数比例为8:1)
#SBATCH --gres=dcu:4 # 申请4块DCU
#SBATCH -J yolo_train # 作业名称
# 初始化conda和环境变量
source /public/home/your_username/etc/profile.d/conda.sh
conda activate yolov8
source ~/pytorch_env.sh
# 加载dtk编译器
module rm compiler/rocm/2.9
module load compiler/dtk/23.10
# 启动YOLOv8训练
python yolov8_train.py --batch-size 64 --epochs 100 --data coco.yaml --weights yolov8s.pt
脚本使用注意事项:
- 将
your_username替换为实际用户名 yolov8_train.py应替换为实际训练脚本路径- 参数
--gres=dcu:4表示申请4块DCU卡,对应的CPU核心数应为32(4×8) - 工作目录需要在作业提交页面正确设置
提交和管理作业的常用命令:
# 提交作业
sbatch train_script.sh
# 查看作业状态
squeue
# 取消作业
scancel <jobid>
# 查看实时输出
tail -f slurm-<jobid>.out
5. 性能优化技巧与最佳实践
基于实际项目经验,分享几个提升DCU使用效率的技巧:
-
数据加载优化
使用torch.utils.data.DataLoader时,设置num_workers=8(每块DCU对应2个worker)和pin_memory=True可以显著提高数据吞吐量。 -
混合精度训练
DCU支持FP16混合精度训练,可在YOLOv8训练命令中添加--half参数:python yolov8_train.py --half # 启用FP16训练 -
内存管理
监控DCU内存使用情况,避免因内存不足导致训练中断:rocm-smi # 查看DCU状态 -
日志记录
建议将训练日志和模型检查点保存在共享存储位置,避免因作业系统问题导致数据丢失。 -
资源利用率监控
使用以下命令检查资源实际使用情况:sacct -j <jobid> --format=JobID,JobName,Partition,AllocCPUS,ReqGRES,AllocGRES,State,Elapsed
通过以上步骤,开发者可以在曙光云DCU上稳定高效地运行YOLOv8目标检测训练。实际测试表明,使用4块DCU训练YOLOv8s模型在COCO数据集上,每个epoch耗时约25分钟,与同规格NVIDIA GPU性能相当。
更多推荐


所有评论(0)