Jalankan pekerjaan pelatihan terdistribusi DeepSpeed dengan Arena dan visualisasikan hasilnya menggunakan TensorBoard.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK dengan node yang dipercepat GPU. Lihat Buat kluster ACK dengan node yang dipercepat GPU.
-
Suite AI cloud-native yang telah diinstal, dengan CLI
ack-arenaversi 0.9.10 atau lebih baru. Lihat Deploy suite AI cloud-native. -
Klien Arena yang telah diinstal versi 0.9.10 atau lebih baru. Lihat Konfigurasikan klien Arena.
-
Persistent volume claims (PVCs) yang telah dibuat di kluster. Lihat Konfigurasikan volume NAS bersama.
Cara kerja
Pekerjaan DeepSpeed di ACK berjalan dalam topologi launcher-worker:
-
Node Launcher mengoordinasikan proses pelatihan terdistribusi dan tidak menggunakan GPU.
-
Node pekerja menjalankan pelatihan sesungguhnya. Setiap pekerja menerima satu atau lebih GPU dan mengeksekusi skrip pelatihan DeepSpeed.
Karena komunikasi antar-node menggunakan SSH, semua image harus memiliki OpenSSH yang terinstal.
Pekerjaan pelatihan hanya dapat diakses melalui SSH tanpa kata sandi. Lindungi Kubernetes Secrets di lingkungan produksi.
Pengaturan contoh
Panduan ini menggunakan contoh yang melatih model bahasa tertutup. Kode contoh dan set data dari microsoft/DeepSpeedExamples telah dipaketkan sebelumnya dalam image registry.cn-beijing.aliyuncs.com/acs/deepspeed:hello-deepspeed. Contoh ini menggunakan PVC bernama training-data (didukung oleh volume NAS bersama) untuk menyimpan hasil pelatihan.
Gunakan custom image
Untuk menggunakan kode pelatihan Anda sendiri, pilih salah satu pendekatan berikut:
-
Bangun dari image dasar ACK DeepSpeed:
registry.cn-beijing.aliyuncs.com/acs/deepspeed:v072_base -
Bangun dari image dasar Anda sendiri: Ikuti Dockerfile dan instal OpenSSH di dalam image.
Sinkronkan kode dari repositori Git privat
Gunakan parameter --sync-mode=git dan --sync-source untuk menarik kode pelatihan saat waktu proses. Arena menggunakan git-sync untuk menyinkronkan repositori. Atur kredensial menggunakan variabel lingkungan GIT_SYNC_USERNAME dan GIT_SYNC_PASSWORD.
Kirim dan pantau pekerjaan DeepSpeed
Langkah 1: Periksa sumber daya GPU yang tersedia
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%)
Terdapat tiga node yang dipercepat GPU yang tersedia.
Langkah 2: Kirim pekerjaan DeepSpeed
Perintah berikut mengirim pekerjaan bernama deepspeed-helloworld dengan satu node Launcher dan tiga node pekerja, masing-masing menggunakan satu GPU:
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
| Parameter | Wajib | Deskripsi | Bawaan |
|---|---|---|---|
--name |
Ya | Nama pekerjaan yang unik secara global | — |
--image |
Ya | Image container untuk waktu proses | — |
--gpus |
Tidak | GPU yang dialokasikan ke setiap node pekerja | 0 |
--workers |
Tidak | Jumlah node pekerja | 1 |
--data |
Tidak | Memasang PVC ke dalam waktu proses. Format: <pvc-name>:<mount-path>. Jalankan arena data list untuk melihat PVC yang tersedia. |
— |
--tensorboard |
Tidak | Mengaktifkan layanan TensorBoard. Harus digunakan bersama dengan --logdir. |
— |
--logdir |
Tidak | Path tempat TensorBoard membaca file event. Harus digunakan bersama dengan --tensorboard. |
/training_logs |
Untuk menyinkronkan kode dari repositori Git privat alih-alih memasukkannya ke dalam image, tambahkan flag berikut:
arena submit deepspeedjob \
...
--sync-mode=git \
--sync-source=<private-git-repo-url> \
--env=GIT_SYNC_USERNAME=<username> \
--env=GIT_SYNC_PASSWORD=<password> \
"deepspeed /workspace/DeepSpeedExamples/HelloDeepSpeed/train_bert_ds.py --checkpoint_dir /data/deepspeed_data"
Output yang diharapkan setelah pengiriman:
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
Langkah 3: Verifikasi pekerjaan sedang berjalan
Daftar semua pekerjaan pelatihan 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
Periksa penggunaan GPU berdasarkan 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
Periksa penggunaan GPU di seluruh 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%)
Langkah 4: Dapatkan detail pekerjaan dan URL 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
Dua baris terakhir hanya muncul jika TensorBoard diaktifkan.
Langkah 5: Lihat hasil pelatihan di TensorBoard
-
Teruskan layanan TensorBoard ke port lokal:
kubectl port-forward svc/deepspeed-helloworld-tensorboard 9090:6006 -
Buka
localhost:9090di browser.
Langkah 6: Lihat log pelatihan
Cetak semua log dari 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
Untuk mengalirkan log secara real time, gunakan -f. Untuk mencetak hanya N baris terakhir, gunakan -t N:
# Mengalirkan log secara real time
arena logs deepspeed-helloworld -f
# Cetak 5 baris terakhir
arena logs deepspeed-helloworld -t 5
Output yang diharapkan untuk -t 5:
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)
Jalankan arena logs --help untuk melihat semua opsi log yang tersedia.