Qwen3.8-27B · EXL3 · batch 4096→8192

A/B: max_num_batched_tokens 4096→8192. No speedup; KV pool shrank 28k tokens. Recommend revert.

56.6
WARM DECODE (T/S)
58.1
COLD DECODE (T/S)
1.40
WARM TTFT (S)
40.20
COLD TTFT (S)
31.4
PEAK VRAM (GB)
1
CONCURRENT REQS
llm-servingexl3exl3xpub70ab-testASRock B70▼ −0.4 vs prev verdict: revert

Based on: https://github.com/SergiioB/intel-arc-pro-b70-inference-cookbook/blob/master/docs/qwen38-27b/EXL3-XPU.md

Single-variable A/B against run #2: only vllm.max_num_batched_tokens changed (4096 → 8192). Everything else identical (same image, weights, card, port). MTP×3 stays on; power cap unchanged (user deferred).

Status: complete (2026-10-17 ~01:50 UTC), no measurable speedup from the change; see Findings.

Config

Field Value
Model Qwen3.8-27B, turboderp/Qwen3.8-27B-exl3 @ rev 113cf7ab, EXL3 trellis 4.00 bpw (~15.7 GiB), MTP3 tensors, fp8 KV
Inference platform exl3xpu, vLLM XPU fork (ExLlamaV3 trellis + native ESIMD kernels). Image ghcr.io/0xsero/exl3xpu@sha256:21412bdd7535e9c653eeb3d099dce3bc79a83d440def2cd9556111c79c870fa8 (vLLM 0.26.1.dev0+g568afb3a1 inside)
GPU card2/renderD129 (ASROCK), single B70, --gpu 0
Port / host your-LAN-IP:9932
Context max_model_len=131072
GPU mem util 0.94
KV dtype fp8 (only option on this engine)
Speculative decoding native MTP×3 (unchanged from run #2)
Batching max_num_batched_tokens=8192 (was 4096, the variable under test); max_num_seqs=16; chunked prefill on
Prefill mode int8 W8A8 GEMMs (EXL3_INT8_PREFILL=1 default)
Prefix cache ON by default
Tooling --enable-auto-tool-choice --tool-call-parser qwen3_xml --reasoning-parser qwen3, served name Qwen3.8-27B
Power cap unchanged (user deferred)

Hypothesis

Run #2's startup log warned: max_num_scheduled_tokens is set to 4096 based on the speculative decoding settings … may lead to suboptimal performance. Raising the batch budget to 8192 should give the scheduler room for draft-token slots and larger prefill chunks → expect equal-or-better decode and faster cold prefill; watch for any regression in TTFT or KV pressure (gmu headroom was only ~1.3 GB at peak).

Stats

Metric Cold (req #1) Warm (APC hit)
Prompt tokens 64,388 64,388
TTFT (s) 40.20 (client; server /metrics 40.17; JIT-contaminated, new compile range 8192) 1.40
Prefill (tok/s) 6,438.6 (server window, identical to run #2) cache-served (hit rate 48.5%)
Decode (tok/s, generated) 58.1 (1,737 tok / 29.88 s; server windows 57.0/58.4 agree) 56.6 (1,120 tok / 19.77 s)
Completion tokens 1,737 (thinking + answer) 1,120 (thinking + answer)
E2E (s) 70.08 21.17
VRAM (GB) 28.5 at start (user) 31.4 peak (user)
MTP acceptance mean length 2.79; per-pos 0.782/0.596/0.410; draft accept 59.6% mean length ~2.6–2.9 (windows 2.58/2.88); draft accept 52.7–62.6%

Startup (from logs, 2026-10-17 01:46–01:49 UTC)

Findings

Recommendations

Quality variant

Carried from run #2 (unchanged by this variable): SC_5.00bpw_H6 mixed-K weights A/B; fp16 prefill (EXL3_INT8_PREFILL=0).

Speed variant

  1. Revert max_num_batched_tokens to 4096, no speed gain at 8192, cost −28k KV tokens (concurrency 2.02× → 1.80× at 131k).
  2. MTP off / depth-2 A/B, next single-variable test (acceptance decays to ~0.36 at pos 3).
  3. Power cap 230 W, deferred by user; doc's biggest lever (+33–42 % decode).
  4. APC stays ON; gmu 0.94 for single-client use.

Appendix: docker-compose (verbatim, as provided 2026-10-21)

services:
  exl3xpu:
    image: ghcr.io/0xsero/exl3xpu@sha256:21412bdd7535e9c653eeb3d099dce3bc79a83d440def2cd9556111c79c870fa8
    container_name: b70
    restart: unless-stopped
    ports:
      - "9932:9932"
    devices:
      - /dev/dri
    group_add:
      - "992"
    environment:
      ZE_FLAT_DEVICE_HIERARCHY: COMPOSITE
      HF_HOME: /root/.cache/huggingface
      HUGGINGFACE_HUB_CACHE: /root/.cache/huggingface/hub
    volumes:
      - ./models/qwen3.8-27b-exl3-4.00bpw:/mnt/exl3model:Z
      - ./cache:/root/.cache/huggingface:Z
    command:
      - models/qwen3.8-27b-exl3-4.00bpw
      - --gpu
      - "0"
      - --model-path
      - /mnt/exl3model
      - --set
      - vllm.gpu_memory_utilization=0.94
      - --set
      - vllm.max_model_len=131072
      - --set
      - vllm.max_num_batched_tokens=8192
      - --enable-auto-tool-choice
      - --tool-call-parser
      - qwen3_xml
      - --port
      - "9932"
      - --reasoning-parser
      - qwen3
      - --served-model-name 
      - "Qwen3.8-27B"
RELATED
2026-10-17 · exl3xpu · 1x B70 · ctx 131072