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
Sebuah kluster Container Service for Kubernetes (ACK) yang berisi node dengan akselerasi GPU telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK dengan Node Akselerasi GPU.
Suite AI cloud-native telah diinstal. Versi CLI ack-arena untuk pembelajaran mesin adalah 0.9.10 atau lebih baru. Untuk informasi lebih lanjut, lihat Deploy Suite AI Cloud-Native.
Klien Arena telah diinstal dan versi Arena adalah 0.9.10 atau lebih baru. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Persistent volume claims (PVCs) telah dibuat di dalam kluster. Untuk informasi lebih lanjut, lihat Konfigurasikan Volume NAS Bersama.
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.
CatatanPekerjaan 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
Jalankan perintah berikut untuk menanyakan sumber daya GPU yang tersedia di dalam kluster:
arena top nodeOutput 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.
Jalankan perintah
arena submit deepspeedjob [--falg] commanduntuk 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 listuntuk 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 statusJalankan perintah berikut untuk menanyakan semua pekerjaan pelatihan yang dikirimkan menggunakan Arena:
arena listOutput yang Diharapkan:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE deepspeed-helloworld RUNNING DEEPSPEEDJOB 3m 3 3 192.168.9.69Jalankan perintah berikut untuk menanyakan sumber daya GPU yang digunakan oleh pekerjaan:
arena top jobOutput 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/3Jalankan perintah berikut untuk menanyakan sumber daya GPU yang digunakan di dalam kluster:
arena top nodeOutput 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%)Jalankan perintah berikut untuk menanyakan informasi rinci tentang pekerjaan dan alamat layanan web TensorBoard:
arena get deepspeed-helloworldOutput 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:31870TensorBoard 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.
Gunakan browser untuk melihat hasil pelatihan di TensorBoard.
Jalankan perintah berikut untuk memetakan TensorBoard ke port lokal 9090:
kubectl port-forward svc/deepspeed-helloworld-tensorboard 9090:6006Masukkan
localhost:9090ke bilah alamat browser web untuk mengakses TensorBoard. Gambar berikut menunjukkan contohnya.
Cetak log pekerjaan.
Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs deepspeed-helloworldOutput 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.7565Anda dapat menjalankan perintah
arena logs $job_name -funtuk mencetak log pekerjaan secara real-time dan menjalankan perintaharena logs $job_name -t Nuntuk mencetak N baris dari bagian bawah log. Anda juga dapat menjalankan perintaharena logs --helpuntuk 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 5Output 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)