• Forumu şuan da Ziyaretçi olarak görüntülüyorsunuz. Forum ziyaretçileri tüm konu ve bağlantıları görüntüleyemez ve kaynaklara erişimi yoktur. Eğer üye iseniz buradan üye girişi yapın ya da burayı tıklayarak şimdi üye olun.
  • Ubden® Topluluk Projelerine, Aracılığınızla Destek Vermektedir.

    Topluluk projelerine katkı yapmak ve topluğumuza ulaşan genç girişimcilere destek olmak için Buradaki  bağlantıdan işlem kanallarına ulaşabilirsiniz.

    Desteklerinizle 9.000 kişilik bir ekosistem olduk ve büyümeye devam ediyoruz. Desteğiniz için teşekkürler.

Haber DGX Spark Üzerinde sparkrun ile Yerel GPT-OSS 120B Sunumu

  • Konbuyu başlatan Enhar Ormeci
  • Başlangıç tarihi
E

Enhar Ormeci

Misafir
Misafir
oss.webp

Bu eğitimde, tek veya birden çok DGX Spark üzerinde bir büyük dil modelini sparkrun kullanarak çalıştıracaksınız.

Spark, monitör ve klavye bağlayarak doğrudan bilgisayar olarak kullanılabileceği gibi, başka bir bilgisayarla uzaktan bağlanılan bir sunucu olarak da kullanılabilir. Biz bu eğitimde Spark’a uzaktan bağlanacağız ve gerekli yazılımları kurup modeli çalıştıracağız.

Dil modeli olarak GPT-OSS 120B (117 milyar parametreli bir Mixture-of-Experts modeli, 5.1 milyar parametre aktif, mxfp4 kuantizasyonu), çıkarım motoru olarak vLLM, ve yönetim aracı olarak sparkrun kullanacağız. vLLM, modelin eğitilmiş ağırlıklarını GPU belleğine yükleyip çalıştıracak ve dışarıdan istek kabul eden bir API sunacak. sparkrun ise komut satırı üzerinden Docker konteynerlerini ve Spark’lar arasında model dağıtımını yönetecek. Bu sayede imaj senkronizasyonu, model aktarımı ve cluster yapılandırması gibi işlemleri otomatik olacak. İkisi de ana Spark üzerinde, Docker konteynerleri içinde çalışacak.

Bu eğitim üç bölümden oluşur:

  • Kurulum: sparkrun kurulumu, Docker imajı derleme, cluster yapılandırması ve recipe oluşturma
  • Tek Sparkla Çalıştırma: Modeli tek Spark üzerinde başlatma, izleme ve test etme
  • İki Sparkla Çalıştırma: Birden çok Spark arasında modeli bölerek (tensor parallelism) çalıştırma ve performans karşılaştırması
    Tek Spark’ınız varsa “Kurulum” ve “Tek Sparkla Çalıştırma” bölümlerini inceleyin. Birden çok Spark kullanıyorsanız “Kurulum” sonrasında doğrudan “İki Sparkla Çalıştırma” bölümüne geçebilirsiniz.

Birden çok Spark kullanıyorsanız, eğitim boyunca ana cihaza Main Spark, diğer cihazlara ise Worker Spark denileceğini unutmayın.

Kurulum​

1. Spark’a Bağlanma​


Spark’a ilk kez uzaktan bağlanıyorsanız IP adresini bulmanız gerekir. Spark’a bir monitör ve klavye bağlayıp giriş yapın ve terminalden şu komutu çalıştırın:

Copy to Clipboard
ip route get 1.1.1.1 | grep -oP 'src \K\S+'


Komut, Spark’ın varsayılan ağ arayüzünün IP adresini verir:

Copy to Clipboard
192.168.1.148


Bu adresi not edin; eğitim boyunca yerine bu adresi kullanacaksınız. Alternatif olarak, NVIDIA Sync uygulamasını kontrol ederek de IP adresini bulabilirsiniz.

Birden çok Spark kullanıyorsanız, diğer her cihaz için de bu adımı tekrarlayın ve adresleri not edin. Eğitim boyunca spark-ip yerine bunları kullanacaksınız.

Birden çok Spark kullanıyorsanız,
tüm Spark’larda aynı kullanıcı adı kullanıldığına emin olmalısınız.
sparkrun, cihazlar arasında parolasız SSH kurarken kullanıcı adlarının eşleşmesine ihtiyaç duyar.
DGX OS varsayılan kullanıcı adı nvidia’dır.
Her Spark’ta kullanıcı adınızı kontrol edin:


Kullanıcı adı nvidia değilse, tüm Spark’larda bu kullanıcıyı oluşturun;

sudo useradd -m nvidia
sudo usermod -aG
sudo nvidia
sudo passwd nvidia
su – nvidia

Bu komutlar: kullanıcıyı oluşturur, sudo grubuna ekler, parola belirler ve yeni kullanıcıya geçer.
Tüm Spark’larda aynı kullanıcı adı olduğundan emin olun.

Birden çok Spark kullanıyorsanız,
cihazları QSFP kabloları ile birbirine bağlayın.
Kablo, her Spark’taki CX-7 portlarından herhangi birine takılabilir.
Bağlantıyı doğrulamak için her cihaza monitör ve klavyeyle giriş yapıp şu komutu çalıştırın:

ib2netdev

rocep1s0f0 port 1 ==> enp1s0f0np0 (Down)
rocep1s0f1 port 1 ==> enp1s0f1np1 (Up)
roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Down)
roceP2p1s0f1 port 1 ==> enP2p1s0f1np1 (Up)

(Up) olarak görünenler kablonun bağlı olduğu portlardır.
(Down) olarak görünenler ise kullanılmayan portlardır.
Herhangi bir arayüz (Up) olarak görünmüyorsa,
QSFP kablosunu kontrol edin ve Spark’ları yeniden başlatın.

Bilgisayarınızın Spark’la aynı ağa bağlı olduğundan emin olun. Ardından, bilgisayarınızdan bir terminal açın ve Spark’a SSH ile bağlanın:

Copy to Clipboard
ssh nvidia@


İlk bağlantıda bir fingerprint uyarısı göreceksiniz. yes yazıp Enter’a basın. Ardından parola sorulduğunda Spark’ın parolasını girin:

