Topik ini menjelaskan cara menggunakan fitur pemantauan toleransi kesalahan berbasis AIMaster yang disediakan oleh DLC.
Latar Belakang
Pembelajaran mendalam kini banyak digunakan. Seiring dengan meningkatnya ukuran model dan set data, pelatihan terdistribusi telah menjadi praktik umum. Namun, peningkatan jumlah instans pekerjaan juga meningkatkan kemungkinan terjadinya pengecualian perangkat lunak maupun keras, yang dapat menyebabkan kegagalan pekerjaan.
Untuk memastikan operasi stabil pada pekerjaan pembelajaran mendalam terdistribusi berskala besar, DLC menyediakan fitur pemantauan toleransi kesalahan berbasis AIMaster. AIMaster merupakan komponen tingkat pekerjaan. Saat diaktifkan, sebuah instans AIMaster berjalan bersama instans pekerjaan lainnya untuk melakukan pemantauan pekerjaan, penilaian toleransi kesalahan, dan pengendalian sumber daya.
Batasan
AIMaster saat ini mendukung framework berikut: PyTorch, MPI, TensorFlow, dan ElasticBatch.
Langkah 1: Konfigurasikan parameter toleransi kesalahan
Bagian ini menjelaskan semua parameter untuk fitur pemantauan toleransi kesalahan. Anda dapat menggunakan konfigurasi contoh berikut untuk membantu merencanakan pengaturan Anda. Saat mengaktifkan fitur ini, tentukan parameter tersebut di bagian Other Cofiguration.
Parameter
Kategori | Fitur | Parameter | Deskripsi | Bawaan |
Konfigurasi umum | Mode eksekusi pekerjaan | --job-execution-mode | Menentukan mode eksekusi pekerjaan. Nilai yang valid:
Perilaku toleransi kesalahan untuk error yang dapat dicoba ulang bervariasi berdasarkan jenis pekerjaan:
| Sync |
Pengaturan mulai ulang pekerjaan | --enable-job-restart | Menentukan apakah pekerjaan dimulai ulang ketika kondisi toleransi kesalahan terpenuhi atau terjadi pengecualian waktu proses. Nilai yang valid:
| False | |
--max-num-of-job-restart | Menentukan jumlah maksimum kali pekerjaan dapat dimulai ulang. Jika jumlah ini terlampaui, pekerjaan ditandai sebagai gagal. | 3 | ||
Konfigurasi waktu proses Catatan Berlaku untuk skenario di mana tidak ada instans yang gagal. | Pendeteksian hang pekerjaan | --enable-job-hang-detection | Menentukan apakah akan mengaktifkan pendeteksian hang untuk pekerjaan yang sedang berjalan. Fitur ini hanya mendukung pekerjaan sinkron. Nilai yang valid:
| False |
--job-hang-interval | Menentukan durasi dalam detik bahwa pekerjaan dapat tidak aktif sebelum dianggap hang. Nilainya harus bilangan bulat positif. Jika durasi tidak aktif melebihi nilai ini, pekerjaan ditandai sebagai abnormal dan pemicu mulai ulang dijalankan. | 1800 | ||
| Menentukan apakah akan mengaktifkan pendeteksian C4D (Calibrating Collective Communication over Converged ethernet - Diagnosis). Fitur ini membantu Anda mendiagnosis dan menemukan node lambat serta node rusak yang menyebabkan pekerjaan hang secara cepat. Catatan Parameter ini hanya berlaku ketika | False | ||
Pendeteksian hang saat keluar pekerjaan | --enable-job-exit-hang-detection | Menentukan apakah akan mengaktifkan pendeteksian hang ketika pekerjaan akan keluar. Fitur ini hanya mendukung pekerjaan sinkron. Nilai yang valid:
| False | |
--job-exit-hang-interval | Menentukan durasi dalam detik bahwa pekerjaan dapat tidak aktif selama proses keluar. Nilainya harus bilangan bulat positif. Jika durasi tidak aktif saat keluar melebihi nilai ini, pekerjaan ditandai sebagai abnormal dan pemicu mulai ulang dijalankan. | 600 | ||
Konfigurasi toleransi kesalahan Catatan Berlaku untuk skenario di mana sebuah instans gagal. | Kebijakan toleransi kesalahan | --fault-tolerant-policy | Menentukan kebijakan toleransi kesalahan. Nilai yang valid:
| ExitCodeAndErrorMsg |
Jumlah maksimum kemunculan error yang sama | --max-num-of-same-error | Menentukan jumlah maksimum kali error yang sama dapat terjadi pada satu instans. Jika jumlah error melebihi nilai ini, pekerjaan ditandai sebagai gagal. | 10 | |
Laju kegagalan maksimum yang ditoleransi | --max-tolerated-failure-rate | Mengatur laju kegagalan maksimum yang ditoleransi. Jika persentase instans yang gagal melebihi nilai ini, pekerjaan ditandai sebagai gagal. Nilai bawaan -1 menunjukkan bahwa fitur ini dinonaktifkan. Contoh: Jika Anda menyetel parameter ini ke 0,3, pekerjaan ditandai sebagai gagal jika lebih dari 30% instans worker gagal. | -1 |
Konfigurasi contoh
Contoh berikut menunjukkan konfigurasi parameter umum untuk berbagai jenis pekerjaan pelatihan.
Pekerjaan pelatihan sinkron (umum pada pekerjaan PyTorch)
Pekerjaan dimulai ulang jika sebuah instans mengalami pengecualian dan kondisi toleransi kesalahan terpenuhi.
--job-execution-mode=Sync --enable-job-restart=True --max-num-of-job-restart=3 --fault-tolerant-policy=ExitCodeAndErrorMsgPekerjaan pelatihan asinkron (umum pada pekerjaan TensorFlow)
Untuk error yang dapat dicoba ulang, hanya instans worker yang gagal yang dimulai ulang. Secara bawaan, pekerjaan tidak dimulai ulang jika instans PS atau Chief gagal. Untuk mengaktifkan mulai ulang pekerjaan, atur --enable-job-restart ke True.
--job-execution-mode=Async --fault-tolerant-policy=OnFailurePekerjaan inferensi offline (umum pada pekerjaan ElasticBatch)
Instans bersifat independen, mirip dengan pekerjaan asinkron. Jika sebuah instans gagal, hanya instans tersebut yang dimulai ulang.
--job-execution-mode=Async --fault-tolerant-policy=OnFailure
Langkah 2: Aktifkan pemantauan toleransi kesalahan
Anda dapat mengaktifkan fitur pemantauan toleransi kesalahan melalui konsol DLC atau menggunakan SDK saat mengirimkan pekerjaan pelatihan.
Aktifkan di konsol
Saat mengirimkan pekerjaan pelatihan DLC di konsol, aktifkan sakelar Automatic Fault Tolerance di bagian Fault Tolerance and Diagnosis, lalu konfigurasi parameter lainnya. Untuk informasi lebih lanjut, lihat Buat pekerjaan pelatihan. Mengaktifkan fitur ini akan memulai peran AIMaster untuk memantau pekerjaan sepanjang siklus hidupnya dan melakukan tindakan toleransi kesalahan saat terjadi error.

