Troubleshooting#
The most common “why isn’t this working” cases, grouped by subsystem. Most are a single flag that has to match across the whole fleet.
Fleet / routing#
Symptom |
Likely cause |
Fix |
|---|---|---|
Worker never shows in |
server and worker disagree on discovery/transport |
Match |
Server can’t reach a worker across hosts |
worker advertised a non-routable address |
Pass |
KV-aware routing not improving TTFT |
events off, or block size mismatch |
|
PD disaggregation#
Symptom |
Likely cause |
Fix |
|---|---|---|
PD worker refuses to start on TCP |
PD hard-fails on TCP (5–20× slower than RDMA) |
Fix the RDMA device flag, or benchmark-only |
Cross-node QP times out at |
GID index 0 is link-local, not the RoCEv2 index |
Set the RoCEv2 GID index ( |
|
prefill and decode on different RDMA rails |
Put both on the same |
Tiered KV cache (kvd)#
Symptom |
Likely cause |
Fix |
|---|---|---|
Worker aborts: “infera-kvd unreachable” |
daemon not started or wedged |
Start |
GETs not zero-copy (inline-bytes fallback) |
kvd and engine not in the same IPC namespace |
Docker |
vLLM: 0 cross-restart hits |
vLLM v1 salts block hashes per process |
Set |
kvd won’t start: “filesystem rejects O_DIRECT” |
tablespace defaults to O_DIRECT, unsupported on tmpfs/some NFS |
|
GPU-direct silently CPU-bounces ( |
|
Mount the host kernel config: |
GPU-direct P2PDMA false-negative#
ais-check decides Kernel P2PDMA support by reading /boot/config-$(uname -r).
Engine images don’t ship that file, so on a perfectly P2PDMA-capable host ais-check
prints False purely because the file is absent. The kvd connector treats that as
“no P2PDMA” and silently downgrades GPU-direct L3 loads to the CPU-bounce path
(reads clamped to 1 worker, ~8× slower) — no error, just lost throughput.
Tell a real failure from a false-negative by the amdgpu line:
ais-check
# Kernel P2PDMA support : False <- brittle (reads /boot/config-*, absent in image)
# amdgpu : True <- runtime fact: the driver AIS op is present
amdgpu: True with P2PDMA: False is the false-negative. Give the container the
host’s config to fix it:
docker run ... -v /boot:/boot:ro ... # auto-matches the shared kernel version
ais-check then reads Kernel P2PDMA support: True. The shipped k8s manifest and
operator pod builder both mount /boot:ro for this reason; confirm on
a node with infera-preflight --firmware.
Diagnostic commands#
# live worker registry as the server sees it
curl -s localhost:8000/v1/workers | python -m json.tool
# router's mirrored cache view for one worker (KV-aware)
curl -s localhost:8000/v1/admin/cache-view/<host:port>
# live kvd counters — the daemon logs them periodically at --log-level INFO
# (entries, gets/sets/hits/misses, long-tier bytes)
When all else fails#
Re-read the relevant feature one-pager — most issues are a flag that must match fleet-wide.
Check the environment variables reference — a missing or mismatched env var (GID index,
PYTHONHASHSEED,--ipc=host) is a frequent root cause.