Copy to Clipboard
The authenticity of host '192.168.1.148 (192.168.1.148)' can't be established. ED25519 key fingerprint is SHA256:S6EECYc6Pw2aLoLmhblFZ0QEoeVtJP41jJ5IYsdOmMM. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.1.148' (ED25519) to the list of known hosts. [email protected]'s password: Welcome to NVIDIA DGX Spark Version 7.5.0 (GNU/Linux 6.17.0-1026-nvidia aarch64) System information as of Fri Jul 17 01:26:03 PM UTC 2026 System load: 1.68 Temperature: 50.0 C Usage of /: 60.6% of 3.67TB Processes: 575 Memory usage: 3% Users logged in: 1 Swap usage: 7% IPv4 address for enP7s7: 192.168.1.148 2 devices have a firmware upgrade available. Run `fwupdmgr get-upgrades` for more information. Last login: Fri Jul 17 13:16:30 2026 from 192.168.1.77


Bağlandığınızda Spark, bu terminalden gönderdiğiniz komutları kabul etmeye başlayacak. Eğitim boyunca karşınıza çıkan tüm komutları bilgisayarınızın bu terminaline gireceksiniz.

2. sparkrun Kurulumu​


Öncelikle uv paket yöneticisini indirin:

Copy to Clipboard
curl -LsSf
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
| sh


uv’yi PATH’e ekleyin:

Copy to Clipboard
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc


PATH güncellendi. ~/.local/bin dizini (uv ve sparkrun’ın yüklü olduğu konum) artık mevcut ve gelecekteki tüm terminal oturumları için PATH’e eklendi. Şimdi sparkrun’ı kurun:

Copy to Clipboard
uv tool install sparkrun
Copy to Clipboard
Resolved 33 packages in 640ms Installed 33 packages in 23ms + annotated-doc==0.0.4 + anyio==4.14.2 + botwinick-utils==0.0.20 + certifi==2026.6.17 + click==8.3.3 + filelock==3.30.2 + fsspec==2026.6.0 + h11==0.16.0 + hf-xet==1.5.2 + httpcore==1.0.9 + httpx==0.28.1 + huggingface-hub==1.8.0 + idna==3.18 + linkify-it-py==2.1.0 + markdown-it-py==4.2.0 + mdit-py-plugins==0.6.1 + mdurl==0.1.2 + packaging==26.2 + platformdirs==4.10.0 + pygments==2.20.0 + python-json-logger==4.1.0 + pyyaml==6.0.3 + rich==15.0.0 + scitrera-app-framework==0.0.69 + shellingham==1.5.4 + six==1.17.0 + sparkrun==0.2.40 + textual==8.2.5 + tqdm==4.68.4 + typer==0.27.0 + typing-extensions==4.16.0 + uc-micro-py==2.0.0 + vpd==0.9.13 Installed 1 executable: sparkrun


Kurulumu doğrulayalım:

Copy to Clipboard
sparkrun --version
Copy to Clipboard
sparkrun, version 0.2.40


sparkrun v0.2.40 yüklendi ve erişilebilir durumda.

3. Docker İmajını Derleme​


GPT-OSS 120B’den en yüksek performansı almak için, Spark’ın GPU mimarisi için özel olarak derlenmiş CUTLASS MoE ve FlashInfer attention çekirdeklerini içeren bir Docker imajı derleyeceğiz. Bu imaj, aynı zamanda –mxfp4-backend, –mxfp4-layers bayraklarını ve GPT-OSS’in tiktoken kodlama dosyalarını içerir.

Bu imajı eugr topluluk projesinin build-and-copy.sh komut dosyası ile derleyeceğiz. Önce eugr reposunu klonlayın:

Copy to Clipboard
cd ~ git clone
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
cd spark-vllm-docker


Repodaki Dockerfile.mxfp4 dosyası, build-and-copy.sh’ın derleyeceği kaynak kodun sürümünü belirler. Derlemeye başlamadan önce bu sürümün güncel olduğuna emin olmalıyız. Bu sebeple, christopherowen topluluk projesinin vLLM fork’undaki mxfp4_v2 dalının en güncel commit hash’ini sorgulayalım:

Copy to Clipboard
git ls-remote
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
refs/heads/mxfp4_v2 | cut -f1 id => 04f641e537e80a67db464c6e65b928dbfab5d647


Komutun döndürdüğü bu hash, build-and-copy.sh’ı istediğimiz vLLM kaynak kodlarının en güncel sürümüne yönlendirecek. Bunu kopyalayın ya da not edin. Ardından Dockerfile.mxfp4 dosyasını nano ile açın:

Copy to Clipboard
nano Dockerfile.mxfp4


Dosya açıldığında, dosyada arama yapmak için Ctrl+W tuşlarına basın, VLLM_SHA yazıp Enter’a basın. İmleç şuna benzer bir satıra konumlanacak:

Copy to Clipboard
ARG VLLM_SHA=045293d82b832229560ac4a13152a095af603b6e


Eski hash değerini silin ve yukarıda not ettiğiniz güncel hash’i yapıştırın. Ardından dosyayı kaydetmek için Ctrl+O’ya basın, Enter ile onaylayın, ardından Ctrl+X ile nano’dan çıkın.

Dockerfile.mxfp4 dosyasında yaptığımız değişikliği doğrulayalım:

Copy to Clipboard
grep VLLM_SHA Dockerfile.mxfp4 ARG VLLM_SHA=04f641e537e80a67db464c6e65b928dbfab5d647


Dönen hash değeri, önceki adımda kopyaladığınız güncel hash değeri olmalı.

Fallback:
Eğer en güncel commit ile sorun yaşarsanız, test edip onayladığımız 04f641e537e80a67db464c6e65b928dbfab5d647 (28 Ocak 2026) hash’ini kullanabilirsiniz.
Ayrıca dilerseniz, daha güncel commit’leri commit geçmişinden
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
.


Şimdi imajı derleyin:

Copy to Clipboard
DOCKER_BUILDKIT=1 ./build-and-copy.sh --exp-mxfp4


İlk derleme yaklaşık 50 dakika sürer; daha sonraki derlemeler önbellek sayesinde yaklaşık 5 dakikada tamamlanır. Derleme tamamlandığında şu çıktıyı göreceksiniz:

Copy to Clipboard
========================================= TIMING STATISTICS ========================================= Runner Build: 00:50:00 Total Time: 00:50:00 ========================================= Done preparing vllm-node-mxfp4.


İmajı doğrulayın:

Copy to Clipboard
docker run --rm --entrypoint cat vllm-node-mxfp4:latest /workspace/build-metadata.yaml vllm_commit: 04f641e537e80a67db464c6e65b928dbfab5d647 flashinfer_commit: f349e52496a72a00d8c4ac02c7a1e38523ff7194 gpu_arch: 12.1a base_image: nvcr.io/nvidia/pytorch:26.01-py3


İmajın vLLM sürümünü doğrulayın:

Copy to Clipboard
docker run --rm --entrypoint python3 vllm-node-mxfp4:latest -c "import vllm; print(vllm.__version__)" 0.1.dev12774+g04f641e53.d20260720


Birden çok Spark kullanıyorsanız, imajı yalnızca Main Spark’a derlemiş olmanız yeterlidir. sparkrun, ilk başlatmada imajı CX-7 ağı üzerinden Worker’lara otomatik senkronize edecektir. Ek bir adıma gerek yok.

4. Kurulum Sihirbazı​


sparkrun kurulum sihirbazı, Spark’ı çalıştırmak için gerekli tüm altyapıyı tek bir interaktif komutla yapılandırır:

Copy to Clipboard
sparkrun setup wizard


Altı faz sırayla çalışır, fazlar interaktiftir. İlk fazda ‘Enter host IPs/hostnames’ kısmına yi girip Enter’a basın. Devamındaki sorularda doğrudan Enter’a basarak (varsayılan seçenekleri onaylayarak) devam edebilirsiniz:

Birden çok Spark kullanıyorsanız, ‘Enter host IPs/hostnames’ kısmına tüm Spark’ların IP adreslerini virgülle ayırarak girin (örneğin main-spark-ip,worker-spark-ip1 ,worker-spark-ip2 ).

Copy to Clipboard
Welcome to sparkrun 0.2.40 setup wizard! ================================================ Phase 1: Cluster Setup ------------------------------ Detecting CX7 interfaces on this machine... CX7 detected! This machine is a DGX Spark. Enter host IPs/hostnames (comma-separated) [192.168.1.148]: 192.168.1.148,192.168.1.163 Cluster name [default]: dualspark SSH username [nvidia]: Created cluster 'dualspark' with 2 host(s), set as default.


İkinci faz, parolasız SSH bağlantısını kurar. Y yazıp Enter’a basın:

Birden çok Spark kullanıyorsanız, sihirbaz bu fazda Worker Spark’lara SSH ile bağlanır ve parola sorar. Parolayı girin — bu adım bir kez yapılır, sihirbaz parolasız SSH anahtarlarını dağıttıktan sonra sonraki tüm bağlantılarda parola sorulmaz.

Copy to Clipboard
Phase 2: SSH Mesh ------------------------------ Set up SSH mesh across 2 host(s) + this machine? [Y/n]: Y === Phase 1: Connectivity check === [*] Checking SSH connectivity to [email protected] ... [*] Checking SSH connectivity to [email protected] ... === Phase 4: Install keys so every host trusts every other host === [*] Installing key from 192.168.1.148 onto all other hosts ... - 192.168.1.148 -> 192.168.1.163 [*] Installing key from 192.168.1.163 onto all other hosts ... - 192.168.1.163 -> 192.168.1.148 === Done === All hosts should now be able to SSH to each other as 'nvidia' without passwords. Detecting management IPs on cluster hosts... Updating cluster hosts to management IPs: 192.168.1.148 -> 127.0.0.1 (local) Cluster 'dualspark' updated.


Üçüncü faz, CX-7 yüksek hızlı ağ arayüzlerini yapılandırır. Tek Spark kullanılıyorsa otomatik olarak atlanır. Y yazıp Enter’a basın:

Birden çok Spark kullanıyorsanız, sihirbaz CX-7 arayüzlerini otomatik olarak algılar, çakışmayan alt ağlar seçer, her Spark’a statik IP atar, MTU 9000 (jumbo frame) ayarlar ve /etc/netplan/40-cx7.yaml dosyasını yazıp netplan apply ile uygular. Bu işlem root yetkisi gerektirir — sudo parolasını girin.

Copy to Clipboard
Phase 3: CX7 Network Configuration ------------------------------ Configures high-speed CX7 networking between hosts. Configure CX7 networking? [Y/n]: Y Topology: switch Subnets: 192.168.0.0/24, 192.168.2.0/24 [sudo] password for nvidia:


CX-7 yapılandırması sonrası sihirbaz, SSH ağını yeni IP’lerle otomatik yeniler. Bu faz ek bir girdi gerekmez.

Copy to Clipboard
Phase 3b: Re-meshing SSH after CX7 IP changes ------------------------------ CX7 configuration changed network IPs. Re-running SSH mesh to ensure full connectivity across all interfaces. Verifying SSH connectivity to cluster hosts... All 2 host(s) reachable. Checking reachability from control machine... Reachable: 127.0.0.1, 192.168.1.163, 192.168.0.148, 192.168.2.148, 192.168.0.163, 192.168.2.163


Dördüncü faz, kullanıcının docker grubunda olduğunu doğrular. Y yazıp Enter’a basın:

Copy to Clipboard
Phase 4: Docker Group Membership ------------------------------ Ensures user can run Docker commands without sudo. Add 'nvidia' to the docker group on all hosts? [Y/n]: Y 127.0.0.1: 'nvidia' already a member 192.168.1.163: 'nvidia' already a member


Beşinci faz, kısıtlı sudoers kuralları yükler. Yüklenen kurallar HuggingFace önbellek sahipliğini parolasız düzeltme ve Linux sayfa önbelleğini parolasız temizleme içindir. Geniş sudo yetkisi verilmez. Y yazıp Enter’a basın:

Copy to Clipboard
Phase 5: Sudoers Entries ------------------------------ Scoped sudoers for fix-permissions + clear-cache (no broad sudo). Install sudoers entries? [Y/n]: Y fix-permissions: 2/2 host(s) clear-cache: 2/2 host(s)


