全部产品
Search
文档中心

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

更新时间:Jul 02, 2025

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

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

Dibandingkan 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

MASTER_ADDR

pytorch-mnist-master-0

MASTER_PORT

23456

WORLD_SIZE

6

RANK

0

1

2

PET_MASTER_ADDR

pytorch-mnist-master-0

PET_MASTER_PORT

23456

PET_NNODES

3

PET_NODE_RANK

0

1

2

Catatan

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.

Penting

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

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

/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 sebelah kanan titik dua. Untuk menanyakan nama PVC, jalankan perintah arena data list. Perintah ini menanyakan PVC yang tersedia untuk kluster tertentu. Tentukan jalur tempat PV yang diklaim oleh PVC dipasang di sebelah kanan titik dua. Dengan cara ini, pekerjaan pelatihan Anda dapat mengambil data yang disimpan dalam PV yang diklaim oleh PVC.

Catatan

Jalankan perintah arena data list untuk menanyakan PVC yang tersedia untuk kluster 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 semua 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  48s       4               4               192.168.xxx.xxx
  2. Jalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh pekerjaan:

    arena top job -n default

    Output 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/4
  3. Jalankan perintah berikut untuk memeriksa sumber daya GPU dalam kluster:

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

  4. Jalankan perintah berikut untuk melihat informasi detail tentang pekerjaan:

    arena get pytorch-mnist -n default

    Output 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:32084

    Output perintah menunjukkan bahwa pekerjaan tersebut mencakup pod master bernama pytorch-mnist-master-0 dan pod pekerja bernama pytorch-mnist-worker-0. Pod tersebut masing-masing meminta dua GPU untuk berpartisipasi dalam seluruh pekerjaan pelatihan.

    Catatan

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

Langkah 4: Lihat instance TensorBoard

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

    Penting

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

    pytorch单机

    Catatan

    Dalam 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

  1. Jalankan perintah berikut untuk melihat log pod master dari pekerjaan pelatihan:

    arena logs -n default pytorch-mnist 

    Output 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%)
  2. Lihat log pod pekerja dengan indeks 0:

    arena logs -n default -i pytorch-mnist-worker-0 pytorch-mnist

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

    • Jika Anda ingin 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 pekerjaan pelatihan, jalankan perintah berikut untuk menghapus pekerjaan pelatihan:

arena delete pytorch-mnist -n default

Output yang Diharapkan:

INFO[0001] The training job pytorch-mnist has been deleted successfully