Hazırlayan: Openzeka Teknoloji A.Ş. — NVIDIA Türkiye & MEA Resmî Embedded Compute Distribütörü ve NVIDIA Elite Partner
Test platformu: 8× NVIDIA DGX Spark (GB10) · Model: DeepSeek-V4.1-Flash (763B) · Rapor tarihi: Eylül 2026
İçindekiler
- 1. Giriş
- 2. Donanım
- 3. Docker Image’lar
- 4. TP8 Optimizasyonları
- 5. Yapılandırma
- 6. Bellek Analizi
- 7. Performans Sonuçları
- 8. Karşılaştırmalı Analiz
- 9. SLO ve Kapasite
- 10. Öğrenilen Dersler
- 11. Sonuç
- Ek A: Doğrulama Komutları
1. Giriş
Bu rapor, DeepSeek-V4.1-Flash (763B MoE) modelinin 8× NVIDIA DGX Spark (GB10) üzerinde tensor-parallel (TP=8) dağıtımını belgeler. 4× DGX Spark TP4 dağıtım raporunun devamıdır; model mimarisi, vLLM build zinciri ve SM 12.1a patch’leri orada açıklanmıştır ve burada tekrar edilmeyecektir.
İki yapılandırma test edilmiştir:
- TP8-300K (Engram bellekte): 300K bağlam, Engram tabloları pinned host belleğine stock vLLM ile yüklenir, GMU 0.80, AutoTuner kapalı.
- TP8-1M (Engram diskte): 1M bağlam, Engram tabloları yerel NVMe’de Engram-on-disk patch’i ile tutulur, GMU 0.75, AutoTuner açık.
Her iki yapılandırma da DSpark k=5 speculative decoding, CUDA graphs (FULL_AND_PIECEWISE modu) ve vision + araç çağırma (tool calling) destekini kullanır.
Neden iki yapılandırma? Engram-on-disk patch’i satırları forward öncesinde GPU belleğine stage eder ve CUDA graph capture’ı etkinleştirir — ancak 300K bağlamda 8 rank ile birleşik bellekte Engram’ı pinned host belleğinde tutmak için yeterli yer vardır. 300K-bellek yapılandırması, bağlam sınırlıyken stock yolun daha hızlı olup olmadığını test eder. 1M-disk yapılandırması ise maksimum bağlam tavanını test eder.
2. Donanım
| Bileşen | Değer |
|---|---|
| GPU | Blackwell mimarisi (GB10), SM 12.1a (CC 12.1), 48 SM |
| GPU belleği | Düğüm başına 128 GB unified LPDDR5X (CPU+GPU paylaşımlı) |
| Bellek bant genişliği | Düğüm başına ~273 GB/s (unified) |
| FP4 tepe (seyreklik ile) | Düğüm başına ~1 PFLOP |
| CPU | Düğüm başına 20 çekirdekli Arm (10× Cortex-X925 + 10× Cortex-A725) |
| Node interconnect | NVIDIA ConnectX-7, 200 Gb/s RDMA (QSFP) |
| Depolama | 8× NVMe SSD (1× 1 TB + 7× 4 TB, 8 düğüm genelinde) |
| Ağ topolojisi | 200 GbE switch (NVLink yok; all-reduce Ethernet üzerinden) |
8 düğüm × 128 GB = küme genelinde 1024 GB toplam birleşik bellek.
3. Docker Image’lar
TP4 dağıtımıyla aynı base’den üretilen iki image kullanılır (vllm-dsv41:latest).
3.1 vllm-dsv41:latest (7 patch, Engram-on-disk)
TP8-1M yapılandırması tarafından kullanılır. TP4 image’ı ile aynıdır — Engram-on-disk dahil 7 SM 12.1a patch’inin hepsi gömülüdür. Tam patch listesi ve build talimatları için TP4 dağıtım raporu, Bölüm 4‘e bakınız.
3.2 vllm-dsv41:engram-mem (4 patch, Engram bellekte)
TP8-300K yapılandırması tarafından kullanılır. vllm-dsv41:latest üzerine, üç Engram patch dosyası stock vLLM’e restore edilerek üretilir:
FROM vllm-dsv41:latest
COPY vllm/vllm/models/deepseek_v4_1/common/engram.py /usr/local/lib/python3.12/dist-packages/vllm/models/deepseek_v4_1/common/engram.py
COPY vllm/vllm/model_executor/model_loader/weight_utils.py /usr/local/lib/python3.12/dist-packages/vllm/model_executor/model_loader/weight_utils.py
COPY vllm/vllm/models/deepseek_v4_1/nvidia/model_state.py /usr/local/lib/python3.12/dist-packages/vllm/models/deepseek_v4_1/nvidia/model_state.py
ENTRYPOINT []
Kalan 4 patch (attention, FlashInfer sparse, SWA, sparse indexer) korunur. Stock Engram işleyişiyle tablolar pinned host belleğine yüklenir ve forward her adımda bir host round-trip yapar — CUDA graph’ler Engram lookup’ı capture edemez.
| Image | Engram.py | model_state.py | weight_utils.py | attention.py | flashinfer_sparse.py | sparse_swa.py | sparse_attn_indexer.py |
|---|---|---|---|---|---|---|---|
vllm-dsv41:latest |
patch’li | patch’li | patch’li | patch’li | patch’li | patch’li | patch’li |
vllm-dsv41:engram-mem |
stock | stock | stock | patch’li | patch’li | patch’li | patch’li |
4. TP8 Optimizasyonları
TP=8, 8-rank NCCL iletişimi sunar ve bu, TP=4’te gerekmeyen optimizasyonlar gerektirir.
4.1 NCCL Kanal Azaltma
TP=8’de NCCL default olarak 64 kanal kullanır — rank başına yaklaşık 37 GB overhead. Üç environment variable bunu azaltır:
| Ayar | Değer | Etki |
|---|---|---|
NCCL_MAX_NCHANNELS |
8 |
64 → 8 kanal (rank başına ~26 GB tasarruf) |
NCCL_BUFFSIZE |
1048576 |
4 MiB → 1 MiB buffer |
NCCL_NVLS_ENABLE |
0 |
GB10’da NVLink SHARP yok |
4.2 Container Limitleri
| Ayar | Değer | Sebep |
|---|---|---|
ulimit: nofile |
1048576:1048576 |
NCCL 2.30 8-rank socket accept limiti |
ulimit: memlock |
-1:-1 |
RDMA memory pinning (ibv_reg_mr) |
ulimit: stack |
67108864 |
64 MB stack |
cap_add: IPC_LOCK |
— | RDMA memory pinning capability |
memory_limit |
112g |
OS için 9 GB bırak (121 GB toplam) |
memlock=-1:-1 ve IPC_LOCK olmadan NCCL init ibv_reg_mr_iova2 failed with error Cannot allocate memory hatasıyla başarısız olur.
4.3 NCCL Environment
NCCL_IB_ROCE_VERSION_NUM: '2' # RoCE v2
NCCL_IB_ADDR_FAMILY: 'AF_INET' # IPv4
NCCL_NVLS_ENABLE: '0' # GB10'da NVLink SHARP yok
NCCL_IB_MERGE_NICS: '0' # NIC merge kapalı
NCCL_CROSS_NIC: '1' # Çapraz NIC
NCCL_IGNORE_CPU_AFFINITY: '1' # CPU affinity ignore
NCCL_CUMEM_ENABLE: '0' # NCCL cumem kapalı
TORCH_NCCL_ASYNC_ERROR_HANDLING: '1'
NCCL_DEBUG: 'WARN'
5. Yapılandırma
5.1 TP8-300K (Engram bellekte)
| Parametre | Değer | Açıklama |
|---|---|---|
| Image | vllm-dsv41:engram-mem |
Stock Engram işleyişi |
tensor_parallel |
8 | 8 düğüm × 1 GPU |
gpu_memory_utilization |
0.80 | %80 GMU |
max_model_len |
300000 | 300K bağlam |
max_num_seqs |
8 | Maksimum 8 eşzamanlı dizi |
max_num_batched_tokens |
8192 | Prefill batch boyutu |
block_size |
128 | KV önbellek blok boyutu |
distributed-executor-backend |
mp | Multiprocess backend |
| AutoTuner | kapalı (VLLM_FLASHINFER_AUTOTUNE: '0') |
OOM spike’ı önler |
5.2 TP8-1M (Engram diskte)
| Parametre | Değer | Açıklama |
|---|---|---|
| Image | vllm-dsv41:latest |
Engram-on-disk patch aktif |
tensor_parallel |
8 | 8 düğüm × 1 GPU |
gpu_memory_utilization |
0.75 | %75 GMU (1M KV için daha düşük) |
max_model_len |
1048576 | 1M bağlam |
max_num_seqs |
8 | Maksimum 8 eşzamanlı dizi |
max_num_batched_tokens |
8192 | Prefill batch boyutu |
block_size |
128 | KV önbellek blok boyutu |
distributed-executor-backend |
mp | Multiprocess backend |
DSV41_ENGRAM_DISK |
1 | Engram satırları yerel NVMe’de |
| AutoTuner | açık (default) | Yeterli bellek boşluğu |
5.3 Speculative Decoding (her ikisi)
{
"method": "dspark",
"num_speculative_tokens": 5,
"draft_sample_method": "probabilistic",
"rejection_sample_method": "block",
"enable_adaptive_verification": false
}
5.4 Çalıştırma Komutu
# TP8-300K (Engram bellekte)
sparkrun run /home/nvidia/.cordatus-sparkrun/recipes/deepseek-v41-flash-tp8.yaml \
--hosts 192.168.1.153,192.168.1.147,192.168.1.157,192.168.1.158,192.168.1.161,192.168.1.162,192.168.1.166,192.168.1.148 \
--foreground
# TP8-1M (Engram diskte)
sparkrun run /home/nvidia/.cordatus-sparkrun/recipes/deepseek-v41-flash-tp8-1m.yaml \
--hosts 192.168.1.153,192.168.1.147,192.168.1.157,192.168.1.158,192.168.1.161,192.168.1.162,192.168.1.166,192.168.1.148 \
--foreground
6. Bellek Analizi
6.1 TP8-300K (Engram bellekte)
| Bileşen | GB/rank |
|---|---|
| Model (GPU) | 49.55 |
| Engram (pinned host) | 23.60 |
| NCCL (8 kanal) | ~11 |
| CUDA graphs | ~1.5 |
| Toplam | ~85.5 |
| GMU=0.80 bütçe | 96.8 |
| KV önbellek | ~8.7 GB (1.46M token) |
6.2 TP8-1M (Engram diskte)
| Bileşen | GB/rank |
|---|---|
| Model (GPU, Engram’sız) | 38 |
| NCCL (8 kanal) | ~11 |
| AutoTune spike | ~10 |
| CUDA graphs | ~1.5 |
| Toplam | ~60.5 |
| GMU=0.75 bütçe | 90.75 |
| KV önbellek | ~30 GB |
| 1M bağlam gereksinimi | ~3.7 GB |
| Boş headroom | ~26 GB |
Engram-on-disk yapılandırması, KV önbellek için önemli ölçüde daha fazla bellek bırakır (~30 GB vs ~8.7 GB) ve bu da 1M bağlamı mümkün kılar. Bedel, decode adımı başına disk I/O gecikmesidir.
7. Performans Sonuçları
7.1 TP8-300K (Engram bellekte)
Ölçümler CordatusAI/llm-benchmark aracı ile alınmıştır.
| Concurrency | TTFT (ms) | ITL (ms) | TPS (tok/s) | Latency (s) | Throughput (RPS) |
|---|---|---|---|---|---|
| 1 | 213.19 | 26.67 | 35.98 | 3.60 | 0.28 |
| 2 | 279.55 | 33.87 | 28.21 | 4.58 | 0.22 |
| 4 | 370.36 | 48.16 | 20.10 | 6.49 | 0.15 |
| 8 | 488.22 | 71.12 | 13.63 | 9.52 | 0.11 |
7.2 TP8-1M (Engram diskte)
| Concurrency | TTFT (ms) | ITL (ms) | TPS (tok/s) | Latency (s) | Throughput (RPS) |
|---|---|---|---|---|---|
| 1 | 198.54 | 29.06 | 33.28 | 3.89 | 0.26 |
| 2 | 301.32 | 35.92 | 26.76 | 4.86 | 0.21 |
| 4 | 400.58 | 56.68 | 17.07 | 7.60 | 0.13 |
| 8 | 553.68 | 82.54 | 11.74 | 11.04 | 0.09 |
7.3 Grafikler — TP8-300K (Engram bellekte)





