曙光超算实战:手把手教你用sbatch脚本在DCU队列上部署训练任务
曙光超算实战DCU队列sbatch脚本全流程生产级部署指南当深度学习模型从实验阶段转向生产环境时超算平台的任务管理能力往往成为瓶颈。许多研究者习惯在交互式终端中直接执行训练命令却面临网络中断导致任务终止、资源分配不合理、日志管理混乱等问题。本文将基于曙光超算的DCU加速环境演示如何通过sbatch脚本实现全自动化训练任务部署这套方法已在多个国家级重点实验室的长期训练任务中得到验证。1. 生产级sbatch脚本架构设计一个工业级的sbatch脚本需要同时处理资源调度、环境初始化、错误恢复和监控四大核心需求。与临时测试脚本不同生产脚本应当具备以下特征参数显式声明所有计算资源需求在脚本头部明确定义环境自包含不依赖交互式终端的手动配置状态可追溯标准化的日志输出和错误捕获机制资源可监控内置硬件状态检查点以下是一个基础模板的结构解析#!/bin/bash #SBATCH --job-nameresnet50_train # 任务名称 #SBATCH --partitionhebhdnormal # 队列名称 #SBATCH --nodes1 # 计算节点数 #SBATCH --gresdcu:4 # 每节点DCU数量 #SBATCH --ntasks-per-node32 # 每节点CPU核心数 #SBATCH --output%x_%j.log # 标准输出日志 #SBATCH --error%x_%j.err # 错误输出日志 # 环境初始化模块 module purge module load compiler/rocm/dtk-22.10 source /path/to/conda.sh conda activate your_env # 训练执行部分 python train.py --batch-size 128 \ --epochs 100 \ --data-dir ./dataset关键提示--gresdcu参数必须与队列的DCU资源配置匹配过度申请会导致任务排队时间过长而申请不足则无法充分利用硬件性能。2. 高级资源调度策略曙光超算的DCU队列支持多种精细化的资源控制方式合理的参数组合可以显著提升任务调度效率参数典型值作用说明生产环境建议--time24:00:00最大运行时间设置为预估时间的120%--mem100G每节点内存配合hy-smi监控调整--qosnormal服务质量等级长期任务使用low优先级--exclusiveN/A独占节点大规模分布式训练时启用对于需要定期执行的训练任务可以结合CRON实现自动化提交# 每天凌晨2点提交新训练任务 0 2 * * * cd /path/to/project sbatch train.sbatch资源监控方面建议在脚本中加入定期状态检查# 每30分钟记录一次DCU状态 while true; do hy-smi gpu_monitor.log sleep 1800 done 3. 环境隔离与依赖管理超算环境与个人开发环境的主要差异在于软件栈的隔离性。以下是三个必须处理的依赖问题Python环境隔离使用conda创建专属虚拟环境固定所有依赖版本号导出环境配置清单conda env export environment.yml pip freeze requirements.txtDCU专用软件栈加载正确的ROCm编译器模块安装适配DCU的PyTorch版本pip install /public/software/apps/DeepLearning/whl/dtk-22.10/pytorch/torch-1.10.0a0gitc6e7b0e-cp38-cp38-linux_x86_64.whl数据路径处理使用绝对路径避免相对路径错误挂载共享存储时检查文件系统状态if [ ! -d /dataset ]; then echo ERROR: Dataset mount missing 2 exit 1 fi4. 训练任务生命周期管理生产环境的训练任务需要完整的监控和干预能力。我们推荐采用以下工作流程任务提交阶段使用sbatch提交脚本而非直接nohup获取任务ID用于后续管理JOBID$(sbatch --parsable train.sbatch) echo Submitted batch job $JOBID运行监控阶段实时查看任务状态squeue -j $JOBID动态查看日志输出tail -f resnet50_train_${JOBID}.log异常处理阶段任务失败自动重试机制# 在sbatch脚本中加入错误处理 if [ $? -ne 0 ]; then echo Training failed, restarting... 2 sbatch train.sbatch exit 1 fi手动终止任务scancel $JOBID性能优化阶段分析DCU利用率grep Utilization gpu_monitor.log调整batch size等参数平衡吞吐与显存占用5. 多实验并行管理策略当需要同时进行多个超参数实验时可以采用以下两种模式模式一参数化脚本#!/bin/bash #SBATCH --array1-10 python train.py --lr $((SLURM_ARRAY_TASK_ID * 0.01)) \ --batch-size 64模式二动态生成提交# generate_jobs.py import os for lr in [0.01, 0.05, 0.1]: for bs in [32, 64, 128]: cmd fsbatch -J exp_lr{lr}_bs{bs} train.sbatch --lr {lr} --bs {bs} os.system(cmd)在曙光超算的实际部署中我们发现DCU集群对大批量小任务的处理效率较低建议将同类实验合并为数组作业(array job)提交。