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"}'