【vLLM 学习】Cpu Offload Lmcache

vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。

更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/

*在线运行 vLLM 入门教程:零基础分步指南

源码 examples/offline_inference/cpu_offload_lmcache.py

# SPDX-License-Identifier: Apache-2.0

"""
该文件演示了 CPU 卸载的示例用法
与 LMCache。
请注意,运行此示例需要 "pip install lmcache"。
在 https://github.com/LMCache/LMCache 中了解有关 LMCache 的更多信息。
"""
import os
import time

from lmcache.experimental.cache_engine import LMCacheEngineBuilder
from lmcache.integration.vllm.utils import ENGINE_NAME

from vllm import LLM, SamplingParams
from vllm.config import KVTransferConfig

# 与 LMCache 相关的环境变量
# 在 LMCache 中使用实验功能
os.environ["LMCache_USE_EXPERIMENTAL"] = "True"
# LMCache 设置为每块使用256个 token
os.environ["LMCache_CHUNK_SIZE"] = "256"
# 在 LMCache 中启用本地 CPU 后端
os.environ["LMCache_LOCAL_CPU"] = "True"
# 将本地 CPU 内存限制设置为 5.0 GB
os.environ["LMCache_MAX_LOCAL_CPU_SIZE"] = "5.0"

# 此示例脚本以共享前缀运行两个请求。
shared_prompt = "Hello, how are you?" * 1000
first_prompt = [
    shared_prompt + "Hello, my name is",
]
second_prompt = [
    shared_prompt + "Tell me a very long story",
]

sampling_params = SamplingParams(temperature=0, top_p=0.95, max_tokens=10)

ktc = KVTransferConfig.from_cli(
    '{"kv_connector":"LMCacheConnector", "kv_role":"kv_both"}')
# 将 GPU 内存利用设置为 0.8,用于 40GB 显存的 A40 GPU。
# 如果您的 GPU 的内存较少,则降低值。
# 请注意,LMCache 目前与块预填充不兼容。
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2",
          kv_transfer_config=ktc,
          max_model_len=8000,
          enable_chunked_prefill=False,
          gpu_memory_utilization=0.8)

outputs = llm.generate(first_prompt, sampling_params)
for output in outputs:
    generated_text = output.outputs[0].text
    print(f"Generated text: {generated_text!r}")
print("First request done.")

time.sleep(1)

outputs = llm.generate(second_prompt, sampling_params)
for output in outputs:
    generated_text = output.outputs[0].text
    print(f"Generated text: {generated_text!r}")
print("Second request done.")

