在曙光云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. 常见问题排查与解决方案

在实际部署过程中,开发者常会遇到以下几类问题:

  1. 库安装失败
    由于计算节点默认无外网访问权限,安装额外Python包时需要联系客服开通联网权限。

  2. 内核崩溃问题
    命令行直接运行程序可能出现内核崩溃,建议始终使用sbatch脚本提交作业。

  3. 环境变量失效
    每次登录新节点都必须重新 source pytorch_env.sh ,否则会出现 libtorch.so 等库找不到的错误。

  4. 版本兼容性问题
    务必确保Python版本、PyTorch版本和dtk编译器版本三者兼容。当前推荐组合:

    组件 推荐版本
    Python 3.8
    PyTorch 1.13.1
    dtk编译器 23.10
  5. 资源分配不足
    新用户默认最多使用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使用效率的技巧:

  1. 数据加载优化
    使用 torch.utils.data.DataLoader 时,设置 num_workers=8 (每块DCU对应2个worker)和 pin_memory=True 可以显著提高数据吞吐量。

  2. 混合精度训练
    DCU支持FP16混合精度训练,可在YOLOv8训练命令中添加 --half 参数:

    python yolov8_train.py --half  # 启用FP16训练
    
  3. 内存管理
    监控DCU内存使用情况,避免因内存不足导致训练中断:

    rocm-smi  # 查看DCU状态
    
  4. 日志记录
    建议将训练日志和模型检查点保存在共享存储位置,避免因作业系统问题导致数据丢失。

  5. 资源利用率监控
    使用以下命令检查资源实际使用情况:

    sacct -j <jobid> --format=JobID,JobName,Partition,AllocCPUS,ReqGRES,AllocGRES,State,Elapsed
    

通过以上步骤,开发者可以在曙光云DCU上稳定高效地运行YOLOv8目标检测训练。实际测试表明,使用4块DCU训练YOLOv8s模型在COCO数据集上,每个epoch耗时约25分钟,与同规格NVIDIA GPU性能相当。

更多推荐