PyTorch adalah kerangka kerja pembelajaran mendalam sumber terbuka yang banyak digunakan dalam berbagai pekerjaan pelatihan model. Topik ini menjelaskan cara mengirimkan pekerjaan pelatihan PyTorch yang menggunakan beberapa GPU dengan Arena dan cara memvisualisasikan pekerjaan pelatihan menggunakan TensorBoard.
Prasyarat
Kluster Container Service for Kubernetes (ACK) yang mencakup node dengan akselerasi GPU telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK dengan Node Akselerasi GPU.
Akses internet telah diaktifkan untuk node dalam kluster. Untuk informasi lebih lanjut, lihat Aktifkan Akses Internet untuk Kluster ACK yang Ada.
Komponen Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Persistent Volume Claim (PVC) bernama
training-datatelah dibuat, dan dataset MNIST disimpan di jalur/pytorch_data. Untuk informasi lebih lanjut, lihat Konfigurasikan Volume NAS Bersama.
Informasi latar belakang
Anda perlu mengunduh kode pelatihan dari repositori Git jarak jauh dan membaca data pelatihan dari sistem penyimpanan bersama, yang mencakup volume persisten (PV) dan persistent volume claims (PVC) berbasis File Storage NAS (NAS). torchrun adalah alat baris perintah yang disediakan oleh PyTorch untuk menyederhanakan dan mengelola pekerjaan pelatihan terdistribusi. Dalam contoh ini, torchrun digunakan untuk menjalankan pekerjaan pelatihan PyTorch yang menggunakan beberapa GPU. Untuk informasi lebih lanjut tentang kode pelatihan, lihat main.py.
Contoh
Langkah 1: Lihat sumber daya GPU
Jalankan perintah berikut untuk memeriksa sumber daya GPU yang tersedia di kluster:
arena top nodeOutput yang Diharapkan:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated)
cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 0 0
cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 0 0
cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 0
cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
0/4 (0.0%)Output menunjukkan bahwa kluster memiliki dua node dengan akselerasi GPU. Setiap node memiliki dua GPU yang tidak digunakan dan dapat digunakan untuk menjalankan pekerjaan pelatihan.
Langkah 2: Kirim pekerjaan pelatihan PyTorch
Jalankan perintah arena submit pytorch untuk mengirimkan pekerjaan pelatihan PyTorch yang menggunakan beberapa GPU. Pekerjaan tersebut mencakup dua worker pod, dan setiap worker pod menggunakan dua kartu GPU.
arena submit pytorch \
--name=pytorch-mnist \
--namespace=default \
--workers=2 \
--gpus=2 \
--nproc-per-node=2 \
--clean-task-policy=None \
--working-dir=/root \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
--sync-mode=git \
--sync-source=https://github.com/kubeflow/arena.git \
--env=GIT_SYNC_BRANCH=v0.13.1 \
--data=training-data:/mnt \
--tensorboard \
--logdir=/mnt/pytorch_data/logs \
"torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"Output yang Diharapkan:
service/pytorch-mnist-tensorboard created
deployment.apps/pytorch-mnist-tensorboard created
pytorchjob.kubeflow.org/pytorch-mnist created
INFO[0002] The Job pytorch-mnist has been submitted successfully
INFO[0002] You can run `arena get pytorch-mnist --type pytorchjob -n default` to check the job statusDibandingkan dengan pelatihan mandiri, pekerjaan pelatihan terdistribusi PyTorch memerlukan parameter tambahan --workers dan --nproc-per-node. Parameter ini menunjukkan jumlah pod yang berpartisipasi dalam pelatihan terdistribusi dan jumlah proses yang dimulai pada setiap node. Pekerjaan pelatihan terdistribusi mencakup beberapa node. Nama node dalam format <job_name>-<role_name>-<index>. <job_name> menunjukkan nama pekerjaan, <role_name> menunjukkan peran node dalam pelatihan terdistribusi, termasuk master dan worker, dan <index> menunjukkan nomor urutan node. Sebagai contoh, ketika Anda mengonfigurasi parameter --workers=3 dan --nproc-per-node=2 untuk pekerjaan pelatihan bernama pytorch-mnist, tiga node pelatihan dibuat dan dua proses dimulai pada setiap node. Nama node adalah pytorch-mnist-master-0, pytorch-mnist-worker-0, dan pytorch-mnist-worker-1. Variabel lingkungan yang sesuai disuntikkan ke setiap node, seperti yang ditunjukkan dalam tabel berikut:
Variabel Lingkungan/Nama Node | pytorch-mnist-master-0 | pytorch-mnist-worker-0 | pytorch-mnist-worker-1 |
| pytorch-mnist-master-0 | ||
| 23456 | ||
| 6 | ||
| 0 | 1 | 2 |
| pytorch-mnist-master-0 | ||
| 23456 | ||
| 3 | ||
| 0 | 1 | 2 |
Jika Anda menggunakan repositori Git non-publik, Anda dapat menentukan nama pengguna dan kata sandi Git dengan mengonfigurasi variabel lingkungan GIT_SYNC_USERNAME dan GIT_SYNC_PASSWORD.
arena submit pytorch \
...
--sync-mode=git \
--sync-source=https://github.com/kubeflow/arena.git \
--env=GIT_SYNC_BRANCH=v0.13.1 \
--env=GIT_SYNC_USERNAME=<username> \
--env=GIT_SYNC_PASSWORD=<password> \
"torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"Perintah arena menggunakan git-sync untuk menyinkronkan kode sumber. Ini memungkinkan Anda menggunakan variabel lingkungan yang didefinisikan dalam proyek git-sync.
Dalam contoh ini, kode sumber ditarik dari repositori GitHub. Jika kode tidak dapat ditarik karena alasan terkait jaringan, Anda dapat mengunduh kode secara manual ke sistem penyimpanan bersama. Setelah Anda mengunduh kode ke jalur /code/github.com/kubeflow/arena di NAS, Anda dapat mengirimkan pekerjaan pelatihan dengan menggunakan kode berikut:
arena submit pytorch \
--name=pytorch-mnist \
--namespace=default \
--workers=2 \
--gpus=2 \
--nproc-per-node=2 \
--clean-task-policy=None \
--working-dir=/root \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
--data=training-data:/mnt \
--tensorboard \
--logdir=/mnt/pytorch_data/logs \
"torchrun /mnt/code/github.com/kubeflow/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"Tabel berikut menjelaskan parameter.
Parameter | Wajib | Deskripsi | Nilai default |
| Ya | Nama pekerjaan, yang unik secara global. | N/A |
| Tidak | Namespace tempat pod berada. |
|
| Tidak | Menentukan jumlah node pekerja. Node master termasuk. Sebagai contoh, nilai 3 menunjukkan bahwa pekerjaan pelatihan berjalan pada satu node master dan dua node pekerja. |
|
| Tidak | Menentukan jumlah GPU yang digunakan oleh node pekerja tempat pekerjaan pelatihan berjalan. |
|
| Tidak | Menentukan direktori tempat perintah dieksekusi. |
|
| Ya | Menentukan alamat gambar yang digunakan untuk menerapkan runtime. | N/A |
| Tidak | Menentukan mode sinkronisasi. Nilai valid: git dan rsync. Dalam contoh ini, mode git digunakan. | N/A |
| Tidak | Menentukan alamat repositori tempat kode sumber disinkronkan. Parameter ini digunakan bersama dengan parameter --sync-mode. Dalam contoh ini, mode git digunakan. Anda harus menentukan alamat yang mendukung Git, seperti proyek GitHub atau proyek Alibaba Cloud Code. Kode proyek diunduh ke direktori | N/A |
| Tidak | Memasang PV bersama ke runtime tempat pekerjaan pelatihan berjalan. Nilai parameter ini terdiri dari dua bagian yang dipisahkan oleh titik dua ( Catatan Jalankan perintah Jika tidak ada PVC yang tersedia, Anda dapat membuat PVC. Untuk informasi lebih lanjut, lihat Konfigurasikan volume NAS bersama. | N/A |
| Tidak | Menentukan bahwa TensorBoard digunakan untuk memvisualisasikan hasil pelatihan. Anda dapat mengonfigurasi parameter --logdir untuk menentukan jalur tempat TensorBoard membaca file acara. Jika Anda tidak mengonfigurasi parameter ini, TensorBoard tidak digunakan. | N/A |
| Tidak | Jalur tempat TensorBoard membaca file acara. Anda harus menentukan parameter ini dan parameter --tensorboard. |
|
Langkah 3: Lihat pekerjaan pelatihan PyTorch
Jalankan perintah berikut untuk melihat semua pekerjaan pelatihan yang dikirimkan menggunakan Arena:
arena list -n defaultOutput yang Diharapkan:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE pytorch-mnist RUNNING PYTORCHJOB 48s 4 4 192.168.xxx.xxxJalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh pekerjaan:
arena top job -n defaultOutput yang Diharapkan:
NAME STATUS TRAINER AGE GPU(Requested) GPU(Allocated) NODE pytorch-mnist RUNNING PYTORCHJOB 55s 4 4 192.168.xxx.xxx Total Allocated/Requested GPUs of Training Jobs: 4/4Jalankan perintah berikut untuk memeriksa sumber daya GPU dalam kluster:
arena top nodeOutput yang Diharapkan:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 0 0 cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 0 0 cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 2 cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 2 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 4/4 (100.0%)Output perintah menunjukkan bahwa semua empat GPU dialokasikan.
Jalankan perintah berikut untuk melihat informasi detail tentang pekerjaan:
arena get pytorch-mnist -n defaultOutput yang Diharapkan:
Name: pytorch-mnist Status: RUNNING Namespace: default Priority: N/A Trainer: PYTORCHJOB Duration: 1m CreateTime: 2025-02-12 13:54:51 EndTime: Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- pytorch-mnist-master-0 Running 1m true 2 cn-beijing.192.168.xxx.xxx pytorch-mnist-worker-0 Running 1m false 2 cn-beijing.192.168.xxx.xxx Tensorboard: TensorBoard Anda akan tersedia di: http://192.168.xxx.xxx:32084Output perintah menunjukkan bahwa pekerjaan tersebut mencakup pod master bernama
pytorch-mnist-master-0dan pod pekerja bernamapytorch-mnist-worker-0. Pod tersebut masing-masing meminta dua GPU untuk berpartisipasi dalam seluruh pekerjaan pelatihan.CatatanJika TensorBoard digunakan dalam pekerjaan pelatihan, URL instance TensorBoard ditampilkan dalam detail pekerjaan. Jika tidak, URL tidak ditampilkan.
Langkah 4: Lihat instance TensorBoard
Jalankan perintah berikut pada mesin lokal Anda untuk memetakan port 6006 TensorBoard di kluster ke port lokal 9090:
PentingPengaturan penerusan port menggunakan kubectl port-forward tidak andal, aman, atau dapat diperluas dalam lingkungan produksi. Ini hanya untuk pengembangan dan debugging. Jangan gunakan perintah ini untuk mengatur penerusan port dalam lingkungan produksi. Untuk informasi lebih lanjut tentang solusi jaringan yang digunakan untuk produksi dalam kluster ACK, lihat Manajemen Ingress.
kubectl port-forward -n default svc/pytorch-mnist-tensorboard 9090:6006Masukkan http://127.0.0.1:9090 ke bilah alamat browser web untuk mengakses TensorBoard.
CatatanDalam contoh, kode sumber yang digunakan untuk mengirimkan pekerjaan PyTorch mandiri menunjukkan bahwa hasil pelatihan ditulis ke acara setelah setiap 10 epoch. Jika Anda ingin mengubah nilai --epochs, atur nilainya menjadi kelipatan 10. Jika tidak, hasil pelatihan tidak dapat divisualisasikan di TensorBoard.
Langkah 5: Lihat log pekerjaan pelatihan
Jalankan perintah berikut untuk melihat log pod master dari pekerjaan pelatihan:
arena logs -n default pytorch-mnistOutput yang Diharapkan:
{'PID': 40, 'MASTER_ADDR': 'pytorch-mnist-master-0', 'MASTER_PORT': '23456', 'LOCAL_RANK': 0, 'RANK': 0, 'GROUP_RANK': 0, 'ROLE_RANK': 0, 'LOCAL_WORLD_SIZE': 2, 'WORLD_SIZE': 4, 'ROLE_WORLD_SIZE': 4} {'PID': 41, 'MASTER_ADDR': 'pytorch-mnist-master-0', 'MASTER_PORT': '23456', 'LOCAL_RANK': 1, 'RANK': 1, 'GROUP_RANK': 0, 'ROLE_RANK': 1, 'LOCAL_WORLD_SIZE': 2, 'WORLD_SIZE': 4, 'ROLE_WORLD_SIZE': 4} Menggunakan cuda:0. Menggunakan cuda:1. Train Epoch: 1 [0/60000 (0%)] Loss: 2.283599 Train Epoch: 1 [0/60000 (0%)] Loss: 2.283599 ... Train Epoch: 10 [59520/60000 (99%)] Loss: 0.007343 Train Epoch: 10 [59520/60000 (99%)] Loss: 0.007343 Akurasi: 9919/10000 (99.19%) Akurasi: 9919/10000 (99.19%)Lihat log pod pekerja dengan indeks 0:
arena logs -n default -i pytorch-mnist-worker-0 pytorch-mnistOutput yang Diharapkan:
{'PID': 39, 'MASTER_ADDR': 'pytorch-mnist-master-0', 'MASTER_PORT': '23456', 'LOCAL_RANK': 0, 'RANK': 2, 'GROUP_RANK': 1, 'ROLE_RANK': 2, 'LOCAL_WORLD_SIZE': 2, 'WORLD_SIZE': 4, 'ROLE_WORLD_SIZE': 4} {'PID': 40, 'MASTER_ADDR': 'pytorch-mnist-master-0', 'MASTER_PORT': '23456', 'LOCAL_RANK': 1, 'RANK': 3, 'GROUP_RANK': 1, 'ROLE_RANK': 3, 'LOCAL_WORLD_SIZE': 2, 'WORLD_SIZE': 4, 'ROLE_WORLD_SIZE': 4} Menggunakan cuda:0. Menggunakan cuda:1. Train Epoch: 1 [0/60000 (0%)] Loss: 2.283599 Train Epoch: 1 [0/60000 (0%)] Loss: 2.283599 ... Train Epoch: 10 [58880/60000 (98%)] Loss: 0.051877Train Epoch: 10 [58880/60000 (98%)] Loss: 0.051877 Train Epoch: 10 [59520/60000 (99%)] Loss: 0.007343Train Epoch: 10 [59520/60000 (99%)] Loss: 0.007343 Akurasi: 9919/10000 (99.19%) Akurasi: 9919/10000 (99.19%)CatatanJika Anda ingin melihat log pekerjaan secara real-time, tambahkan parameter
-f.Jika Anda ingin melihat hanya baris terakhir log, tambahkan parameter
-t Natau--tail N.Untuk informasi lebih lanjut, lihat
arena logs --help.
(Opsional) Langkah 6: Bersihkan lingkungan
Jika Anda tidak lagi memerlukan pekerjaan pelatihan, jalankan perintah berikut untuk menghapus pekerjaan pelatihan:
arena delete pytorch-mnist -n defaultOutput yang Diharapkan:
INFO[0001] The training job pytorch-mnist has been deleted successfully