Skip to content

vLLM: spike MTP k=3 sur stock vLLM + AWQ (test isolé, ai-01 GPU 2 ou créneau hors-prod) #2433

@myia-ai-01

Description

@myia-ai-01

Contexte

Check upstream + community 2026-05-30 confirme que MTP (Multi-Token Prediction) est maintenant mature pour Qwen3.6-35B-A3B en vLLM 0.9+. Trois sources indépendantes :

  • vLLM officiel : MTP listé comme méthode speculative-config supportée pour Qwen3.6-35B-A3B + Qwen3.6-27B dense + DeepSeek V3/V4 + Gemma 4 26B
  • gugletter.com (community guide, 2026-05-12) : 70-85% acceptance, k=3 optimal
  • HackMD thc1006 (qwen3.6-vllm-2x3090 v3/v4/v5, Zenodo 10.5281/zenodo.20247229) : bench quantifié dual 3090 PCIe + AWQ + vLLM 0.19.1 → MTP k=3 + --no-enable-prefix-caching = +27.5% décode TPOT

Le workaround --no-enable-prefix-caching est lié à vllm#38182 (interaction prefix-cache × MTP spécifique aux modèles A3B-class, hit rate 92% → 71% avec MTP ON).

Mon ancien CLAUDE.md #4 ("0% acceptance with AWQ") reste vrai uniquement pour notre Q1 stack, pas une vérité générale.

Pourquoi un spike (et pas un swap prod)

Production v2g (Genesis-TQ k8v4) tourne très bien :

  • 829 tok/s aggregate N=16
  • KV cache 2.03M tokens (×6.3 vs FP8 baseline)
  • Charge actuelle ~27 req/h → <1% capacité

La recette HackMD valide tourne sur stock vLLM 0.19.1 + AWQ + FP8 KV — incompatible avec Genesis-TQ. Switcher en prod signifie :

v2g actuel MTP test
KV cache 2.03M tokens ~322K (FP8)
Multi-user N=16 829 tok/s non testé, probable <
Single décode 120 tok/s +27% à +94%
Prefix caching ON OFF (workaround A3B)

Notre bottleneck identifié est multi-user KV capacity (cf. project_turboquant_hybrid_status.md en MEMORY.md), pas single-stream — donc pas de raison de bouger la prod. Mais un spike isolé apporterait deux bénéfices :

  1. Bench comparable sur notre hardware (Ada SM89 + dual 4090) — la communauté est sur 3090 (Ampère SM86). Nouveau datapoint upstream-postable.
  2. Disambigue notre Att4 deepcopy poison (crash transformers/configuration_utils.py:678 → AutoConfig.from_pretrained → copy.deepcopy(kwargs), Att4 sur FP8+MTP). Si MTP boote clean en stock vLLM, ça confirme que Att4 était une interaction Genesis-spécifique (dual-config-load), pas un bug vLLM général. Cf. project_spec_dec_retired_post_v2g.md.

Recette à tester

Image stock vLLM (pas Genesis) :

image: vllm/vllm-openai:v0.19.1  # ou nightly récente sans Genesis layer
args:
  - --model cyankiwi/Qwen3.6-35B-A3B-AWQ-4bit
  - --served-model-name qwen3.6-35b-a3b
  - --tensor-parallel-size 2
  - --kv-cache-dtype fp8
  - --max-model-len 131072
  - --speculative-config '{"method":"mtp","num_speculative_tokens":3}'
  - --no-enable-prefix-caching      # workaround vllm#38182 A3B-class
  - --enable-expert-parallel
  - --tool-call-parser qwen3_coder
  - --reasoning-parser qwen3

À mettre dans myia_vllm/configs/docker/profiles/medium-qwen36-mtp-spike.yml (nouveau profile, isolé).

Plan d'exécution (créneau hors-prod requis)

  1. Coordonner avec CoursIA pour fenêtre GPU 0/1 disponible (ou tester sur GPU 2 si Track B trainings le permettent — moins de VRAM mais possible avec max-model-len réduit)
  2. Stop medium-qwen36-moe (Genesis-TQ)
  3. Up medium-qwen36-mtp-spike.yml
  4. Bench : single-user décode (no-think + thinking), 5-user concurrent, 16-user concurrent, KV cache size, prefix cache hit rate (devrait être ≈0 avec --no-enable-prefix-caching)
  5. Critère go/no-go pour MTP en prod :
    • Si N=16 aggregate ≥ 700 tok/s ET single-user décode ≥ 150 tok/s : envisager bascule
    • Sinon : confirme que multi-user KV (notre cas) > MTP single-stream → stay v2g
  6. Rollback : down spike, up Genesis-TQ. Capture résultats.
  7. Si bench clean : datapoint upstream (vLLM discussion ou commentaire #41726 follow-up "MTP works on Ada SM89 too")
  8. Si Att4 ne reproduit pas en stock : update project_spec_dec_retired_post_v2g.md confirmant origine Genesis

Critères d'acceptation

  • Profile medium-qwen36-mtp-spike.yml versionné
  • Créneau hors-prod identifié et coordonné
  • Bench complet (single + concurrent + KV) capturé dans myia_vllm/_iteration_log/mtp_spike_YYYY-MM-DD/
  • Décision documentée (go MTP prod / stay v2g)
  • Si stay v2g : MEMORY.md project_spec_dec_retired_post_v2g.md enrichi avec le datapoint MTP Ada
  • Si Att4 reproductible en stock : nouvelle issue upstream filée
  • Si Att4 non reproductible en stock : MEMORY.md enrichi confirmant origine Genesis (utile pour future re-tentative)

Hors scope

  • Pas de modification du profile prod medium-qwen36-genesis-tq.yml avant validation complète
  • Pas de spike pendant fenêtre soutenance EPITA ou autre événement classe étudiants
  • Pas de remplacement du Genesis-TQ image si MTP gagne sur single-stream mais perd sur multi-user

Références

  • d:\vllm\CLAUDE.md "Critical Configuration Notes" Short Task #4 + "Current State"
  • MEMORY.md : project_spec_dec_retired_post_v2g.md, project_turboquant_hybrid_status.md, project_speculative_decoding_landscape.md
  • HackMD : https://hackmd.io/@thc1006/qwen3.6-vllm-2x3090 (et versions v3/v4/v5)
  • Zenodo : https://doi.org/10.5281/zenodo.20247229
  • vllm#38182 (prefix-cache × MTP A3B), vllm#41726 (v2g follow-up), vllm#41559 (DFlash+TQ POC MidasMining)
  • gugletter community guide (2026-05-12, MTP recette 24GB tier)

Metadata

Metadata

Assignees

Labels

deferredDeferred to backlog (sequencing dependency)infrastructureInfrastructure and environment issuesinvestigationInvestigation and audit tasks

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions