Playbook / Model Plane / Multi-LoRA inference serving — vLLM panel design

Multi-LoRA inference serving — vLLM panel design

Expected question

"Design serving for dozens of fine-tuned LoRA adapters on one base model — how does vLLM do it and when does it break?"

Variant forms

  • "Explain PagedAttention and KV cache."
  • "Continuous batching vs static batching?"
  • "Multi-LoRA vs spinning up N model replicas?"
  • "What happens when max_loras is exceeded?"
  • "TTFT vs throughput — what do you optimize for?"
  • "How do you prove vLLM experience?" (common Principal trap)

Where this actually gets asked

LLM inference / ML platform loops — well-documented archetype in vLLM docs, CalibreOS MLSD serving guides, and 2025–2026 vLLM interview prep material. Production multi-LoRA at scale is increasingly discussed in vLLM/AWS blog posts (2026).

Org grounding (O): vllm_cuda.json · vLLM Lab Path B · ADR-022

Executive summary

30-second thesis

One base replica + N small adapters beats N full replicas on GPU dollars. vLLM shares base weights and KV infrastructure; adapters swap per request with --enable-lora. The failure mode is adapter eviction when the working set exceeds max_loras — fix with sizing, sticky routing, or sharding.

2-minute answer

Clarifying questions first: single model or multi-tenant LoRA? Interactive or batch? That changes scheduling and memory.

Core mechanics: PagedAttention blocks KV cache like OS paging — cuts fragmentation, enables prefix caching for shared system prompts. Continuous batching adds requests at iteration boundaries instead of waiting for the whole batch to finish — higher GPU utilization.

Multi-LoRA: request carries adapter id; base forward + low-rank side paths. Flags: --enable-lora, --max-loras, --max-lora-rank (pre-alloc buffers — don't oversize). CPU pool for cold adapters optional.

Org honesty: CUDA metrics live in ModelForge vllm_cuda.json (T4 TinyLlama). Path B in vLLM Lab is educational adapter registry — not CUDA multi-LoRA kernels. Say both aloud in a panel.

Requirements

Functional

  • Route requests to named adapters on shared base.
  • OpenAI-compatible API for app integration.
  • Dynamic or static adapter registry; runtime load optional.

Non-functional

  • TTFT SLO for interactive; throughput for offline.
  • Graceful degradation on eviction (no silent wrong adapter).
  • Cost-per-token estimable: (GPU $/hr) / (tok/s × 3600) — label H unless measured.

Deep dive 1: Multi-LoRA vs N replicas

ApproachGPU memoryOps complexityBest when
N replicasN × base modelLow per variantFew variants, hard isolation
Multi-LoRA1 × base + hot adaptersEviction/routingMany small adapters, shared base

Illustrative H: 50 adapters × 7B separate ≈ 50 GPUs; multi-LoRA ≈ 1–few GPUs with 5–15% throughput penalty vs dedicated.

Deep dive 2: Failure modes

  1. Eviction thrashing — working set > max_loras → reload latency (30–50ms class, H).
  2. Rank mismatch — max_lora_rank too low → load fail; too high → wasted VRAM.
  3. Quality parity — multi-LoRA kernels vs merged adapter; need per-adapter eval before promote.

Deep dive 3: MoE + multi-LoRA (2026 frontier)

Compound sparsity: expert routing + adapter selection. vLLM fused_moe_lora kernels — mention as "where the industry is going" without claiming org runs MoE LoRA in prod unless evidenced.

Trap answers

TrapAnswer
"We production-serve Path B""Path B is educational; CUDA receipt is upstream vLLM metrics"
"PagedAttention is optional optimization""It's the memory model that makes continuous batching practical at scale"
"Always maximize batch size""Interactive TTFT suffers; split queues by SLO tier"