配置 LMCache#
LMCache 支持两种类型的配置:
配置文件:一个包含配置项的 YAML(推荐)或 JSON 文件。
环境变量:以
LMCACHE_开头的环境变量。
要使用配置文件,您可以将 LMCACHE_CONFIG_FILE 环境变量设置为配置文件的路径。
备注
如果配置文件存在,则环境变量配置将被忽略。
通用配置#
控制 LMCache 核心功能的基本缓存设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
chunk_size |
LMCACHE_CHUNK_SIZE |
缓存块的大小。默认值:256 |
local_cpu |
LMCACHE_LOCAL_CPU |
是否启用 CPU 缓存。值:true/false。默认:true |
max_local_cpu_size |
LMCACHE_MAX_LOCAL_CPU_SIZE |
最大 CPU 缓存大小(以 GB 为单位)。默认值:5.0 |
local_cpu_use_hugepages |
LMCACHE_LOCAL_CPU_USE_HUGEPAGES |
Whether to use Linux hugepages (2 MB) for CPU-pinned KV cache memory. Not compatible with P2P mode or shared memory (multiprocess). Requires pre-allocated hugepages ( |
local_disk |
LMCACHE_LOCAL_DISK |
本地磁盘缓存目录的路径(或以逗号分隔的路径)。格式: |
local_disk_path_sharding |
LMCACHE_LOCAL_DISK_PATH_SHARDING |
当提供多个路径时选择路径的策略。目前仅支持 |
max_local_disk_size |
LMCACHE_MAX_LOCAL_DISK_SIZE |
最大磁盘缓存大小(以 GB 为单位)。默认值:0.0 |
remote_url |
LMCACHE_REMOTE_URL |
远程存储 URL。格式:"protocol://host:port"。 |
remote_serde |
LMCACHE_REMOTE_SERDE |
序列化格式。值:"naive" 或 "cachegen"。默认值:"naive" |
save_decode_cache |
LMCACHE_SAVE_DECODE_CACHE |
是否存储解码 KV Cache。值:true/false。默认:false |
use_layerwise |
LMCACHE_USE_LAYERWISE |
是否启用逐层流水线。值:true/false。默认值:false |
pre_caching_hash_algorithm |
LMCACHE_PRE_CACHING_HASH_ALGORITHM |
前缀缓存的哈希算法。默认值:“builtin” |
save_unfull_chunk |
LMCACHE_SAVE_UNFULL_CHUNK |
是否保存未满块。值:true/false。默认值:false |
blocking_timeout_secs |
LMCACHE_BLOCKING_TIMEOUT_SECS |
阻塞操作的超时时间(以秒为单位)。默认值:10 |
py_enable_gc |
LMCACHE_PY_ENABLE_GC |
是否启用 Python 垃圾回收。值:true/false。默认:true |
cache_policy |
LMCACHE_CACHE_POLICY |
缓存逐出策略(例如“LRU”、“LFU”、“FIFO”)。默认值:“LRU” |
numa_mode |
LMCACHE_NUMA_MODE |
NUMA 感知内存分配模式。值:"auto"(从系统检测)、"manual"(使用 extra_config 映射)、null(禁用)。启用时,在特定的 NUMA 节点上分配固定内存,以提高 GPU-CPU 内存带宽。默认值:null |
external_lookup_client |
LMCACHE_EXTERNAL_LOOKUP_CLIENT |
外部 KV 查找服务 URI(例如,"mooncakestore://address")。如果为 null,则默认为 LMCache 的内部查找客户端。默认值:null |
priority_limit |
LMCACHE_PRIORITY_LIMIT |
仅在优先级值 ≤ 限制时缓存请求。(不适用于 PD 分离)类型:int。默认值:无 |
min_retrieve_tokens |
LMCACHE_MIN_RETRIEVE_TOKENS |
执行检索所需的最小命中令牌数。如果命中令牌少于此值,则跳过检索,但仍记录命中以避免重新存储现有块。有关工作示例,请参见 性能调优。默认值:0(禁用) |
store_location |
LMCACHE_STORE_LOCATION |
一个存储后端名称,用于存储 KV 缓存。当指定时,只有匹配的后端接收存储操作。有效值是存储管理器中注册的后端类名称,包括: |
retrieve_locations |
LMCACHE_RETRIEVE_LOCATIONS |
检索或查找 KV Cache 时要搜索的存储后端名称列表。当指定时,仅搜索列出的后端。有效值为在存储管理器中注册的后端类名称,包括: |
extra_config |
LMCACHE_EXTRA_CONFIG={"key": value, ...} |
额外的配置作为 JSON 字典。对于 NUMA 手动模式,包含 "gpu_to_numa_mapping": {gpu_id: numa_node, ...}。默认值:{} |
惰性内存分配器配置#
用于懒惰内存分配器的设置,允许逐步分配内存以减少启动时间和初始内存占用。
备注
懒惰内存分配器旨在处理大 CPU 内存配置的场景。它从小的初始分配开始,并根据需要逐渐扩展,从而减少启动等待时间,并避免在不需要全部容量时的不必要内存消耗。
关键特性:
一次性扩展:内存扩展直到达到目标大小,然后停止
不收缩:一旦分配,内存将永远不会释放回系统
自动激活:仅在
max_local_cpu_size超过lazy_memory_safe_size时激活
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
enable_lazy_memory_allocator |
LMCACHE_ENABLE_LAZY_MEMORY_ALLOCATOR |
是否启用延迟内存分配器。值:true/false。默认值:false |
lazy_memory_initial_ratio |
LMCACHE_LAZY_MEMORY_INITIAL_RATIO |
初始内存分配比例 (0.0-1.0)。决定在启动时分配的 max_local_cpu_size 的比例。默认值:0.2 (20%) |
lazy_memory_expand_trigger_ratio |
LMCACHE_LAZY_MEMORY_EXPAND_TRIGGER_RATIO |
触发扩展的内存使用比例(0.0-1.0)。当使用的内存超过当前容量的此比例时,扩展开始。默认值:0.5(50%) |
lazy_memory_step_ratio |
LMCACHE_LAZY_MEMORY_STEP_RATIO |
内存扩展步骤比例(0.0-1.0)。每次扩展增加此比例的 max_local_cpu_size。默认值:0.1(10%) |
lazy_memory_safe_size |
LMCACHE_LAZY_MEMORY_SAFE_SIZE |
在 GB 中的阈值,超过该值后懒惰分配器激活。如果 max_local_cpu_size ≤ 此值,则无论 enable_lazy_memory_allocator 设置如何,懒惰分配器都将被禁用。默认值:0.0 |
reserve_local_cpu_size |
LMCACHE_RESERVE_LOCAL_CPU_SIZE |
保留的系统内存(以 GB 为单位),不应由 LMCache 分配。用于防止内存不足的情况。默认值:0.0 |
缓存混合配置#
与缓存混合功能相关的设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
enable_blending |
LMCACHE_ENABLE_BLENDING |
是否启用混合。值:true/false。默认值:false |
blend_recompute_ratios |
LMCACHE_BLEND_RECOMPUTE_RATIOS |
混合重计算的比例。默认值:0.15 |
blend_check_layers |
LMCACHE_BLEND_CHECK_LAYERS |
确定重计算令牌的层数。默认值:1 |
blend_special_str |
LMCACHE_BLEND_SPECIAL_STR |
用于混合的分隔符字符串。默认值:" # # " |
点对点共享配置#
用于启用和配置点对点 CPU KV Cache 共享及全局 KV Cache 查找的设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
enable_p2p |
LMCACHE_ENABLE_P2P |
是否启用点对点共享。值:true/false。默认:false |
p2p_host |
LMCACHE_P2P_HOST |
IP 地址。如果 enable_p2p 为 true,则必需。 |
peer_init_ports |
LMCACHE_PEER_INIT_PORTS |
p2p 对等初始化的端口。如果 enable_p2p 为 true,则需要此项。 |
peer_lookup_ports |
LMCACHE_PEER_lookup_PORTS |
用于点对点(p2p)对等查找的端口。如果 enable_p2p 为 true,则必需。 |
transfer_channel |
LMCACHE_TRANSFER_CHANNEL |
例如 nixl。如果 enable_p2p 为 true,则必需。 |
控制器配置#
KV 缓存控制器功能的设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
enable_controller |
LMCACHE_ENABLE_CONTROLLER |
是否启用控制器。值:true/false。默认:false |
lmcache_instance_id |
LMCACHE_LMCACHE_INSTANCE_ID |
LMCache 实例的 ID。默认值:"lmcache_default_instance" |
controller_url |
LMCACHE_CONTROLLER_URL |
控制器服务器的 URL |
lmcache_worker_port |
LMCACHE_LMCACHE_WORKER_PORT |
LMCache 工作进程的端口号 |
分离式 Prefill 配置#
分离式 Prefill 功能的设置。最新/默认的 PD 实现在 lmcache/v1/storage_backend/pd_backend.py 中。
备注
启用 PD 时,以下限制适用(欢迎贡献以消除这些限制):
remote_url 必须为 null
save_decode_cache 必须为 false
enable_p2p 必须为 false
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
enable_pd |
LMCACHE_ENABLE_PD |
是否启用 PD。值:true/false。默认值:false |
transfer_channel |
LMCACHE_TRANSFER_CHANNEL |
用于 PD 的传输通道。值:“nixl”。默认:无 |
pd_role |
LMCACHE_PD_ROLE |
PD 角色。值:"sender"(预填充器)或 "receiver"(解码器)。 |
pd_buffer_size |
LMCACHE_PD_BUFFER_SIZE |
PD 传输缓冲区大小的上限(以字节为单位),与块大小对齐。当 enable_pd=true 时,发送方和接收方均需要此设置。 |
pd_buffer_device |
LMCACHE_PD_BUFFER_DEVICE |
PD 缓冲区的设备。值:"cpu","cuda"。当 enable_pd=true 时,发送者和接收者都需要此项。 |
nixl_backends |
LMCACHE_NIXL_BACKENDS |
Nixl 传输后端列表。适用于非分离式用例(见下文)。UCX 默认设置足以满足分离式用例。默认值:["UCX"] |
pd_peer_host |
LMCACHE_PD_PEER_HOST |
对等连接的主机。接收方绑定所需。 |
pd_peer_init_port |
LMCACHE_PD_PEER_INIT_PORT |
用于对等连接的初始化端口。接收方需要绑定到此端口。 |
pd_peer_alloc_port |
LMCACHE_PD_PEER_ALLOC_PORT |
用于对等连接的分配端口。接收方需要绑定到此端口。 |
pd_proxy_host |
LMCACHE_PD_PROXY_HOST |
代理服务器的主机。发送方连接以通知代理解码器传输完成时必需。 |
pd_proxy_port |
LMCACHE_PD_PROXY_PORT |
代理服务器的端口。发送方需要连接以通知代理传输到解码器已完成。 |
pd_allocation_timeout_sec |
LMCACHE_PD_ALLOCATION_TIMEOUT_SEC |
在放弃之前重试内存分配的最大秒数。默认值:5.0 |
pd_shutdown_timeout_sec |
LMCACHE_PD_SHUTDOWN_TIMEOUT_SEC |
事件循环关闭和线程加入的最大等待秒数。默认值:5.0 |
pd_condition_poll_interval_sec |
LMCACHE_PD_CONDITION_POLL_INTERVAL_SEC |
在等待线程/asyncio Condition 时的轮询间隔(以秒为单位)。足够小以保持响应,足够大以避免浪费 CPU。默认值:0.05 |
pd_max_prefill_len |
LMCACHE_PD_MAX_PREFILL_LEN |
PD 缓冲区必须能够容纳的最大 Prefill 令牌长度。如果大于 0,当缓冲区容量(以令牌为单位)小于此值时,初始化将引发 ValueError。设置为 0(默认值)以跳过检查。 |
pd_backend_mode |
LMCACHE_PD_BACKEND_MODE |
选择 PD 后端实现:'async'(默认)使用基于 asyncio 的实现;'sync' 使用原始的基于线程的同步实现。默认值:"async" |
pd_skip_proxy_notification |
LMCACHE_PD_SKIP_PROXY_NOTIFICATION |
当为真时,发送方在 KV 传输后跳过 ZMQ 代理通知,并且不需要 pd_proxy_host/pd_proxy_port。此选项仅适用于管理通过 HTTP 的分离式解码请求流的外部调度器(例如,vLLM 生产堆栈路由器),并且不依赖于 ZMQ 通知。它不得与 LMCache 的内置分离代理( |
pd_bidirectional |
LMCACHE_PD_BIDIRECTIONAL |
当为真时,启用双向 NIXL 缓存探测。Prefiller 在传输之前查询解码器以获取缓存的 KV 块,并通过 NIXL RDMA 读取缓存的块,而不是重计算。值:true/false。默认值:false |
pd_peer_query_port |
LMCACHE_PD_PEER_QUERY_PORT |
用于双向缓存查询通道的 ZMQ 端口(每个 TP 排名一个)。当 pd_bidirectional=true 时,预填充器和解码器都需要此配置。示例:[7500, 7501, 7502, 7503] |
P2P 后端配置#
P2P(点对点)后端超时行为的设置。这些配置通过 extra_config 指定。
extra_config:
p2p_socket_recv_timeout_ms: 30000
p2p_socket_send_timeout_ms: 10000
配置键 |
默认 |
描述 |
|---|---|---|
p2p_socket_recv_timeout_ms |
30000 |
套接字接收操作的超时时间(以毫秒为单位) |
p2p_socket_send_timeout_ms |
10000 |
套接字发送操作的超时时间(以毫秒为单位) |
Nixl(作为存储后端)配置#
将 Nixl 用作存储后端而不是分离式 Prefill 的设置。此模式需要在 extra_config 中进行额外配置。
备注
这是一种不同于分离式 Prefill 的模式。当使用 Nixl 作为存储后端时,您需要通过 extra_config 进行配置。
extra_config:
# enable_nixl_storage will disable disaggregated prefill mode.
enable_nixl_storage: true
nixl_backend: "POSIX" # Options: "GDS", "GDS_MT", "POSIX", "HF3FS", "OBJ"
nixl_path: "/path/to/storage/"
nixl_pool_size: 64
配置键 |
描述 |
|---|---|
enable_nixl_storage |
是否启用 Nixl 存储后端。值:true/false |
nixl_backend |
存储后端类型。选项:“GDS”、“GDS_MT”、“POSIX”、“HF3FS”、“OBJ” |
nixl_path |
Nixl 存储的文件系统路径 |
nixl_pool_size |
存储池中的文件或对象数量 |
nixl_endpoint_list |
每个工作节点的对象存储端点 URL 列表。每个 TP 工作节点通过 |
nixl_use_hugepages |
Whether to use Linux hugepages (2 MiB) for the NIXL CPU buffer. Requires pre-allocated hugepages ( |
附加存储配置#
不同存储后端和路径的设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
gds_path |
LMCACHE_GDS_PATH |
GDS 后端的路径。支持以逗号分隔的多设备 I/O 路径(例如 |
gds_path_sharding |
LMCACHE_GDS_PATH_SHARDING |
当提供多个路径时选择路径的策略。目前仅支持 |
gds_buffer_size |
LMCACHE_GDS_BUFFER_SIZE |
GDS 操作的缓冲区大小 |
use_gds |
LMCACHE_USE_GDS |
启用或禁用 GPU 直接存储 API 的使用(默认:true) |
gds_backend |
LMCACHE_GDS_BACKEND |
使用的 GDS 库后端(默认:"cufile") |
自定义 Prometheus 直方图桶#
您可以通过向 extra_config 添加一个键 histogram_bucket_<name> 来覆盖任何 Prometheus 直方图度量的默认桶边界,其中 <name> 是度量名称 不带 lmcache: 前缀。
值必须是一个数字边界的列表(浮点数或整数)。
extra_config:
histogram_bucket_time_to_retrieve: [0.01, 0.05, 0.1, 0.5, 1.0, 5.0]
histogram_bucket_retrieve_speed: [100, 500, 1000, 5000, 10000]
可用直方图名称 |
描述 |
|---|---|
|
从缓存中检索所需时间(秒) |
|
缓存存储时间(秒) |
|
缓存查找时间(秒) |
|
在检索中处理令牌的时间(秒) |
|
在检索中广播内存对象的时间(秒) |
|
在检索中将数据移动到 GPU 的时间(秒) |
|
从远程后端获取数据的时间(秒) |
|
连接器使用的时间(秒) |
|
存储中处理令牌的时间(秒) |
|
从 GPU 移动数据到存储的时间(秒) |
|
将数据存储到存储中的时间(秒) |
|
检索速度(每秒令牌数) |
|
存储速度(每秒令牌数) |
|
通过 P2P 传输的时间(秒) |
|
P2P 传输速度(每秒令牌数) |
|
从远程后端获取的时间(毫秒) |
|
远程后端的放置时间(毫秒) |
|
从远程后端同步获取的时间(毫秒) |
|
请求缓存命中率 (0.0 到 1.0) |
|
请求缓存生命周期(分钟) |
内部 API 服务器配置#
用于内部 API 服务器的设置,该服务器为 LMCache 引擎提供管理和调试 API。API 服务器在每个工作节点和调度器上运行,允许您在运行时检查和控制 LMCache 的行为。
备注
内部 API 服务器提供以下端点:
指标:性能和缓存统计信息
配置: 运行时配置检查
元数据:引擎和模型元数据
线程:线程调试信息
日志级别:动态日志级别调整
脚本执行:运行自定义 Python 脚本,访问 LMCache 引擎
配置选项#
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
internal_api_server_enabled |
LMCACHE_INTERNAL_API_SERVER_ENABLED |
是否启用内部 API 服务器。默认值:false |
internal_api_server_host |
LMCACHE_INTERNAL_API_SERVER_HOST |
用于绑定内部 API 服务器的主机。默认值:“0.0.0.0” |
internal_api_server_port_start |
LMCACHE_INTERNAL_API_SERVER_PORT_START |
内部 API 服务器的起始端口。端口分配:调度器 = port_start + 0,工作者 i = port_start + i + 1。示例:如果 port_start=6999,则调度器=6999,工作者 0=7000,工作者 1=7001,等等。默认值:6999 |
internal_api_server_include_index_list |
LMCACHE_INTERNAL_API_SERVER_INCLUDE_INDEX_LIST |
启用 API 服务器的工作者/调度器索引列表。使用 0 表示调度器,1 表示工作者 0,2 表示工作者 1,依此类推。如果为 null,则在所有工作者/调度器上启用。示例:[0, 1] 仅在调度器和工作者 0 上启用。默认值:null |
internal_api_server_socket_path_prefix |
LMCACHE_INTERNAL_API_SERVER_SOCKET_PATH_PREFIX |
如果指定,则使用 Unix 域套接字而不是 TCP 端口。套接字路径将为 "{prefix}_{port}"。示例:"/tmp/lmcache_api_socket" 创建 "/tmp/lmcache_api_socket_6999"、"/tmp/lmcache_api_socket_7000" 等。默认值:null |
插件配置#
插件系统的设置。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
plugin_locations |
LMCACHE_PLUGIN_LOCATIONS |
插件位置列表。默认值:[] |
已弃用的配置#
这些配置已被弃用,可能会在未来的版本中被移除。
YAML 配置名称 |
环境变量 |
描述 |
|---|---|---|
audit_actual_remote_url |
LMCACHE_AUDIT_ACTUAL_REMOTE_URL |
(已弃用) 用于审计的实际远程 LMCache 实例的 URL。请改用 extra_config['audit_actual_remote_url']。 |