【vLLM 学习】Disaggregated Prefill
内容提要
vLLM 是加速大语言模型推理的框架,通过高效KV缓存管理减少内存浪费。文章提供Helm图表部署配置,并演示解耦预填充示例:启动预填充和解码两个实例,通过代理服务器传输KV缓存,实现请求处理,包含安装依赖、启动服务及测试请求的完整流程。
延伸解读
解耦预填充的核心思路
文章通过脚本演示了将预填充和解码分离到两个独立实例,并通过代理服务器在两者间传输KV缓存。预填充实例作为KV生产者,解码实例作为KV消费者,二者通过PyNcclConnector连接。这种设计旨在优化资源利用,但文章明确提示该功能仍处于实验阶段,API可能变化。
部署注意事项
脚本中设置了多个关键参数,如--max-model-len限制为100,--gpu-memory-utilization设为0.8,并指定了--kv-transfer-config。用户需注意模型名称可通过环境变量HF_MODEL_NAME覆盖,且需提前安装quart依赖。此外,脚本包含清理函数,用于中断时终止进程。
实验性功能的潜在风险
文章强调解耦预填充是实验性的,未来可能引入'vllm connect'来替代当前代理方式。这意味着当前API用法可能不兼容未来版本,用户在生产环境部署时应谨慎,并关注vLLM官方更新。
Q&A
vLLM 是什么?它解决了什么问题?
vLLM 是一个专为大语言模型推理加速而设计的框架,通过高效的 KV 缓存管理实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。
解耦预填充(disaggregated prefill)的示例中,需要启动哪些实例?
示例中需要启动两个 vLLM 实例:一个用于预填充(作为 KV 生产者),一个用于解码(作为 KV 消费者),并在它们之间传输 KV 缓存。
在解耦预填充示例中,如何配置 KV 传输?
通过 --kv-transfer-config 参数配置,使用 PyNcclConnector 作为 kv_connector,并设置 kv_role(kv_producer 或 kv_consumer)、kv_rank 和 kv_parallel_size。示例中 kv_parallel_size 为 2,预填充实例 kv_rank 为 0,解码实例 kv_rank 为 1。
解耦预填充代理服务器的工作流程是什么?
代理服务器的工作流程是:1. 将请求发送到预填充 vLLM 实例(端口 8100),并将 max_tokens 设为 1;2. 预填充完成后,将请求转发到解码 vLLM 实例(端口 8200)。
在解耦预填充示例中,如何安装 quart?
脚本会检查 quart 是否已安装,如果未安装,则通过 python3 -m pip install quart 命令进行安装。
解耦预填充示例中,如何发送测试请求?
使用 curl 命令向代理服务器(端口 8000)发送 POST 请求,例如:curl -X POST -s http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "模型名", "prompt": "San Francisco is a", "max_tokens": 10, "temperature": 0}'。示例中发送了两个请求。
解耦预填充示例中,如何等待服务器就绪?
脚本定义了一个 wait_for_server 函数,通过循环 curl 访问 localhost:端口/v1/completions 来检查服务器是否就绪,超时时间为 1200 秒。