Item berikut menjelaskan pengaturannya:
Anda dapat menentukan parameter lain di kotak teks Other Cofiguration. Untuk informasi lebih lanjut tentang parameter tersebut, lihat Langkah 1: Konfigurasikan parameter toleransi kesalahan.
Setelah mengaktifkan Hang Detection, Anda dapat mengaktifkan C4D Detection. C4D (Calibrating Collective Communication over Converged ethernet - Diagnosis) adalah alat diagnostik eksklusif yang dikembangkan oleh Alibaba Cloud untuk mengidentifikasi masalah seperti kinerja lambat atau hang pada pekerjaan pelatihan model besar. Untuk informasi lebih lanjut, lihat Gunakan C4D.
CatatanC4D bergantung pada ACCL, pustaka komunikasi kolektif berkinerja-tinggi yang dikembangkan oleh Alibaba Cloud. Pastikan ACCL telah diinstal. Untuk informasi lebih lanjut, lihat ACCL: Pustaka komunikasi kolektif berkinerja-tinggi Alibaba Cloud.
Saat ini, fitur C4D Detection hanya tersedia untuk pekerjaan DLC yang berjalan di Layanan Komputasi AI Lingjun.
Setelah mengaktifkan Hang Detection, Anda dapat menggunakan alat analisis snapshot tumpukan panggilan untuk menemukan baris kode spesifik tempat pekerjaan hang. Hal ini memerlukan konfigurasi khusus untuk ambang batas pendeteksian hang. Untuk informasi lebih lanjut, lihat Gunakan alat analisis snapshot tumpukan panggilan.
Aktifkan penggunaan DLC SDK
Gunakan Go SDK
Aktifkan fitur pemantauan toleransi kesalahan saat mengirimkan pekerjaan menggunakan Go SDK.
createJobRequest := &client.CreateJobRequest{} settings := &client.JobSettings{ EnableErrorMonitoringInAIMaster: tea.Bool(true), ErrorMonitoringArgs: tea.String("--job-execution-mode=Sync --enable-job-restart=True --enable-job-hang-detection=True --job-hang-interval=3600"), } createJobRequest.SetSettings(settings)Parameter:
EnableErrorMonitoringInAIMaster: Menentukan apakah akan mengaktifkan fitur pemantauan toleransi kesalahan.
ErrorMonitoringArgs: Menentukan parameter lain untuk pemantauan toleransi kesalahan.
Gunakan Python SDK
Aktifkan fitur pemantauan toleransi kesalahan saat mengirimkan pekerjaan menggunakan Python SDK.
from alibabacloud_pai_dlc20201203.models import CreateJobRequest, JobSettings settings = JobSettings( enable_error_monitoring_in_aimaster = True, error_monitoring_args = "--job-execution-mode=Sync --enable-job-restart=True --enable-job-hang-detection=True --job-hang-interval=30" ) create_job_req = CreateJobRequest( ... settings = settings, )Parameter:
enable_error_monitoring_in_aimaster: Menentukan apakah akan mengaktifkan fitur pemantauan toleransi kesalahan.
error_monitoring_args: Menentukan parameter lain untuk pemantauan toleransi kesalahan.
Langkah 3: Konfigurasikan fitur lanjutan
Anda dapat menggunakan fitur lanjutan berikut untuk menyesuaikan pemantauan toleransi kesalahan sesuai kebutuhan pekerjaan Anda.
Konfigurasikan notifikasi toleransi kesalahan
Setelah 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, klik Create Event Rule, lalu atur jenis event ke DLC task > Automatic Fault Tolerance. Untuk informasi selengkapnya, lihat Workspace Event Center.
Jika pekerjaan pelatihan mengalami pengecualian, seperti nilai 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 lebih lanjut, 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 for the job is NaN.")
if not st.ok():
print('failed to send message, error %s' % st.to_string())Konfigurasikan kata kunci toleransi kesalahan kustom
Fitur pemantauan toleransi kesalahan mencakup modul pemantauan bawaan untuk error retriable umum. Jika Anda ingin tindakan toleransi kesalahan dipicu saat kata kunci tertentu muncul dalam log instans yang gagal, Anda dapat mengonfigurasi kata kunci tersebut dalam kode Anda. Setelah dikonfigurasi, modul pemantauan toleransi kesalahan akan memindai log akhir instans yang gagal untuk mencocokkan kata kunci.
Kebijakan toleransi kesalahan harus diatur ke ExitCodeAndErrorMsg.
Contoh konfigurasi kata kunci toleransi kesalahan 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"])Fungsi monitor.set_retryable_errors mengatur kata kunci toleransi kesalahan kustom.
Contoh konfigurasi kata kunci toleransi kesalahan 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"])
Konfigurasikan pendeteksian hang pekerjaan bertahap
Secara bawaan, pengaturan pendeteksian hang berlaku untuk seluruh siklus hidup pekerjaan. Namun, pekerjaan berjalan dalam beberapa tahap. Misalnya, selama tahap inisialisasi, node mungkin memerlukan waktu lama untuk membangun komunikasi, sedangkan selama tahap pelatihan, log diperbarui lebih sering. Untuk mendeteksi node hang secara cepat selama proses pelatihan, DLC menyediakan fitur pendeteksian hang pekerjaan bertahap. Fitur ini memungkinkan Anda mengonfigurasi interval pendeteksian hang berbeda untuk tahap pelatihan berbeda. Kode berikut memberikan contohnya.
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)Kode berikut memberikan contoh cara mengonfigurasi pendeteksian hang pekerjaan 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')
...
# Implementasikan dua fungsi ini di AIMaster SDK.
# Anda hanya perlu menambahkan anotasi ke fungsi Anda.
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 eksklusif yang dikembangkan oleh Alibaba Cloud untuk mendiagnosis masalah seperti kinerja lambat atau hang pada pekerjaan pelatihan model besar. C4D bergantung pada ACCL, pustaka komunikasi kolektif berkinerja-tinggi yang dikembangkan oleh Alibaba Cloud. Pastikan ACCL telah diinstal dan variabel lingkungan dikonfigurasi dengan benar. Untuk informasi lebih lanjut, lihat ACCL: Pustaka komunikasi kolektif berkinerja-tinggi Alibaba Cloud. Saat ini, fitur pendeteksian C4D hanya tersedia untuk pekerjaan DLC yang berjalan di Layanan Komputasi AI Lingjun.
Cara kerja
C4D mengumpulkan informasi status dari semua node dalam pekerjaan untuk menentukan apakah ada node yang mengalami masalah di lapisan komunikasi atau di luar lapisan komunikasi. Gambar berikut menunjukkan arsitektur sistem.
Parameter
Setelah mengaktifkan C4D Detection, Anda dapat mengonfigurasi parameter berikut di kotak teks Other Configurations.
Parameter | Deskripsi | Contoh |
--c4d-log-level | Mengatur tingkat log output C4D. Nilai yang valid:
Nilai bawaan adalah Warning, yang menghasilkan log pada tingkat Warning dan Error. Kami menyarankan Anda menggunakan nilai bawaan untuk operasi normal. Untuk memecahkan masalah kinerja, Anda dapat mengatur nilainya ke Info. |
|
--c4d-common-envs | Mengatur variabel lingkungan untuk eksekusi C4D. Gunakan format
|
|
Untuk log tingkat Error, AIMaster secara otomatis mengisolasi node yang sesuai dan memulai ulang pekerjaan. Tabel berikut menjelaskan logika penanganan untuk setiap tingkat log.
Tingkat error | Deskripsi error | Tindakan |
Error | Secara bawaan, hang di lapisan komunikasi yang melebihi tiga menit menyebabkan pekerjaan gagal. Anda dapat mengubah bawaan ini dengan mengonfigurasi parameter C4D_HANG_TIMEOUT dan C4D_HANG_TIMES. | AIMaster secara otomatis mengisolasi node yang dilaporkan dalam log. |
Warn | Secara bawaan, hang di lapisan komunikasi yang melebihi 10 detik memengaruhi kinerja tetapi tidak menyebabkan pekerjaan gagal. Anda dapat mengubah bawaan ini dengan mengonfigurasi parameter C4D_HANG_TIMEOUT. | Node yang dilaporkan dalam log tidak diisolasi secara otomatis dan memerlukan konfirmasi manual. |
Hang di luar lapisan komunikasi yang melebihi 10 detik dapat menyebabkan pekerjaan gagal. | Node yang dilaporkan dalam log tidak diisolasi secara otomatis dan memerlukan konfirmasi manual. | |
Info | Kelambatan di lapisan komunikasi dan kelambatan 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 detail pekerjaan. Di bagian Instance, lihat log node AIMaster untuk melihat hasil diagnosa C4D. Untuk informasi lebih lanjut tentang hasil diagnosa, lihat Contoh hasil diagnosa.
Hasil diagnosa
RankCommHang: Menunjukkan bahwa sebuah node mengalami hang di lapisan komunikasi.

