localairecipes launch configs for local inference

DeepSeek-V4.1-Flash-1017 EXL3 2.9bpw TC-MoE on 4x CMP 170HX TP4

00 upvotes — sign in to vote sign in to vote

community Community submission — verify on your own hardware.

recipe by CurtisAccelerate↗, Morrowmake↗, Measured serve used local image sha256:55d2bd9a6664 (no published image)↗, turboderp-org/exllamav3 - EXL3 codec @ d3739fd3 (MIT; Copyright (c) 2025 Turboderp)↗, PixelML/sm80vllm branch sm80 (DeepseekV4AmpereMLAAttention) - SM80 attention for this model↗ · listed by localai-recipes

revision r3 · commit 306225cea8 · updated 21 h ago · license CC-BY-4.0

chat code fp8-kv mtp-speculative dspark long-context exl3 tp4 host-allreduce prefix-caching tensor-core-moe arena-cache

DeepSeek-V4.1-Flash-1017 (the 2026-10-17 re-release checkpoint, NOT the original DeepSeek-V4.1-Flash) as a hybrid quant on the TC-MoE port: official deepseek-ai/DeepSeek-V4.1-Flash-1017 FP8 tensors for attention, shared experts, head, DSpark draft and Engram (shards 47/48), with LibertAIDAI/...1017-EXL3-2.9bpw routed experts (layers 0-39, mostly 3-bit, layers 18-22 2-bit) TP4 on four CMP 170HX cards (sm_80, 140 W, ~62.5 GB/card). Same Morrowmake kernels + image as the EXL3 3bpw TC-MoE recipe; VLLM_EXL3_COOP=1; EXL3 arena cache (~1.1 GiB/layer, load shortcut only). 1017 quantization_config.json is the switch (dsv41_main_routed_experts_only, mtp_experts=source, non-routed stays FP8, compressor projection BF16). Author-measured: 180.4/137.1/96.6 tok/s structured/code/prose c1; 8-user aggregate 621.1/376.1/282.5 vs 564.7 previous Mia 3.0bpw. Cold 131k prompt 1,330 prefill / 163.9 decode. Needles 9/9. KV pool 1,534,065 tokens; vision on, drafter text-only.

Launch command

'docker run -d --name dsv41-1017 --cap-add SYS_NICE --gpus all --network host --ipc host --ulimit memlock=-1 --ulimit stack=67108864' '-v <hybrid_model_dir>:/model-view:ro -v <arena_cache_dir>:<arena_cache_dir>' '-v <exl3_py>:/usr/local/lib/python3.12/dist-packages/vllm_exl3/exl3.py:ro -v <sm80_dir>:/usr/local/lib/python3.12/dist-packages/vllm/sm80:ro' '-v <envs_py>:/usr/local/lib/python3.12/dist-packages/vllm/envs.py:ro -v <cuda_py>:/usr/local/lib/python3.12/dist-packages/vllm/platforms/cuda.py:ro' '-v <tc_hook>:/opt/dsv41-tc-moe/exl3_tc_hook.py:ro -v <tc_so>:/opt/dsv41-tc-moe/_dsv41_tc_moe_C.abi3.so:ro' '-e VLLM_EXL3_MODEL_DIR=/model-view -e VLLM_EXL3_ARENA_CACHE=1 -e VLLM_EXL3_ARENA_CACHE_DIR=<arena_cache_dir>' '-e VLLM_PLUGINS=vllm_exl3 -e VLLM_USE_V2_MODEL_RUNNER=0 -e DSV41_DSPARK_V1=1' '-e VLLM_EXL3_COOP=1 -e VLLM_HOST_ALLREDUCE=1 -e NCCL_P2P_DISABLE=1 -e NCCL_IGNORE_DISABLED_P2P=1 -e NCCL_CUMEM_ENABLE=0' '-e VLLM_EXL3_TC_MOE_V2=1 -e VLLM_EXL3_TC_MOE_PREFILL=1 -e VLLM_EXL3_TC_PREFILL_ROWS=2048' '-e VLLM_EXL3_TC_MOE_SO=/opt/dsv41-tc-moe/_dsv41_tc_moe_C.abi3.so -e VLLM_EXL3_MOE_TP_ALIGN=128 -e VLLM_EXL3_MOE_TP_ROTATE=1 -e TORCH_CUDA_ARCH_LIST=8.0' '--entrypoint vllm <dsv41_image>' 'serve /model-view' '--quantization exl3 --load-format safetensors --safetensors-load-strategy lazy' '--pipeline-parallel-size 1 --tensor-parallel-size 4' '--served-model-name deepseek-v4.1-flash-1017 --host 0.0.0.0 --port 8095' '--max-model-len 262144 --max-num-seqs 8 --max-num-batched-tokens 2048 --gpu-memory-utilization 0.97' '--kv-cache-dtype fp8_ds_mla --engram-config {"cpu_offload": true} --enable-prefix-caching' '--compilation-config {"cudagraph_mode": "FULL_AND_PIECEWISE", "cudagraph_capture_sizes": [1, 2, 3, 4, 6, 8, 12, 18, 24, 30, 36, 42, 48]}' --async-scheduling '--speculative-config {"method": "dspark", "num_speculative_tokens": 5}' '--tokenizer-mode deepseek_v41 --enable-auto-tool-choice --tool-call-parser deepseek_v41 --reasoning-parser deepseek_v41'