Altıncı faz, earlyoom OOM korumasını kurar. earlyoom, DGX Spark’ın birleşik bellek mimarisinde bellek sınırına yaklaşıldığında sistemi kilitlemek yerine çıkarım süreçlerini sonlandırır. Y yazıp Enter’a basın:

Copy to Clipboard
Phase 6: earlyoom OOM Protection ------------------------------ Prevents system hangs by proactively managing memory pressure. Install earlyoom? [Y/n]: Y earlyoom configured on 2/2 host(s). Setup Complete! ================================================ Cluster: dualspark (2 hosts, set as default) SSH mesh: OK CX7: configured (switch) SSH remesh: OK Docker: OK (2/2) Sudoers: installed (fix-permissions, clear-cache) earlyoom: installed

5. Recipe Oluşturma​


Recipe, sparkrun’ın modeli nasıl çalıştıracağını tanımlayan bir YAML dosyasıdır. Model, Docker imajı, vLLM bayrakları ve bellek ayarları tek dosyada toplanır. Bu recipe hem tek Spark (TP=1) hem de birden çok Spark (TP>1) için kullanılabilir — tek fark, başlatma komutunda –tp değerinin Spark sayısına göre değiştirilmesidir.

Copy to Clipboard
cat > ~/gpt-oss-120b-eugr-mxfp4.yaml gpt-oss-120b-eugr-mxfp4.yaml --rootful # single node (TP=1) # sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --tp 2 # dual node (TP=2) recipe_version: "2" model: openai/gpt-oss-120b runtime: vllm container: vllm-node-mxfp4 metadata: description: GPT-OSS 120B MXFP4 — CUTLASS MoE, FLASHINFER attention, eugr --exp-mxfp4 build defaults: port: 8000 host: 0.0.0.0 tensor_parallel: 1 gpu_memory_utilization: 0.7 max_num_batched_tokens: 8192 env: VLLM_USE_FLASHINFER_MOE_MXFP4_MXFP8: "1" command: | vllm serve {model} \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size {tensor_parallel} \ --distributed-executor-backend ray \ --gpu-memory-utilization {gpu_memory_utilization} \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens {max_num_batched_tokens} \ --host {host} \ --port {port} RECIPE


Dosyayı doğrulayın:

Copy to Clipboard
cat ~/gpt-oss-120b-eugr-mxfp4.yaml
Copy to Clipboard
# GPT-OSS 120B MXFP4 — eugr --exp-mxfp4 build, CUTLASS MoE, FLASHINFER attention # Usage: # sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful # single node (TP=1) # sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --tp 2 # dual node (TP=2) recipe_version: "2" model: openai/gpt-oss-120b runtime: vllm container: vllm-node-mxfp4 metadata: description: GPT-OSS 120B MXFP4 — CUTLASS MoE, FLASHINFER attention, eugr --exp-mxfp4 build defaults: port: 8000 host: 0.0.0.0 tensor_parallel: 1 gpu_memory_utilization: 0.7 max_num_batched_tokens: 8192 env: VLLM_USE_FLASHINFER_MOE_MXFP4_MXFP8: "1" command: | vllm serve {model} \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size {tensor_parallel} \ --distributed-executor-backend ray \ --gpu-memory-utilization {gpu_memory_utilization} \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens {max_num_batched_tokens} \ --host {host} \ --port {port}


Recipe’deki önemli alanlar ve seçilme nedenleri:

  • container: vllm-node-mxfp4 — 3. adımda derlenen imaj; CUTLASS/FlashInfer fork’larını içerir.
  • tensor_parallel: 1 (varsayılan) — Tek Spark varsayılanı; birden çok Spark için --tp değeri ile geçersiz kılınır.
  • gpu_memory_utilization: 0.7 — DGX Spark UMA için güvenli değer.
  • --distributed-executor-backend ray: Ray — sparkrun Ray’i otomatik algılar ve Ray kümesini kurar. TP=1 için tek düğümlü Ray çalışır.
  • --mxfp4-backend CUTLASS: CUTLASS — Özel CUTLASS MXFP4 MoE GEMM çekirdeği.
  • --mxfp4-layers moe,qkv,o,lm_head: Tam — Tüm katmanlar FP4’e kuantize edilir.
  • --attention-backend FLASHINFER: FlashInfer — GPT-OSS’un attention yapısını destekleyen özel FlashInfer çekirdeği.
  • --kv-cache-dtype fp8: FP8 — KV cache için azaltılmış bellek.
  • --load-format fastsafetensors: Hızlı yükleyici — Yaklaşık 41 sn model yükleme.
  • --reasoning-parser openai_gptoss: Harmony — Düşünce sürecini reasoning alanına ayırır.
  • --tool-call-parser openai: Araç kullanımı — --enable-auto-tool-choice için gereklidir.
Önemli: –rootful bayrağı recipe’de değil, başlatma komutunda verilir. FlashInfer, çalışma zamanında CUTLASS attention çekirdeklerini derler ve bu derleme için root yetkisine ihtiyaç duyar. Başlatma komutları ilgili bölümün “Modeli Başlatma” adımında gösterilmiştir.

6. Başlatma Öncesi Kontroller​


sparkrun’ın recipe’yi doğru ayrıştırdığını ve bellek bütçesinin uygun olduğunu doğrulayın:

Copy to Clipboard
sparkrun show ~/gpt-oss-120b-eugr-mxfp4.yaml
Copy to Clipboard
Name: /home/nvidia/gpt-oss-120b-eugr-mxfp4.yaml Description: GPT-OSS 120B MXFP4 — CUTLASS MoE, FLASHINFER attention, eugr --exp-mxfp4 build Runtime: vllm-ray Model: openai/gpt-oss-120b Container: vllm-node-mxfp4 Nodes: 1 - unlimited Defaults: gpu_memory_utilization: 0.7 host: 0.0.0.0 max_num_batched_tokens: 8192 port: 8000 tensor_parallel: 1 Environment: VLLM_USE_FLASHINFER_MOE_MXFP4_MXFP8=1 Command: vllm serve {model} \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size {tensor_parallel} \ --distributed-executor-backend ray \ --gpu-memory-utilization {gpu_memory_utilization} \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens {max_num_batched_tokens} \ --host {host} \ --port {port} Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. VRAM Estimation: Model dtype: mxfp4 KV cache dtype: bfloat16 Architecture: 36 layers, 8 KV heads, 64 head_dim Model weights: 60.77 GB Tensor parallel: 1 Per-GPU total: 60.77 GB DGX Spark fit: YES GPU Memory Budget: gpu_memory_utilization: 70% Usable GPU memory: 84.7 GB (121 GB x 70%) Available for KV: 23.9 GB Max context tokens: 348,538


