Alibaba Collective Communication Library (ACCL) adalah pustaka komunikasi kolektif yang dikembangkan oleh Alibaba Cloud berdasarkan Nvidia Collective Communication Library (NCCL). Pustaka ini memanfaatkan kemampuan jaringan dan keahlian mendalam dari Alibaba Cloud dalam optimasi komunikasi untuk pekerjaan model berskala besar, memberikan peningkatan performa komunikasi. ACCL juga mencakup diagnosis kesalahan dan pemulihan mandiri. Topik ini menjelaskan fitur utama ACCL dan cara menginstalnya.
Fitur canggih yang didukung oleh ACCL
ACCL mendukung berbagai fitur canggih yang dapat diaktifkan atau dinonaktifkan menggunakan variabel lingkungan:
Memperbaiki bug yang ditemukan di versi open-source NCCL;
Mengoptimalkan operator dan ukuran pesan untuk komunikasi kolektif, menawarkan performa unggul dibandingkan NCCL open-source;
Menyediakan analisis statistik komunikasi kolektif selama pelatihan untuk membantu mendiagnosis perlambatan dan gangguan akibat titik kegagalan perangkat. Saat digunakan bersama dengan AIMaster: Elastic fault tolerance engine dan C4D: Model training job diagnosis tool dari Alibaba Cloud PAI, memungkinkan deteksi anomali cepat dan toleransi kesalahan otomatis;
Mendukung transmisi multi-jalur dan load balancing untuk mengurangi atau menghilangkan kemacetan dalam kluster pelatihan yang disebabkan oleh hashing tidak merata, sehingga meningkatkan throughput pelatihan secara keseluruhan.
Batasan
ACCL harus diinstal sebelum menyerahkan pekerjaan DLC dengan sumber daya Lingjun dan gambar kustom di wilayah tempat Sumber daya Lingjun tersedia.
Instal pustaka ACCL
Gambar resmi yang disediakan oleh Lingjun sudah terinstal ACCL. Jika Anda menggunakan gambar resmi Lingjun untuk menyerahkan pekerjaan DLC, langkah-langkah berikut tidak diperlukan.
Langkah 1: Periksa apakah pustaka NCCL yang digunakan oleh Pytorch dalam gambar bersifat dinamis
Di dalam kontainer gambar kustom, ikuti langkah-langkah berikut:
Tentukan lokasi pustaka PyTorch.
Jika Anda mengetahui jalur tempat PyTorch diinstal, cari di dalam jalur tersebut. Sebagai contoh, jika PyTorch berada di
/usr/local/lib, gunakan perintah berikut untuk menemukan filelibtorch.so:find /usr/local/lib -name "libtorch*" # Contoh hasil: /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchcuda.so /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch.so /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchbindtest.soPeriksa dependensi pada pustaka NCCL dari pustaka PyTorch dengan perintah
ldd.ldd libtorch.so | grep ncclJika hasil serupa dikembalikan, pustaka NCCL bersifat dinamis dan Anda dapat melanjutkan untuk mengunduh serta menginstal ACCL.
libnccl.so.2=>/usr/lib/x86_64-linux-gnu/libnccl.so.2(0x00007feab3b27000)Jika tidak ada hasil yang dikembalikan, NCCL bersifat statis dan Anda tidak dapat menginstal ACCL. Anda perlu membuat gambar kustom berdasarkan gambar NVIDIA NGC resmi atau beralih ke versi PyTorch yang bergantung pada pustaka NCCL dinamis.
Langkah 2: Periksa versi CUDA yang digunakan dalam gambar
Di dalam kontainer gambar kustom, gunakan perintah berikut untuk memverifikasi versi CUDA:
nvidia-smiKeluaran di bawah ini menunjukkan bahwa versi CUDA adalah 12.2. Pastikan untuk merujuk ke versi aktual yang dikembalikan oleh perintah Anda.
Langkah 3: Unduh ACCL yang sesuai dengan versi CUDA
Tautan unduhan untuk ACCL:
Versi CUDA | Tautan unduhan ACCL |
12.8 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.8/lib/libnccl.so.2 |
12.6 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.6/lib/libnccl.so.2 |
12.5 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.5/lib/libnccl.so.2 |
12.4 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.4/lib/libnccl.so.2 |
12.3 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2 |
12.2 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.2/lib/libnccl.so.2 |
12.1 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.1/lib/libnccl.so.2 |
11.8 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.8/lib/libnccl.so.2 |
11.7 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.7/lib/libnccl.so.2 |
11.4 | http://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.4/lib/libnccl.so.2 |
Untuk mengunduh ACCL yang sesuai dengan versi CUDA Anda dalam kontainer gambar kustom, gunakan perintah berikut. Dalam contoh berikut, versi CUDA adalah 12.3:
wget http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2Langkah 4: Instal ACCL
Sebelum menginstal ACCL, periksa apakah NCCL telah diinstal di sistem Anda. Jalankan perintah berikut untuk memeriksa apakah file libnccl.so.2 ada:
sudo find / -name "libnccl.so.2"Bergantung pada hasil pencarian, ambil salah satu tindakan berikut:
Jika file
libnccl.so.2tidak ditemukan, atau jika file tersebut berada di direktori sistem/usr/lib64atau/lib64, gunakan perintahcpuntuk menyalin filelibnccl.so.2yang baru diunduh ke direktori sistem yang sesuai.sudo cp -f ./libnccl.so.2 /usr/lib64Jika file libnccl.so.2 ditemukan di direktori non-standar, seperti /opt/xxx/, ini mungkin menunjukkan jalur instalasi NCCL kustom. Gunakan perintah
cpuntuk menimpa file yang ada dengan filelibnccl.so.2yang baru diunduh.sudo cp -f libnccl.so.2 /opt/xxx/
Langkah 5: Segarkan pustaka dinamis
Segarkan cache pustaka dinamis dengan perintah berikut:
sudo ldconfigLangkah 6: Periksa apakah ACCL dimuat
Serahkan pekerjaan DLC menggunakan gambar kustom. Untuk informasi lebih lanjut, lihat Serahkan pekerjaan pelatihan.
Periksa log pekerjaan. Jika log startup menampilkan informasi versi ACCL, pustaka ACCL telah dimuat. Untuk informasi tentang cara memeriksa log pekerjaan, lihat Lihat pekerjaan pelatihan.
CatatanPastikan log mencakup pengenal
accl-n. Jika tidak, ACCL tidak dimuat.Versi NCCL 2.20.5.7-accl-n+cuda12.4, COMMIT_ID Zeaa6674c2f1f896e3a6bbd77e85231e0700****, WAKTU_BANGUN 2024-05-10 15:40:56
Konfigurasi variabel lingkungan yang direkomendasikan
Berdasarkan pengalaman luas tim PAI dengan ACCL, berikut adalah daftar variabel lingkungan yang dapat meningkatkan throughput komunikasi di berbagai pengaturan:
export NCCL_IB_TC=136
export NCCL_IB_SL=5
export NCCL_IB_GID_INDEX=3
export NCCL_SOCKET_IFNAME=eth
export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5
export NCCL_IB_TIMEOUT=22
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_MIN_NCHANNELS=4
export NCCL_NET_PLUGIN=none
export ACCL_C4_STATS_MODE=CONN
export ACCL_IB_SPLIT_DATA_NUM=4
export ACCL_IB_QPS_LOAD_BALANCE=1
export ACCL_IB_GID_INDEX_FIX=1
export ACCL_LOG_TIME=1Tabel berikut menjelaskan variabel lingkungan utama:
Variabel lingkungan | Deskripsi |
NCCL_IB_TC | Menentukan aturan pemetaan jaringan yang digunakan oleh Alibaba Cloud. Jika parameter ini tidak diatur atau tidak valid, performa jaringan mungkin terpengaruh. |
NCCL_IB_GID_INDEX | GID untuk penggunaan protokol RDMA. Jika parameter ini tidak diatur atau tidak valid, NCCL mungkin mengalami kesalahan. |
NCCL_SOCKET_IFNAME | Port untuk NCCL membangun koneksi. Spesifikasi yang berbeda memerlukan port yang berbeda. Jika parameter ini tidak diatur atau tidak valid, NCCL mungkin gagal membangun koneksi. |
NCCL_DEBUG | Tingkat log NCCL. Atur parameter ini ke INFO untuk lebih banyak log dan pemecahan masalah yang efisien. |
NCCL_IB_HCA | Kartu antarmuka jaringan untuk komunikasi RDMA. Jika parameter ini tidak diatur atau tidak valid, performa jaringan mungkin terpengaruh. |
NCCL_IB_TIMEOUT | Waktu batas waktu koneksi RDMA, yang dapat meningkatkan toleransi kesalahan selama pekerjaan pelatihan. Jika parameter ini tidak diatur atau tidak valid, gangguan mungkin terjadi. |
NCCL_IB_QPS_PER_CONNECTION | Jumlah pasangan antrian per koneksi. Anda dapat meningkatkan jumlah ini secara tepat untuk meningkatkan throughput jaringan secara signifikan. |
NCCL_NET_PLUGIN | Plugin jaringan untuk NCCL. Kami merekomendasikan Anda mengatur parameter ini ke none, agar plugin lain tidak dimuat untuk memastikan performa. |
ACCL_C4_STATS_MODE | Granularitas informasi statistik ACCL. Kami merekomendasikan Anda mengatur parameter ini ke CONN, yang mengumpulkan statistik berdasarkan koneksi. |
ACCL_IB_SPLIT_DATA_NUM | Menentukan apakah akan membagi data di beberapa pasangan antrian untuk transmisi. |
ACCL_IB_QPS_LOAD_BALANCE | Menentukan apakah akan mengaktifkan load balancing. |
ACCL_IB_GID_INDEX_FIX | Menentukan apakah akan secara otomatis memeriksa dan melewati anomali GID sebelum inisiasi pekerjaan. Atur parameter ini ke 1 untuk mengaktifkannya. |
ACCL_LOG_TIME | Menentukan apakah akan menambahkan waktu ke entri log untuk pemecahan masalah. Atur parameter ini ke 1 untuk mengaktifkannya. |