RankNonCommHang: Menunjukkan bahwa sebuah node mengalami hang di luar lapisan komunikasi, misalnya dalam proses komputasi.

RankCommSlow: Menunjukkan bahwa sebuah node mengalami kinerja lambat di lapisan komunikasi.

RankNonCommSlow: Menunjukkan bahwa sebuah node mengalami kinerja lambat di luar lapisan komunikasi.

Gunakan alat analisis tumpukan panggilan
Hang pekerjaan adalah jenis kegagalan umum dalam pelatihan model besar. Contoh khasnya adalah hang NCCL, yang menghasilkan log "Watchdog caught collective operation timeout" saat pekerjaan gagal. Untuk membantu Anda mengidentifikasi akar penyebab hang pekerjaan secara cepat, kami mengembangkan alat analisis snapshot tumpukan panggilan. Ikuti langkah-langkah berikut untuk menggunakan alat ini:
Langkah 1: Instal pystack atau py-spy
Periksa apakah pystack atau py-spy telah diinstal dalam gambar kontainer Anda. Jika belum, Anda harus menginstal salah satunya. Perintah berikut memberikan contoh cara menginstal pystack.
pip install pystack -i https://mirrors.cloud.aliyuncs.com/pypi/simple/ --trusted-host mirrors.cloud.aliyuncs.comLangkah 2: Aktifkan sakelar pendeteksian hang
Untuk informasi tentang cara mengaktifkan sakelar, lihat Aktifkan di konsol. Setelah mengaktifkan sakelar Hang Detection, Anda harus mengonfigurasi nilai yang sesuai untuk ambang batas pendeteksian hang agar dapat menggunakan alat analisis snapshot tumpukan panggilan. Pertama, periksa periode timeout pekerjaan Anda. Informasi ini biasanya dapat ditemukan di log error yang dihasilkan setelah pekerjaan hang. Kode berikut memberikan contoh log.
Watchdog caught collective operation timeout: WorkNCCL(SeqNum=2143, OpType=ALLREDUCE, NumelIn=659, NumelOut=659, Timeout(ms)=600000) ran for 600535 milliseconds before timing outBidang Timeout dalam log error ini menunjukkan bahwa periode timeout untuk pekerjaan adalah 600 detik (10 menit). Dalam kasus ini, kami menyarankan Anda menyetel ambang batas pendeteksian hang ke 450 detik. Jika nilai Timeout dalam log error adalah 1800 detik, kami menyarankan Anda menyetel ambang batas pendeteksian hang ke 1500 detik. Sebagai pedoman umum, ambang batas pendeteksian hang harus sekitar 150 hingga 200 detik lebih kecil dari nilai Timeout.
Setelah mengonfigurasi fitur pendeteksian hang seperti yang dijelaskan dalam langkah-langkah sebelumnya, AIMaster secara otomatis mengumpulkan dan menganalisis tumpukan panggilan proses pekerjaan saat terjadi hang. Anda dapat melihat hasil analisis di log node AIMaster. Gambar berikut menunjukkan contoh hasil analisis tumpukan panggilan yang dihasilkan setelah pekerjaan hang.

