Embedding Cache Benchmark
Throughput and TTFT gains from caching vision-encoder embeddings on a multimodal workload
Overview
This page reports the performance impact of Dynamo’s multimodal frontend-decoding and embedding cache on a repeated-image workload, measured against a vanilla vllm serve baseline.
For the feature itself — what the embedding cache is, support across backends (vLLM / TRT-LLM / SGLang), aggregated vs disaggregated workflows, and how to enable it — see Embedding Cache.
Recipe
The numbers below come from the qwen3.6-35b recipe, which runs three configurations on the same single-GPU node so the only thing that varies is the Dynamo feature set:
Workload: Qwen/Qwen3.6-35B-A3B-FP8, sliding-window dataset (30 users × 8 turns, window = 5, 2400×1080 base64 images, 8000 input text tokens, max_tokens=1024, concurrency = 30). Each turn shares 4-of-5 images with the previous turn of the same user, so repeated images dominate — the exact shape the embedding cache is designed for.
See the recipe README for the full deploy, dataset generation, and aiperf invocation.
Results — H100
Δ vs vllm-serve:
Results — GB200
Δ vs vllm-serve:
Takeaways
- Throughput:
dynamo-fd-ecdelivers ~30% higher RPS than vanillavllm serveon both H100 (+29.8%) and GB200 (+31.5%). - TTFT: The embedding cache cuts median TTFT by −87.4% on H100 and −45.9% on GB200 — once the encoder is off the critical path for repeated images, first-token latency collapses.
- Frontend-decoding alone (
dynamo-fd) already captures most of the TTFT win; the embedding cache then layers on additional throughput and tighter median TTFT. - ITL stays roughly flat because the cache shortens the prefill path (skipping ViT for repeated images), not the decode path. Throughput still rises because, by Little’s Law at fixed concurrency = 30,
RPS ≈ concurrency / (TTFT + ITL × out_tokens)— a multi-second drop in TTFT alone is enough to explain the ~30% RPS gain. The small per-token ITL deltas reflect concurrency changes from the higher RPS, not extra decode cost.
Reproduce
Each config’s profile_export_aiperf.json lands under
~/workspace/dynamo-tmp/logs/$(date +%m-%d)/qwen36-fp8-${HW}/{vllm-serve,dynamo-fd,dynamo-fd-ec}/
and holds the headline metrics.
Full instructions and prerequisites live in recipes/qwen3.6-35b/README.md.