- DeepEP, modern ML eğitimi ve çıkarımında uzman paralelleştirmeye (EP) odaklanan yüksek performanslı bir iletişim kütüphanesidir; MoE dispatch/combine için all-to-all GPU kernel’ları ve FP8 gibi düşük hassasiyet desteği sunar
- V2 sürümü, EP’yi baştan sona yeniden düzenleyerek V1’e kıyasla çok daha az SM kaynağıyla eşdeğer veya daha iyi performans sağlar; backend’i NVSHMEM’den daha hafif NCCL Gin’e taşır
- V3 yapılandırmasına göre yapılan testlerde batch başına 8K token, hidden 7168, top 8 experts, FP8 dispatch, BF16 combine koşulları ölçüldü; V2, V1’e kıyasla en fazla 1,3 kat tepe performans ve en fazla 4 kat SM tasarrufu kaydetti
- Tüm kernel’lar hafif JIT modülleri olarak çalışma zamanında derlenir; kurulum sırasında CUDA derlemesi gerekmez ve V2, yüksek aktarım hızlı ve düşük gecikmeli API’leri tek bir
ElasticBuffer arayüzünde birleştirir
- Hopper SM90 GPU, Python 3.8+, CUDA 12.3+, PyTorch 2.10+, NCCL 2.30.4+, NVLink ve düğümler arası RDMA ağı gerekir; Engram, PP ve CP deneysel özelliklerdir
DeepEP’nin sunduğu kapsam
- DeepEP(DeepEveryParallel), modern makine öğrenimi eğitimi ve çıkarımı için yüksek performanslı bir iletişim kütüphanesidir
- Şu anki ana işlevi uzman paralelliği (Expert Parallelism, EP) olup MoE dispatch ve combine için yüksek aktarım hızlı, düşük gecikmeli all-to-all GPU kernel’ları sağlar
- FP8 dahil düşük hassasiyetli iletişimi destekler
- Pipeline paralelliği (PP), context paralelliği (CP) ve uzak bellek erişimi (Engram) için deneysel primitive’ler de içerir
- Tüm kernel’lar hafif JIT(Just-In-Time) modülleri olarak çalışma zamanında derlenir; kurulum sürecinde CUDA derlemesi gerekmez
- Hafif tasarımına rağmen çeşitli yapılandırmalarda donanım bant genişliği sınırına yaklaşan veya onu aşan performansı hedefler
V2 sürümündeki temel değişiklikler
- V2, Expert Parallelism’i tamamen yeniden düzenleyen bir sürümdür
- V1’e göre birkaç kat daha az SM kaynağıyla uç performans elde edecek şekilde tasarlanmıştır
- Daha büyük scale-up ve scale-out alanlarını destekler
- Backend, NVSHMEM’den daha hafif NCCL Gin backend’ine taşınmıştır
- Yeni özellikler şunlardır
- Tam JIT derleme
- Header-only ve hafif NCCL Gin backend
- Mevcut NCCL communicator’ların yeniden kullanılabilmesi
- EPv2’de yüksek aktarım hızlı API ile düşük gecikmeli API’nin tek bir
ElasticBuffer arayüzünde birleştirilmesi
- Yeni GEMM yerleşimi sağlanması
- En fazla EP2048’e kadar daha büyük scale-up ve scale-out alanlarının desteklenmesi
- SM ve QP sayılarının analitik olarak hesaplanması sayesinde artık otomatik ayara ihtiyaç duyulmaması
- Hem hibrit modun hem de doğrudan modun desteklenmeye devam etmesi
- V3 benzeri eski eğitimde SM kullanımını 24’ten 4~6’ya düşürürken eşdeğer veya daha iyi performansın korunması
- RDMA tabanlı 0 SM Engram
- RDMA tabanlı 0 SM PP
- Copy Engine tabanlı 0 SM CP
Kısıtlar ve geliştirilmekte olan özellikler
- V2, V1’e göre daha fazla buffer boyutu tüketir
- 0 SM RDMA düşük gecikmeli EP artık desteklenmez
- Engram, PP, CP deneysel özelliklerdir
- Geliştirilmekte olan özellikler şunlardır
- GPU ve CPU fiziksel belleğini karma eşleyen, kesintisiz bir sanal adres alanı olan Elastic GPU & CPU buffers
- Tam otomatik ve şeffaf Engram ya da dengesiz EP’yi mümkün kılmaya yöneliktir
- Yük dengesizliklerini yönetmek ve ara buffer boyutunu azaltmak için EP replay’den yararlanma çalışmaları
- DP ve TP için all-gather güncellemeleri ve reduce-scatter uygulaması
- NVSHMEM tabanlı V1 belgeleri docs/legacy.md adresinde sunulur
Performans ölçüm sonuçları
- V3 yapılandırmasına uygun olarak şu koşullarda test edilmiştir
- batch başına 8K token
- hidden dimension 7168
- top 8 experts
- FP8 dispatch
- BF16 combine
- Başlıca sonuçlar şunlardır
- SM90, CX7, EP 8 x 2: dispatch 90 GB/s RDMA, combine 81 GB/s RDMA, 12 SM
- SM90, CX7, EP 8 x 4: dispatch 61 GB/s RDMA, combine 61 GB/s RDMA, 6 SM
- SM100, CX7, EP 8 x 2: dispatch 90 GB/s RDMA, combine 91 GB/s RDMA, 12 SM
- SM100, EP 8: dispatch 726 GB/s NVLink, combine 740 GB/s NVLink, 64 SM
- SM100, EP 8: dispatch 643 GB/s NVLink, combine 675 GB/s NVLink, 24 SM
- Ölçülen değerler mantıksal bant genişliğidir; örneğin
EP 8 x 2 için 90 GB/s, local rank trafiğini içerir
- V2, V1’e kıyasla en fazla 1,3 kat tepe performansa ulaşır ve en fazla 4 kat SM sayısı tasarrufu sağlar
- Daha büyük EP yapılandırmalarının sonuçları şu anda atlanmıştır; kullanıcıların kendi benchmark’larını yapması önerilir
- Dahili deneyime göre kernel’ların ölçek büyüdüğünde de donanım bant genişliğini doyurmaya devam etmesi beklenir
- V1 performans verileri docs/legacy.md içindedir
Kurulum ve gereksinimler
- Gereksinimler şunlardır
- Hopper SM90 GPU veya SM90 PTX ISA destekli mimari
- Python 3.8 veya üzeri
- SM90 GPU için CUDA 12.3 veya üzeri
- PyTorch 2.10 veya üzeri
- NCCL 2.30.4 veya üzeri
- Düğüm içi iletişim için NVLink
- Düğümler arası iletişim için RDMA ağı
- DeepEP’nin Python ortamında NCCL’yi otomatik algılayabilmesi için NCCL’nin pip ile kurulması önerilir
pip install "nvidia-nccl-cu13>=2.30.4" --no-deps
- Eski yöntem desteği için NVSHMEM’e de bağımlıdır; kurulum talimatları için NVSHMEM Installation Guide belgesine bakın
- Geliştirme sırasında build ve test çalıştırma örnekleri şöyledir
python setup.py build
ln -s build/lib.linux-x86_64-cpython-38/deep_ep_cpp.cpython-38-x86_64-linux-gnu.so
python tests/elastic/test_ep.py
python tests/elastic/test_agrs.py
python tests/elastic/test_engram.py
python tests/elastic/test_pp.py
- Kurulum aşağıdaki komutla yapılır
python setup.py install
- Kurulumdan sonra Python projesinde
deep_ep import edilerek kullanılabilir
ElasticBuffer merkezli arayüz
- V2’de tüm EP işlemleri tek bir
ElasticBuffer arayüzü altında birleştirilmiştir
- Yüksek aktarım hızı ve düşük gecikme API’leri aynı arayüzle ele alınır
- Buffer, MoE ayarları doğrudan belirtilerek başlatılabilir
- En uygun SM sayısı ve QP sayısı analitik olarak hesaplanır
- Buffer başlatma örneğinde
ElasticBuffer.get_buffer_size_hint() ile gerekli boyut hesaplanır ve mevcut buffer’ın yeniden kullanılıp kullanılamayacağı kontrol edilir
- Yeni buffer oluşturulurken
num_max_tokens_per_rank, hidden, num_topk, use_fp8_dispatch vb. belirtilir
_buffer.get_theoretical_num_sms(num_experts, num_topk) ile iletişim kernel’ında kullanılacak teorik SM sayısı elde edilir
dispatch ve combine çağrılarında num_sms doğrudan belirtilirse hesaplanan değer geçersiz kılınabilir
Eğitim, prefill ve decoding kullanım kalıpları
- Eğitim veya çıkarım prefill aşamasında MoE dispatch, token’ları tüm rank’lerdeki ilgili expert’e yönlendirir
- BF16 ve FP8 girdileri destekler
handle, daha sonraki combine çağrısı için gereken yönlendirme metaverisini içerir
handle.num_recv_tokens_per_expert_list, GEMM için gereken expert başına token sayısını sağlar
- MoE dispatch’in backward pass’i pratikte
combine ile işlenir
- MoE combine, expert çıktılarını özgün rank’e reduce eder
- MoE combine’ın backward pass’i pratikte
dispatch ile işlenir
- İletişim ve hesaplamanın örtüşmesi
EventOverlap arayüzüyle yönetilir
- İletişim sürerken bağımsız hesaplama yapılabilir
- Sonuçlar kullanılmadan önce
event.current_stream_wait() ile compute stream senkronize edilir
- Çıkarım decoding’de de aynı
ElasticBuffer kullanılır
- gating decision değişmediğinde yönlendirme metaverisi
cached_handle ile yeniden kullanılır
- Bu kalıp, yerleşimin yeniden hesaplanmasını ve CPU senkronizasyonunu önler
Ortam değişkenleri ve build sırasında sabitlenen değerler
- Genel ayarlar
EP_BUFFER_DEBUG: buffer başlatma, SM yaklaştırması ve backend debug bilgilerini yazdırır
EP_SUPPRESS_NCCL_CHECK: NCCL sürüm uyuşmazlığı kontrolünü bastırır
EP_AVOID_RECORD_STREAM: çıktı tensor’larının record_stream kullanımından kaçınır
EP_NUM_TOPK_IDX_BITS: top-k index kodlama bit sayısını geçersiz kılar
- Ağ ayarları
EP_NIC_NAME: NIC özellik sorgusu için kullanılacak varsayılan NIC adı; varsayılan mlx5_0
EP_OVERRIDE_RDMA_SL: RDMA service level index’ini geçersiz kılar
EP_DISABLE_GIN: NCCL Gin backend’ini devre dışı bırakır
- JIT ayarları
EP_JIT_CACHE_DIR: derlenmiş kernel cache dizini; varsayılan $HOME/.deep_ep
EP_JIT_NVCC_COMPILER: NVCC derleyici yolu
EP_JIT_CPP_STANDARD: C++ standart sürümü; varsayılan 20
EP_JIT_DUMP_PTX, EP_JIT_DUMP_SASS, EP_JIT_DUMP_ASM: PTX/SASS/ASM çıktısı dökümüyle ilgili ayarlar
- Bazı ortam değişkenleri persistent olarak çalışır
- Build sırasında yakalanır ve kurulum paketinin varsayılan değeri olarak dahil edilir
- Import sırasında mevcut ortam değişkeniyle geçersiz kılınmazsa bu varsayılan otomatik uygulanır
- Hedef değişkenler
EP_JIT_CACHE_DIR, EP_JIT_PRINT_COMPILER_COMMAND, EP_NUM_TOPK_IDX_BITS, EP_NCCL_ROOT_DIR’dir
- Ek ayrıntılar için test_ep.py veya Python belgelerine bakın
Ağ yapılandırma önerileri
- DeepEP, InfiniBand ağlarında eksiksiz test edilmiştir
- Teorik olarak RDMA over Converged Ethernet, yani RoCE ile de uyumludur
- Trafik yalıtımı
- InfiniBand’in Virtual Lanes özelliğiyle desteklenir
- expert-parallel workload ile diğer workload’ların farklı virtual lane’lere ayrılması önerilir
- V2’de virtual lane ataması
sl_idx argümanı veya EP_OVERRIDE_RDMA_SL ortam değişkeniyle kontrol edilebilir
- Adaptive routing
- InfiniBand switch’lerinin trafiği birden çok yola dengeli biçimde dağıtmasını sağlayan gelişmiş bir yönlendirme özelliğidir
- Ek gecikme oluşsa bile tüm ağ yükü koşullarında etkinleştirilmesi önerilir
- Congestion control
- Maksimum bant genişliğine zarar verdiği için devre dışı bırakılır
- Tıkanıklık kaçınılmazsa ilgili workload’un düşük öncelikli bir virtual lane’e atanması önerilir
- PCI atomic mode
- Donanım destekliyorsa RDMA atomic operation performansını iyileştirmek için NIC’in
PCI_ATOMIC_MODE ayarının yapılması önerilir
sudo mlxconfig -y -d mlx5_$i set PCI_ATOMIC_MODE=4
Deneysel branch’ler ve topluluk fork’ları
- Deneysel branch’ler
- Zero-copy: PyTorch tensor’ları ile iletişim buffer’ları arasındaki kopyalamayı kaldırarak genel kernel’ların SM kullanımını büyük ölçüde azaltır
- Eager: Düşük gecikmeli protokol kullanarak RDMA atomic OP’nin eklediği extra RTT latency’yi ortadan kaldırır
- Hybrid-EP: TMA instructions kullanan yeni backend uygulaması, minimum SM kullanımı, daha büyük NVLink alanı desteği, single-batch fine-grained iletişim/hesaplama örtüşmesi, PCIe kernel’ı ve NVFP4 desteği içerir
- AntGroup-Opt: AntGroup Network Platform Department tarafından yazılmış optimizasyon serisidir
- Mori-EP: MORI backend’i tabanlı ROCm/AMD GPU düşük gecikmeli mod desteği
- nvDev: Compute Fabric Transport gibi en yeni CUDA özelliklerini içeren V2 tabanlı branch
- Topluluk fork’ları
- uccl/uccl-ep: DeepEP’nin Nvidia ve AMD gibi heterojen GPU’larda, EFA, Broadcom ve CX7 gibi NIC’lerde çalışmasını destekler
- Infrawaves/DeepEP_ibrc_dual-ports_multiQP: IBRC transport’a multi-QP çözümü ve dual-port NIC desteği ekler
- antgroup/DeepXTrace: slow rank’i verimli ve hassas biçimde bulan tanısal analiz aracı
- ROCm/mori: Wide EP, KVCache transfer, Collectives gibi performans hassasiyetli yapay zeka workload’ları için AMD’nin yeni nesil iletişim kütüphanesi
Lisans ve atıf
- DeepEP V2, NCCL Gin backend’i üzerine inşa edilmiştir
- Depo kodu MIT License ile yayımlanmıştır
- Atıf öğesi
DeepEP: an efficient expert-parallel communication library olup yıl 2025 olarak belirtilir
1 yorum
Hacker News yorumları
Belgelenmemiş PTX komutu
ld.global.nc.L1::no_allocate.L2::256Bkeşfedilip kullanılarak uç düzey performans elde edilmişBu komut, tutarlı olmayan salt okunur PTX değiştiricisi
.ncile geçici GPU belleğine eriştiği için tanımsız davranışa yol açabilirAncak Hopper mimarisinde
.L1::no_allocateile birlikte kullanıldığında doğruluğun korunduğu test edilmiş ve performansın çok daha iyi olduğu söyleniyorKendimi şekerci dükkânına girmiş çocuk gibi hissediyorum
Sadece makalelere bakarak düzgün şekilde tersine mühendislik yapmak çok uzun sürecek pek çok numara var ve umarım bu haftaki yayınlar, MoE'nin temel akademik model olarak kullanıldığı bir rönesans başlatır
İlki GPT-4'ten beri zaten tamamen MoE iken, açık modellerde DeepSeek V3 ve Mixtral dışında genelde hep yoğun modeller görüyoruz
Bu ekibi gerçekten sevmemek elde değil
Herkes için açık kaynağın sınırlarını zorluyorlar
Gerçek açık kaynak bir model görmek istiyorsanız AI2'nin OLMo 2 modeline bakın: https://allenai.org/blog/olmo2
Modeli yeniden üretmek için gereken her şeyi, verinin kendisi dahil, gerçekten paylaşıyorlar
Bağlantıda da “Tam anlamıyla açık bilim, açık ağırlıklardan daha fazlasını gerektirir; bu yüzden ağırlıklar, veri, kod, reçete, ara checkpoint'ler ve instruction tuning modellerini içeren yeni OLMo güncellemelerini daha geniş dil modelleme topluluğuyla paylaşmaktan mutluyuz” deniyor
Zuckerberg, Meta'nın yapay zekayı açık kaynak olarak yayımladığını iddia etmeyi bırakmalı
TV reklamı bile yapıyorlar ama gerçekte sadece ağırlıkları yayımlıyorlar ve kod yok
Gerçek açık kaynak yapay zeka yalnızca DeepSeek'te var
Çünkü veriyi yayımlamadılar
Açık kaynak olması için OSI'nin listelediği gibi gerçek bir açık kaynak lisansı kullanması ve ön/son eğitim kodu, tuning ile ilgili kodlar, değerlendirme kodu, güvenlik/sansürle ilgili her şey ve muhtemelen tüm eğitim verisini paylaşması gerekir
Aksi halde ağırlıkları yeniden üretmek mümkün olmaz ve ağırlık paylaşmak derlenmiş bir programı paylaşmaya benzer
Bildiğim kadarıyla rekabetçi tek gerçek açık kaynak model AI2'nin OLMo 2'si: https://allenai.org/blog/olmo2
Yakın zamanda cihaz içi çıkarım yapan bir uygulama da yayımladılar; o da açık kaynak: https://allenai.org/blog/olmoe-app
Tülu 3 adlı başka bir modelleri daha var ve DeepSeek V3'ten daha iyi performans verdiği söyleniyor: https://allenai.org/blog/tulu-3-405B
LLM eğitmek için gereken neredeyse her şey, en son teknikler dahil, onun içinde var
Daha ne gerekiyor? Meta altyapısına özel kod parçaları mı?
FREEWARE / SHAREWARE modeline geri dönmüş oluyoruz
“Açık” ağırlıklar için böyle bir ifade kullanılmalı
Verimli ve optimize edilmiş all-to-all iletişim, NVLink ve RDMA üzerinden node içi ve node'lar arası destek, eğitim ve çıkarım prefilling için yüksek throughput çekirdekleri, çıkarım decoding için düşük gecikmeli çekirdekler, yerel FP8 dispatch desteği ve hesaplama-iletişim çakışması için esnek GPU kaynak kontrolü sunuyor
X: https://x.com/deepseek_ai/status/1894211757604049133
DeepSeek'in çalışmalarının motivasyonu yanlış olabilir
Örneğin ABD'nin yapay zekadaki ilk hareket avantajını sıfırlamaya çalışan devlet destekli bir girişim gibi olabilir; ancak dünya geneline net etkisi düpedüz harika
En kötü ihtimalle, yani yanlış nedenlerle yapıyor olsalar bile, DeepSeek'e teşekkürler; OpenAI'nin yıllardır dünyaya yaptığını söyleyip yapmadığı şeyi gerçekten yapıyorlar
Bunu açık kaynak olarak yayımlamak, gelişmiş Nvidia GPU ihracat yasaklarından daha mı “yanlış”?
DeepSeek'in açık kaynak yayını muhtemelen Çin Komünist Partisi'nin onayıyla hem Çin Komünist Partisi'nin hem de daha geniş açık kaynak yapay zeka topluluğunun işine yarayan bir hamle sadece; bunu ilkesel bir duruş gibi almamak gerek
Başka ülkelerin rekabet avantajını ortadan kaldırmanın yollarını aramak, büyük küçük tüm hükümetlerin başlıca faaliyetlerinden biridir
MIT lisansı altında, gerçek Open AI™ şirketinden gelen açık kaynak yayının 2. turu bu
DeepSeek bir kez daha, kendisine “Open” diyen 157 milyar dolarlık şirketten daha açık olduğunu gösteriyor
Meta'nın Llama'sı hakkında neredeyse kimse konuşmuyor ama herkes Llama 4'ün çıkarım yetenekleriyle geleceğini beklemeli
Amaç, sıfıra doğru yarışın ortasında ezilip yok olmamak
ABD, DeepSeek'in gerçekten sadece H800 kullanıp kullanmadığını doğrulamak için Singapur'daki GPU faturalarını didiklerken, dünyanın geri kalanı bu optimizasyonları tam H100'lerde çalıştırabilecek mi yani?
ABD yaptırımları yüzünden H100 edinmek ya da erişmek zordu ve ABD kibri yüzünden kendi emirlerinin tüm dünyayı kapsadığına inanıyormuş gibi yapmaya da devam ederken?
Bunu böyle anlamak doğru mu?
Herkesin beklediği PTX bu sefer dahil mi?
csrc/kernelsdizininde bir kısmı varasmdiye aratırsanız kullanıldığı yerleri bulabilirsinizİnsanların CPU performansını son damlasına kadar sıkmak için assembly hack'lediği ya da belgelenmemiş komutlar aradığı 80'ler ve 90'ları hatırlatıyor
Bir gün derleyiciler yeterince optimize olacak ya da GPU'lar öyle güçlü hale gelecek ki, bugün CPU'larda olduğu gibi bu tür numaralar artık büyük fark yaratmayacak gibi geliyor