Container Service for Kubernetes (ACK) mendukung penjadwalan GPU yang sadar topologi berdasarkan kerangka penjadwalan. Fitur ini memilih kombinasi GPU dari node yang dipercepat GPU untuk mencapai percepatan GPU optimal pada pekerjaan pelatihan. Dokumen ini menjelaskan cara menggunakan penjadwalan GPU yang sadar topologi untuk mencapai percepatan GPU optimal pada pekerjaan distribusi TensorFlow.
Prasyarat
Kluster ACK yang dikelola telah dibuat di Konsol Container Service for Kubernetes (ACK) dengan tipe instans diatur ke Elastic GPU Service.
Arena telah diinstal.
Komponen penjadwalan GPU yang sadar topologi telah diinstal.
Versi komponen sistem harus memenuhi persyaratan berikut:
Komponen
Versi
Kubernetes
1.18.8 dan lebih baru
Nvidia
418.87.01 dan lebih baru
Pustaka Komunikasi Kolektif NVIDIA (NCCL)
2.7+
Sistem operasi
CentOS 7.6
CentOS 7.7
Ubuntu 16.04
Ubuntu 18.04
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
GPU
V100
Catatan penggunaan
Penjadwalan GPU yang sadar topologi hanya berlaku untuk pekerjaan Message Passing Interface (MPI) yang dilatih menggunakan kerangka distribusi.
Sumber daya yang diminta oleh pod harus memenuhi persyaratan tertentu sebelum pod dapat dibuat untuk mengirimkan dan menjalankan pekerjaan. Jika tidak, permintaan akan tetap menunggu sumber daya.
Prosedur
Konfigurasikan node
Jalankan perintah berikut untuk menetapkan label node dan mengaktifkan penjadwalan GPU yang sadar topologi secara eksplisit pada node:
kubectl label node <Nama Node Anda> ack.node.gpu.schedule=topologySetelah penjadwalan GPU yang sadar topologi diaktifkan pada node, penjadwalan GPU reguler tidak dapat diaktifkan. Untuk mengubah label dan mengaktifkan penjadwalan GPU reguler, jalankan perintah berikut:
kubectl label node <Nama Node Anda> ack.node.gpu.schedule=default --overwriteKirim pekerjaan
Kirim pekerjaan MPI dan atur --gputopology ke true.
arena submit --gputopology=true --gang ***Contoh 1: Latih VGG16
Kluster yang digunakan dalam contoh ini terdiri dari dua node. Setiap node menyediakan delapan GPU V100.
Gunakan penjadwalan GPU yang sadar topologi untuk melatih VGG16
Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:
arena submit mpi \ --name=tensorflow-topo-4-vgg16 \ --gpus=1 \ --workers=4 \ --gang \ --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 --variable_update=horovod"Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena get tensorflow-topo-4-vgg16 --type mpijobOutput yang Diharapkan:
Name: tensorflow-topo-4-vgg16 Status: RUNNINGNamespace: default Priority: N/A Trainer: MPIJOB Duration: 2m Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- tensorflow-topo-4-vgg16-launcher-lmhjl Running 2m true 0 cn-shanghai.192.168.16.172 tensorflow-topo-4-vgg16-worker-0 Running 2m false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-vgg16-worker-1 Running 2m false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-vgg16-worker-2 Running 2m false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-vgg16-worker-3 Running 2m false 1 cn-shanghai.192.168.16.173Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs -f tensorflow-topo-4-vgg16Output yang Diharapkan:
total images/sec: 991.92
Gunakan penjadwalan GPU reguler untuk melatih VGG16
Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:
arena submit mpi \ --name=tensorflow-4-vgg16 \ --gpus=1 \ --workers=4 \ --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 --variable_update=horovod"Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena get tensorflow-4-vgg16 --type mpijobOutput yang Diharapkan:
Name: tensorflow-4-vgg16 Status: RUNNING Namespace: default Priority: N/A Trainer: MPIJOB Duration: 9s Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- tensorflow-4-vgg16-launcher-xc28k Running 9s true 0 cn-shanghai.192.168.16.172 tensorflow-4-vgg16-worker-0 Running 9s false 1 cn-shanghai.192.168.16.172 tensorflow-4-vgg16-worker-1 Running 9s false 1 cn-shanghai.192.168.16.173 tensorflow-4-vgg16-worker-2 Running 9s false 1 cn-shanghai.192.168.16.172 tensorflow-4-vgg16-worker-3 Running 9s false 1 cn-shanghai.192.168.16.173Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs -f tensorflow-4-vgg16Output yang Diharapkan:
total images/sec: 200.47
Contoh 2: Latih ResNet50
Gunakan penjadwalan GPU yang sadar topologi untuk melatih ResNet50
Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:
arena submit mpi \ --name=tensorflow-topo-4-resnet50 \ --gpus=1 \ --workers=4 \ --gang \ --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=resnet50 --batch_size=64 --variable_update=horovod"Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena get tensorflow-topo-4-resnet50 --type mpijobOutput yang Diharapkan:
Name: tensorflow-topo-4-resnet50 Status: RUNNING Namespace: default Priority: N/A Trainer: MPIJOB Duration: 8s Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- tensorflow-topo-4-resnet50-launcher-7ln8j Running 8s true 0 cn-shanghai.192.168.16.172 tensorflow-topo-4-resnet50-worker-0 Running 8s false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-resnet50-worker-1 Running 8s false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-resnet50-worker-2 Running 8s false 1 cn-shanghai.192.168.16.173 tensorflow-topo-4-resnet50-worker-3 Running 8s false 1 cn-shanghai.192.168.16.173Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs -f tensorflow-topo-4-resnet50Output yang Diharapkan:
total images/sec: 1471.55
Gunakan penjadwalan GPU reguler untuk melatih ResNet50
Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:
arena submit mpi \ --name=tensorflow-4-resnet50 \ --gpus=1 \ --workers=4 \ --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=resnet50 --batch_size=64 --variable_update=horovod"Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena get tensorflow-4-resnet50 --type mpijobOutput yang Diharapkan:
Name: tensorflow-4-resnet50 Status: RUNNING Namespace: default Priority: N/A Trainer: MPIJOB Duration: 9s Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- tensorflow-4-resnet50-launcher-q24hv Running 9s true 0 cn-shanghai.192.168.16.172 tensorflow-4-resnet50-worker-0 Running 9s false 1 cn-shanghai.192.168.16.172 tensorflow-4-resnet50-worker-1 Running 9s false 1 cn-shanghai.192.168.16.173 tensorflow-4-resnet50-worker-2 Running 9s false 1 cn-shanghai.192.168.16.172 tensorflow-4-resnet50-worker-3 Running 9s false 1 cn-shanghai.192.168.16.173Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs -f tensorflow-4-resnet50Output yang Diharapkan:
total images/sec: 745.38
Perbandingan performa
Gambar berikut menunjukkan perbedaan performa antara penjadwalan GPU yang sadar topologi dan penjadwalan GPU reguler berdasarkan contoh-contoh sebelumnya.
Gambar tersebut menunjukkan bahwa setelah penjadwalan GPU yang sadar topologi diaktifkan, pekerjaan distribusi TensorFlow dipercepat.
Nilai performa dalam dokumen ini adalah nilai teoretis. Performa penjadwalan GPU yang sadar topologi bervariasi berdasarkan model dan lingkungan kluster Anda. Statistik performa aktual yang sebenarnya harus diutamakan. Anda dapat mengulangi langkah-langkah sebelumnya untuk mengevaluasi model Anda.