serving_selection_2026_10_26

band: 'batches of 2-8 users; batch 7 pads onto the 48-row batch-8 graph; draft length stays 5 (6 rows per request). Draft length 7 and the Mia weights are NOT part of this selection.'
lane: '2-8 user decode lane = experiments/ds1017-r2-b2-b8 (separate source, DEFAULT OFF). The published C1 source stays the one-user bundle in experiments/ds1017-native-mixed-and-split (native mixed experts, split attention, captured K5 drafter).'
image: "UNAVAILABLE (never published): the author states 'There is still no pullable image' (SERVING-2026-10-26.md). The only image identifier in the stack, sha256:55d2bd9a6664aea2540e3f8e373d784b88420d35c3cedefc9f03923cd687b6f5, is a LOCAL docker image id recorded for the measured serve (1017 repo README.md:93), not a registry reference; the site's image_digest is null. Cloning the repo does not turn the lane on: no image boots the 2-8 user graphs or the sampled drafter yet."
hardware: '4x CMP 170HX (sm_80) host as measured; the October 26 run used the 1017 weights on this host class.'
measurements: 'https://github.com/CurtisAccelerate/DeepSeekv41-Flash-1017-EXL3-CMP170HX/blob/main/benchmarks/2026-10-26/README.md'
lane_defaults: 'DSV41_R2_BATCHES=2-8; DSV41_R2_COMPONENTS=attention,experts,collective,sampler,sampled; DSV41_R2_PAD7=1; DSV41_R2_SPLITS=per batch nearest the one-user 96-CTA shape (empty = default); DSV41_R2_EXPERTS=coop, or tc when tensor-core v2 covers the row count; DSV41_R2_COLLECTIVE=pair at 48 rows, otherwise the host all-reduce size rule; DSV41_R2_CAP_MIB=768 (retained-graph cap checked at startup).'
measured_plan: 'With DSV41_R2=1, DSV41_R2_PAD7=1 and VLLM_EXL3_TC_MOE_V2=1 and no per-batch overrides the defaults are the measured plan: cooperative experts for batches 2-6, tensor-core experts + pair collective at batch 8, batch 7 served by the batch-8 graph. New attention for every batch size; a temperature-0 request stays greedy at every batch size.'
published_from: "CurtisAccelerate/DeepSeekv41-Flash-EXL3-TC-MoE @ e559217ac4f90dd8c2e4820f97b259e584efcf1f (experiments/ds1017-native-mixed-and-split/SERVING-2026-10-26.md + experiments/ds1017-r2-b2-b8/README.md; commits 'Publish the 2-8 user lane and its default-off flags' and 'Note the October 26 serving selection and the missing image')"
default_off_flags:
  -
    flag: DSV41_R2
    effect: 'Master switch for the 2-8 lane; 1 is the only armed value, malformed flag raises at boot. Being present in the repository does NOT turn the lane on.'
    default: '0 (off)'
  -
    flag: VLLM_EXL3_TC_MOE_V2
    effect: 'Required for the tensor-core expert path on the 48-row graph; the launch command of this recipe arms it explicitly (-e VLLM_EXL3_TC_MOE_V2=1).'
    default: '0 (off)'
  -
    flag: dsv41_draft_tq
    effect: 'Per-request sampled-drafter flag; NOT turned on by DSV41_R2. The October 26 selection keeps the drafter greedy at batches 2-8 and uses it only for a single temperature-1 request (outside this lane).'
    default: 'off'
  -
    flag: DSV41_ARENA_CACHE_DIR
    effect: 'Optional gate in scripts/run-tp4-tcmoe.sh: unset/empty = zero argv change; when set it adds -v DIR:DIR, -e VLLM_EXL3_ARENA_CACHE=1 and -e VLLM_EXL3_ARENA_CACHE_DIR=DIR.'
    default: 'unset (off)'
