全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Arena untuk mengirimkan pekerjaan pelatihan PyTorch mandiri

更新时间:Jul 02, 2025

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

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 node

Output 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 status
Catatan

Untuk 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"
Catatan

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.

Penting

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

--name

Ya

Nama pekerjaan, yang unik secara global.

N/A

--namespace

Tidak

Namespace tempat pod berada.

default

--workers

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.

0

--gpus

Tidak

Menentukan jumlah GPU yang digunakan oleh node pekerja tempat pekerjaan pelatihan berjalan.

0

--working-dir

Tidak

Menentukan direktori tempat perintah dijalankan.

/root

--image

Ya

Menentukan alamat gambar yang digunakan untuk menerapkan runtime.

N/A

--sync-mode

Tidak

Menentukan mode sinkronisasi. Nilai valid: git dan rsync. Dalam contoh ini, mode git digunakan.

N/A

--sync-source

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 code/ di bawah --working-dir. Dalam contoh ini, /root/code/arena digunakan.

N/A

--data

Tidak

Memasang PV bersama ke runtime tempat pekerjaan pelatihan berjalan. Nilai parameter ini terdiri dari dua bagian yang dipisahkan oleh titik dua (:). Tentukan nama PVC di sisi kanan titik dua. Untuk menanyakan nama PVC, jalankan perintah arena data list. Perintah ini menanyakan PVC yang tersedia untuk cluster tertentu. Tentukan jalur tempat PV yang diklaim oleh PVC dipasang di sisi kanan titik dua. Dengan cara ini, pekerjaan pelatihan Anda dapat mengambil data yang disimpan di PV yang diklaim oleh PVC.

Catatan

Jalankan perintah arena data list untuk menanyakan PVC yang tersedia untuk cluster tertentu.

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
training-data  ReadWriteMany                      35m

Jika tidak ada PVC yang tersedia, Anda dapat membuat PVC. Untuk informasi lebih lanjut, lihat Konfigurasikan volume NAS bersama.

N/A

--tensorboard

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

--logdir

Tidak

Jalur tempat TensorBoard membaca file acara. Anda harus menentukan parameter ini dan parameter --tensorboard.

/training_logs

Langkah 3: Lihat pekerjaan pelatihan PyTorch

  1. Jalankan perintah berikut untuk melihat pekerjaan pelatihan yang dikirimkan menggunakan Arena:

    arena list -n default

    Output yang Diharapkan:

    NAME           STATUS   TRAINER     DURATION  GPU(Requested)  GPU(Allocated)  NODE
    pytorch-mnist  RUNNING  PYTORCHJOB  11s       1               1               192.168.xxx.xxx
  2. Jalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh pekerjaan pelatihan:

    arena top job -n default

    Output 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/1
  3. Jalankan perintah berikut untuk memeriksa penggunaan sumber daya GPU cluster:

    arena top node

    Output 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.

  4. Jalankan perintah berikut untuk melihat detail pekerjaan pelatihan:

    arena get pytorch-mnist -n default

    Output 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:31949
    Catatan

    Jika TensorBoard digunakan dalam pekerjaan pelatihan, URL instance TensorBoard ditampilkan dalam detail pekerjaan. Jika tidak, URL tidak akan ditampilkan.

Langkah 4: Lihat instance TensorBoard

  1. Jalankan perintah berikut di mesin lokal Anda untuk memetakan port 6006 TensorBoard di cluster ke port lokal 9090:

    Penting

    Pengaturan 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:6006
  2. Masukkan http://127.0.0.1:9090 ke bilah alamat browser web untuk mengakses TensorBoard.

    pytorch单机

    Catatan

    Dalam 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 default

Output 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%)
Catatan
  • Untuk melihat log pekerjaan secara real-time, tambahkan parameter -f.

  • Untuk melihat hanya baris terakhir log, tambahkan parameter -t N atau --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 default

Output yang Diharapkan:

INFO[0001] Pelatihan pekerjaan pytorch-mnist telah berhasil dihapus