Weka#
概述#
WekaFS 是一个高性能的分布式文件系统,是 LMCache 中 KV Cache 卸载的支持选项。尽管本地文件系统后端可以与 WekaFS 挂载一起工作,但该后端针对 Weka 的特性进行了优化。它利用 GPUDirect Storage 进行 I/O,并允许多个 LMCache 实例之间的数据共享。
配置 LMCache WEKA 卸载的方法#
1. 环境变量:
# 256 Tokens per KV Chunk
export LMCACHE_CHUNK_SIZE=256
# Path to Weka Mount
export LMCACHE_GDS_PATH="/mnt/weka/cache"
# GDS Buffer Size in MiB
export LMCACHE_GDS_BUFFER_SIZE="8192"
# Disabling CPU RAM offload is sometimes recommended as the
# CPU can get in the way of GPUDirect operations
export LMCACHE_LOCAL_CPU=False
# GDS I/O Threads
export LMCACHE_EXTRA_CONFIG='{"gds_io_threads": 32}'
2. 配置文件:
通过 LMCACHE_CONFIG_FILE=your-lmcache-config.yaml 传入
示例 config.yaml:
# 256 Tokens per KV Chunk
chunk_size: 256
# Disable local CPU
local_cpu: false
# Path to Weka Mount
gds_path: "/mnt/weka/cache"
# GDS Buffer Size in MiB
gds_buffer_size: 8192
# GDS I/O Threads
extra_config:
gds_io_threads: 32
GDS 缓冲区大小说明#
后端目前预先注册缓冲区空间以加速 GDS 操作。此缓冲区空间在显存中注册,因此在设置时应考虑 --gpu-memory-utilization 选项,例如来自 vllm 的选项。例如,对于通常具有 80GiB 显存的 H100,一个好的经验法则是从 8GiB 开始,并设置 --gpu-memory-utilization 0.85,然后根据您的工作流程进行微调。
设置示例#
前提条件:
一台至少配备一个 GPU 的机器。您可以根据您的显存调整 vllm 实例的最大模型长度。
Weka 已经安装并挂载。
vllm 和 lmcache 已安装 (安装指南)
Hugging Face 访问
meta-llama/Llama-3.1-8B-Instruct
export HF_TOKEN=your_hugging_face_token
步骤 1. 在您的 Weka 挂载下创建缓存目录:
要查找所有 WekaFS 挂载,请运行:
mount -t wekafs
为了这个例子,我们假设上面的返回结果是:
10.27.1.1/default on /mnt/weka type wekafs (rw,relatime,writecache,inode_bits=auto,readahead_kb=32768,dentry_max_age_positive=1000,dentry_max_age_negative=0,container_name=client)
然后在其下创建一个目录(这里的名称是任意的):
mkdir /mnt/weka/cache
步骤 2. 启动一个启用 Weka 卸载的 vLLM 服务器:
创建一个名为 weka-offload.yaml 的 lmcache 配置文件
local_cpu: false
chunk_size: 256
gds_path: "/mnt/weka/cache"
gds_buffer_size: 8192
extra_config:
gds_io_threads: 32
如果您不想使用配置文件,请取消注释前面三个环境变量,然后注释掉下面的 LMCACHE_CONFIG_FILE:
# LMCACHE_LOCAL_CPU=False \
# LMCACHE_CHUNK_SIZE=256 \
# LMCACHE_GDS_PATH="/mnt/weka/cache" \
# LMCACHE_GDS_BUFFER_SIZE=8192 \
# LMCACHE_EXTRA_CONFIG='{"gds_io_threads": 32}' \
LMCACHE_CONFIG_FILE="weka-offload.yaml" \
vllm serve \
meta-llama/Llama-3.1-8B-Instruct \
--max-model-len 65536 \
--kv-transfer-config \
'{"kv_connector":"LMCacheConnectorV1", "kv_role":"kv_both"}'