launch_consistency: 'The launch command above already carries the opt-in arena-cache group (-e VLLM_EXL3_ARENA_CACHE=1 -e VLLM_EXL3_ARENA_CACHE_DIR=<arena_cache_dir>) and arms VLLM_EXL3_TC_MOE_V2=1; DSV41_R2 is NOT set in the launch command, so the published serve keeps the 2-8 lane default-off until armed.'

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/deepseek-v4-1-flash-1017-exl3-2-9bpw-tc-moe-on-4x-cmp-170hx-tp4.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/deepseek-v4-1-flash-1017-exl3-2-9bpw-tc-moe-on-4x-cmp-170hx-tp4.json

Engine

Install note: Same serving image + EXL3 plugin + TC-MoE .so as the EXL3 3bpw TC-MoE recipe (this checkpoint changes weights, not the stack): build out/_dsv41_tc_moe_C.abi3.so from DeepSeekv41-Flash-EXL3-TC-MoE build_standalone.py against the image's PyTorch. Hybrid checkpoint = official 1017 FP8 tensors (attention/shared/head/draft/Engram shards 47-48) + LibertAI routed experts layers 0-39 + quantization_config.json from the 1017 repo. No published container image; weights are not included.

Model

Context

  • max context: 256K tokens

KV pool

  • 1,534,065 tokens across concurrent requests

Performance

Speed by context

ContextConc.PrefillDecodeTTFT
2,0481—155.5 tok/s—reported
2,0801—116.1 tok/s—reported
2,1121—175.7 tok/s—reported
2,1441—94.7 tok/s—reported
3,0721—187.7 tok/s—reported
3,1041—195.4 tok/s—reported
4,0968—275.1 tok/s—reported
4,1288—276.6 tok/s—reported
93,335—1389 tok/s——reported
93,33511391.1 tok/s——reported

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

reported