# 清理 LMCache 后端
LMCacheEngineBuilder.destroy(ENGINE_NAME)
<think>好的,我现在需要解决用户的问题:在使用vLLM部署模型时如何禁止CPU卸载。首先,我得回忆一下vLLM的相关知识,特别是关于资源分配和配置的部分。 用户提到“CPU卸载”,通常指的是在显存不足时,将部分计算或数据转移到CPU上,这样可以继续运行大模型,但可能会影响性能。vLLM是一个高效的服务框架,优化了显存的使用,比如通过PagedAttention来管理显存。但有时候用户可能希望完全在GPU上运行,避免任何CPU转移,特别是当延迟要求严格或者CPU资源紧张时。 接下来,我需要确认vLLM的配置选项中是否有相关的参数来控制CPU卸载。根据之前了解,vLLM的AsyncEngineArgs或启动参数中可能有相关选项。比如,在文档或者示例代码中,常见的参数包括tensor_parallel_size、max_num_seqs等,但不确定是否有直接禁用CPU卸载的选项。 可能需要查阅vLLM的官方文档或源代码。假设在AsyncEngineArgs中有一个参数是disable_cpu_offload,或者类似的名称。或者,可能通过设置gpu_memory_utilization到一个较高的值,比如1.0,来尽可能利用所有显存,从而减少向CPU卸载的需求。但这种方法是否有效,需要进一步验证。 另外,vLLM的设计目标之一就是高效利用显存,可能默认情况下不会主动使用CPU卸载,除非显存不足。因此,用户的问题可能源于显存不足导致系统自动使用CPU,这时候需要调整显存使用率或者模型并行设置,而不是直接有一个开关。 还有一种可能是,用户误解了某些功能,比如模型并行或数据加载的方式,误以为是CPU卸载。这时候需要澄清CPU卸载的具体表现和配置方法。 总结可能的解决步骤: 1. 检查vLLM的启动参数或配置选项,寻找类似disable_cpu_offload或enforce_gpu_only的设置。 2. 调整gpu_memory_utilization参数到接近1.0,确保显存被充分利用。 3. 增加模型并行的GPU数量,例如使用tensor_parallel_size分配更多GPU,减少单个GPU的显存压力。 4. 确认模型是否适合当前GPU的显存容量,可能需要换用更小的模型或使用量化技术。 需要验证这些方法是否有效,可能还需要参考vLLM的GitHub issues或社区讨论,看看其他用户是如何处理类似问题的。例如,是否有issue提到如何强制禁用CPU卸载,或者开发者是否说明相关机制。 假设在官方文档中没有直接提到禁用CPU卸载的选项,可能需要通过间接的方法,比如确保显存足够,避免触发卸载机制。或者,如果vLLM内部有相关的代码逻辑,可能在初始化引擎时传递相应参数。 另外,考虑到vLLM使用类似Hugging Face的模型加载方式,是否有环境变量或配置项可以影响CUDA的内存分配策略,比如设置PYTORCH_NO_CUDA_MEMORY_CACHING=1之类的,但不确定是否相关。 最后,综合这些信息,给出用户具体的步骤:检查配置参数,调整显存利用率,增加GPU数量,以及确保模型适合显存。如果存在直接参数,优先推荐使用;否则,通过优化显存使用来间接禁止CPU卸载。</think>在部署vLLM服务时,禁止CPU卸载的核心思路是**通过配置参数强制模型完全驻留GPU显存**。以下是具体步骤和原理说明: --- ### **1. 理解CPU卸载的触发条件** vLLM默认会优先使用GPU显存。但当以下情况发生时,可能触发CPU卸载: - 显存不足(例如模型过大或并发请求过多) - 显存碎片化导致无法分配连续内存 --- ### **2. 直接解决方案:调整关键参数** #### **📌 方法一:限制显存利用率** 通过`--gpu-memory-utilization`参数控制显存分配比例。**设为接近1.0的值(如0.99)**,强制框架尽可能使用全部显存: ```bash python -m vllm.entrypoints.api_server \ --model <your_model> \ --gpu-memory-utilization 0.99 # ← 关键参数 ``` #### **📌 方法二:禁用Swap空间** 添加`--disable-log-stats`和`--swap-space 0`禁止使用磁盘交换: ```bash python -m vllm.entrypoints.api_server \ --model <your_model> \ --swap-space 0 # ← 禁止使用磁盘交换 ``` --- ### **3. 间接优化策略** #### **🔧 扩大GPU资源** - 增加`--tensor-parallel-size`使用更多GPU(需模型支持并行): ```bash --tensor-parallel-size 2 # 使用2块GPU ``` #### **🔧 优化请求批处理** - 调整`--max-num-seqs`和`--max-model-len`限制单批次大小,避免显存超限: ```bash --max-num-seqs 32 # 最大并发序列数 --max-model-len 2048 # 单序列最大长度 ``` --- ### **4. 验证配置是否生效** 检查日志输出中是否包含以下关键词,确认无CPU卸载: ```log Using exclusively GPU memory | Swap space disabled ``` --- ### **💡 原理说明** vLLM通过PagedAttention机制高效管理显存。上述配置: 1. **最大化显存利用率** → 减少显存碎片 2. **禁用Swap** → 阻止退而求其次使用CPU/磁盘 3. **合理分配批次** → 避免突发性显存不足 --- ### **5. 极端情况处理** 如果仍出现显存不足: 1. 使用量化模型(如AWQ/GPTQ) 2. 升级GPU硬件(如A100/A40等大显存卡) 3. 调整模型架构(如使用DeepSpeed-MII) --- 通过以上配置,可有效禁止vLLMCPU卸载行为,确保推理完全在GPU上执行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值