$curl -fsSL https://snowllm.dev/install.sh | sh
Checks the machine before downloading anything, then installs into
~/.local/share/snowllm and links snowllm into
~/.local/bin. Re-run to upgrade.
$pip install --index-url https://repo.amd.com/rocm/whl-multi-arch/ \ "torch[device-gfx1151]==2.12.0+rocm7.14.0" \ "torchvision==0.27.0+rocm7.14.0" $pip install snowllm snowllm-kernels
Linux x86_64 — tested
Windows 11 + WSL2 — not verified · ROCm reaches the GPU
through /dev/dxg there rather than /dev/kfd, so set it up with
AMD's WSL guide first. Nobody has run SnowLLM this way.
Speculative decoding is on at depth 2 in all rows below. Prefill and decode are reported separately, split at the last request's first token.
Total output tok/s. Prefill holds 3430–3467 tok/s throughout; TTFT runs 2.1 s at one user to 5.3 s at four.
Rows are the prompt length; every run generates 1K tokens on top of it. Prefill falls from 2315 to 1227 tok/s across the sweep, and time to first token at 220K is 168 s.
110 of 120 samples, ±4.2. Qwen reports 92.7 avg@8 for the same checkpoint. The gap sits inside the error bar, so treat it as agreement, not as a difference.
28 of 30 problems scored 3/4 or better. One problem has never converged on this checkpoint and alone accounts for 8% of the run's output tokens.
Only the Ryzen AI Max+ 395 has been tested. The rest of the 300 series shares the same GPU and should work, but nobody has checked. The installer refuses to run on anything else rather than fail later.
hf download Qwen/Qwen3.6-35B-A3B-FP8 --local-dir ~/models/Qwen3.6-35B-A3B-FP8 snowllm ~/models/Qwen3.6-35B-A3B-FP8
Serves an OpenAI-compatible API. snowllm --help lists every flag.
If huggingface.co is slow from where you are, hf honours the
HF_ENDPOINT environment variable — point it at a mirror you trust.
| Flag | What it does |
|---|---|
| --max-num-seqs | Concurrency ceiling, up to 256. A memory choice: each request pins linear-attention state for its whole life. |
| --max-model-len | Context length. A per-request ceiling, not a reservation — the KV pool is shared, and a request that outgrows it is preempted and re-prefilled. |
| --gpu-memory-utilization | Fraction of the GPU the server may occupy, 0.9 by default. |
| --prefix-cache-gib | Host RAM for remembering shared prompt prefixes, 4 by default. A repeat behind a 16K prefix costs 0.36 s instead of 5.1 s; the first one pays about 1%. |
| --num-spec | Speculative depth. The optimum depends on the workload; 2 is a robust default. |
| --kv-cache-dtype | bf16 or int8. int8 halves KV bytes: more decode throughput at long context, less prefill. |