localairecipes launch configs for local inference

Qwen3.8-Flash-Next Uncensored AWQ-g32 on 3x CMP 170HX — PP3, 1M ctx, NVMe PLE, MTP-4 (givisok)

00 upvotes — sign in to vote sign in to vote

community Community submission — verify on your own hardware.

recipe by recipe, tuning notes and measurements by givisok↗, base stack and vllm-sm80 fork by clee↗, AWQ-g32 checkpoint by leoncca↗, uncensored base by orcarouter↗, cudagraph capture-size idea from mannydelrio↗, vLLM (Apache-2.0)↗ · listed by localai-recipes

Initial version · updated 4 h ago · license CC-BY-4.0

chat code fp8-kv pipeline-parallel mtp-speculative uncensored long-context yarn-1m sm80 no-p2p nvme-staged-ple mamba-hybrid needle-validated

MTP-4 production recipe for Qwen3.8-Flash-Next-Uncensored (leoncca AWQ-g32) on 3x CMP 170HX (SM80 cards unlocked to 64 GiB): PP3 partition 17,17,14 (no GPU P2P on this pairing; the last rank carries target lm_head + MTP draft and binds the KV pool by raw bytes), fp8_e4m3 KV software-decoded on SM80, bf16 mamba SSM cache, 1,048,576-token context via YaRN x4 over the 262,144-native checkpoint, 51 GB fp8 PLE table streamed from NVMe (shard-direct preadv), MTP-4 speculative decode with the author's mtp-fp8 draft + W4A16 GPTQ-Marlin draft head. KV pool 5.28M tokens (5.04x) at gpu-mem-util 0.95. 10 required fork patches (QSA top-k tie fix, fp8 PLE staging, int8 PP hop, FN12 bounded prefill, ...); engine = clee vllm-sm80 q38fn lineage on pinned nightly 7d0b4e57, no published image. Author-claimed 2026-11-02: solo code 195 / structured 241 / prose 149 tok/s, decode 134 tok/s @1M (1.63 acc/draft), N=8 code aggregate 686, cold prefill 4,287 tok/s @1M, 18/18 multi-needle PASS (5-95% depth).

Launch command

IMAGE=vllm-sm80:q38fn FORK=/root/src/vllm-sm80 ./run-qwen38fn.sh

runtime

env: 'NCCL_P2P_DISABLE=1 NCCL_IB_DISABLE=1 NCCL_DEBUG=WARN (P2P hangs on these cards) | VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 (1M > checkpoint native 262144) | VLLM_PP_LAYER_PARTITION=17,17,14 (1 layer off the last rank; rollback 17,16,15) | VLLM_PLE_STAGED=1 VLLM_PLE_MMAP=0 VLLM_PLE_SYNC=1 (sync closes the fp8-PLE H2D staging race) | VLLM_QWEN4_QSA_TOPK_CANONICAL=1 VLLM_QWEN_QSA_TOPK_SORTED=1 (QSA top-k tie fix) | VLLM_QWEN4_ROUTER_FP32=1 VLLM_QWEN4_MTP_PER_STREAM_NORM=0 | VLLM_QWEN4EXP_PP_INT8_HOP=1 (g4bwy 0006 port) | VLLM_MTP_DRAFT_HEAD_PATH=/models/qwen38fn-awq-g32/draft-lm-head-w4a16-g128.safetensors | VLLM_MIXED_PREFILL_CHUNK=864 (FN12 bounded prefill) | VLLM_SWA_BLOCK_CAP=432 VLLM_SWA_NO_PREFIX_CACHE=1 (dflash-lane knobs, inert on the mtp lane) | VLLM_PLE_PREFILL_CHECKPOINT=1 | QWEN4EXP_PLE_MODEL_DIR=/models/qwen38fn-awq-g32 | HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 | PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True PYTORCH_NVML_BASED_CUDA_CHECK=1 VLLM_WORKER_MULTIPROC_METHOD=spawn'
notes: 'run-qwen38fn.sh (default CONFIG=configs/awq-1m-fp8-ssmbf16-mtp4.yml, SPEC_MODE=mtp, since 2026-11-02) execs docker run -d --gpus all --ipc=host --ulimit memlock=-1 --restart unless-stopped -p 0.0.0.0:8080:8000 with /home/models ro at /models, the config yml ro at /opt/stack.yml, the fork vllm/ tree bind-mounted over the image dist-packages, --entrypoint vllm vllm-sm80:q38fn serve --config /opt/stack.yml. All serve args live in the yml: model /models/qwen38fn-awq-g32, served-model-name qwen3.8, api-key set on server, host 0.0.0.0 port 8000, distributed-executor-backend mp, tensor-parallel-size 1, pipeline-parallel-size 3, disable-custom-all-reduce true, dtype bfloat16, max-model-len 1048576, block-size 1728, max-num-seqs 16, max-num-batched-tokens 8192, long-prefill-token-threshold 2048, gpu-memory-utilization 0.95, kv-cache-dtype fp8_e4m3, enable-prefix-caching, prefix-cache-retention-interval 17280, prefix-match-unit 16, enable-chunked-prefill, mamba-cache-mode align, mamba-ssm-cache-dtype bfloat16, async-scheduling true, compilation-config cudagraph_mode FULL_AND_PIECEWISE cudagraph_capture_sizes [1,2,5,10,15,20,25,30,40,50,60,70,80], enable-flashinfer-autotune false, speculative-config {method mtp, model /models/qwen38fn-awq-g32/mtp-fp8, num_speculative_tokens 4}, chat-template /opt/chat_template.jinja (checkpoint chat_template.jinja), trust-request-chat-template, enable-auto-tool-choice, tool-call-parser qwen3_xml, reasoning-parser qwen3, default-chat-template-kwargs {enable_thinking true, preserve_thinking true, reasoning_effort xhigh (xhigh/medium/low only)}, hf-overrides text_config.layer_types [linear_attention x3, qwen_sparse_attention] x12 and rope_parameters {rope_type yarn, factor 4.0, original_max_position_embeddings 262144, rope_theta 10000000, partial_rotary_factor 0.25, mrope_interleaved true, mrope_section [11,11,10]}. CAVEAT (verbatim from the yml): the disk KV tier (kv-disk) must be wiped when swapping model checkpoints — entries are content-addressed by tokens, not weights; the kv-transfer-config tiering block itself is REMOVED (fork OffloadingConnector corrupted multi-chunk cached prefixes — word-salad, ablation 5/5 garbage vs 6/6 clean). Rollback rungs: MTP-3 CONFIG=configs/awq-1m-fp8-ssmbf16.yml; fast code lane valid to depth 262,144 only: SPEC_MODE=dflash (k5+bf16 mamba, code 253-257 solo; drafter has no rope_scaling, speculation dies past the YaRN boundary at ~47 tok/s). Host: Proxmox LXC CT101 Debian, swap 0, 3 cards passed through, memlock unlimited.'

