Good info, after downgrading the driver to 580.173.02 it does load. However I had to drop mem to .8 and the global context dropped significantly (down to 75.5k-token KV pool) for some reason? Memory management on these unified systems has been interesting to say the least…
sglang on spark-da36 — snapshot (2026-09-21 05:47 UTC)
Host / runtime
|
|
| Host |
spark-da36, up 3h40m, load 1.08 |
| GPU |
1× NVIDIA GB10 (DGX Spark), driver 580.173.02, CUDA 13.0, 43 °C, 10 W idle |
| Mem |
121 GiB total → 100 GiB used, 20 GiB available; swap 127 GiB (3 GiB used) |
| Container |
sglang-qwen38-da36 (image lmsysorg/sglang @ 9d2a843c…), up 2h, 0 restarts, cpu ~104%, mem 16.7 GiB |
| Processes |
sglang::scheduler PID 160717 (2h27m, 94.2 GiB GPU alloc) + tokenizer proc 160512 |
| Endpoints |
0.0.0.0:30000 inside netns; host maps 127.0.0.1:30001 → 30000 |
| Versions |
sglang 0.0.0.dev1+g4ccff141d, torch 2.13.0+cu130, CUDA 13.0 |
Model
- Serving name
RadixArk/Qwen3.8-Flash-Next-NVFP4, weights /model (126 GB, per-layer expert safetensors, hf_quant_config.json)
- Hybrid linear-attention (mamba) + MoE:
uses_mamba_radix_cache=true, 512 experts/layer quantized shards
- quantization
modelopt_fp4 (NVFP4), fp4 gemm flashinfer_cutlass, moe runner flashinfer_cutlass
- context_len 262144,
max_req_input_len 75514, status ready
Running config (from launch cmdline + /get_server_info)
TEXT⧉ COPY⬇ SAVE
python3 -m sglang.launch_server --model-path /model --tp 1 \
--quantization modelopt_fp4 --fp4-gemm-backend flashinfer_cutlass \
--page-size 64 --chunked-prefill-size 4096 --context-length 262144 \
--speculative-algorithm NEXTN --speculative-num-steps 3 \
--speculative-eagle-topk 1 --speculative-num-draft-tokens 4 \
--max-running-requests 8 --max-queued-requests 32 --max-mamba-cache-size 40 \
--reasoning-parser qwen3 --tool-call-parser qwen3_coder \
--chat-template /templates/qwen38-flash-next-chat-template.jinja \
--enable-metrics --mem-fraction-static 0.80 \
--ple-offload-embedding --ple-offload-backend file \
--ple-offload-dir /root/.cache/sglang/ple \
--served-model-name RadixArk/Qwen3.8-Flash-Next-NVFP4 --host 0.0.0.0 --port 30000
Effective: tp/dp/pp/ep = 1, attention flashinfer, sampling flashinfer, grammar xgrammar, linear-attn backend triton, mamba radix strategy extra_buffer, schedule fcfs, radix eviction lru, cuda graphs on, overlap schedule on, hierarchical cache off, P/D disaggregation off, metrics on. max_total_num_tokens = 75520 (1180 pages × 64), KV cache memory 1.78 GB, cuda-graph pools ~0.56 GB total.
Live metrics (accumulated since start)
| Metric |
Value |
| Requests |
8 total (4 streaming / 4 non-streaming); 6 chat.completions + 2 completions, all 200 |
| Tokens |
prompt 14,415 / generated 888 |
| Mean TTFT |
2.46 s (streaming 1.44 s, non-streaming 3.49 s) |
| Mean E2E |
5.34 s |
| Mean inter-token latency |
29.6 ms → ~34 tok/s per sequence |
| Decode throughput (last log) |
40–44 tok/s |
| Speculative (NEXTN) |
accept length 4.00 / 4 draft tokens, accept rate 1.00, 270 verify calls |
| Prefix cache |
6,976 device-cached tokens; hit rate 0.0 currently |
| KV pool |
used 0, available 68,160, evictable 7,360 (9.7% occupied) — idle |
| Mamba pool |
33 available / 7 evictable of 40 slots, usage 0.0 |
| CUDA graph |
282 decode-graph passes, 12 prefill (eager) passes |
| Errors |
2× /health 503 (pre-ready probes), 2× 404 (/get_server_args, favicon); no 5xx on inference endpoints |
State: healthy and idle — zero running/queued requests, KV and mamba pools drained, GPU at 10 W. Speculative decoding is at theoretical max acceptance, so the 34–44 tok/s figure is the current per-stream ceiling on this GB10; the only real limits are max_running_requests=8 and the 75.5k-token KV pool against a 262k context (long prompts will evict/recompute rather than extend).
sglang on spark-ee93 — snapshot (2026-09-21 05:56 UTC)
Host / runtime
|
|
| Host |
spark-ee93, up 9 days 17h, load 1.35 |
| GPU |
1× GB10, driver 580.173.02 / CUDA 13.0 — 51 °C, 96% util, 27 W (actively serving) |
| GPU sharing |
sglang scheduler holds 98.2 GiB; also on-GPU: 2× llama-server (exp-mtp, 1.75 GiB), ComfyUI (318 MiB) |
| Mem |
121 GiB → 108 GiB used, 12 GiB available; swap 127 GiB (11 GiB used) — host is memory-tight |
| Container |
sglang-qwen38-flash-next (lmsysorg/sglang@9d2a843c, same image digest as da36), up 6 days, cpu ~104% |
| Access |
127.0.0.1:30001 → 30000 |
| Versions |
sglang 0.0.0.dev1+g4ccff141d, torch 2.13.0+cu130 |
| Startup |
load_weight 518 s, KV alloc 2.1 s, scheduler e2e 545 s; GPU free at boot 16.2 GB |
Running config — identical to da36 except one flag
Same launch line (modelopt_fp4, flashinfer_cutlass, page-size 64, chunked-prefill 4096, ctx 262144, NEXTN spec 3/1/4, max-running 8, mamba cache 40, qwen3 + qwen3_coder parsers, PLE file offload), with:
--mem-fraction-static 0.85 (da36: 0.80) → max_total_num_tokens 172,224 vs 75,520 (2.3× KV pool; KV mem 4.07 GB vs 1.78 GB)
- Weights mounted from
/home/tyrel/models/Qwen3.8-Flash-Next-NVFP4 (126 GB, read-only)
- Env:
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True, SGLANG_QWEN4_PLE_FILE_RSS_BUDGET_GB=8
- Everything else (backends, speculative, schedulers, parsers) byte-identical per
get_server_info diff
Live metrics (6 days of traffic)
| Metric |
Value |
| Requests |
2,314 (2,245 streaming / 69 non-streaming); 49,785 scheduler batches |
| Tokens |
prompt 98.9M, generated 1.41M |
| Prefix cache |
65.3M device-hit tokens → 66% effective cache hit; but 33.3M tokens evicted (8,786 eviction ops) — KV pool runs 99.7% full (171,776 of 172,224 evictable, only 448 free) |
| Mean TTFT |
9.77 s (queue time total 1,334 s across batches) |
| Mean ITL |
42.3 ms → ~23.6 tok/s/stream; instantaneous decode 33–36 tok/s |
| Mean E2E |
35.6 s streaming / 19.5 s non-streaming |
| Speculative (NEXTN) |
accept length 3.73/4, accept rate 0.91 (live logs 3.3–3.8 / 0.76–0.94), 514k verify calls |
| CUDA graphs |
534,609 decode-graph passes / 57,271 eager prefills |
| Aborts |
120 aborted requests, 6 so-requests; 0 retracted, 0 queued right now |
| Mamba slots |
38/40 evictable, 2 free |
State: healthy and actively serving — a chat completion was in flight at snapshot time (34k-token context, decode 36 tok/s). Long-running production box: high traffic, radix cache saturated (heavy eviction churn but effective reuse), 120 lifetime aborts worth noting, and host RAM/swap pressure from co-located llama-server + ComfyUI.
da36 vs ee93: same image, model, and launch config except mem_fraction_static (0.80 vs 0.85), giving ee93 2.3× the KV pool; ee93 is the busy node (2.3k requests, 99.7% KV occupancy, TTFT ~9.8 s under load) vs da36’s fresh idle instance (8 requests, TTFT 2.5 s unloaded).