使用 Volcano 运行 nccl-test
内容提要
本文介绍了如何制作和推送nccl-test镜像,并使用Volcano Job运行nccl-test进行测试。同时还提供了清理环境和解决常见问题的方法。
延伸解读
镜像构建中的CUDA版本匹配
文章在制作nccl-test镜像时,先通过nvidia-smi查看宿主机的CUDA版本为12.2,但Dockerfile中却使用了CUDA 12.1的基础镜像。这种版本差异可能导致兼容性问题,尤其是在运行nccl-test时,若宿主机驱动与容器内CUDA版本不匹配,可能引发运行时错误。因此,在实际操作中,建议确保容器内CUDA版本与宿主机驱动兼容,或根据官方文档选择合适的基础镜像。
Volcano Job调度与节点亲和性配置
创建Volcano Job时,通过nodeSelector将任务调度到带有nccl-test=true标签的节点,并利用podAntiAffinity确保每个节点只运行一个Pod,避免资源竞争。同时,minAvailable设置为节点数,保证所有任务同时启动。这种配置适合多节点NCCL测试,但需注意节点标签必须提前打上,且节点资源需满足请求。若节点不足,Job将处于Pending状态。
nccl-test执行与结果解读
运行nccl-test时,需进入Pod并配置环境变量,然后使用mpirun执行all_reduce_perf测试。输出结果包含不同消息大小下的带宽数据,其中busbw(总线带宽)是评估NCCL性能的关键指标。文章示例中平均总线带宽约为0.41 GB/s,这可能受限于测试配置或网络环境。实际测试中,可通过调整消息大小、迭代次数等参数来更全面地评估性能。
常见错误:invalid device ordinal
文章提到运行nccl-test时可能遇到'invalid device ordinal'错误,这通常与CUDA设备配置有关。可能的原因包括:容器内可见的GPU设备数量与请求不符,或环境变量(如CUDA_VISIBLE_DEVICES)设置错误。解决方法包括检查Pod的GPU资源请求、确认节点GPU状态,并确保容器内正确识别GPU。若问题持续,可尝试在Pod内运行nvidia-smi验证设备可见性。
Q&A
如何制作 nccl-test 镜像?
制作 nccl-test 镜像的步骤包括查看 CUDA 版本、编写 Dockerfile、编译和推送镜像。
如何使用 Volcano Job 运行 nccl-test?
使用 Volcano Job 运行 nccl-test 需要给测试节点打标签,创建 Job 配置,并查看 Pod 状态。
在运行 nccl-test 时如何查看 Pod 状态?
可以使用命令 'kubectl get pod -l app=nccl-test -o wide' 来查看 Pod 状态。
如何清理 nccl-test 的运行环境?
清理环境时,可以使用命令 'kubectl delete job.batch.volcano.sh nccl-test' 删除 nccl-test 作业。
运行 nccl-test 时常见的错误是什么?
常见错误包括 'invalid device ordinal',这可能与 CUDA 设备配置有关。
如何配置 Volcano Job 的最小可用节点数?
在创建 Volcano Job 时,可以通过设置 'minAvailable' 字段来配置最小可用节点数。