
日常用DCU做开发、跑任务很多效率问题和常见坑其实不用大费周章改代码、调环境几个随手就能用的小命令、小配置就能解决。整理了8个实测高频好用的小技巧覆盖环境校验、性能提效、排障运维、开发提效四大场景新手看完能少走一大段弯路老用户也能捡几个实用小操作。技巧13秒快速校验环境可用性适用场景刚登录节点、加载完DTK模块想快速确认DCU设备能不能被正常识别不用写完整的C测试程序。一行命令快速校验PyTorch与设备的连通性搭配编译器检查10秒就能排除基础环境问题# 校验PyTorch是否能正常识别DCUpython3-cimport torch;print(设备可用:,torch.cuda.is_available());print(DCU数量:,torch.cuda.device_count())# 校验HIP编译器是否正常加载hipcc--version|grepHIP version如果第一行返回True和对应卡数说明驱动、环境变量、框架版本基本对齐不用再反复翻驱动文档、查路径配置。超算平台切换DTK版本后先跑这一行能快速定位问题出在环境还是代码。技巧2显存残留一键清理不用等节点重启适用场景程序异常崩溃、手动中断任务后显存被残留进程占满rocm-smi看显存占用居高不下但找不到运行中的程序。用fuser定位所有占用DCU设备文件的进程一键终止释放显存全程不用找管理员、不用重启节点# 查看所有占用DCU设备的进程仅查看不终止fuser/dev/dri/renderD1282/dev/null# 一键终止所有占用首卡的进程谨慎使用会结束所有对应DCU任务fuser-k/dev/dri/renderD1282/dev/null单卡节点直接用多卡节点按需指定对应的render设备号从renderD128开始依次递增。日常调试频繁启停程序时这个命令能省掉大量等显存释放的时间。技巧3零代码改动提性能跑任务前加个前缀适用场景跑多卡推理、大计算量任务不想改代码、不想调参数只想简单提升一下运行效率。在启动命令前加numactl做NUMA绑核将CPU和DCU绑定在同一个NUMA节点上避免跨节点通信损耗单任务就能带来10%-30%的性能提升完全零成本# 先查DCU对应的NUMA节点归属rocm-smi--showtopo# 示例将程序绑定到NUMA 0节点的CPU和内存numactl--cpunodebind0--membind0python your_train_script.py主流8卡DCU服务器通常分为2个NUMA组每组对应4张卡绑核后跨NUMA通信的开销会大幅降低。这是性价比最高的性能优化手段没有之一推理、训练、科学计算场景都通用。技巧4rocm-smi的3个宝藏参数告别冗余信息默认的rocm-smi输出信息又多又乱日常用只需要记住3个参数就能精准拿到想要的核心信息日常巡检组合只看算力使用率、显存使用率、温度三个核心指标清爽直观rocm-smi--showuse--showmemuse--showtemp--csv格式化输出输出标准CSV格式方便写脚本解析、做自动化监控--showtopo查拓扑查看卡间互联带宽、NUMA归属做多卡优化前必查技巧5一劳永逸解决编译忘加架构参数的问题适用场景新手编译HIP程序总忘记加--offload-arch编译全程零报错但运行时设备数返回0排查半天找不到原因。给hipcc加一个永久别名自动带上目标架构参数以后直接敲hipcc就行不用每次手动加参数# 把下面这行加到 ~/.bashrc 末尾永久生效架构按自己的卡调整aliashipcchipcc --offload-archgfx906# 生效后直接编译自动带上架构参数source~/.bashrc hipcc-stdc14-O2-omyapp myapp.cpp深算一号Z100对应gfx906深算二号K100对应gfx926根据硬件型号改一下就行能彻底规避90%的“编译通过但运行无设备”问题。技巧65行代码快速测单卡推理基线适用场景拿到新节点、换了新模型想快速摸一下单卡的推理速度基线不用搭vLLM服务、不用写完整测试脚本。用transformers自带接口几行代码就能跑完测速结果直观可对比importtime,torchfromtransformersimportAutoModelForCausalLM,AutoTokenizer model_pathQwen/Qwen2-7B-InstructtokenizerAutoTokenizer.from_pretrained(model_path)modelAutoModelForCausalLM.from_pretrained(model_path,torch_dtypetorch.float16,device_mapcuda).eval()inputstokenizer(测试输入文本,return_tensorspt).to(cuda)_model.generate(**inputs,max_new_tokens10)# 预热消除首次编译开销starttime.perf_counter()outmodel.generate(**inputs,max_new_tokens200,do_sampleFalse)print(f单卡生成速度:{(out.shape[1]-inputs[input_ids].shape[1])/(time.perf_counter()-start):.2f}token/s)跑一次就能知道单卡的单序列生成速度心里有个基准线后续优化、排查性能问题都有参照。技巧7SLURM作业两个省心小技巧两个超算提交任务的实用小操作日常用能省很多事自动记录环境版本在SLURM脚本开头加上hipcc --version、python3 -c import torch;print(torch.__version__)把版本信息打进日志后续出问题不用再回忆当时用的哪个版本排查效率翻倍。实时跟踪作业输出作业刚提交不用等跑完直接用tail -f slurm-xxx.out实时看日志或者用watch -n 2 squeue -u $USER盯着作业状态不用反复敲命令刷新。技巧8装PyTorch避坑一行命令装对ROCm版本适用场景很多新手直接pip install torch默认装成CUDA版本怎么都识别不到DCU反复重装浪费时间。指定ROCm版本的PyTorch源一行命令装对适配版本# DTK 26.04 对应 ROCm 6.0安装对应版本PyTorchpipinstalltorch2.4.0torchvision0.19.0\--index-url https://download.pytorch.org/whl/rocm6.0DTK版本和ROCm版本是一一对应的DTK 25.x对应ROCm 5.xDTK 26.x对应ROCm 6.x版本对不上大概率识别不到设备这是新手环境配置的第一大坑。以上8个都是日常开发运维里高频用到的小技巧没有复杂的原理和代码改动复制粘贴就能用覆盖了从环境配置、日常开发到任务提交的全流程小痛点。DCU的使用逻辑和CUDA大同小异只是很多细节习惯不一样多攒一些实用小工具上手会越来越顺手。