AIMaster meningkatkan stabilitas dan kelangsungan pekerjaan pembelajaran mendalam terdistribusi skala besar dengan mengatasi isu seperti pengecualian perangkat lunak dan keras, hang pekerjaan, serta kegagalan instans melalui pemantauan pekerjaan, pengambilan keputusan toleransi kesalahan, dan pengendalian sumber daya.
Latar Belakang
Pembelajaran mendalam banyak digunakan. Seiring model dan data semakin besar, pelatihan terdistribusi menjadi praktik umum. Dengan meningkatnya jumlah instans pekerjaan, pengecualian perangkat lunak dan keras dapat menyebabkan kegagalan pekerjaan.
Untuk memastikan operasi yang stabil bagi pekerjaan pembelajaran mendalam terdistribusi skala besar, DLC menyediakan fitur pemantauan toleransi kesalahan berbasis AIMaster. AIMaster adalah komponen tingkat pekerjaan. Saat Anda mengaktifkan fitur ini, sebuah instans AIMaster dijalankan bersama instans lain dari pekerjaan Anda untuk menyediakan pemantauan pekerjaan, pengambilan keputusan toleransi kesalahan, dan pengendalian sumber daya.
Batasan
AIMaster saat ini mendukung framework berikut: PyTorch, MPI, TensorFlow, dan ElasticBatch.
Langkah 1: Aktifkan pemantauan toleransi kesalahan
Anda dapat mengaktifkan fitur pemantauan toleransi kesalahan melalui Konsol atau menggunakan SDK saat mengirimkan pekerjaan pelatihan DLC.
Di Konsol
Saat mengirimkan pekerjaan pelatihan DLC di Konsol, buka bagian Fault Tolerance and Diagnosis, aktifkan sakelar Automatic Fault Tolerance, dan konfigurasikan parameter tambahan. Untuk informasi selengkapnya, lihat Create a training job. DLC kemudian akan menjalankan peran AIMaster tambahan untuk memantau pekerjaan sepanjang siklus hidupnya dan melakukan toleransi kesalahan saat terjadi error.

