PyTorch adalah kerangka kerja pembelajaran mendalam sumber terbuka yang banyak digunakan dalam berbagai pekerjaan pelatihan model. Topik ini menjelaskan cara menggunakan Arena untuk mengirimkan pekerjaan pelatihan PyTorch mandiri dengan GPU tunggal atau beberapa GPU serta cara memvisualisasikan pekerjaan pelatihan menggunakan TensorBoard.
Prasyarat
Cluster Container Service for Kubernetes (ACK) dengan node berakselerasi GPU telah dibuat. Untuk informasi lebih lanjut, lihat Buat Cluster ACK dengan Node Berakselerasi GPU.
Akses internet telah diaktifkan untuk node dalam cluster. Untuk informasi lebih lanjut, lihat Aktifkan Akses Internet untuk Cluster ACK yang Ada.
Komponen Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Instance 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 harus mengunduh kode pelatihan dari repositori Git jarak jauh dan membaca data pelatihan dari sistem penyimpanan bersama, yang mencakup volume persisten (PV) dan klaim volume persisten (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 mandiri dengan GPU tunggal atau beberapa GPU. Untuk informasi lebih lanjut tentang kode pelatihan, lihat main.py.
Prosedur
Langkah 1: Lihat sumber daya GPU
Jalankan perintah berikut untuk memeriksa sumber daya GPU yang tersedia di cluster:
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 cluster memiliki dua node dengan akselerasi GPU. Setiap node berisi dua GPU yang tidak digunakan dan dapat digunakan untuk menjalankan pekerjaan pelatihan.
Langkah 2: Kirim pekerjaan pelatihan PyTorch
Jalankan perintah berikut untuk mengirimkan pekerjaan pelatihan PyTorch mandiri yang menggunakan satu GPU:
arena submit pytorch \
--name=pytorch-mnist \
--namespace=default \
--workers=1 \
--gpus=1 \
--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 statusUntuk menjalankan pekerjaan pelatihan PyTorch mandiri yang menggunakan beberapa GPU, seperti dua GPU, tentukan --gpus=2 dan --nproc-per-node=2:
arena submit pytorch \
--name=pytorch-mnist \
--namespace=default \
--workers=1 \
--gpus=2 \
--nproc-per-node=2 \
--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"Jika Anda menggunakan repositori Git non-publik, tentukan 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 masalah jaringan, unduh kode secara manual ke sistem penyimpanan bersama. Setelah mengunduh kode ke jalur /code/github.com/kubeflow/arena di NAS, kirim pekerjaan pelatihan menggunakan perintah berikut:
arena submit pytorch \
--name=pytorch-mnist \
--namespace=default \
--workers=1 \
--gpus=1 \
--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 dalam blok kode sampel sebelumnya.
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 dijalankan. |
|
| 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 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 11s 1 1 192.168.xxx.xxxJalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh pekerjaan pelatihan:
arena top job -n defaultOutput yang Diharapkan:
NAME STATUS TRAINER AGE GPU(Requested) GPU(Allocated) NODE pytorch-mnist RUNNING PYTORCHJOB 18s 1 1 192.168.xxx.xxx Total Allocated/Requested GPUs of Training Jobs: 1/1Jalankan perintah berikut untuk memeriksa penggunaan sumber daya GPU cluster:
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 1 cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 1/4 (25.0%)Output menunjukkan bahwa cluster memiliki empat GPU. Satu GPU telah dialokasikan.
Jalankan perintah berikut untuk melihat detail pekerjaan pelatihan:
arena get pytorch-mnist -n defaultOutput yang Diharapkan:
Name: pytorch-mnist Status: RUNNING Namespace: default Priority: N/A Trainer: PYTORCHJOB Duration: 45s CreateTime: 2025-02-12 11:20:10 EndTime: Instances: NAME STATUS AGE IS_CHIEF GPU(Requested) NODE ---- ------ --- -------- -------------- ---- pytorch-mnist-master-0 Running 45s true 1 cn-beijing.192.168.xxx.xxx Tensorboard: Your tensorboard will be available on: http://192.168.xxx.xxx:31949CatatanJika TensorBoard digunakan dalam pekerjaan pelatihan, URL instance TensorBoard ditampilkan dalam detail pekerjaan. Jika tidak, URL tidak akan ditampilkan.
Langkah 4: Lihat instance TensorBoard
Jalankan perintah berikut di mesin lokal Anda untuk memetakan port 6006 TensorBoard di cluster ke port lokal 9090:
PentingPengaturan penerusan port menggunakan kubectl port-forward tidak andal, aman, atau dapat diperluas di lingkungan produksi. Ini hanya untuk pengembangan dan debugging. Jangan gunakan perintah ini untuk mengatur penerusan port di lingkungan produksi. Untuk informasi lebih lanjut tentang solusi jaringan yang digunakan untuk produksi di cluster 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 ini, kode sumber yang digunakan untuk mengirimkan pekerjaan PyTorch mandiri menunjukkan bahwa hasil pelatihan ditulis ke acara setelah setiap 10 epoch. Jika 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 pekerjaan pelatihan:
arena logs pytorch-mnist -n defaultOutput yang Diharapkan:
Train Epoch: 10 [55680/60000 (93%)] Loss: 0.025778
Train Epoch: 10 [56320/60000 (94%)] Loss: 0.086488
Train Epoch: 10 [56960/60000 (95%)] Loss: 0.003240
Train Epoch: 10 [57600/60000 (96%)] Loss: 0.046731
Train Epoch: 10 [58240/60000 (97%)] Loss: 0.010752
Train Epoch: 10 [58880/60000 (98%)] Loss: 0.010934
Train Epoch: 10 [59520/60000 (99%)] Loss: 0.065813
Accuracy: 9921/10000 (99.21%)Untuk melihat log pekerjaan secara real-time, tambahkan parameter
-f.Untuk 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 tugas pelatihan, jalankan perintah berikut untuk menghapus tugas pelatihan:
arena delete pytorch-mnist -n defaultOutput yang Diharapkan:
INFO[0001] Pelatihan pekerjaan pytorch-mnist telah berhasil dihapus