vLLM 怎么配置 --enable-sleep-mode 并通过 HTTP 接口让模型睡眠与唤醒释放显存【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm在 RLHF、训练推理混跑或需要临时腾出 GPU 资源的场景中vLLM 的 Sleep Mode 允许在不重启 server、不卸载容器的情况下临时释放模型占用的大部分 GPU 显存模型权重可卸载到 CPU 内存KV cache 直接丢弃之后通过接口把引擎唤醒继续推理。本文的适用对象是已经跑起 vLLM 在线服务vllm serve的开发者目标是让服务在--enable-sleep-mode开启后通过 HTTP 接口完成睡眠、唤醒与状态检查。该功能目前支持 CUDA 与 ROCm 平台见 Sleep Mode 文档。先理解两种睡眠级别Sleep Mode 提供两个级别选择级别决定了唤醒后要走哪条恢复路径来源docs/features/sleep_mode.mdLevel 1模型权重卸载offload到 CPU 内存丢弃 KV cache。适合睡醒后继续跑同一个模型——唤醒即可恢复权重。前提是 CPU 内存要够放下模型权重。Level 2同时丢弃模型权重和 KV cache仅 rope scaling tensor 等 buffers 保留在 CPU 上。适合唤醒后要跑不同模型或做 RLHF 权重更新、旧权重不再需要的场景也适合 CPU 内存不够备份权重的情况例如协定位的 trainer 已占满 CPU 内存做 offload。此时唤醒后需要用collective_rpc(reload_weights)重新加载权重。启动服务时开启 sleep mode在线服务开启 Sleep Mode 需要两个条件设置环境变量VLLM_SERVER_DEV_MODE1并给 server 传--enable-sleep-mode参数。VLLM_SERVER_DEV_MODE1的作用是启用 development endpoints——这些端点属于开发用途文档明确说明不应暴露给普通用户。VLLM_SERVER_DEV_MODE1 vllm serve Qwen/Qwen3-0.6B \ --enable-sleep-mode \ --port 8000/sleep、/wake_up、/collective_rpc、/is_sleeping这四个端点只在传入VLLM_SERVER_DEV_MODE1时可用。缺少该环境变量时请求这些路径不会命中这些接口。对应的离线推理入口是 Python API给LLM类传enable_sleep_modeTrue例如from vllm import LLM llm LLM(Qwen/Qwen3-0.6B, enable_sleep_modeTrue)通过 HTTP 接口执行睡眠与唤醒以下命令以文档中的Qwen/Qwen3-0.6B、端口 8000 为例实际使用时替换为你自己的模型名与端口来源docs/features/sleep_mode.md。Level 1 睡眠与完整唤醒Level 1 因为权重已备份在 CPU 内存唤醒时不需要重新加载权重一次/wake_up即可# 睡眠权重卸载到 CPU丢弃 KV cache curl -X POST http://localhost:8000/sleep?level1 # 唤醒恢复权重 curl -X POST http://localhost:8000/wake_upLevel 2 睡眠与分步唤醒Level 2 丢弃了权重本身所以恢复要分三步先只重新分配权重内存再通过collective_rpc原地加载权重最后重新分配 KV cache# 睡眠丢弃权重和 KV cache curl -X POST http://localhost:8000/sleep?level2 # 只重新分配权重内存 curl -X POST http://localhost:8000/wake_up?tagsweights # 原地加载权重 curl -X POST http://localhost:8000/collective_rpc -H Content-Type: application/json -d {method:reload_weights} # 重新分配 KV cache curl -X POST http://localhost:8000/wake_up?tagskv_cachewake_up的tags查询参数支持部分唤醒如?tagsweights、?tagskv_cache。这种细粒度控制在 RLHF 权重更新时有实际意义只先唤醒weights等权重更新完成后再唤醒kv_cache可以把权重同步过程中的峰值显存压到最低帮助大模型避免 OOM。注意文档中的一个判断细节只要还有任何组件处于睡眠状态/is_sleeping就会返回true——分步唤醒中间阶段它报true是预期行为不代表恢复失败。四个 HTTP 端点速查POST /sleep?level1— 让模型进入睡眠level指定级别默认 1。POST /wake_up— 唤醒模型支持可选tags查询参数做部分唤醒如?tagsweights。POST /collective_rpc— 执行一次 collective RPCLevel 2 恢复权重时用{method:reload_weights}。GET /is_sleeping— 检查模型是否处于睡眠状态。这些端点的实现位于 vllm/entrypoints/serve/dev/sleep/api_router.py其中/sleep与/wake_up成功时返回 HTTP 200/is_sleeping返回形如{is_sleeping: true}的 JSON。验证睡眠与唤醒是否生效判断流程如下发送POST /sleep?level1后curl返回 200 表示请求已被引擎接受。用GET /is_sleeping检查状态curl http://localhost:8000/is_sleeping返回的is_sleeping字段为true时说明引擎确实处于睡眠状态文档示例{is_sleeping: true}这类 JSON 响应字段含义见上。 3. 发送POST /wake_up或 Level 2 的三步恢复序列后再次GET /is_sleepingis_sleeping变为false即全部组件已唤醒此后服务可继续正常接收推理请求。对 Level 2 场景wake_up全部执行完后is_sleeping才应回到false——中间只唤醒了weights时它仍为true这与上面说明的部分唤醒语义一致。已知限制与 ROCm 调参这些 dev 端点只在VLLM_SERVER_DEV_MODE1下注册且文档明确它们不应暴露给用户生产对外端口上不要开启该模式。Level 1 依赖 CPU 内存备份模型权重CPU 内存不足时改用 Level 2 并配合reload_weights。ROCm 平台上虚拟内存采用分块chunked分配块大小由VLLM_ROCM_SLEEP_MEM_CHUNK_SIZE单位 MB控制默认 256MB。块越大性能越快但设太大可能 OOM如果在 ROCm 上使用 sleep mode 遇到 OOM文档建议减小该值并推荐取 2 的幂。下一步如果是在离线推理LLM类中做睡眠/唤醒Python API 路径是llm.sleep(level1)/llm.wake_up()/llm.sleep(level2)llm.wake_up(tags[weights])llm.collective_rpc(reload_weights)llm.wake_up(tags[kv_cache])与上面 HTTP 序列一一对应。分布式推理tensor parallelism、pipeline parallelism 等同样支持 Sleep ModeHTTP 命令路径不变。更多设计与使用细节见 Sleep Mode 文档。【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考