Use this recipe with your agent

Paste this into any agent chat — it fetches and applies the recipe:

Fetch https://localairecipes.com/api/v1/recipes/qwen3-8-flash-next-uncensored-awq-g32-on-3x-cmp-170hx-pp3-1m-ctx.json and apply the inference recipe it describes (engine flags, model, quant, context) to my setup. Ask before overwriting any existing config.

Or fetch it directly:

curl -fsSL https://localairecipes.com/api/v1/recipes/qwen3-8-flash-next-uncensored-awq-g32-on-3x-cmp-170hx-pp3-1m-ctx.json

Engine

Install note: NOT installable from the stock image: the stack is the clee/qwen3.8-flash-next-3x170hx vllm-sm80 fork (q38fn lineage) on the pinned upstream nightly 7d0b4e57aac4c4323225b0eee9ae960ce75ffffe, with this repo's patches/ series applied; production fork state q38fn/stack-local @ 3c367a58e5 (content = branch dflash2-pool @ 9eadcf0a8f + patches/dflash2-pool-increment.diff), kit main @ f248264. Build vllm-sm80:q38fn from the clee repo's Dockerfile, or bind-mount the fork vllm/ files over the pinned nightly (run-qwen38fn.sh does the bind-mounts); newer nightlies are not validated against this stack. Image is a local build — no published digest.

Model

Context

  • max context: 1M tokens

KV pool

  • 5,280,000 tokens across concurrent requests

Performance

Speed by context

ContextConc.PrefillDecodeTTFT
4,0961—195 tok/s—reported
4,0968—686 tok/s—reported
131,072—4179 tok/s——reported
1,048,576—4287 tok/s—235600 msreported
1,048,5761—134 tok/s—reported

prefill = prompt processing · decode = generation. All decode/prefill figures are shown as reported.

reported

notesAll figures author-claimed in the repo at 91803a4a (measured 2026-11-01/02), UNVALIDATED on-box; claimed_by=submitter T0 — no raw run file ingested, import via POST /api/v1/benchmarks to upgrade. Solo = sparkDash DecodeBench protocol replica (scripts/sd_bench.py), per-request medians, MTP-4 lane: solo c1 variant split code 195 / structured 241 / prose 149 tok/s (one row landed, variants kept here). 1M: scripts/needle_1m.py 2026-11-01 — 1,010,326-token wall, 6 needles x3 phrasings 18/18 PASS at 5-95% depth, cold prefill 235.6 s = 4,287 tok/s, prefix-cache resend TTFT 4.3-4.5 s (~52x). Depth sweep NOTES §21: MTP flat to 1M, 1.63 acc/draft, 134 tok/s @1M. Exact KV pool 5,282,636 tokens / 5.04x after the 2026-11-02 gpu-memory-utilization 0.94->0.95 A/B (runs/gmu095/; 131k battery cold prefill 4,179 tok/s, follow-up-turn TTFT 2.10 s, needle 120k PASS).

Downloads

Revision notes

Initial version.

Revision history

Initial version.

Fork

Sign in to fork this recipe — a fork is your own copy; you own it and only you can update it.

Export

recipe.yaml (raw)