sparkrun, recipe’yi doğru ayrıştırdı, vllm-ray’i seçti ve ‘DGX Spark fit: YES’ onayını verdi.

Şimdi başlatma planını önizleyin:

Copy to Clipboard
sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --dry-run
Copy to Clipboard
sparkrun v0.2.40 Runtime: vllm-ray Image: vllm-node-mxfp4 Model: openai/gpt-oss-120b Mode: solo Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. VRAM Estimation: Model dtype: mxfp4 KV cache dtype: bfloat16 Architecture: 36 layers, 8 KV heads, 64 head_dim Model weights: 60.77 GB Tensor parallel: 1 Per-GPU total: 60.77 GB DGX Spark fit: YES GPU Memory Budget: gpu_memory_utilization: 70% Usable GPU memory: 84.7 GB (121 GB x 70%) Available for KV: 23.9 GB Max context tokens: 348,538 Hosts: default cluster 'dualspark' Target: 127.0.0.1 [1/6] Preparing done (0.0s) [2/6] Building image — skipped (no builder) [3/6] Distributing resources done (0.1s) [4/6] Syncing tuning configs done (0.0s) [5/6] Launching vllm runtime Step 1/3: Detecting InfiniBand Step 2/3: Launching container Step 3/3: Executing serve command done (0.0s) Cluster: sparkrun_531d9a939d23 Serve command: vllm serve openai/gpt-oss-120b \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size 1 \ --distributed-executor-backend ray \ --gpu-memory-utilization 0.7 \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens 8192 \ --host 0.0.0.0 \ --port 8000 [6/6] Post-launch hooks — skipped


Dry run başarılı. Recipe geçerli, serve command eklediğimiz flagleri içeriyor ve başlatılmaya hazır. Model Spark’ta kurulu değilse, sparkrun ilk başlatmada modeli Hugging Face’ten otomatik indirecektir. GPT-OSS 120B modeli yaklaşık 183 GB’tır; indirme süresi internet hızınıza bağlıdır. Dry run bu indirmeyi tetiklemez, indirme yalnızca gerçek başlatmada olur.

Birden çok Spark kullanıyorsanız, TP dry-run için –tp değerini Spark sayısına göre belirleyin (örneğin iki Spark için –tp 2). Serve command içinde –tensor-parallel-size 2 göreceksiniz ve mode solo yerine cluster (2 nodes) olarak görünecek:

Copy to Clipboard
sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --tp 2 --dry-run

Tek Sparkla Çalıştırma​

1. Önbelleği Temizleme​


vLLM’i başlatmadan önce dosya sistemi önbelleğini boşaltın:

Copy to Clipboard
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'


Bunu yapmamızın temel sebebi DGX Spark’ın birleşik bellek mimarisidir: İşletim sistemi, diskten okuduğu model dosyalarını RAM’de önbelleğe alır. vLLM, buradaki model ağırlıklarını GPU belleğine yükler. Yükleme bittikten sonra önbellekte kalan veri bir daha kullanılmayacak olsa da hemen temizlenmez. Ayrı bellek kullanan sistemlerde bu önemli değildir. Çıkarım GPU belleğinde çalıştığından RAM’in doluluğu performansı etkilemez. Spark’ta ise CPU ve GPU aynı RAM’i paylaştığından, önbellek GPU’nun kullanabileceği alanı daraltır. Komut, bu önbelleği boşaltarak vLLM için maksimum bellek sağlar.

Parola sorulduğunda Spark’ın parolasını girin. Komut çıktı vermez, sessizce tamamlanır:

Copy to Clipboard
[sudo] password for nvidia:

2. Modeli Başlatma​


Şimdi modeli başlatalım:

Copy to Clipboard
sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --no-follow


–rootful bayrağı, konteyneri root yetkisiyle çalıştırır. FlashInfer, çalışma zamanında CUTLASS attention çekirdeklerini derler ve bu derleme için root yetkisine ihtiyaç duyar. –no-follow bayrağı ise sparkrun’ın konteynerleri başlattıktan sonra komut satırına dönmesini sağlar.

Copy to Clipboard
Note: 1 nodes required, using 1 of 2 hosts sparkrun v0.2.40 Runtime: vllm-ray Image: vllm-node-mxfp4 Model: openai/gpt-oss-120b Mode: solo VRAM Estimation: Model dtype: mxfp4 KV cache dtype: bfloat16 Architecture: 36 layers, 8 KV heads, 64 head_dim Model weights: 60.77 GB Tensor parallel: 1 Per-GPU total: 60.77 GB DGX Spark fit: YES GPU Memory Budget: gpu_memory_utilization: 70% Usable GPU memory: 84.7 GB (121 GB x 70%) Available for KV: 23.9 GB Max context tokens: 348,538 Hosts: default cluster 'dualspark' Target: 127.0.0.1 [1/6] Preparing done (0.0s) [2/6] Building image — skipped (no builder) [3/6] Distributing resources Fetching 37 files: 100%|██████████| 37/37 [00:00s] done (0.6s) [4/6] Syncing tuning configs done (0.0s) [5/6] Launching vllm runtime Step 1/3: Detecting InfiniBand Step 2/3: Launching container Step 3/3: Executing serve command done (7.0s) Cluster: sparkrun_531d9a939d23 Serve command: vllm serve openai/gpt-oss-120b \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size 1 \ --distributed-executor-backend ray \ --gpu-memory-utilization 0.7 \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens 8192 \ --host 0.0.0.0 \ --port 8000 Runtime versions: cuda: 13.1 nccl: (2, 29, 2) python: 3.12.3 torch: 2.10.0a0+a36e1d39eb.nv26.01.42222806 vllm: 0.1.dev12774+g04f641e53.d20260720 [6/6] Post-launch hooks — skipped


