容器服务GPU监控2.0提供了监控NVLINK带宽的指标,本篇文章将简单介绍一下如何查看这些指标。
前提条件
为了达到演示效果,本篇文章将利用阿里云容器服务拓扑感知调度能力,在K8S集群中提交一个拓扑感知任务。集群环境准备请参考阿里云容器服务拓扑感知调度,这里将不再说明。
提交任务
使用Arena向k8s集群提交一个tensorflow任务,该任务将使用1个节点4张GPU卡:
arena submit mpi \
--name=tensorflow-topo-4-vgg16 \
--gpus=1 \
--workers=4 \
--gputopology=true \
--image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \
"mpirun --allow-run-as-root -np "4" -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=vgg16 --batch_size=64 --num_batches=500000000 --variable_update=horovod"
然后使用arena list查看任务状态,等待任务处于Running:
# arena list
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE
tensorflow-topo-4-vgg16 RUNNING MPIJOB 1h 4 0 192.168.2.137
监控NVLINK带宽
登录到GPU监控2.0大盘,具体操作如下:
-
在 集群列表 页面中,单击目标集群名称或者目标集群右侧 操作 列下的 详情 。
-
在集群管理页左侧导航栏中,选择 运维管理 > Prometheus监控 。
-
在 Prometheus监控 大盘列表页面,单击 GPU监控 页签,您分别可以看到 集群维度的GPU监控大盘 和 节点维度的GPU监控大盘 , 点击“节点维度GPU监控大盘” 。
在左上角选择目标节点,然后在Profiling一栏,首先观察“PCIE TX Bytes”和“PCIE RX Bytes”两个面板,可以看到带宽都比较低。几百k或者几兆1秒。
接着观察“NVLINK TX Bytes”和“NVLINK RX Bytes”两个面板,可以看到有4张GPU卡的NVLINK带宽活跃,达到100多兆一秒。
从上面的几个监控面板可以知道,示例Tensorflow任务的几个Worker在工作时,是通过NVLINK设备通信的。
总结
本篇文章简单的介绍了如何通过容器服务GPU监控2.0监控NVLINK指标,通过这些指标能够判断分布式训练任务的各个worker之间的通信是否是通过NVLINK完成的。