🚀 DGX Spark QuickStart — Ornith-1.0-35B AEON Ultimate Uncensored (NVFP4 + DFlash)
Built and tuned for the NVIDIA DGX Spark — GB10 (Blackwell sm_120), 128 GB unified memory. Optimal deploy: the NVFP4 build (23.7 GB) + a DFlash drafter for ~1.9× single-stream speedup, served on the AEON vLLM container.
This guide is specifically for the DGX Spark. The settings below (especially --gpu-memory-utilization 0.7 and --mamba-cache-dtype float32) are chosen for the Spark's unified-memory GB10; other GPUs may want different values.
1. Prerequisites
- NVIDIA DGX Spark (GB10, Blackwell). NVFP4 requires a Blackwell GPU.
- Docker with the NVIDIA container runtime.
- AEON vLLM container:
ghcr.io/aeon-7/aeon-vllm-ultimate:latest(hasqwen3_5_moe+ sm_121a + DFlash support — stock vLLM is not recommended on the Spark for this arch). - ~25 GB disk for the model, ~1 GB for the drafter.
2. Download the model (+ DFlash drafter)
huggingface-cli download AEON-7/Ornith-1.0-35B-AEON-Ultimate-Uncensored-NVFP4 \
--local-dir ~/models/ornith-nvfp4
# DFlash drafter: a Qwen3.6-35B-A3B DFlash drafter (Ornith == Qwen3.6-35B-A3B base, so it is compatible)
# place it at ~/models/ornith-dflash-drafter
3. Serve — optimal DGX Spark settings
docker run -d --name ornith --gpus all --ipc=host --net=host \
-e TORCH_CUDA_ARCH_LIST=12.1a -e CUTE_DSL_ARCH=sm_121a -e VLLM_USE_FLASHINFER_SAMPLER=1 \
-v ~/models/ornith-nvfp4:/model:ro \
-v ~/models/ornith-dflash-drafter:/drafter:ro \
--entrypoint vllm ghcr.io/aeon-7/aeon-vllm-ultimate:latest \
serve /model --served-model-name ornith \
--quantization compressed-tensors \
--speculative-config '{"method":"dflash","model":"/drafter","num_speculative_tokens":6}' \
--gpu-memory-utilization 0.6 \
--max-model-len 262144 --max-num-seqs 16 --max-num-batched-tokens 16384 \
--mamba-cache-dtype float32 \
--reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_coder \
--enable-prefix-caching --trust-remote-code
4. Why these settings (DGX Spark specifics)
| Flag | Value | Why on the Spark |
|---|---|---|
--gpu-memory-utilization |
0.6 | The Spark's 128 GB is unified (CPU+GPU share it). 0.6 is the validated-stable value with DFlash on — it leaves ~41 GB headroom for the OS, co-located services, and DFlash's speculative-verify buffers (which are not fully counted in this budget — see Stability below). 0.7 is fine on a dedicated box; do not exceed ~0.7 with DFlash. |
--max-num-seqs |
16 ⚠️ | Hard cap on the Spark with DFlash. DFlash's per-sequence draft+verify buffers scale with max-num-seqs; at 32–64 they spike past the memory budget and can exhaust the unified pool → hard box crash. 16 is stable (peak 80/121 GB). For higher batch throughput, disable DFlash rather than raising this. |
--speculative-config dflash … n=6 |
n=6 | Optimal single-stream (peaks at 6; higher n wastes draft/verify on low-acceptance positions). Validated stable at max-num-seqs 16 (n barely affects peak memory there). The Qwen3.6-35B-A3B drafter works because Ornith is a light RL post-train of that base. |
--mamba-cache-dtype |
float32 | Precision for the GatedDeltaNet (SSM) recurrent state. |
--quantization |
compressed-tensors | The NVFP4 build is nvfp4-pack-quantized. |
(omit) --kv-cache-dtype fp8 |
— | The vision tower forces BF16 KV (FP8 KV is incompatible with the non-causal vision/DFlash path). |
--max-model-len |
262144 | Full 256K context fits thanks to NVFP4's small footprint. Lower it to free KV memory if you don't need long context. |
5. Smoke test
curl -s http://localhost:8000/v1/chat/completions -H 'content-type: application/json' -d '{
"model":"ornith","messages":[{"role":"user","content":"Write a Rust function that returns the median of a slice."}],
"max_tokens":400,"temperature":0.6,"top_p":0.95,"top_k":20}' | python3 -m json.tool
Reasoning model: every reply opens <think>…</think>. Recommended sampling: temperature 0.6, top_p 0.95, top_k 20.
6. Performance (measured on DGX Spark GB10, single-stream)
Same Spark, same prompts, three stacks — so you can see the quantization win and the optimization win separately:
| Workload | BF16 · stock vLLM | NVFP4 · stock vLLM | NVFP4 + DFlash · AEON (this guide) |
|---|---|---|---|
| Coding | 30.8 tok/s · 237 ms | 38.5 · 70 ms | 77.1 · 94 ms |
| Reasoning | 30.6 · 247 ms | 38.4 · 77 ms | 107.0 · 93 ms |
| Math | 30.5 · 221 ms | 38.3 · 72 ms | 119.0 · 88 ms |
| Prose | 30.4 · 193 ms | 38.3 · 69 ms | 70.3 · 91 ms |
| Avg decode | 30.6 | 38.4 | 93.3 |
| Prefill | 3,517 tok/s | 5,203 | 9,661 |
- Quantization (BF16 → NVFP4): ~1.25× decode, 3.2× faster TTFT, 1.5× prefill — and a 64% smaller footprint (66 → 24 GB).
- Optimization (NVFP4 → + DFlash on the AEON container): ~2.4× decode (DFlash; biggest on math/reasoning).
- Combined vs a naive BF16 deploy: 3.05× decode · 2.5× TTFT · 2.75× prefill. Largest at c=1; tapers under heavy concurrency.
Concurrency / throughput (NVFP4 + DFlash n=6, max-num-seqs 16 — the safe envelope)
| Concurrency | aggregate tok/s |
|---|---|
| c=1 (per user) | 70 |
| c=8 | 203 |
| c=16 | 456 |
Validated stable through c=16 with ~41 GB unified-memory headroom (peak 80 / 121 GB, zero watchdog kills). DFlash wins single-stream 1.78× (70 vs 39 tok/s) and carries no penalty up to the seqs=16 ceiling.
⚠️ Stability — do not raise
--max-num-seqsabove ~16 with DFlash on the Spark. DFlash's per-sequence speculative-verify buffers are not fully accounted by--gpu-memory-utilization; at a cap of 32–64 they spike past the budget and exhaust the 121 GB unified pool, which hard-crashes the whole box (kernelNVRM … NV_ERR_NO_MEMORY). If you need higher batch throughput, run plain NVFP4 (no DFlash) — it scales to higher concurrency safely — rather than raisingmax-num-seqswith DFlash on.
Notes
- Long-running services: DFlash drafter acceptance can decay over many hours of continuous traffic; restarting the container restores it (or run a periodic health-check that does).
- Uncensored: safety refusals are removed — you are responsible for use; obey applicable law.
Xet Storage Details
- Size:
- 6.47 kB
- Xet hash:
- 67fac7a237b922c7aba914bb803db9c76b0f2fab5b948d7bf5be24cad96270fe
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.