DeepSeek merilis pustaka open source DeepEP untuk pelatihan dan inferensi MoE
(github.com/deepseek-ai)DeepEP
DeepEP adalah pustaka komunikasi untuk Mixture-of-Experts (MoE) dan expert parallelism (EP). Pustaka ini menyediakan kernel all-to-all GPU berkecepatan tinggi dan latensi rendah, yang dikenal sebagai dispatch dan combine pada MoE. DeepEP juga mendukung komputasi presisi rendah termasuk FP8. Sesuai dengan algoritme group-limited gating yang diusulkan dalam makalah DeepSeek-V3, DeepEP menyediakan kernel yang dioptimalkan untuk transfer bandwidth domain asimetris, dengan meneruskan data dari domain NVLink ke domain RDMA. Kernel ini memberikan throughput tinggi sehingga cocok untuk pelatihan dan pekerjaan prefill inferensi. Selain itu, DeepEP juga mendukung kontrol jumlah SM (Streaming Multiprocessors). Untuk decoding inferensi yang sensitif terhadap latensi, DeepEP menyertakan kernel latensi rendah yang meminimalkan latensi dengan menggunakan RDMA murni. Pustaka ini juga memperkenalkan metode overlap komunikasi-komputasi berbasis hook yang tidak mengambil alih sumber daya SM.
Performa
Kernel umum yang menggunakan forwarding NVLink dan RDMA
- Pada H800, kernel umum diuji dengan bandwidth maksimum NVLink sekitar 160 GB/s dan kartu jaringan RDMA CX7 InfiniBand 400 Gb/s (~50 GB/s bandwidth maksimum).
- Mengikuti konfigurasi pretraining DeepSeek-V3/R1 (4096 token per batch, hidden size 7168, top-4 group, top-8 expert, dispatch FP8, dan combine BF16).
Kernel latensi rendah yang menggunakan RDMA murni
- Pada H800, kernel latensi rendah diuji dengan kartu jaringan RDMA CX7 InfiniBand 400 Gb/s (~50 GB/s bandwidth maksimum).
- Mengikuti konfigurasi produksi DeepSeek-V3/R1 yang umum (128 token per batch, hidden size 7168, top-8 expert, dispatch FP8, dan combine BF16).
Mulai cepat
Persyaratan
- GPU Hopper (dukungan untuk lebih banyak arsitektur atau perangkat mungkin ditambahkan nanti)
- Python 3.8 atau lebih baru
- CUDA 12.3 atau lebih baru
- PyTorch 2.1 atau lebih baru
- NVLink untuk komunikasi intra-node
- Jaringan RDMA untuk komunikasi antar-node
Mengunduh dan memasang dependensi NVSHMEM
DeepEP bergantung pada NVSHMEM yang telah dimodifikasi. Anda harus merujuk ke panduan instalasi untuk memasangnya.
Konfigurasi jaringan
DeepEP telah diuji sepenuhnya pada jaringan InfiniBand, dan secara teori juga kompatibel dengan RDMA over Converged Ethernet (RoCE).
Isolasi traffic
InfiniBand mendukung isolasi traffic melalui Virtual Lanes (VL). Untuk mencegah interferensi antarjenis traffic yang berbeda, disarankan untuk memisahkan pekerjaan ke virtual lane sebagai berikut:
- Pekerjaan yang menggunakan kernel umum
- Pekerjaan yang menggunakan kernel latensi rendah
- Pekerjaan lainnya
Di DeepEP, Anda dapat mengatur alokasi virtual lane dengan menetapkan variabel lingkungan NVSHMEM_IB_SL.
Adaptive routing
Adaptive routing adalah fitur routing lanjutan yang disediakan oleh switch InfiniBand, yang dapat mendistribusikan traffic secara merata ke beberapa jalur. Saat ini kernel latensi rendah mendukung adaptive routing, tetapi kernel umum belum mendukungnya (mungkin akan didukung segera). Mengaktifkan adaptive routing pada kernel umum antar-node dapat menyebabkan deadlock atau kerusakan data. Untuk kernel latensi rendah, mengaktifkan adaptive routing dapat sepenuhnya menghilangkan kemacetan jaringan akibat konflik routing, tetapi menambah latensi ekstra. Untuk performa optimal, konfigurasi berikut direkomendasikan:
- Aktifkan adaptive routing di lingkungan dengan beban jaringan tinggi
- Gunakan static routing di lingkungan dengan beban jaringan rendah
Pengendalian kemacetan
Karena tidak ada kemacetan yang signifikan yang diamati di lingkungan produksi, pengendalian kemacetan dinonaktifkan.
Antarmuka dan contoh
Menggunakan contoh untuk pelatihan model atau prefill inferensi
Kernel umum dapat digunakan pada tahap pelatihan model atau prefill inferensi (tanpa bagian backward).
Menggunakan contoh untuk decoding inferensi
Kernel latensi rendah dapat digunakan pada tahap decoding inferensi.
Hal yang perlu diperhatikan
- Demi performa ekstrem, ditemukan dan digunakan instruksi PTX yang tidak terdokumentasi,
ld.global.nc.L1::no_allocate.L2::256B. Instruksi ini memicu perilaku yang tidak terdefinisi saat mengakses memori GPU volatile menggunakan modifier PTX read-only yang tidak koheren. Namun, berdasarkan pengujian dengan.L1::no_allocatepada arsitektur Hopper, performanya meningkat jauh lebih baik. Jika kernel tidak berfungsi di platform lain, Anda dapat menonaktifkannya dengan menambahkanDISABLE_AGGRESSIVE_PTX_INSTRS=1kesetup.pyatau melaporkan issue. - Untuk performa yang lebih baik di klaster, disarankan menjalankan semua pengujian dan menggunakan konfigurasi auto-tuning yang optimal. Konfigurasi default dioptimalkan pada klaster internal DeepSeek.
Lisensi
Repositori kode ini dirilis di bawah lisensi MIT, dan kode yang merujuk ke NVSHMEM (termasuk csrc/kernels/ibgda_device.cuh dan third-party/nvshmem.patch) tunduk pada NVSHMEM SLA.
1 komentar
Komentar Hacker News
.L1::no_allocatepada arsitektur Hopper akan terjamin dan performanya akan jauh lebih baik