全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Arena untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi di kluster Kubernetes

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan klien Arena untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi yang berjalan dalam arsitektur parameter server (PS)-worker. Anda dapat menggunakan TensorBoard untuk memvisualisasikan hasil pelatihan.

Prasyarat

Informasi latar belakang

Dalam topik ini, kode sumber pelatihan diunduh dari repositori Git. Dataset disimpan dalam File Storage NAS (NAS) bersama yang dipasang menggunakan PV dan PVC. Dalam contoh ini, sebuah PVC bernama training-data dibuat. PVC tersebut menggunakan PV bersama. Dataset disimpan dalam direktori tf_data dari PV bersama.

Prosedur

  1. Jalankan perintah berikut untuk menanyakan sumber daya GPU yang tersedia di kluster:

    arena top node

    Output yang diharapkan:

    NAME                       IPADDRESS     ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  <none>  ready   2           0
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  <none>  ready   2           0
    cn-huhehaote.192.16x.x.xx  192.1xx.x.xx  <none>  ready   2           0
    -----------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    0/6 (0%)

    Output menunjukkan bahwa tiga node dengan akselerasi GPU tersedia untuk menjalankan pekerjaan pelatihan.

  2. Jalankan perintah arena submit tfjob/tf [--flag] untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi.

    Berikut adalah contoh kode sampel untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi yang berjalan dalam arsitektur PS-worker. Pekerjaan pelatihan berjalan pada satu node PS dan dua node worker.

        arena submit tf --name=tf-dist         \
                  --working-dir=/root \
                  --gpus=1              \
                  --workers=2              \
                  --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel-gpu  \
                  --sync-mode=git \
                  --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \
                  --ps=1              \
                  --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel   \
                  --data=training-data:/mnt \
                  --tensorboard \
                  --logdir=/mnt/tf_data/logs \
                  "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py --log_dir /mnt/tf_data/logs  --data_dir /mnt/tf_data/"

    Output yang diharapkan:

    configmap/tf-dist-tfjob created
    configmap/tf-dist-tfjob labeled
    service/tf-dist-tensorboard created
    deployment.apps/tf-dist-tensorboard created
    tfjob.kubeflow.org/tf-dist created
    INFO[0000] The Job tf-dist has been submitted successfully
    INFO[0000] You can run `arena get tf-dist --type tfjob` to check the job status

    Tabel berikut menjelaskan parameter dalam blok kode sampel sebelumnya.

    Parameter

    Diperlukan

    Deskripsi

    Default

    --name

    Ya

    Menentukan nama pekerjaan yang ingin Anda kirim. Nama harus unik secara global.

    N/A

    --working-dir

    Tidak

    Menentukan direktori tempat perintah dieksekusi.

    /root

    --gpus

    Tidak

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

    0

    --workers

    Tidak

    Menentukan jumlah node worker.

    1

    --image

    Parameter ini diperlukan jika Anda tidak menentukan --worker-image untuk node worker atau --ps-image untuk node PS.

    Menentukan alamat gambar yang digunakan untuk menerapkan runtime. Jika Anda tidak menentukan --worker-image atau --ps-image, baik node worker maupun node PS menggunakan alamat gambar yang sama.

    N/A

    --worker-image

    Parameter ini diperlukan jika Anda tidak menentukan --image.

    Menentukan alamat gambar untuk node worker. Jika --image juga ditentukan, parameter ini akan menimpa parameter --image.

    N/A

    --sync-mode

    Tidak

    Menentukan mode sinkronisasi. Nilai valid: git dan rsync. Mode git digunakan dalam contoh ini.

    N/A

    --sync-source

    Tidak

    Alamat repositori tempat kode sumber disinkronkan. Parameter ini digunakan bersama dengan parameter --sync-mode. Mode git digunakan dalam contoh ini. Oleh karena itu, Anda harus menentukan alamat repositori Git, seperti URL proyek di GitHub atau Alibaba Cloud. Kode sumber diunduh ke direktori code/ di bawah --working-dir. Direktori tersebut adalah /root/code/tensorflow-sample-code dalam contoh ini.

    N/A

    --ps

    Parameter ini diperlukan untuk pekerjaan pelatihan TensorFlow terdistribusi.

    Menentukan jumlah node PS.

    0

    --ps-image

    Parameter ini diperlukan jika Anda tidak menentukan --image.

    Menentukan alamat gambar untuk node PS. Jika --image juga ditentukan, parameter ini akan menimpa parameter --image.

    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 kiri titik dua. Untuk mendapatkan 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 sisi kanan titik dua. Dengan cara ini, pekerjaan pelatihan Anda dapat mengambil data yang disimpan dalam PV yang sesuai 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 membuatnya. Untuk informasi lebih lanjut, lihat Konfigurasikan volume NAS bersama.

    N/A

    --tensorboard

    Tidak

    Menentukan bahwa TensorBoard digunakan untuk memvisualisasikan hasil pelatihan. Anda dapat menetapkan parameter --logdir untuk menentukan jalur tempat TensorBoard membaca file event. Jika Anda tidak menentukan parameter ini, TensorBoard tidak digunakan.

    N/A

    --logdir

    Tidak

    Menentukan jalur tempat TensorBoard membaca file event. Anda harus menentukan parameter ini dan parameter --tensorboard.

    /training_logs

    Penting

    Jika Anda menggunakan repositori Git non-publik, jalankan perintah berikut untuk mengirimkan pekerjaan pelatihan:

     arena submit tf \
            ...
            --sync-mode=git \
            --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \
            --env=GIT_SYNC_USERNAME=yourname \
            --env=GIT_SYNC_PASSWORD=yourpwd \
            "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py

    Dalam blok kode sebelumnya, klien Arena menyinkronkan kode sumber menggunakan proyek git-sync. Anda dapat menyesuaikan variabel lingkungan yang didefinisikan dalam proyek git-sync.

  3. Jalankan perintah berikut untuk menanyakan status semua pekerjaan yang telah dikirim:

    arena list

    Output yang diharapkan:

    NAME     STATUS     TRAINER  AGE  NODE
    tf-dist  RUNNING    TFJOB    58s  192.1xx.x.xx
    tf-git   SUCCEEDED  TFJOB    2h   N/A
  4. Jalankan perintah berikut untuk menanyakan sumber daya GPU yang digunakan oleh pekerjaan:

    arena top job

    Output yang diharapkan:

    NAME     GPU(Requests)  GPU(Allocated)  STATUS     TRAINER  AGE  NODE
    tf-dist  2              2               RUNNING    tfjob    1m   192.1xx.x.x
    tf-git   1              0               SUCCEEDED  tfjob    2h   N/A
    
    
    Total Allocated GPUs of Training Job:
    2
    
    Total Requested GPUs of Training Job:
    3
  5. Jalankan perintah berikut untuk menanyakan sumber daya GPU di kluster:

    arena top node

    Output yang diharapkan:

    NAME                       IPADDRESS     ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           0
    -----------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    2/6 (33%)
  6. Jalankan perintah berikut untuk menanyakan informasi detail tentang tugas:

    arena get tf-dist

    Output yang diharapkan:

    STATUS: RUNNING
    NAMESPACE: default
    PRIORITY: N/A
    TRAINING DURATION: 1m
    
    NAME     STATUS   TRAINER  AGE  INSTANCE          NODE
    tf-dist  RUNNING  TFJOB    1m   tf-dist-ps-0      192.1xx.x.xx
    tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-0  192.1xx.x.xx
    tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-1  192.1xx.x.xx
    
    Your tensorboard will be available on:
    http://192.1xx.x.xx:31870
    Catatan

    TensorBoard digunakan dalam contoh ini. Oleh karena itu, Anda dapat menemukan URL TensorBoard di dua baris terakhir informasi pekerjaan. Jika TensorBoard tidak digunakan, dua baris terakhir tidak dikembalikan.

  7. Gunakan browser untuk melihat hasil pelatihan di TensorBoard.

    1. Jalankan perintah berikut untuk memetakan TensorBoard 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 kluster ACK, lihat Manajemen Ingress.

      kubectl port-forward svc/tf-dist-tensorboard 9090:6006
    2. Kunjungi localhost:9090 di browser Anda untuk melihat data di TensorBoard seperti yang ditunjukkan pada gambar berikut.

      tf

  8. Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs tf-dist

    Output yang diharapkan:

    WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
    Instructions for updating:
    ...
    Accuracy at step 960: 0.9691
    Accuracy at step 970: 0.9677
    Accuracy at step 980: 0.9687
    Accuracy at step 990: 0.968
    Adding run metadata for 999
    Total Train-accuracy=0.968

    Setelah Anda menjalankan perintah sebelumnya, log worker-0 dicetak secara default. Untuk mencetak log node tertentu, Anda dapat memperoleh nama node yang ditentukan dari informasi pekerjaan dan menjalankan perintah arena logs $job_name -i $instance_name untuk mencetak log.

    Contoh:

    arena get tf-dist

    Output yang diharapkan:

    STATUS: SUCCEEDED
    NAMESPACE: default
    PRIORITY: N/A
    TRAINING DURATION: 1m
    
    NAME     STATUS     TRAINER  AGE  INSTANCE          NODE
    tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-ps-0      192.16x.x.xx
    tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-0  192.16x.x.xx
    tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-1  192.16x.x.xx
    
    Your tensorboard will be available on:
    http://192.16x.x.xx:31870

    Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs tf-dist -i tf-dist-worker-1

    Output yang diharapkan:

    WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
    Instructions for updating:
    ...
    Accuracy at step 970: 0.9676
    Accuracy at step 980: 0.968
    Accuracy at step 990: 0.967
    Adding run metadata for 999
    Total Train-accuracy=0.967

    Anda dapat menjalankan perintah arena logs $job_name -f untuk mencetak log pekerjaan secara real-time dan menjalankan perintah arena logs $job_name -t N untuk mencetak N baris dari bagian bawah log. Anda juga dapat menjalankan perintah arena logs --help untuk menanyakan parameter untuk mencetak log.

    Berikut adalah contoh kode sampel tentang cara mencetak N baris dari bagian bawah log:

    arena logs tf-dist -t 5

    Output yang diharapkan:

    Accuracy at step 9970: 0.9834
    Accuracy at step 9980: 0.9828
    Accuracy at step 9990: 0.9816
    Adding run metadata for 9999
    Total Train-accuracy=0.9816