- prompt reuse is non-prefix — shared blocks sit after a per-request preamble, system prompt, or other documents
- you serve RAG workloads where the same documents are retrieved in varying order across requests
Prerequisites
Install Chart
Install the chart with CacheBlend enabled. This creates theCacheBlendEngine — a per-node DaemonSet —
in the tensormesh-operator namespace:
my-values.yaml
Opting a vLLM pod in
CacheBlend plugin attaches to vLLM pods you deploy — the operator does not create them. First create the workload namespace (PSS-privileged) and the plugin pull secret — the private init container is pulled in the pod’s namespace, so the secret must live here:command: override
makes the webhook skip injection):
hostIPC, the CUSTOM attention backend, and the
--kv-transfer-config (CBKVConnector) pointing at the node-local engine; blend tunables
(cb.check_layer, cb.recomp_ratio) come from the engine config.
Helm values reference
Verification
Engine reconciled
<engine>-connection ConfigMap is the reconcile proof — and the gate the webhook reads. If it is
missing, injection silently fail-opens (the pod runs without CacheBlend).
Webhook wired
caBundle means cert-manager issued the serving cert and the webhook can be called.
Injection happened
After creating an opt-in vLLM pod in the workload namespace:Non-prefix blend actually engaged
Send two requests that share a block after different-length preambles, then check the engine logs. Ashifted retrieve means a chunk was reused at a different position than it was cached — i.e. a
non-prefix blend (select the engine by instance to skip any regular LMCacheEngine in the same ns):
Common mistakes
- Running the opt-in vLLM pod in the operator (release) namespace — the webhook excludes it, so injection never happens
- A bare engine ref (
tensormesh-cacheblend) instead of<release-ns>/tensormesh-cacheblend— the webhook looks in the pod’s own namespace and finds no engine - Setting a
command:on the vLLM container — the webhook skips injection (appended args would never reachvllm serve) - Workload namespace not PSS-privileged — Pod Security rejects the injected
hostIPC - The
cacheblend-plugin-pullsecret missing from the workload namespace — the injected init containerImagePullBackOffs (the secret must live where the pod runs, not in the operator namespace) - Mismatched
cacheblend-pluginandvllm-openaiimages — vLLM crashes at startup with anImportError; pin a matched pair webhook.enabled: falseor no cert-manager — the engine deploys but nothing injects the plugin

