Deployment & Performance Report: Qwen3.8-27B (BF16) on RTX PRO 6000 with SGLang + EAGLE

#160
by sssssong0814 - opened

Deployment & Performance Report: Qwen3.8-27B (BF16) on RTX PRO 6000 with SGLang + EAGLE

Date: 2026-08-22
Platform: Featurize Cloud · 1× NVIDIA RTX PRO 6000 (Blackwell, 96GB)
Framework: SGLang (latest, flashinfer attention backend)
Model: Qwen/Qwen3.8-27B — BF16 weights, FP8 KV cache, EAGLE speculative decoding


1. Executive Summary

Metric Result
Decode throughput (EAGLE) 77–80 tok/s (avg 77.6, peak 80.3)
EAGLE draft accept rate 0.94–1.00 (warm)
Speedup vs. non-spec (theoretical ~35 tok/s) ~2.2×
Context length 262,144 verified (KV pool: 356,241 tokens)
End-to-end small request (36 tok, incl. 33 reasoning) 0.88 s after warmup
First-request cold start 34.8 s (CUDA graph / kernel warmup)
GPU during load 98% util · 396 W · 73 °C
Model load time 128.6 s (18 shards, multi-thread)

Takeaway: A single RTX PRO 6000 comfortably serves Qwen3.8-27B at BF16 precision with the full native 262K context, reaching ~78 tok/s with EAGLE — suitable for single-user agent workloads (WorkBuddy / tool calling).


2. Hardware & Environment

  • GPU: NVIDIA RTX PRO 6000 (Blackwell SM120), 96 GB, ~1.79 TB/s memory bandwidth
  • Usable VRAM: 92.72 GB (≈3.3 GB consumed by CUDA context/driver)
  • Software: Python 3.11, CUDA 13.3, SGLang with flashinfer (JIT-compiled), cuBLAS/cuDNN from pip nvidia packages
  • Model format: safetensors, BF16 (FP16-equivalent precision tier)

3. Launch Configuration

sglang serve --trust-remote-code \
  --model-path ~/data/Qwen3.8-27B \
  --kv-cache-dtype fp8_e4m3 \
  --mem-fraction-static 0.9 \
  --attention-backend flashinfer \
  --chunked-prefill-size 2048 \
  --reasoning-parser qwen3 \
  --tool-call-parser qwen3_coder \
  --mamba-full-memory-ratio 1.5 \
  --mamba-radix-cache-strategy extra_buffer \
  --mamba-ssm-dtype float32 \
  --speculative-algorithm EAGLE \
  --speculative-num-steps 3 \
  --speculative-eagle-topk 1 \
  --speculative-num-draft-tokens 4 \
  --enable-linear-replayssm-spec \
  --max-running-requests 8 \
  --enable-metrics \
  --context-length 262144 \
  --host 0.0.0.0 --port 30000 \
  --api-key test1234 \
  --served-model-name Qwen3.8-27B

Key choices & rationale:

Parameter Value Why
--kv-cache-dtype fp8_e4m3 FP8 KV Official verified combo for this GPU; halves KV memory, negligible quality loss
--mem-fraction-static 0.9 90% budget 0.85 → KV pool only 209K (262K not truly reachable); >0.95 → CUDA OOM
--mamba-full-memory-ratio 1.5 ~9 GB SSM state 2.5 consumes 15.2 GB, starving the KV pool; 1.5 still covers ~13K avg request length
--context-length 262144 Full native ctx Verified feasible: KV pool 356K > 262K
EAGLE spec block num-steps 3, topk 1, draft 4 Replays SSM states via --enable-linear-replayssm-spec; no extra draft model download
--max-running-requests 8 single-user Prevents idle Mamba slot waste

4. Memory Breakdown (96 GB)

Component Size
Main model weights (BF16) 51.05 GB
EAGLE MTP draft model 5.53 GB
Mamba/SSM state cache (ratio 1.5) ~9.1 GB
KV cache pool (FP8) ~11.4 GB (356,241 tokens × ~32 KB/token)
CUDA graphs + overhead ~2 GB
Static budget used (0.9 × 96) ~78 GB / 86.4 GB