sparkrun 6 adımı da başarıyla tamamladı. İmaj derleme atlandı ve kurulum kısmında derlediğimiz imaj kullanıldı. Model dosyaları zaten diskte olduğu için dağıtım hızlıca tamamlandı. Serve command içinde tüm bayraklar doğru çözüldü.

3. Başlangıç Sürecini İzleme​


Model indirme tamamlandıktan sonra vLLM’in servise hazır hale gelmesi birkaç dakika alabilir. Bu süreçte vLLM model ağırlıklarını GPU belleğine yükler, GPU çekirdeklerini derler ve çıkarım için bellek ayırır.

vLLM loglarını izlemek için:

Copy to Clipboard
sparkrun logs ~/gpt-oss-120b-eugr-mxfp4.yaml


Loglarda şunları göreceksiniz:

Copy to Clipboard
(APIServer pid=107) vLLM API server version 0.1.dev12774+g04f641e53.d20260720 (APIServer pid=107) non-default args: {'quantization': 'mxfp4', 'mxfp4_backend': 'CUTLASS', 'mxfp4_layers': 'moe,qkv,o,lm_head', 'attention_backend': 'FLASHINFER', 'distributed_executor_backend': 'ray', 'tensor_parallel_size': 1, ...} (EngineCore_DP0 pid=512) Started a local Ray instance. (RayWorkerWrapper pid=1347) SM12x detected - using native FlashInfer CUTLASS attention instead of TRT-LLM attention (cubins not available for SM12x) (RayWorkerWrapper pid=1347) Using AttentionBackendEnum.FLASHINFER backend. (RayWorkerWrapper pid=1347) [MXFP4] Using backend: CUTLASS (--mxfp4-backend) (RayWorkerWrapper pid=1347) Loading safetensors: 100%|██████████| 15/15 [00:41 torch.Size([201088, 1440]) FP4 (4x smaller) (RayWorkerWrapper pid=1347) Model loading took 61.33 GiB memory (RayWorkerWrapper pid=1347) torch.compile takes 112.10 s in total (RayWorkerWrapper pid=1347) Available KV cache memory: 8.460000 GiB (EngineCore_DP0 pid=512) GPU KV cache size: 246,416 tokens (EngineCore_DP0 pid=512) Maximum concurrency for 131,072 tokens per request: 3.54x (APIServer pid=107) Application startup complete.


Application startup complete. satırını gördüyseniz model sunucusu hazır demektir. Ctrl+C tuşlarına basarak log izlemeyi durdurun. Sunucu arka planda çalışmaya devam edecektir.

4. Modeli Test Etme​


Öncelikle sunucunun çalıştığını doğrulayın:

Copy to Clipboard
curl -s -o /dev/null -w "HTTP %{http_code}" http://:8000/health


‘HTTP 200’ yanıtı sunucunun sağlıklı olduğunu gösterir. Şimdi sparkrun konteyner durumunu kontrol edin:

Copy to Clipboard
sparkrun status
Copy to Clipboard
Job: /home/nvidia/gpt-oss-120b-eugr-mxfp4.yaml (tp=1) [531d9a939d23] (1 container(s)) node_0 127.0.0.1 Up 2 minutes vllm-node-mxfp4 Total: 1 container(s) across 1 host(s)


Kayıtlı modelleri listeleyin:

Copy to Clipboard
curl -s
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
| python3 -m json.tool
Copy to Clipboard
{ "object": "list", "data": [ { "id": "openai/gpt-oss-120b", "object": "model", "created": 1784286672, "owned_by": "vllm", "root": "openai/gpt-oss-120b", "parent": null, "max_model_len": 131072 } ] }


Model openai/gpt-oss-120b kayıtlı.

Şimdi modeli “What is 12*17?” promptuyla test edin:

Copy to Clipboard
curl -s
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
\ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-oss-120b", "messages": [{"role": "user", "content": "What is 12*17?"}], "max_tokens": 200 }' | python3 -m json.tool


Yanıtın basitleştirilmiş hali aşağıdaki gibidir. content alanında (modelin verdiği yanıt) 204 ifadesini göreceksiniz. Buradan, modelin çarpma işlemini doğru yaptığını anlayabilirsiniz. Ayrıca yanıtın bir de reasoning alanı var. Bu alan, modelin düşünce sürecini içerir. GPT-OSS’un Harmony formatı çalışıyor: düşünce süreci ve son yanıt ayrı alanlarda sunulur:

Copy to Clipboard
{ "id": "chatcmpl-b863d6c512722c38", "model": "openai/gpt-oss-120b", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "\\(12 \\times 17 = 204\\)", "reasoning": "User asks a simple multiplication: 12*17 = 204. Provide answer.", "reasoning_content": "User asks a simple multiplication: 12*17 = 204. Provide answer." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 72, "total_tokens": 110, "completion_tokens": 38 } }


vLLM şu an çalışıyor ve Spark’ın 8000 portunda servis sağlıyor. GPT-OSS 120B’ye soru sorup cevap alabiliyoruz.

5. Kapatma​


İşiniz bittiğinde modeli durdurun:

Copy to Clipboard
sparkrun stop ~/gpt-oss-120b-eugr-mxfp4.yaml


Bu komutla konteyner durdurulur ve bellek alanı boşalır. Ama konteyner, Docker imajı ve model dosyaları diskte kalır. Böylelikle tekrar başlatmak için yeniden indirme yapmanız gerekmez. 2. adımdaki sparkrun run komutunu tekrar çalıştırmanız yeterli.

İki Sparkla Çalıştırma​

1. Önbelleği Temizleme​


vLLM’i başlatmadan önce her iki Spark’ta da dosya sistemi önbelleğini boşaltın. Bunu yapmamızın temel sebebi DGX Spark’ın birleşik bellek mimarisi (UMA) olmasıdır: İşletim sistemi, diskten okuduğu model dosyalarını RAM’de önbelleğe alır. vLLM, buradaki model ağırlıklarını GPU belleğine yükler. Yükleme bittikten sonra önbellekte kalan veri bir daha kullanılmayacak olsa da hemen temizlenmez. Ayrı bellek kullanan sistemlerde bu önemli değildir. Çıkarım GPU belleğinde çalıştığından RAM’in doluluğu performansı etkilemez. Spark’ta ise CPU ve GPU aynı RAM’i paylaştığından, önbellek GPU’nun kullanabileceği alanı daraltır. Komut, bu önbelleği boşaltarak vLLM için maksimum bellek sağlar.

