全部产品
Search
文档中心

Container Service for Kubernetes:Pelatihan terdistribusi DeepSpeed

更新时间:Jul 02, 2025

DeepSpeed adalah rangkaian perangkat lunak optimasi pembelajaran mendalam sumber terbuka yang menyediakan pelatihan terdistribusi dan optimasi model untuk mempercepat pelatihan model. Topik ini menjelaskan cara menggunakan Arena untuk dengan cepat mengirimkan pekerjaan pelatihan terdistribusi DeepSpeed dan cara menggunakan TensorBoard untuk memvisualisasikan pekerjaan pelatihan.

Daftar isi

Prasyarat

Catatan penggunaan

Dalam contoh ini, DeepSpeed digunakan untuk melatih Model Bahasa Tertutup. Kode Contoh dan dataset telah diunduh dan ditambahkan ke contoh gambar registry.cn-beijing.aliyuncs.com/acs/deepspeed:hello-deepspeed. Jika Anda tidak perlu menggunakan contoh gambar, Anda dapat mengunduh kode sumber dan dataset dari URL GitHub dan menyimpan dataset ke volume NAS bersama yang dibuat menggunakan pasangan PV dan PVC. Dalam contoh ini, sebuah PVC bernama training-data dibuat untuk mengklaim volume NAS bersama guna menyimpan hasil pelatihan.

Jika Anda ingin menggunakan gambar kustom, gunakan salah satu metode berikut:

  • Lihat Dockerfile dan instal OpenSSH di gambar dasar.

    Catatan

    Pekerjaan pelatihan hanya dapat diakses melalui SSH tanpa kata sandi. Oleh karena itu, Anda harus memastikan kerahasiaan Secrets di lingkungan produksi.

  • Gunakan gambar dasar DeepSpeed yang disediakan oleh ACK.

    registry.cn-beijing.aliyuncs.com/acs/deepspeed:v072_base

Prosedur

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

    arena top node

    Output yang Diharapkan:

    NAME                       IPADDRESS      ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           0
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    0/3 (0.0%)

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

  2. Jalankan perintah arena submit deepspeedjob [--falg] command untuk mengirimkan pekerjaan DeepSpeed.

    • Jika Anda menggunakan gambar dasar DeepSpeed yang disediakan oleh ACK, jalankan kode berikut untuk mengirimkan pekerjaan DeepSpeed yang menggunakan satu node Launcher dan tiga node worker.

      arena submit deepspeedjob \
          --name=deepspeed-helloworld \
          --gpus=1 \
          --workers=3 \
          --image=registry.cn-beijing.aliyuncs.com/acs/deepspeed:hello-deepspeed \
          --data=training-data:/data \
          --tensorboard \
          --logdir=/data/deepspeed_data \
          "deepspeed /workspace/DeepSpeedExamples/HelloDeepSpeed/train_bert_ds.py --checkpoint_dir /data/deepspeed_data"

      Parameter

      Wajib

      Deskripsi

      Nilai default

      --name

      Ya

      Nama pekerjaan, yang unik secara global.

      Tidak ada

      --gpus

      Tidak

      Jumlah GPU yang digunakan oleh node worker tempat pekerjaan pelatihan berjalan.

      0

      --workers

      Tidak

      Jumlah node worker.

      1

      --image

      Ya

      Alamat gambar yang digunakan untuk menerapkan runtime.

      Tidak ada

      --data

      Tidak

      Mengizinkan pekerjaan pelatihan untuk mengakses data yang disimpan di PVC dengan memasang PVC ke runtime. Nilainya terdiri dari dua bagian yang dipisahkan oleh titik dua (:).

      • Tentukan nama PVC di sebelah kiri titik dua. Jalankan perintah arena data list untuk melihat PVC yang tersedia di dalam kluster.

      • Tentukan jalur runtime ke mana PVC akan dipasang di sebelah kanan titik dua. Pekerjaan pelatihan mengambil data dari jalur yang ditentukan.

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

      Tidak ada

      --tensorboard

      Tidak

      Aktifkan layanan TensorBoard untuk memvisualisasikan pekerjaan pelatihan. Anda harus mengonfigurasi parameter ini dan parameter --logdir, yang menentukan jalur dari mana TensorBoard membaca file event. Jika Anda tidak menentukan parameter ini, TensorBoard tidak digunakan.

      Tidak ada

      --logdir

      Tidak

      Jalur dari mana TensorBoard membaca file event. Anda harus menentukan parameter ini dan parameter --tensorboard.

      /training_logs

    • Jika Anda menggunakan repositori Git non-publik, Anda dapat menjalankan perintah berikut untuk mengirimkan pekerjaan DeepSpeed:

       arena submit deepspeedjob \
              ...
              --sync-mode=git \ # Mode sinkronisasi kode, yang bisa git atau rsync.
              --sync-source=<Alamat repositori Git non-publik>  \ # Alamat repositori. Anda harus menentukan parameter ini dan parameter --sync-mode. Jika Anda mengatur --sync-mode ke git, Anda dapat mengatur parameter ini ke alamat proyek GitHub apa pun.
              --env=GIT_SYNC_USERNAME=yourname \
              --env=GIT_SYNC_PASSWORD=yourpwd \
              "deepspeed /workspace/DeepSpeedExamples/HelloDeepSpeed/train_bert_ds.py --checkpoint_dir /data/deepspeed_data"

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

    Output yang Diharapkan:

    trainingjob.kai.alibabacloud.com/deepspeed-helloworld created
    INFO[0007] The Job deepspeed-helloworld has been submitted successfully
    INFO[0007] You can run `arena get deepspeed-helloworld --type deepspeedjob` to check the job status
  3. Jalankan perintah berikut untuk menanyakan semua pekerjaan pelatihan yang dikirimkan menggunakan Arena:

    arena list

    Output yang Diharapkan:

    NAME                  STATUS   TRAINER         DURATION  GPU(Requested)  GPU(Allocated)  NODE
    deepspeed-helloworld  RUNNING  DEEPSPEEDJOB    3m        3               3               192.168.9.69
  4. Jalankan perintah berikut untuk menanyakan sumber daya GPU yang digunakan oleh pekerjaan:

    arena top job

    Output yang Diharapkan:

    NAME                  STATUS   TRAINER         AGE  GPU(Requested)  GPU(Allocated)  NODE
    deepspeed-helloworld  RUNNING  DEEPSPEEDJOB    4m   3               3               192.168.9.69
    
    Total Allocated/Requested GPUs of Training Jobs: 3/3
  5. Jalankan perintah berikut untuk menanyakan sumber daya GPU yang digunakan di dalam kluster:

    arena top node

    Output yang Diharapkan:

    NAME                       IPADDRESS      ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   0           0
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    cn-beijing.192.1xx.x.xx   192.1xx.x.xx   <none>  Ready   1           1
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    3/3 (100%)
  6. Jalankan perintah berikut untuk menanyakan informasi rinci tentang pekerjaan dan alamat layanan web TensorBoard:

    arena get deepspeed-helloworld

    Output yang Diharapkan:

    Name:      deepspeed-helloworld
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   DEEPSPEEDJOB
    Duration:  6m
    
    Instances:
      NAME                           STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                           ------   ---  --------  --------------  ----
      deepspeed-helloworld-launcher  Running  6m   true      0               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-0  Running  6m   false     1               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-1  Running  6m   false     1               cn-beijing.192.1xx.x.x
      deepspeed-helloworld-worker-2  Running  6m   false     1               cn-beijing.192.1xx.x.x
    
    Your tensorboard will be available on:
    http://192.1xx.x.xx:31870

    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:

      kubectl port-forward svc/deepspeed-helloworld-tensorboard 9090:6006
    2. Masukkan localhost:9090 ke bilah alamat browser web untuk mengakses TensorBoard. Gambar berikut menunjukkan contohnya.

      效果图

  8. Cetak log pekerjaan.

    • Jalankan perintah berikut untuk mencetak log pekerjaan:

      arena logs deepspeed-helloworld

      Output yang Diharapkan:

      deepspeed-helloworld-worker-0: [2023-03-31 08:38:11,201] [INFO] [logging.py:68:log_dist] [Rank 0] step=7050, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:11,254] [INFO] [timer.py:198:stop] 0/7050, RunningAvgSamplesPerSec=142.69733028759384, CurrSamplesPerSec=136.08094834473613, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:11.255 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7574
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:13,103] [INFO] [logging.py:68:log_dist] [Rank 0] step=7060, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:13,134] [INFO] [timer.py:198:stop] 0/7060, RunningAvgSamplesPerSec=142.69095076844823, CurrSamplesPerSec=151.8552037291255, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:13.136 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7570
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:14,924] [INFO] [logging.py:68:log_dist] [Rank 0] step=7070, skipped=24, lr=[0.0001], mom=[(0.9, 0.999)]
      deepspeed-helloworld-worker-0: [2023-03-31 08:38:14,962] [INFO] [timer.py:198:stop] 0/7070, RunningAvgSamplesPerSec=142.69048436022115, CurrSamplesPerSec=152.91029839772997, MemAllocated=0.06GB, MaxMemAllocated=1.68GB
      deepspeed-helloworld-worker-0: 2023-03-31 08:38:14.963 | INFO     | __main__:log_dist:53 - [Rank 0] Loss: 6.7565
    • 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.

      Sebagai contoh, Anda dapat menjalankan perintah berikut untuk mencetak lima baris dari bagian bawah log:

      arena logs deepspeed-helloworld -t 5

      Output yang Diharapkan:

      deepspeed-helloworld-worker-0: [2023-03-31 08:47:08,694] [INFO] [launch.py:318:main] Process 80 exits successfully.
      deepspeed-helloworld-worker-2: [2023-03-31 08:47:08,731] [INFO] [launch.py:318:main] Process 44 exits successfully.
      deepspeed-helloworld-worker-1: [2023-03-31 08:47:08,946] [INFO] [launch.py:318:main] Process 44 exits successfully.
      /opt/conda/lib/python3.8/site-packages/apex/pyprof/__init__.py:5: FutureWarning: pyprof will be removed by the end of June, 2022
        warnings.warn("pyprof will be removed by the end of June, 2022", FutureWarning)