Dalam hasil analisis, bidang stack menunjukkan tumpukan panggilan spesifik, bidang threads menunjukkan thread terkait, dan bidang count menunjukkan jumlah thread yang memiliki tumpukan panggilan yang sama. Stack dengan count 1 sangat mungkin menjadi penyebab hang dan perlu diperiksa secara seksama.
Langkah 4: Lihat alasan mulai ulang
Lihat upaya mulai ulang: Informasi mulai ulang pekerjaan diorganisir berdasarkan upaya. Di halaman Ikhtisar Pekerjaan, Anda dapat mengklik untuk memperluas detail upaya guna melihat informasi seperti waktu yang dikonsumsi di setiap tahap. Hal ini membantu Anda memahami status pekerjaan dengan lebih baik.

Lihat riwayat mulai ulang: Anda dapat mengklik jumlah mulai ulang atau tab Restart records untuk melihat informasi mulai ulang, termasuk alasan mulai ulang, hasil mulai ulang, dan waktu yang dikonsumsi oleh mulai ulang.

Lakukan langkah-langkah berikut:
Di daftar Restart records, klik Description untuk melihat informasi detail tentang mulai ulang, termasuk Restarts, Restart Time, Node Name, Instance Name, Error Code, Error Message, dan Error Source.
Klik View Aggregation Fault Details untuk memperluas detail semua catatan mulai ulang.

FAQ
T: Bagaimana cara menginstal AIMaster SDK?
Jalankan perintah berikut untuk menginstal paket wheel yang sesuai berdasarkan versi Python Anda.
# 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