Dokumen ini menjelaskan cara mengumpulkan dan menafsirkan log NCCL/gIB untuk memecahkan masalah stabilitas dan performa di AI Hypercomputer, termasuk panduan tentang cara mencapai hal berikut:
- Kumpulkan log NCCL.
- Memahami struktur entri log NCCL.
- Pastikan plugin NCCL/gIB dimuat dengan benar.
- Pastikan versi NCCL dan gIB sudah benar.
- Memecahkan masalah peringatan dan error NCCL umum.
Mengumpulkan log NCCL
Anda dapat menggunakan log NVIDIA Collective Communications Library (NCCL) untuk men-debug kegagalan NCCL. Untuk men-debug stabilitas atau performa, kumpulkan log NCCL dari semua tingkat logging saat Anda menjalankan workload yang bermasalah. Hindari mencetak entri log ke konsol, karena volume log yang sangat besar dapat mencegah tugas dilanjutkan.
Untuk mengumpulkan log NCCL, tetapkan variabel lingkungan berikut:
NCCL_DEBUG=INFO
NCCL_DEBUG_SUBSYS=INIT,ENV,GRAPH,NET,COLL,TUNING
NCCL_DEBUG_FILE=DESIRED_PATH/nccl_logs.VM_NAME.RANK_PROCESS_ID
Ganti kode berikut:
DESIRED_PATH: jalur tempat Anda ingin menyimpan file log
VM_NAME: Nama VM
RANK_PROCESS_ID: ID proses peringkat
Format log NCCL
Log NCCL mirip dengan berikut ini:
# A sample log entry from NCCL core.
a3ultra-vm-0:606:642 [6] NCCL INFO Using network gIB
# A sample log entry from the gIB network plugin.
a3ultra-vm-0:606:642 [6] NCCL INFO NET/gIB : Initializing gIB v1.0.2
Terlepas dari sumbernya, log NCCL memiliki awalan yang mirip dengan berikut ini:
<VM name>:<pid>:<tid> [<GPU device ID>] <log level> <log content>
Memastikan plugin NCCL/gIB dimuat dengan benar
NCCL/gIB terdiri dari beberapa plugin yang dikembangkan Google. Kegagalan memuat salah satu plugin dapat menyebabkan performa yang buruk, dan dalam beberapa kasus, error fatal.
Plugin jaringan (libnccl-net.so)
Jika plugin jaringan gIB dimuat dengan benar, Anda akan melihat entri log NCCL yang mirip dengan berikut ini:
... NCCL INFO Using network gIB
Jika Anda melihat entri log yang mirip dengan salah satu entri berikut, gunakan langkah-langkah di bagian Objek bersama tidak dapat dimuat untuk memperbaiki masalah.
# Cannot find the gIB network plugin.
... NCCL INFO NET/Plugin: Could not find: libnccl-net.so. Using internal network plugin.
# Using the built-in TCP plugin.
... NCCL INFO Using network Socket
# Using the built-in IB plugin.
... NCCL INFO Using network IB
Plugin tuner (libnccl-tuner.so)
Jika plugin gIB tuner dimuat dengan benar, Anda akan melihat entri log NCCL yang mirip dengan berikut ini:
NCCL INFO TUNER/Plugin: Failed to find ncclTunerPlugin_v3 symbol.
NCCL INFO TUNER/Plugin: Using tuner plugin A3xTunerPlugin_v2
Jika Anda melihat entri log yang mirip dengan berikut ini, gunakan langkah-langkah di bagian Objek bersama tidak dapat dimuat untuk memperbaiki masalah.
NCCL INFO TUNER/Plugin: Failed to find ncclTunerPlugin_v2 symbol, using internal tuner instead.
Plugin CollNet
Meskipun entri log ini menunjukkan kegagalan, hal ini sudah diperkirakan dan bukan merupakan penyebab kekhawatiran:
NCCL INFO NET/Plugin: Failed to find ncclCollNetPlugin_v8 symbol.
NCCL INFO NET/Plugin: Failed to find ncclCollNetPlugin symbol (>= v5). ncclCollNetPlugin symbols v4 and lower are not supported.
Periksa versi NCCL dan gIB
Sebaiknya gunakan NCCL yang disertakan dengan penginstal gIB untuk memastikan fitur terbaru, performa terbaik, dan stabilitas maksimal. Namun, Anda dapat memilih untuk menggunakan versi NCCL kustom untuk pengujian, seperti versi NCCL yang dibundel dengan framework machine learning pilihan Anda.
Untuk memeriksa versi NCCL dan gIB yang digunakan, cari entri log NCCL berikut:
# NCCL version.
... NCCL INFO NCCL version 2.23.4+cuda12.2
# gIB version.
... NCCL INFO NET/gIB : Initializing gIB v1.0.2
Verifikasi variabel lingkungan NCCL/gIB
Untuk mencapai performa NCCL yang baik, kami menyediakan skrip yang dapat Anda gunakan untuk menyetel variabel lingkungan NCCL yang direkomendasikan. Sebelum menjalankan workload, jalankan skrip di lingkungan yang sama dengan workload. Dalam penginstal NCCL/gIB, skrip berada di /usr/local/gib/set_nccl_env.sh. Jika Anda tidak menggunakan skrip ini, dan akibatnya variabel lingkungan NCCL ditetapkan dengan tidak benar, ada kemungkinan bahwa gIB NCCL Config Checker akan menghentikan beban kerja, NCCL akan error, atau performa NCCL akan buruk.
Untuk memeriksa apakah variabel lingkungan NCCL/gIB diterapkan dengan benar, cari entri log NCCL yang mirip dengan berikut ini:
# Explicitly set values.
... NCCL INFO NCCL_P2P_PCI_CHUNKSIZE set by environment to 131072.
# Using default values because the set value is invalid.
... NCCL INFO Invalid value INVALID_VALUE for NCCL_P2P_PCI_CHUNKSIZE, using default 131072.
Bandingkan nilai berikut dengan variabel lingkungan NCCL yang direkomendasikan.
Memeriksa manifes workload GKE
Di GKE, manifes workload Kubernetes Anda memiliki beberapa penyiapan yang diperlukan agar dapat menggunakan NCCL/gIB dengan lancar:
- Manifes harus memasang biner NCCL/gIB dari
/home/kubernetes/bin/gibdi VM ke/usr/local/gibdi container workload Anda. Perhatikan bahwa/home/kubernetes/bin/nvidiadi VM otomatis di-mount ke/usr/local/nvidiadi container workload Anda. - Container beban kerja Anda harus menetapkan
LD_LIBRARY_PATHke/usr/local/gib/lib64:/usr/local/nvidia/lib64. - Cluster dan node pool Anda harus telah menyiapkan multi-jaringan GKE, dan manifes workload Anda harus menyertakan anotasi multi-jaringan untuk menghindari kebutuhan akan setelan
hostNetwork: true.
Manifes workload Kubernetes sebenarnya di GKE mirip dengan berikut ini:
...
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"gvnic-1"},
{"interfaceName":"gpu0rdma0","network":"rdma-0"},
{"interfaceName":"gpu1rdma0","network":"rdma-1"},
{"interfaceName":"gpu2rdma0","network":"rdma-2"},
{"interfaceName":"gpu3rdma0","network":"rdma-3"},
{"interfaceName":"gpu4rdma0","network":"rdma-4"},
{"interfaceName":"gpu5rdma0","network":"rdma-5"},
{"interfaceName":"gpu6rdma0","network":"rdma-6"},
{"interfaceName":"gpu7rdma0","network":"rdma-7"}
]
spec:
volumes:
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
...
containers:
- name: my-container
volumeMounts:
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/gib/lib64:/usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
Memeriksa tabel GID
Di RoCE, tabel ID global (GID) digunakan untuk menangani traffic RDMA secara unik. Jika tabel GID rusak, tidak ada traffic RDMA yang dapat diteruskan.
Kami menyediakan skrip show_gids.sh untuk menampilkan tabel GID. Di penginstal, file ini terletak di /usr/local/gib/scripts. Jika Anda menggunakan penginstal kami tanpa modifikasi, penginstal akan diinstal ke /var/lib/gib/scripts di VM.
Saat menjalankan skrip di VM, Anda akan melihat output yang mirip dengan berikut ini:
DEV PORT INDEX GID IPv4 VER DEV
--- ---- ----- --- ---- --- ---
mlx5_0 1 0 fe80:0000:0000:0000:689c:b8ff:fedf:3b01 v1 gp0rdma0
mlx5_0 1 1 fe80:0000:0000:0000:689c:b8ff:fedf:3b01 v2 gp0rdma0
mlx5_0 1 2 0000:0000:0000:0000:0000:ffff:c0a8:0202 192.168.2.2 v1 gp0rdma0
mlx5_0 1 3 0000:0000:0000:0000:0000:ffff:c0a8:0202 192.168.2.2 v2 gp0rdma0
...
Tinjau output dan konfirmasi hal berikut:
- Tabel GID memiliki jumlah entri yang tepat:
- Untuk A3 Ultra atau A4, 32 entri dengan 4 entri per CX-7.
- Untuk A3 Mega, 32 entri dengan 4 entri per CX-7.
- Untuk A3 High (8 GPU), 16 entri dengan 4 entri per CX-7.
- Untuk A4X, 16 entri dengan 4 entri per CX-7.
- Entri GID setiap CX-7 memiliki indeks 0, 1, 2, dan 3.
- Untuk setiap CX-7, indeks 2 dan 3 memiliki alamat IPv4, dan alamat IP tersebut cocok dengan IPv4 perangkat tersebut (misalnya dari
ip a).
Jika salah satu item ini salah, tabel GID akan rusak. Pertimbangkan untuk me-reboot VM atau memulai ulang pengelola jaringan di OS tamu Anda.
Peringatan NCCL
Log NCCL memiliki beberapa tingkat, dengan peringatan NCCL (NCCL WARN) sebagai yang paling parah. Peringatan NCCL biasanya menunjukkan kegagalan, yang mungkin atau mungkin tidak fatal. NCCL tidak memiliki tingkat log yang otomatis menghentikan workload.
Objek bersama tidak dapat dimuat
Error berikut terjadi saat objek bersama tidak dapat dimuat karena penyiapan Anda.
error while loading shared libraries: libnccl.so.2: cannot open shared object file: No such file or directory
Untuk mengatasi masalah ini:
- Pastikan objek bersama diinstal di lingkungan Anda.
- Pastikan direktori objek bersama berada dalam variabel lingkungan
$LD_LIBRARY_PATH.
Gagal memetakan segmen dari objek bersama
Error berikut terjadi saat direktori objek bersama tidak dapat dieksekusi.
error while loading shared libraries: libnccl.so.2: failed to map segment from shared object: Operation not permitted
Untuk mengatasi masalah ini, jalankan perintah berikut (contoh ini mengasumsikan bahwa biner gIB diinstal di /var/lib/gib pada VM):
sudo mount --bind /var/lib/gib /var/lib/gib
sudo mount -o remount,exec /var/lib/gib
Pemeriksa Konfigurasi Tamu tidak dapat menemukan file konfigurasi
Entri log seperti ini muncul saat Pemeriksa Konfigurasi tamu tidak dapat menemukan file konfigurasi untuk digunakan.
... NCCL WARN cannot find config file at default paths; you must specify NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE
... NCCL WARN NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE does not exist: /path/to/guest_config.txtpb
Untuk mengatasi masalah ini, Anda dapat menetapkan variabel lingkungan NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE agar menunjuk ke lokasi guest_config.txtpb. Lokasi default penginstal NCCL/gIB untuk file konfigurasi adalah /usr/local/gib/configs/guest_config.txtpb.
Sebaiknya jangan nonaktifkan Pemeriksa Konfigurasi tamu karena membantu memastikan praktik terbaik dan konfigurasi yang tepat. Namun, jika perlu, Anda dapat menonaktifkan Pemeriksa Konfigurasi tamu dengan menyetel variabel lingkungan NCCL_SHIMNET_SHIM_LAYERS ke UNUSED.
Pemeriksa Konfigurasi Tamu menerapkan atau merekomendasikan setelan
Error berikut terjadi jika variabel lingkungan NCCL/gIB tidak ditetapkan seperti yang direkomendasikan.
# The guest Config Checker enforcing an environment variable.
# This ends the workload.
... NCCL WARN NCCL/NET (shim) mismatch enforced: NCCL_P2P_NVL_CHUNKSIZE=524288 (expected 262144)
# The guest Config Checker recommending an environment variable.
# This does not end the workload.
... NCCL WARN NCCL/NET (shim) mismatch recommended: NCCL_MAX_P2P_NCHANNELS=8 (expected unset)
Untuk mengatasi masalah ini:
- Ikuti panduan log Pemeriksa Konfigurasi tamu.
- Verifikasi variabel lingkungan NCCL/gIB.
Tuner tidak dapat menemukan file konfigurasi
Error berikut terjadi saat plugin tuner tidak dapat menemukan file konfigurasi yang akan digunakan.
... NCCL WARN No NCCL_TUNER_CONFIG_PATH provided. Please populate NCCL_TUNER_CONFIG_PATH to use config-based tuner plugin.
Untuk mengatasi masalah ini:
- Tetapkan variabel lingkungan
NCCL_TUNER_CONFIG_PATHagar menunjuk ke lokasituner_config.txtpb. Lokasi default penginstal NCCL/gIB untuk file konfigurasi adalah/usr/local/gib/configs/guest_config.txtpb. - Verifikasi variabel lingkungan NCCL/gIB.
Versi glibc tidak memadai
Error berikut terjadi saat versi glibc lokal distribusi Anda terlalu lama, kemungkinan besar karena distribusi Linux di lingkungan lokal Anda terlalu lama. Biner NCCL/gIB memerlukan glibc versi 2.29.
/usr/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /usr/local/gib/lib64/libnccl.so.2)
Untuk mengatasi masalah ini, upgrade distribusi image Anda (misalnya Ubuntu 20.04 atau yang lebih baru, RockyLinux 9 atau yang lebih baru).
Pesan terpotong
Error berikut terjadi saat Anda menggunakan versi NCCL campuran di seluruh peringkat.
... NCCL WARN Message truncated : received ### bytes instead of ###
Untuk mengatasi masalah ini, periksa Versi NCCL dan gIB Anda. Jika Anda menggunakan GKE, periksa atau instal ulang daemonset penginstal NCCL/gIB (lihat petunjuk untuk A3U dan A4 atau petunjuk untuk A4X).
libibverbs tidak dapat memuat konfigurasi penyedia
Error berikut terjadi jika Anda tidak memasang direktori yang berisi biner gIB ke /usr/local/gib. Hal ini tidak akan menyebabkan kegagalan beban kerja. Namun, NCCL akan kembali menggunakan TCP dan dapat menyebabkan performa yang buruk.
libibverbs: Warning: couldn't open config directory '/usr/local/gib/rdma-core/build/etc/libibverbs.d'.
Untuk mengatasi masalah ini, jika Anda menggunakan GKE, periksa manifes workload Anda.
ibv_modify_qp errors
Ada sejumlah error yang dapat Anda temui saat plugin jaringan gIB menyiapkan QP untuk transaksi jaringan yang sebenarnya.
Argumen tidak valid (errno 22)
Error berikut terjadi karena salah satu alasan berikut:
- Ujung QP lainnya memiliki tabel GID yang rusak.
- Variabel lingkungan NCCL/gIB salah dikonfigurasi, terutama
NCCL_IB_GID_INDEX,NCCL_IB_TC, danNCCL_IB_FIFO_TC.
... NCCL WARN Call to ibv_modify_qp failed with error Invalid argument errno 22
Untuk mengatasi masalah ini:
- Cari error
ibv_modify_qplainnya dengan tanda tanganNo data available error 61, lalu ikuti petunjuk mitigasi untuk error 61. - Verifikasi variabel lingkungan NCCL/gIB.
Data tidak tersedia (errno 61)
Error berikut terjadi karena salah satu alasan berikut:
- VM ini memiliki tabel GID yang rusak.
- Variabel lingkungan NCCL/gIB salah dikonfigurasi, terutama
NCCL_IB_GID_INDEX,NCCL_IB_TC, danNCCL_IB_FIFO_TC.
... NCCL WARN Call to ibv_modify_qp failed with error No data available errno 61
Untuk mengatasi masalah ini, periksa terlebih dahulu penyebabnya:
Jika tabel GID rusak, coba mitigasi berikut:
- (Jangka pendek) Mulai ulang pengelola jaringan (misalnya
networkd) di VM hingga alamat IP antarmuka yang bermasalah diperbarui.- Anda dapat memulai ulang
networkddi VM menggunakansudo systemctl restart systemd-networkd. - Anda dapat melihat alamat IP semua antarmuka menggunakan
ip a. - Periksa bahwa tabel GID telah dipulihkan.
- Anda dapat memulai ulang
- Hubungi Dukungan Google untuk mendapatkan bantuan terkait solusi jangka panjang.
Waktu koneksi habis (errno 110)
Error berikut terjadi jika ada masalah konektivitas dasar antar-VM.
... NCCL WARN Call to ibv_modify_qp failed with error Connection timed out errno 110
Untuk menyelesaikan masalah ini, hubungi Dukungan Google untuk mendapatkan bantuan.
QP Mendapatkan Penyelesaian dengan Error
Error berikut terjadi karena salah satu alasan berikut:
- Masalah koneksi RDMA yang mendasarinya (link flapping, dll.).
- Variabel lingkungan NCCL/gIB salah dikonfigurasi, terutama
NCCL_IB_TIMEOUTdanNCCL_IB_RETRY_CNT.
... NCCL WARN NET/gIB : Got completion from peer 192.168.0.9<55224> with status=12 opcode=0 len=0 vendor err 129 (Recv) localGid ::ffff:192.168.3.6 remoteGids::ffff:192.168.3.9
Untuk menyelesaikan masalah ini, hubungi Dukungan Google untuk mendapatkan bantuan.