使用 Volcano 运行 nccl-test

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

本文介绍了如何制作和推送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' 字段来配置最小可用节点数。

➡️

继续阅读