Notes:

  • Qwen3.8-27B is a hybrid architecture: 48/64 layers are linear-attention (Gated DeltaNet), only 16 layers are full softmax attention — KV cache is charged for the 16 attention layers only (~32 KB/token FP8, estimated from pool sizing).
  • Mamba state memory is constant w.r.t. context length (scales with concurrency × slots), independent of the KV pool.

5. Measured Performance

Method: OpenAI-compatible /v1/chat/completions + SGLang scheduler logs (Decode batch lines: throughput, accept rate, KV usage). Real user traffic (agent tool-calling, 60K+ token contexts observed).

5.1 Decode throughput (EAGLE on)

  • Warm sustained: 77–80 tok/s, 30-batch rolling avg 77.6, peak 80.3
  • Draft accept rate: 0.94–1.00 (warm), accept length 2.5–3.45 tokens per step
  • vs. non-spec theoretical bandwidth bound (35 tok/s for 51 GB BF16 @ 1.79 TB/s): **2.2× speedup**

5.2 Latency

  • Warm end-to-end: 0.88 s for a 36-token completion (33 reasoning + 3 answer) incl. network
  • Cold start (first request after boot): 34.8 s — one-time warmup (flashinfer kernels, CUDA graphs), not representative

5.3 Prefill

  • Input throughput observed: 14–37 tok/s on 122-token batches (single user; not optimized for throughput)

5.4 Long context (real traffic)

  • KV pool usage at ~61K-token request: 17%; at ~80K: 23% — 262K context operates with ample headroom

6. Stability & Operational Notes

  1. Memory budget boundary: --mem-fraction-static above 0.95 → OOM at startup; 0.9 is the verified sweet spot for 262K + EAGLE. The KV pool is allocated statically at boot and does not grow into residual VRAM.
  2. flashinfer JIT: after container/image rebuilds, ~/.cache is wiped → first start recompiles kernels (3–5 min) and requires nvcc on PATH (CUDA_HOME must point at pip-installed nvidia components), otherwise the process is killed with RuntimeError: Could not find nvcc.
  3. Hybrid-architecture quirk: Mamba state (constant size) + KV pool are two independent memory pools; don't confuse full token usage (KV) with mamba usage.
  4. Stability: sustained 262K-context agent requests run fine at --max-running-requests 8; extremely long contexts + very large system prompts raise CPU/RAM pressure — keep single-user concurrency low.
  5. Reasoning: thinking is enabled by default; reasoning_effort (none/low/high) is honored via the API and is the correct lever for latency vs. depth trade-offs.

7. Reproduction

# verify model
curl http://<host>:<port>/v1/models -H "Authorization: Bearer test1234"
# → max_model_len: 262144

# warm request
curl http://<host>:<port>/v1/chat/completions \
  -H "Authorization: Bearer test1234" -H "Content-Type: application/json" \
  -d '{"model":"Qwen3.8-27B","messages":[{"role":"user","content":"1+1=?"}],"max_tokens":100}'

# live metrics (Prometheus)
curl -s http://127.0.0.1:30000/metrics | grep "^sglang:"

Logs (sglang.log) print per-batch throughput/accept-rate lines usable as a poor-man's monitor:

Decode batch, ... accept rate: 0.97, gen throughput (token/s): 78.30, ...

8. Conclusion

  • RTX PRO 6000 (96 GB) is a sweet-spot card for Qwen3.8-27B at full BF16 precision: native 262K context, ~78 tok/s with EAGLE, single-user agent production-ready.
  • EAGLE speculative decoding is the single highest-ROI flag (+~2.2×) at zero extra model download cost.
  • FP8 KV cache is safe (official default) and essential for reaching 262K on this GPU.

Benchmark data measured 2026-08-22 on Featurize cloud. Contact/feedback welcome.

This article was written by Hermes(deepseek-v4-flash).

5090 + tp 4 + eagle = high speed ?

Why did you leave ~8GB unused on the card? Pushing to 0.96-0.98 utilisation will give you another 200K or so context window, so you could have two or three concurrent sessions running.

Sign up or log in to comment