Implementation:LMCache LMCache LMCacheEngineConfig PD Fields
| Knowledge Sources | |
|---|---|
| Domains | Configuration, Distributed_Systems |
| Last Updated | 2026-02-09 00:00 GMT |
Overview
Concrete tool for configuring prefill-decode disaggregation parameters provided by the LMCacheEngineConfig class.
Description
The LMCacheEngineConfig includes PD-specific fields defined in _CONFIG_DEFINITIONS (lines 187-229): enable_pd, pd_role, pd_buffer_size, pd_buffer_device, pd_peer_host, pd_peer_init_port, pd_peer_alloc_port, pd_proxy_host, pd_proxy_port, and transfer_channel. Validation at lines 522-548 enforces that when enable_pd=True, all required fields are set and mutually exclusive features (remote_url, save_decode_cache, enable_p2p) are disabled.
Usage
Create YAML config files for each role and point to them via LMCACHE_CONFIG_FILE environment variable when launching each vLLM instance.
Code Reference
Source Location
- Repository: LMCache
- File: lmcache/v1/config.py
- Lines: L187-L229 (field definitions), L522-L548 (validation)
Signature
# PD-specific fields in _CONFIG_DEFINITIONS dict:
"enable_pd": {"type": bool, "default": False}
"pd_role": {"type": Optional[str], "default": None} # "sender" or "receiver"
"pd_buffer_size": {"type": Optional[int], "default": None}
"pd_buffer_device": {"type": Optional[str], "default": None} # "cuda" or "cpu"
"pd_peer_host": {"type": Optional[str], "default": None}
"pd_peer_init_port": {"type": Optional[list[int]], "default": None}
"pd_peer_alloc_port": {"type": Optional[list[int]], "default": None}
"pd_proxy_host": {"type": Optional[str], "default": None}
"pd_proxy_port": {"type": Optional[int], "default": None}
"transfer_channel": {"type": Optional[str], "default": None} # "nixl"
Import
from lmcache.v1.config import load_engine_config_with_overrides
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| enable_pd | bool | Yes | Enable prefill-decode mode |
| pd_role | str | Yes | "sender" (prefiller) or "receiver" (decoder) |
| pd_buffer_size | int | Yes | NIXL buffer size in bytes |
| pd_buffer_device | str | Yes | Buffer device ("cuda" or "cpu") |
| pd_peer_host | str | Receiver | Peer host address (required for receiver) |
| pd_peer_init_port | list[int] | Receiver | NIXL init ports per TP rank (required for receiver) |
| pd_peer_alloc_port | list[int] | Receiver | Allocation ports per TP rank (required for receiver) |
| pd_proxy_host | str | Sender | Proxy host address (required for sender) |
| pd_proxy_port | int | Sender | Proxy ZMQ port (required for sender) |
Outputs
| Name | Type | Description |
|---|---|---|
| config | LMCacheEngineConfig | Validated PD configuration instance |
Usage Examples
Prefiller YAML Config
# lmcache-prefiller-config.yaml
chunk_size: 256
local_cpu: False
enable_pd: True
pd_role: "sender"
pd_buffer_size: 1073741824 # 1 GB
pd_buffer_device: "cuda"
pd_proxy_host: "localhost"
pd_proxy_port: 7500
transfer_channel: "nixl"
Decoder YAML Config
# lmcache-decoder-config.yaml
chunk_size: 256
local_cpu: False
enable_pd: True
pd_role: "receiver"
pd_buffer_size: 1073741824
pd_buffer_device: "cuda"
pd_peer_host: "localhost"
pd_peer_init_port: [7300]
pd_peer_alloc_port: [7400]
transfer_channel: "nixl"