metrics{"notes":"Measured 2026-10-25 cumulative single-user decode (benchmarks\/2026-10-25\/results.json @ CurtisAccelerate\/DeepSeekv41-Flash-1017-EXL3-CMP170HX 8b4e52906e, sha256 3f8e70fa7e5538b30dfe5db887a574eeb8872781203ade02d76bc898069cb992; hardware 4x CMP 170HX; metric \"Single-user streamed decode tokens\/second\"; baseline \"Published October22 results, same published configuration across each suite\"). Table (Task | Published baseline | Part 1: native mixed | Part 1 change | Part 2: combined | Part 2 change | Final total; tok\/s): Short code 144.23 | 146.28 | +1.42% | 155.54 | +6.33% | +7.84%; Short prose 101.16 | 102.82 | +1.64% | 116.05 | +12.87% | +14.72%; Spark-matched code 158.36 | 169.44 | +7.00% | 175.73 | +3.71% | +10.97%; Spark-matched prose 83.64 | 88.46 | +5.76% | 94.65 | +7.00% | +13.16%. Spark-matched rows are the Spark PROMPT SUITE run on THIS host (the same 4x CMP 170HX machine) \u2014 not a DGX Spark result, not a hardware comparison, not a second system. Separate statistic (not a column, not added to the historical percentages, per limitations): median paired Part 2 gains in the same-load three-pair comparison \u2014 short code +6.33%, short prose +12.87%, Spark-matched code +3.71%, Spark-matched prose +6.25%. Controlled counting (same host): 187.723 -> 195.423 tok\/s, +4.10% \u2014 24 requests in 6 balanced blocks; matched output\/prompt\/cache\/speculative work; counting only; not a +4.10% claim for every code\/prose request. Spark-suite C8 aggregate (this host): 275.11 -> 276.55 tok\/s (+0.52%, ratio of medians). Cold prefill 93,335 prompt tokens at 1,389.0 -> 1,391.1 prompt tok\/s; prefill = prompt ingestion in the same passes, not decode; no consistent C4\/C8 or cold-prefill gain. Matched task-quality screen: code 5\/5 vs 4\/5, prose strict 0\/5 vs 1\/5, prose checklist+format 5\/5 vs 5\/5; quality_equivalence_established false; experimental split attention is not bit-exact, broader verification needed. Historical changes describe configurations across runs, not isolated causal component effects. No row derives from benchmarks\/2026-10-24\/broadwell-vs-morrowmake."}

Downloads

Revision notes

Scouted + ingested by localai-recipes from CurtisAccelerate/DeepSeekv41-Flash-1017-EXL3-CMP170HX (created 2026-10-18, pinned @ b8b9e993); 1017 weight selection, hybrid recipe and measurements by Curtis White. This recipe serves the 1017 checkpoint (deepseek-ai/DeepSeek-V4.1-Flash-1017 @ 1bae0e10, official FP8 attention/shared-experts/head/draft/Engram shards 47-48 + LibertAIDAI/DeepSeek-V4.1-Flash-1017-EXL3-2.9bpw @ 0be63c33 routed experts layers 0-39, MIT licensed; the quant is LibertAI's) — NOT the original deepseek-ai/DeepSeek-V4.1-Flash, and not the Mia-AiLab EXL3 3.0bpw checkpoint of the sibling EXL3 3bpw TC-MoE recipe. Same Morrowmake kernel base vllm-cmp170hx @ 18305948 (Apache-2.0) and EXL3 codec (turboderp exllamav3, MIT) as that sibling. AA Intelligence 45 is AA's published index for DeepSeek V4.1 Flash 1017 (Max), read from the AA model page 2026-10-19 (Index v4.3.2; original V4.1 Flash is a separate 39 entry). All performance numbers author-reported (T0). 1017 measured table refresh (kanban t_1bc89b18, deferred lane of t_22817e0f, preprod only per owner ruling 2026-10-28): performance rebuilt cell-exact from benchmarks/2026-10-25/results.json (sha256 3f8e70fa7e5538b30dfe5db887a574eeb8872781203ade02d76bc898069cb992) at the re-pinned 1017 commit 8b4e52906e; pin honesty — the cited file exists only from 8b4e52906e (b8b9e993e0 -> 8b4e52906e is 14 commits, GitHub compare 'ahead'); fdb629e/a06e30d9 NOT pinned (Oct-28 gate-kernel commits post-date the audited evidence; next sweep). The comparison measures Morrowmake's repo run on this Broadwell. Those figures are our measurements, not numbers published by Morrowmake. Stale October-18 headline points and the long-context curve retired; perf points 10 -> 10.

Revision history

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)