Конфигурация

  • Модель: Qwen3.8-27B-AWQ-MTP
  • GPU: 2×RTX 3090 24GB (TP=2, PCIe 4.0)
  • vLLM версия: 0.28.0
  • Контекст: 256K (--max-model-len 262144)
vllm serve Qwen3.8-27B-AWQ-MTP \
  --tensor-parallel-size 2 \
  --max-model-len 262144 \
  --max-num-seqs 2 \
  --speculative-config '{"method": "mtp", "num_speculative_tokens": 3}' \
  --mamba-cache-mode align \
  --disable-async-scheduling \
  --gpu-memory-utilization 0.92
# OMP_NUM_THREADS=1

Результаты

МетрикаЗначение
Throughput (decode)100 tok/s
TTFT (8K prompt)1.8s
TPOT~13ms
GPU Memory46/48 GB
Контекст256K
Параллельность2 seqs

До/после тюнинга

ПараметрДефолтный запускФинальный конфиг
Tok/s (decode)1875
TTFT (8K)4.2s1.8s
Контекст32K256K
Параллельность8 seqs2 seqs

Разница ×4.2 по decode — это 4 параметра конфига: MTP-спекулятивное декодирование, лимит max-num-seqs под 256K контекст, OMP_NUM_THREADS=1 и mamba-cache-mode align.

Выводы

27B-модель в AWQ с MTP — рабочий sweet spot для 2×3090: 100 tok/s decode и 256K контекста при ~46GB VRAM. Цена — ограничение параллельности до 2 последовательностей, что для агентных нагрузок (последовательная генерация) не критично.

Полная история тюнинга — включая crash на MTP в vLLM 0.27.1 и расчёт «что влезает в 24GB×2» — в части 3 серии «Наш опыт». Смежные материалы: Tensor Parallelism, AWQ, PagedAttention.

← Observability для vLLM A100 vs RTX 4090 →