Detail:
Anda dapat mengonfigurasi parameter tambahan di kotak teks Other Cofiguration. Untuk detail parameter, lihat Appendix: Fault tolerance parameters.
Setelah Anda mengaktifkan Hanging Detection, Anda dapat mengaktifkan fitur C4D Detection. C4D (Calibrating Collective Communication over Converged ethernet - Diagnosis) adalah alat diagnostik yang dikembangkan oleh Alibaba Cloud untuk mendiagnosis pekerjaan lambat atau hang dalam pelatihan model besar. Untuk informasi selengkapnya, lihat Use C4D.
CatatanC4D bergantung pada ACCL (Alibaba Cloud high-performance collective communication library). Pastikan ACCL telah diinstal. Untuk informasi selengkapnya, lihat ACCL: Alibaba Cloud high-performance collective communication library.
Saat ini, deteksi C4D tersedia untuk pekerjaan DLC yang menggunakan Layanan Komputasi AI Lingjun.
Setelah Anda mengaktifkan Hanging Detection, Anda dapat menggunakan alat analisis snapshot tumpukan panggilan fungsi untuk menemukan baris kode tepat tempat terjadinya hang pekerjaan. Anda harus mengonfigurasi ambang batas pendeteksian hang agar alat ini berfungsi dengan benar. Untuk informasi selengkapnya, lihat "Use the function call stack snapshot analysis tool".
Melalui DLC SDK
Langkah 2: Konfigurasi fitur lanjutan
Pilih fitur lanjutan berikut sesuai kebutuhan pemantauan Anda.
Konfigurasi notifikasi toleransi kesalahan
Setelah Anda mengaktifkan pemantauan toleransi kesalahan untuk suatu pekerjaan, Anda dapat mengonfigurasi notifikasi untuk event toleransi kesalahan. Di halaman Workspace Details, pilih Configure Workspace > Configure Event Notification. Lalu, klik Create Event Rule dan atur jenis event menjadi DLC task > Automatic Fault Tolerance. Untuk informasi selengkapnya, lihat Workspace Event Center.
Saat pekerjaan pelatihan mengalami pengecualian, seperti loss NaN, Anda dapat menggunakan AIMaster SDK dalam kode Anda untuk mengirim pesan notifikasi kustom:
Untuk menggunakan fitur ini, Anda harus menginstal paket wheel AIMaster. Untuk informasi selengkapnya, lihat FAQ.
from aimaster import job_monitor as jm
job_monitor_client = jm.Monitor(config=jm.PyTorchConfig())
...
if loss == Nan and rank == 0:
st = job_monitor_client.send_custom_message(content="The training loss of the job is NaN.")
if not st.ok():
print('failed to send message, error %s' % st.to_string())Konfigurasi kata kunci error retryable kustom
Pemantauan toleransi kesalahan mencakup deteksi bawaan untuk error retryable umum. Jika Anda ingin AIMaster melakukan toleransi kesalahan saat kata kunci tertentu muncul di log instans yang gagal, Anda dapat mengonfigurasikannya dalam kode Anda. Setelah dikonfigurasi, modul pemantauan akan memindai akhir log instans yang gagal untuk mencari kata kunci tersebut.
Kebijakan toleransi kesalahan harus diatur ke ExitCodeAndErrorMsg.
Contoh konfigurasi kata kunci error retryable kustom untuk pekerjaan PyTorch
from aimaster import job_monitor as jm jm_config_params = {} jm_config = jm.PyTorchConfig(**jm_config_params) monitor = jm.Monitor(config=jm_config) monitor.set_retryable_errors(["connect timeout", "error_yyy", "error_zzz"])Parameter yang dikonfigurasi di monitor.set_retryable_errors adalah kata kunci error retryable kustom.
Contoh konfigurasi kata kunci error retryable kustom untuk pekerjaan TensorFlow
from aimaster import job_monitor as jm jm_config_params = {} jm_config = jm.TFConfig(**jm_config_params) monitor = jm.Monitor(config=jm_config) monitor.set_retryable_errors(["connect timeout", "error_yyy", "error_zzz"])
Konfigurasi pendeteksian hang pekerjaan bertahap
Secara default, konfigurasi pendeteksian hang berlaku untuk seluruh pekerjaan. Namun, pekerjaan sering kali berjalan dalam tahapan berbeda. Misalnya, komunikasi node selama inisialisasi mungkin memerlukan waktu lebih lama dibandingkan tahap pelatihan, di mana log diperbarui lebih sering. Untuk mendeteksi hang pekerjaan secara cepat selama proses pelatihan, DLC menyediakan fitur pendeteksian hang bertahap. Fitur ini memungkinkan Anda mengonfigurasi interval pendeteksian hang berbeda untuk tahapan pekerjaan yang berbeda. Konfigurasikan sebagai berikut:
monitor.reset_config(jm_config_params)
# Contoh:
# monitor.reset_config(job_hang_interval=10)
# atau
# config_params = {"job_hang_interval": 10, }
# monitor.reset_config(**config_params)Berikut adalah contoh pendeteksian hang bertahap untuk pekerjaan PyTorch.
import torch
import torch.distributed as dist
from aimaster import job_monitor as jm
jm_config_params = {
"job_hang_interval": 1800 # Deteksi global 30 menit.
}
jm_config = jm.PyTorchConfig(**jm_config_params)
monitor = jm.Monitor(config=jm_config)
dist.init_process_group('nccl')
...
# impl these two funcs in aimaster sdk
# user just need to add annotations to their func
def reset_hang_detect(hang_seconds):
jm_config_params = {
"job_hang_interval": hang_seconds
}
monitor.reset_config(**jm_config_params)
def hang_detect(interval):
reset_hang_detect(interval)
...
@hang_detect(180) # Atur ulang pendeteksian hang menjadi 3 menit, hanya untuk cakupan fungsi ini.
def train():
...
@hang_detect(-1) # Nonaktifkan sementara pendeteksian hang, hanya untuk cakupan fungsi ini.
def test():
...
for epoch in range(0, 100):
train(epoch)
test(epoch)
self.scheduler.step()
Gunakan C4D
C4D (Calibrating Collective Communication over Converged ethernet - Diagnosis) adalah alat yang dikembangkan oleh Alibaba Cloud untuk mendiagnosis pekerjaan lambat atau hang dalam pelatihan model besar. C4D bergantung pada library komunikasi kolektif berkinerja tinggi Alibaba Cloud (ACCL). Pastikan ACCL telah diinstal dan variabel lingkungan dikonfigurasi dengan benar. Untuk informasi selengkapnya, lihat ACCL: Alibaba Cloud high-performance collective communication library. Saat ini, Anda dapat menggunakan fitur deteksi C4D saat memilih Layanan Komputasi AI Lingjun untuk pekerjaan DLC.
Ikhtisar fitur
C4D mengumpulkan informasi status dari semua node dalam pekerjaan untuk menentukan apakah suatu node memiliki masalah di lapisan komunikasi atau di tempat lain.
Semua parameter
Setelah Anda mengaktifkan fitur deteksi C4D, Anda dapat mengonfigurasi parameter berikut di kotak teks Other Configurations:
Parameter | Deskripsi | Nilai contoh |
--c4d-log-level | Menetapkan tingkat log output C4D. Nilai valid:
Nilai default adalah Warning, yang menghasilkan log pada level Warning dan Error. Kami merekomendasikan menggunakan nilai default untuk operasi normal. Untuk memecahkan masalah kinerja, Anda dapat mengatur level ke Info. |
|
--c4d-common-envs | Atur variabel lingkungan untuk eksekusi C4D. Formatnya adalah
|
|
Untuk log tingkat error, AIMaster secara otomatis mengisolasi node yang sesuai dan me-restart pekerjaan. Logika penanganan untuk setiap tingkat log adalah sebagai berikut:
Tingkat error | Deskripsi | Aksi |
Error | Secara default, hang pekerjaan di lapisan komunikasi yang melebihi tiga menit menyebabkan pekerjaan gagal. Anda dapat mengubah default ini dengan mengonfigurasi parameter C4D_HANG_TIMEOUT dan C4D_HANG_TIMES. | AIMaster secara otomatis mengisolasi node yang dilaporkan dalam log. |
Warning | Secara default, hang pekerjaan di lapisan komunikasi yang melebihi 10 detik memengaruhi kinerja tetapi tidak menyebabkan pekerjaan gagal. Anda dapat mengubah default ini dengan mengonfigurasi parameter C4D_HANG_TIMEOUT. | Tidak ada isolasi node otomatis. Diperlukan konfirmasi manual. |
Hang pekerjaan di luar lapisan komunikasi yang melebihi 10 detik dapat menyebabkan pekerjaan gagal. | Tidak ada isolasi node otomatis. Diperlukan konfirmasi manual. | |
Info | Kelambatan di lapisan komunikasi maupun di luar lapisan komunikasi. | Log diagnostik ini terutama untuk masalah kinerja dan memerlukan konfirmasi manual. |
Jika Anda menemukan bahwa pekerjaan DLC berjalan lambat atau hang, buka daftar pekerjaan DLC dan klik nama pekerjaan untuk membuka halaman ikhtisar pekerjaan. Di bagian Instances, lihat log node AIMaster untuk melihat hasil diagnosis C4D. Untuk informasi selengkapnya tentang hasil diagnosis, lihat Diagnostic result examples.
Contoh hasil diagnosis
RankCommHang: menunjukkan bahwa suatu node mengalami hang di lapisan komunikasi.

RankNonCommHang: menunjukkan bahwa suatu node mengalami hang di luar lapisan komunikasi, seperti hang di proses komputasi.

RankCommSlow: menunjukkan bahwa suatu node lambat di lapisan komunikasi.

RankNonCommSlow: menunjukkan bahwa suatu node lambat di luar lapisan komunikasi.

Analisis snapshot tumpukan panggilan
Kegagalan umum dalam pelatihan model besar adalah hang pekerjaan. Salah satu jenis yang sering terjadi adalah hang NCCL, yang biasanya menghasilkan entri log seperti "Watchdog caught collective operation timeout". Untuk membantu Anda mengidentifikasi akar penyebab hang pekerjaan dengan cepat, kami mengembangkan alat analisis snapshot tumpukan panggilan fungsi. Ikuti langkah-langkah berikut untuk menggunakannya:
Langkah 1: Instal pystack atau py-spy
Pertama, pastikan apakah pystack atau py-spy telah diinstal dalam gambar kontainer Anda. Jika belum, Anda harus menginstal salah satunya. Misalnya, gunakan perintah berikut untuk menginstal pystack:
pip install pystack -i https://mirrors.cloud.aliyuncs.com/pypi/simple/ --trusted-host mirrors.cloud.aliyuncs.comLangkah 2: Aktifkan pendeteksian hang
Untuk instruksi cara mengaktifkan pendeteksian hang, lihat In the console. Agar alat analisis snapshot tumpukan panggilan fungsi berfungsi dengan benar, Anda juga harus menetapkan nilai yang sesuai untuk ambang batas pendeteksian hang. Pertama, tentukan nilai timeout untuk pekerjaan model Anda. Biasanya Anda dapat menemukannya di log error setelah pekerjaan hang. Misalnya:
Watchdog caught collective operation timeout: WorkNCCL(SeqNum=2143, OpType=ALLREDUCE, NumelIn=659, NumelOut=659, Timeout(ms)=600000) ran for 600535 milliseconds before timing outDari bidang Timeout dalam log error ini, Anda dapat melihat bahwa timeout pekerjaan adalah 600.000 milidetik (600 detik atau 10 menit). Dalam kasus ini, kami merekomendasikan menetapkan ambang batas pendeteksian hang ke 450 detik. Jika nilai Timeout dalam log Anda adalah 1.800 detik, kami merekomendasikan menetapkan ambang batas ke 1.500 detik. Sebagai aturan umum, ambang batas pendeteksian hang harus sekitar 150 hingga 200 detik lebih kecil daripada nilai timeout pekerjaan.
Setelah Anda mengonfigurasi pendeteksian hang dengan benar, AIMaster secara otomatis mengumpulkan dan menganalisis tumpukan panggilan fungsi dari proses pekerjaan saat terjadi hang. Anda dapat melihat hasil analisis di log node AIMaster. Berikut adalah contoh hasil analisis dari alat setelah terjadi hang pekerjaan:

Dalam hasil analisis, bidang stack menunjukkan tumpukan panggilan fungsi, bidang threads mencantumkan thread tempat tumpukan ini terjadi, dan bidang count menunjukkan jumlah thread dengan tumpukan ini. Tumpukan dengan count bernilai 1 sangat mungkin menjadi penyebab hang pekerjaan dan harus diselidiki terlebih dahulu.
Langkah 3: Lihat alasan restart
Lihat putaran restart: Informasi restart pekerjaan diorganisir berdasarkan putaran. Di halaman detail pekerjaan, Anda dapat memperluas detail suatu putaran untuk melihat informasi seperti waktu yang dihabiskan di setiap tahap. Hal ini membantu Anda memahami status eksekusi pekerjaan dengan lebih akurat.

Lihat riwayat restart: Anda dapat mengklik jumlah restart atau tab Restart records untuk melihat informasi restart terkait, termasuk alasan restart, hasil, dan durasi.

Prosedur:
Di daftar Restart records, klik Description untuk melihat informasi detail untuk restart tertentu, termasuk Restarts, Restart Time, Node Name, Instance Name, Error Code, Error Message, dan Error Source.
Klik View Aggregation Fault Details untuk memperluas daftar lengkap detail untuk semua catatan restart.

Lampiran: Parameter toleransi kesalahan
Bagian ini menjelaskan semua parameter untuk fitur pemantauan toleransi kesalahan. Anda dapat merujuk pada contoh konfigurasi parameter umum untuk merencanakan pengaturan Anda. Saat Anda mengaktifkan pemantauan toleransi kesalahan, Anda dapat mengonfigurasi parameter ini di bagian Other Cofiguration sesuai kebutuhan.
Semua parameter
Konfigurasi umum
Fitur | Parameter | Deskripsi | Default |
Mode eksekusi pekerjaan | --job-execution-mode | Mode eksekusi pekerjaan. Nilai valid:
Perilaku toleransi kesalahan berbeda berdasarkan jenis pekerjaan untuk error yang dapat diretry:
| Sync |
Pengaturan restart pekerjaan | --enable-job-restart | Menentukan apakah pekerjaan diizinkan untuk restart saat kondisi toleransi kesalahan terpenuhi atau pengecualian runtime terdeteksi. Nilai valid:
| False |
--max-num-of-job-restart | Jumlah maksimum restart pekerjaan. Jika jumlah ini terlampaui, pekerjaan gagal. | 3 |
Konfigurasi runtime
Berlaku untuk skenario di mana tidak ada instans yang gagal.
Fitur | Parameter | Deskripsi | Default |
Pendeteksian hang pekerjaan | --enable-job-hang-detection | Menentukan apakah pendeteksian hang runtime untuk pekerjaan diaktifkan. Fitur ini hanya mendukung pekerjaan sinkron. Nilai valid:
| False |
--job-hang-interval | Durasi dalam detik yang diizinkan untuk pekerjaan ditangguhkan. Nilai ini harus bilangan bulat positif. Jika durasi penangguhan melebihi nilai ini, pekerjaan dianggap abnormal dan di-restart. | 1800 | |
--enable-c4d-hang-detection | Menentukan apakah deteksi C4D diaktifkan untuk mendiagnosis dan menemukan node lambat serta node rusak yang menyebabkan hang pekerjaan selama eksekusi. Catatan Parameter ini hanya berlaku jika parameter --enable-job-hang-detection juga diaktifkan. | False | |
Pendeteksian hang saat keluar pekerjaan | --enable-job-exit-hang-detection | Menentukan apakah pendeteksian hang diaktifkan selama keluar pekerjaan. Fitur ini hanya mendukung pekerjaan sinkron. Nilai valid:
| False |
--job-exit-hang-interval | Durasi dalam detik yang diizinkan untuk pekerjaan ditangguhkan selama keluar. Nilai ini harus bilangan bulat positif. Jika durasi keluar melebihi nilai ini, pekerjaan dianggap abnormal dan di-restart. | 600 |
Konfigurasi toleransi kesalahan
Berlaku untuk skenario di mana setidaknya satu instans gagal.
Fitur | Parameter | Deskripsi | Default |
Kebijakan toleransi kesalahan | --fault-tolerant-policy | Kebijakan toleransi kesalahan. Nilai valid:
| ExitCodeAndErrorMsg |
Jumlah maksimum kemunculan error yang sama | --max-num-of-same-error | Jumlah maksimum kemunculan error yang sama pada satu instans. Jika jumlah error melebihi nilai ini, pekerjaan gagal. | 10 |
Tingkat kegagalan maksimum yang ditoleransi | --max-tolerated-failure-rate | Tingkat kegagalan maksimum yang ditoleransi. Jika proporsi instans yang gagal melebihi nilai ini, pekerjaan gagal. Nilai default -1 menonaktifkan fitur ini. Misalnya, nilai 0,3 berarti pekerjaan gagal jika lebih dari 30% worker mengalami error. | -1 |
Contoh konfigurasi parameter
Contoh berikut menunjukkan konfigurasi parameter umum untuk berbagai pekerjaan pelatihan.
Pekerjaan pelatihan sinkron (umum untuk pekerjaan PyTorch)
Saat instans gagal dan memenuhi kondisi toleransi kesalahan, pekerjaan di-restart.
--job-execution-mode=Sync --enable-job-restart=True --max-num-of-job-restart=3 --fault-tolerant-policy=ExitCodeAndErrorMsgPekerjaan pelatihan asinkron (umum untuk pekerjaan TensorFlow)
Untuk error yang dapat diretry, instans Worker yang gagal di-restart. Jika instans PS atau Chief gagal, pekerjaan tidak di-restart secara default. Untuk mengaktifkan restart pekerjaan, atur --enable-job-restart=True.
--job-execution-mode=Async --fault-tolerant-policy=OnFailurePekerjaan inferensi offline (umum untuk pekerjaan ElasticBatch)
Instans bersifat independen, mirip dengan pekerjaan asinkron. Saat instans gagal, hanya instans tersebut yang di-restart.
--job-execution-mode=Async --fault-tolerant-policy=OnFailure
FAQ
T: Bagaimana cara menginstal AIMaster SDK?
Gunakan perintah yang sesuai dengan versi Python Anda untuk menginstal paket wheel.
# Python 3.6
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp36-cp36m-linux_x86_64.whl
# Python 3.8
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp38-cp38-linux_x86_64.whl
# Python 3.10
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp310-cp310-linux_x86_64.whl