7.4 Grafikler — TP8-1M (Engram diskte)





7.5 Değerlendirme
- TP8-300K, her concurrency seviyesinde TP8-1M’den daha hızlıdır (C=1’de 35.98 vs 33.28). 1M yapılandırmasında Engram diskte olmasına rağmen CUDA graph avantajı, 1M bağlam overhead’i ve AutoTuner profiling maliyeti tarafından aşılır.
- C=1’de TTFT, 1M yapılandırmasında daha düşüktür (199 ms vs 213 ms) — Engram-on-disk yolu, prefill sırasında host round-trip’ini önler.
- Max C = 4 (her iki yapılandırma için, Benchmark Gezgini’nin varsayılan hedeflerinde: TTFT≤1000ms, TPS≥15) — TP4 kapasitesinin (Max C=2) iki katı.
- TPS düşüşü C=1’den C=8’e: %62 (300K), %65 (1M) — küme doygunluğa yaklaşırken bellek bant genişliği çekişmesi.
8. Karşılaştırmalı Analiz
8.1 TP4 vs TP8 vs B300
| Concurrency | TP4 TPS | TP8-300K TPS | TP8-1M TPS | B300 TPS |
|---|---|---|---|---|
| 1 | 29.48 | 35.98 | 33.28 | 284.54 |
| 2 | 21.32 | 28.21 | 26.76 | 294.56 |
| 4 | 13.09 | 20.10 | 17.07 | 252.60 |
| 8 | 8.79 | 13.63 | 11.74 | 209.41 |
TP8-300K, C=1’de TP4’ten %22 daha hızlıdır (35.98 vs 29.48) ve C=8’de %55 daha hızlıdır (13.63 vs 8.79). Ölçekleme sublineerdir çünkü model bellek bant genişliği sınırlıdır ve TP=8, 8 düğüm arası all-reduce overhead’i ekler.
B300, C=1’de TP8-300K’den hâlâ ~8× daha hızlıdır (284.54 vs 35.98) — HBM3e bant genişliği farkı (~8 TB/s vs 273 GB/s) baskın gelir.
8.2 TTFT Karşılaştırması
| Concurrency | TP4 TTFT (ms) | TP8-300K TTFT (ms) | TP8-1M TTFT (ms) |
|---|---|---|---|
| 1 | 271.63 | 213.19 | 198.54 |
| 2 | 395.75 | 279.55 | 301.32 |
| 4 | 577.41 | 370.36 | 400.58 |
| 8 | 805.89 | 488.22 | 553.68 |
TP8, tüm concurrency seviyelerinde TTFT’yi %21-39 oranında düşürür — prefill hesaplama sınırlıdır (compute-bound) ve 8 rank daha fazla toplam FLOPS sağlar.
9. SLO ve Kapasite
Benchmark Gezgini’nin varsayılan hedeflerinde (TTFT≤1000ms, TPS≥15 tok/s), her iki TP8 yapılandırması Max C = 4 verir — TP4 kapasitesinin (Max C=2) iki katı:
| SLO | Eşik | TP8-300K C=4 | TP8-1M C=4 |
|---|---|---|---|
| TTFT | ≤ 1000 ms | 370 ms ✓ | 401 ms ✓ |
| TPS | ≥ 15 tok/s | 20.10 ✓ | 17.07 ✓ |
Uyarı: C=8’de TPS, her iki yapılandırma için de 15 tok/s eşiğinin altına düşer (13.63 ve 11.74). İnteraktif sohbet servisleri için 4 eşzamanlı kullanıcı önerilir; daha yüksek yük için veri merkezi donanımı (B300/GB300) tercih edilmelidir.
10. Öğrenilen Dersler
- NCCL 8-rank overhead’i büyüktür. Default 64 kanal, rank başına ~37 GB tüketir.
NCCL_MAX_NCHANNELS=8veNCCL_BUFFSIZE=1048576bunu ~11 GB’a düşürür — olmadan model belleğe sığmaz. memlock=-1veIPC_LOCK8-rank RDMA için zorunludur. Olmadan NCCL initibv_reg_mr_iova2 failed with error Cannot allocate memoryhatasıyla başarısız olur.nofile=1048576NCCL 2.30 için gereklidir. 8-rank socket accept, container’ın default 1024 soft limitini aşar.- Engram-on-disk, C=1 TTFT’de paradoksal olarak daha hızlıdır (199 ms vs 213 ms) — Engram-on-disk yolu satırları forward öncesinde stage eder ve stock Engram-bellekte yolunun her adımda yaptığı host round-trip’ini önler.
- AutoTuner OOM’a sebep olabilir.
VLLM_FLASHINFER_AUTOTUNE: '0'FlashInfer autotune’u kapatır ama DeepGEMM/CUTLASS mxfp8_gemm autotune’ını kapatmaz; bu da profiling sırasında ~10 GB tüketir. 1M yapılandırmasında yeterli headroom vardır; 300K yapılandırmasında kapatılır. - sparkrun cluster yönetimi.
sparkrun cluster set-default <name>aktif cluster’ı değiştirir;sparkrun cluster defaultyalnızca görüntüler. - Docker
ENTRYPOINT []zorunludur. Stockvllm/vllm-openaiimage’ındaENTRYPOINT ["vllm","serve"]vardır ve sparkrun komutunu append etmeyi engeller. Final image’da entrypoint temizlenmelidir.
11. Sonuç
- DeepSeek-V4.1-Flash (763B), 8× DGX Spark üzerinde TP=8 ile çalışır — daha büyük cluster, kullanılabilir concurrency’yi ikiye katlar (TP4’te Max C=2, TP8’de Max C=4) ve TPS’yi %22-55 oranında artırır.
- İki yapılandırma farklı kullanım senaryolarına hizmet eder. TP8-300K (Engram bellekte) sınırlı bağlam iş yükleri için daha hızlıdır; TP8-1M (Engram diskte) kabul edilebilir performansla tam 1M bağlam tavanını etkinleştirir.
- NCCL optimizasyonu TP8’in kritik deltasıdır. Kanal azaltma ve uygun ulimit’ler olmadan, 8-rank overhead’i modelin belleğe sığmasını engeller.
- TP8, veri merkezi donanımının yerini almaz. B300, C=1’de hâlâ ~8× daha hızlıdır, ancak TP8, 763B modeli TP4 üzerinden 4× kapasite artışına taşır — geliştirme, prototipleme ve sınırlı ekip production senaryoları için yeterli.
Ek A: Doğrulama Komutları
API Sağlığı
curl http://192.168.1.153:8000/v1/models
Basit Test
curl http://192.168.1.153:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"deepseek-v4.1-flash","max_tokens":50,
"messages":[{"role":"user","content":"Count from 1 to 10."}]}'
Openzeka Teknoloji A.Ş. — openzeka.com · Tel: +90 312 266 2055
Üniversiteler Mah. Şehit Mustafa Tayyarcan Cad. Tepe Binası No:5 İç Kapı No:315, 06800 Çankaya/Ankara, Türkiye
Bu rapor CordatusAI/llm-benchmark aracı ile üretilen ölçümlerden oluşturulmuştur. Dağıtım reçetesi tonyd2wild/DeepSeek-V4.1-Flash-vLLM-DGX-Spark boot10 config’inden ve im0xMagnus/deepseek-v4.1-flash-uncensored-8x-dgx-spark TP8 port’undan uyarlanmıştır. Rapor tarihi: Eylül 2026