Main Spark’ta önbelleği temizleyin:

Copy to Clipboard
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'


Main Spark’tan SSH ile Worker Spark’ta da aynı temizliği uygulayın:

Copy to Clipboard
ssh nvidia@ "sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'"

2. Modeli Başlatma​


Şimdi, modeli iki Spark üzerinde başlatalım:


–tp 2 bayrağı, sparkrun’a modeli iki Spark arasında bölerek (tensor parallel) çalıştırmasını söyler. –rootful bayrağı, konteyneri root yetkisiyle çalıştırır — FlashInfer, çalışma zamanında CUTLASS attention çekirdeklerini derler ve bu derleme için root yetkisine ihtiyaç duyar. –no-follow bayrağı ise sparkrun’ın konteynerleri başlattıktan sonra komut satırına dönmesini sağlar. sparkrun otomatik olarak imajı Worker’a senkronize eder (aynı ID ise atlar), modeli Worker’a kopyalar (zaten varsa atlar), Ray kümesini kurar, NCCL yapılandırmasını CX-7 arayüzleri için ayarlar ve her iki Spark’ta konteyner başlatır.

Copy to Clipboard
sparkrun run ~/gpt-oss-120b-eugr-mxfp4.yaml --rootful --tp 2 --no-follow
Copy to Clipboard
sparkrun v0.2.40 Runtime: vllm-ray Image: vllm-node-mxfp4 Model: openai/gpt-oss-120b Mode: cluster (2 nodes) Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. VRAM Estimation: Model dtype: mxfp4 KV cache dtype: bfloat16 Architecture: 36 layers, 8 KV heads, 64 head_dim Model weights: 60.77 GB Tensor parallel: 2 Per-GPU total: 30.38 GB DGX Spark fit: YES GPU Memory Budget: gpu_memory_utilization: 70% Usable GPU memory: 84.7 GB (121 GB x 70%) Available for KV: 54.3 GB Max context tokens: 1,582,071 Hosts: default cluster 'dualspark' Head: 127.0.0.1 Workers: 192.168.1.163 [1/6] Preparing done (0.0s) [2/6] Building image — skipped (no builder) [3/6] Distributing resources Distributing image vllm-node-mxfp4 to 2 host(s) Container image stale on 1 of 2 host(s), syncing Distributing model openai/gpt-oss-120b to 2 host(s) Fetching 37 files: 100%|██████████| 37/37 [00:00s] Model synced to 2 host(s) done (187.3s) [4/6] Syncing tuning configs done (0.0s) [5/6] Launching vllm runtime Step 1/5: Cleaning up existing containers Step 2/5: Detecting InfiniBand Step 3/5: Launching Ray head Step 4/5: Launching Ray workers Step 5/5: Executing serve command on head done (17.9s) Cluster: sparkrun_631038688bb2 Serve command: vllm serve openai/gpt-oss-120b \ --tool-call-parser openai \ --reasoning-parser openai_gptoss \ --enable-auto-tool-choice \ --tensor-parallel-size 2 \ --distributed-executor-backend ray \ --gpu-memory-utilization 0.7 \ --enable-prefix-caching \ --load-format fastsafetensors \ --quantization mxfp4 \ --mxfp4-backend CUTLASS \ --mxfp4-layers moe,qkv,o,lm_head \ --attention-backend FLASHINFER \ --kv-cache-dtype fp8 \ --max-num-batched-tokens 8192 \ --host 0.0.0.0 \ --port 8000 Runtime versions: cuda: 13.1 nccl: (2, 29, 2) python: 3.12.3 torch: 2.10.0a0+a36e1d39eb.nv26.01.42222806 vllm: 0.1.dev12774+g04f641e53.d20260720 [6/6] Post-launch hooks — skipped


sparkrun 6 adımı başarıyla tamamladı. ‘Mode: cluster (2 nodes)’ kısmı görüldü. İmaj Worker’a CX-7 üzerinden senkronize edildi. Serve command içinde –tensor-parallel-size 2 görünüyor. sparkrun, –distributed-executor-backend ray komutunu algılayarak vllm-ray çalışma zamanını seçti ve Ray kümesini otomatik kurdu.

TP=2’de model ağırlıkları ikiye bölünür — her Spark ~30 GB yükler (TP=1’de 61 GB’di). Bu sayede her Spark’ta KV cache için 35.97 GiB bellek kalır (TP=1’de 8.46 GiB’di) — bu, daha fazla eşzamanlı istek anlamına gelir.

3. Başlangıç Sürecini İzleme​


Model indirme tamamlandıktan sonra vLLM’in servise hazır hale gelmesi birkaç dakika alabilir. Bu süreçte vLLM model ağırlıklarını GPU belleğine yükler, GPU çekirdeklerini derler ve çıkarım için bellek ayırır.

Loglarını izleyin:

Copy to Clipboard
sparkrun logs ~/gpt-oss-120b-eugr-mxfp4.yaml --tp 2


Loglarda şunları göreceksiniz:

Copy to Clipboard
(APIServer pid=1093) vLLM API server version 0.1.dev12774+g04f641e53.d20260720 (APIServer pid=1093) non-default args: {'quantization': 'mxfp4', 'mxfp4_backend': 'CUTLASS', 'mxfp4_layers': 'moe,qkv,o,lm_head', 'attention_backend': 'FLASHINFER', 'distributed_executor_backend': 'ray', 'tensor_parallel_size': 2, ...} (EngineCore_DP0 pid=1407) Connecting to existing Ray cluster at address: 192.168.1.148:46379... (EngineCore_DP0 pid=1407) Connected to Ray cluster. (EngineCore_DP0 pid=1407) Creating a new placement group. (RayWorkerWrapper pid=1510) Loading safetensors using Fastsafetensor loader: 100%|██████████| 8/8 [00:248 [00:23 torch.Size([100608, 1440]) FP4 (4x smaller) (RayWorkerWrapper pid=372, ip=192.168.1.163) Model loading took 31.99 GiB memory and 38.80 seconds (RayWorkerWrapper pid=1510) torch.compile takes 116.55 s in total (RayWorkerWrapper pid=372, ip=192.168.1.163) Available KV cache memory: 35.97 GiB (EngineCore_DP0 pid=1407) GPU KV cache size: 2,095,472 tokens (EngineCore_DP0 pid=1407) Maximum concurrency for 131,072 tokens per request: 30.06x (APIServer pid=1093) Application startup complete.


Application startup complete. satırını gördüyseniz model sunucusu hazır demektir. Ctrl+C tuşlarına basarak log izlemeyi durdurun. Sunucu arka planda çalışmaya devam edecektir.

4. Modeli Test Etme​


Konteyner durumunu kontrol edin. Her iki Spark’ta da konteyner çalışıyor olmalı:

Copy to Clipboard
sparkrun status
Copy to Clipboard
Job: /home/nvidia/gpt-oss-120b-eugr-mxfp4.yaml (tp=2) [631038688bb2] (2 container(s)) head 127.0.0.1 Up 4 minutes vllm-node-mxfp4 worker 192.168.1.163 Up 4 minutes vllm-node-mxfp4 Total: 2 container(s) across 2 host(s)


İki konteyner de çalışıyor.

Modele sağlık kontrolü yapalım:

Copy to Clipboard
curl -s -o /dev/null -w "HTTP %{http_code}" http://:8000/health


Model sağlıklıysa şimdi modeli bir promptla test edelim:

Copy to Clipboard
curl -s http://:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-oss-120b", "messages": [{"role": "user", "content": "What is 12*17?"}], "max_tokens": 200 }' | python3 -m json.tool
Copy to Clipboard
{ "id": "chatcmpl-a2bdd35cbf300d46", "model": "openai/gpt-oss-120b", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "\\(12 \\times 17 = 204\\)", "reasoning": "User asks a simple multiplication: 12*17 = 204. Provide answer.", "reasoning_content": "User asks a simple multiplication: 12*17 = 204. Provide answer." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 72, "total_tokens": 110, "completion_tokens": 38 } }


Model 12 × 17 = 204 cevabını verdi. Ayrıca reasoning ve reasoning_content alanlarında modelin düşünce süreçleri yer alıyor.

API, yalnızca head node (Main Spark) üzerinden servis edilir. Yani modelle Main Spark üzerinden iletişim kurarız. Worker Spark sadece çıkarım hesaplamasına katılır.

5. Kapatma​


İşiniz bittiğinde modeli durdurun. Başlatırken –tp 2 kullandığınız için, durdururken de –tp 2 belirtmeniz gerekir:

Copy to Clipboard
sparkrun stop ~/gpt-oss-120b-eugr-mxfp4.yaml --tp 2


Bu komutla konteyner durdurulur ve bellek alanı boşalır. Ama konteyner, Docker imajı ve model dosyaları diskte kalır. Böylelikle tekrar başlatmak için yeniden indirme yapmanız gerekmez. 2. adımdaki sparkrun run komutunu tekrar çalıştırmanız yeterli.

Open WebUI ile Kullanım​


Önceki eğitimde (DGX Spark Üzerinde vLLM ile Yerel LLM Sunumu) Open WebUI’yi kurmuş ve vLLM’in 8000 portuna bağlamıştık. GPT-OSS 120B modeli de aynı 8000 portundan sunulur. Open WebUI çalışıyorsa, modeli otomatik olarak algılar ve sohbet ekranındaki model seçim menüsünde openai/gpt-oss-120b olarak listeler. Dilerseniz modeli seçip ve tarayıcıdan kullanmaya başlayabilirsiniz.

Tek vs İkili Spark Performans Karşılaştırması​


Tek Spark (TP=1) ve iki Spark (TP=2) konfigürasyonlarını farklı
eşzamanlılık (concurrency) seviyelerinde karşılaştırdık.
Ölçümlerde ortalama TTFT (Time to First Token — ilk token’ın üretime başlama süresi)
ve TPS (Tokens Per Second — saniye başına üretilen token sayısı) değerleri kaydedilmiştir.

EşzamanlılıkTek Spark TTFT (ms)İki Spark TTFT (ms)Tek Spark TPS (tok/s)İki Spark TPS (tok/s)TPS Gelişimi
1219.57167.6955.6569.86+26%
2294.41227.7637.0551.52+39%
4320.61255.4125.2037.14+47%
8395.31291.9416.8826.92+59%
16444.10319.9911.6719.08+63%

İki Spark’lı yapı, eşzamanlılık 1 seviyesinde (tek kullanıcı) %26 daha yüksek token üretim hızı
sağlarken, eşzamanlılık arttıkça bu fark büyür ve eşzamanlılık 16 için görüldüğü üzere
%60’ın üzerine çıkar.

Ölçümler,
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
kullanılarak alınmıştır. Bu araç, CordatusAI tarafından geliştirilen ve OpenAI uyumlu API’lere sahip LLM sunucularını test eden bir benchmarking uygulamasıdır.

Uygulamanın modelimiz için ürettiği benchmark sonuçlarının ekran görüntüleri aşağıdaki gibidir.
Görüldüğü üzere uygulama, 1’den 64’e kadar eşzamanlılık seviyelerinde test yapabilir ve her seviyede TTFT, ITL, TPS, gecikme ve throughput metriklerini ölçüp sonuçları tablo ve grafikler olarak sunar.

Ayrıca sistemin destekleyebileceği önerilen kullanıcı sayısını hesaplar. Bu hesaplama, belirli varsayımlara dayanan genel bir tahmindir ve tüm kullanım senaryolarını yansıtmaz. Görselde görüldüğü üzere araç, tek Spark için 55, iki Spark için ise 120 önerilen kullanıcı sayısı hesaplamıştır.

Tek Spark benchmark sonuçları:​

oss_single_final_benchmark_1-1024x579.webp

oss_single_final_benchmark_2-1024x579.webp

İki Spark benchmark sonuçları:​

oss_double_final_benchmark_1-1024x579.webp

oss_double_final_benchmark_2-1024x579.webp


Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
 
Üst