【vLLM 学习】Disaggregated Prefill Lmcache

Lmcache+vllm——KVcache卸载CPU/SSD探索 目前查看了vllm、Nvidia dynamo、mooncake都没有找到将kvcache卸载到SSD的方法,幸好lmcache支持。以下进行lmcache+vllm实践,对比将kvcache分别卸载到CPU-ram和SSD上的TTFT性能差异。目前的query只是单并发,对比的效果已经比较明显了,可能多并发下对存储的要求就会更高了。 阅读详情

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

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

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

源码 examples/offline_inference/disaggregated_prefill_lmcache.py

# SPDX-License-Identifier: Apache-2.0

"""
该文件演示了分解预填充的示例用法
与 LMCache。
我们将启动2个 vLLM 实例 (Preill 的 GPU 0和 Decode 的 GPU 1) ,
并启动额外的 LMCache 服务器。
KV 缓存以以下方式传输:
vLLM 预填充节点 - > lmcache Server-> vllm 解码节点。
请注意,运行此示例需要运行 `pip install lmcache`。
在 https://github.com/LMCache/LMCache 中了解有关 LMCache 的更多信息。
"""
import os
import subprocess
import time
from multiprocessing import Event, Process

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 服务器的端口
port = 8100
# 在 LMCache 中使用实验功能
os.environ["LMCache_USE_EXPERIMENTAL"] = "True"
# lmcache 设置为每块使用256个 token
os.environ["LMCache_CHUNK_SIZE"] = "256"
# 禁用 LMCache 中的本地 CPU 后端
os.environ["LMCache_LOCAL_CPU"] = "False"
# 将本地 CPU 内存缓冲区限制设置为5.0 GB
os.environ["LMCache_MAX_LOCAL_CPU_SIZE"] = "5.0"
# 设置 LMCache 服务器的远程 URL
os.environ["LMCache_REMOTE_URL"] = f"lm://localhost:{port}"
# 在 vLLM 和 LMCache 服务器之间设置序列化器/求职者
# `naive` 表示使用张量的原始字符而无需任何压缩
os.environ["LMCache_REMOTE_SERDE"] = "naive"


def run_prefill(prefill_done, prompts):
    # 我们将 GPU 0 用于预填充节点。
    os.environ["CUDA_VISIBLE_DEVICES"] = "0"

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

    ktc = KVTransferConfig.from_cli(
        '{"kv_connector":"LMCacheConnector","kv_role":"kv_producer","kv_rank":0,"kv_parallel_size":2}'
    )

    # 将 GPU 内存利用设置为0.8,用于40GB 显存的 A40 GPU。
    # 如果您的 GPU 的内存较少,则降低值。
    llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2",
              kv_transfer_config=ktc,
              max_model_len=8000,
              gpu_memory_utilization=0.8,
              enforce_eager=True)

    #llm.generate(prompts, sampling_params)
    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        generated_text = output.outputs[0].text
        print(f"Generated text: {generated_text!r}")
    print("Prefill node is finished.")
    prefill_done.set()

    # 清理 LMCache 后端
    LMCacheEngineBuilder.destroy(ENGINE_NAME)


def run_decode(prefill_done, prompts, timeout=1):
    # 我们将 GPU 1 用于解码节点。
    os.environ["CUDA_VISIBLE_DEVICES"] = "1"

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

    ktc = KVTransferConfig.from_cli(
        '{"kv_connector":"LMCacheConnector","kv_role":"kv_consumer","kv_rank":1,"kv_parallel_size":2}'
    )

    # 将 GPU 内存利用设置为0.8,用于40GB 显存的 A40 GPU。
    # 如果您的 GPU 的内存较少,则降低值。
    llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2",
              kv_transfer_config=ktc,
              max_model_len=8000,
              gpu_memory_utilization=0.8,
              enforce_eager=True)

    print("Waiting for prefill node to finish...")
    prefill_done.wait()
    time.sleep(timeout)

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

    # 清理 LMCache 后端
    LMCacheEngineBuilder.destroy(ENGINE_NAME)


def run_lmcache_server(port):
    server_proc = subprocess.Popen([
        "python", "-m", "lmcache.experimental.server", "localhost",
        str(port)
    ])
    return server_proc


if __name__ == "__main__":

    prompts = [
        "Hello, how are you?" * 1000,
    ]

    prefill_done = Event()
    prefill_process = Process(target=run_prefill, args=(prefill_done, prompts))
    decode_process = Process(target=run_decode, args=(prefill_done, prompts))
    lmcache_server_process = run_lmcache_server(port)

    # 开始预填充节点
    prefill_process.start()

    # 开始解码节点
    decode_process.start()

    # 清理过程
    decode_process.join()
    prefill_process.terminate()
    lmcache_server_process.terminate()
    lmcache_server_process.wait()
【开源项目】当大模型推理遇上“性能刺客”:LMCache 实测手记 LMCache 是一个 LLM 服务引擎扩展,用于减少 TTFT 并提高吞吐量 ,尤其是在长上下文场景下。通过将可重用文本的 KV 缓存存储在各个位置,包括 (GPU、CPU DRAM、本地磁盘),LMCache 在任何服务引擎实例中重用任何重用文本(不一定是前缀)的 KV 缓存。因此,LMCache 节省了宝贵的 GPU 周期,减少了用户响应延迟。 阅读详情

相关推荐

如何用Lmcache+vllm优化KVcache存储?CPU与SSD性能实测对比

本文通过实测对比,详细介绍了如何利用Lmcache+vLLM将大模型推理中的KV Cache卸载至CPU内存或SSD硬盘,以解决长上下文场景下的GPU显存瓶颈。测试数据显示,CPU卸载方案在首字延迟(TTFT)上显著优于SSD方案,但SSD方案在存储成本上更具优势。文章提供了完整的配置指南、性能数据分析和生产环境选型建议。

fire9的博客 986

vllm核心引擎逻辑和kvcache和lmcache

vllm的核心引擎逻辑梳理

Lt_jue的博客 1402

告别盲打:为NXOpen Python API生成智能代码提示的完整指南

本文提供了一份为NXOpen Python API生成智能代码提示的完整指南。通过配置匹配的Python环境、利用类型存根文件生成工具创建.pyi文件,并在PyCharm或VSCode中正确配置,开发者可以彻底告别“盲打”,获得精准的代码补全和参数提示,从而大幅提升NX二次开发的效率和体验。

weixin_29057695的博客 371

【亲测免费】 LMCache:加速大规模语言模型服务的关键

在现代人工智能领域,大规模语言模型(LLM)已成为处理复杂自然语言任务的核心技术。然而,LLM的高延迟和低吞吐量问题一直是技术从业者面临的挑战。LMCache,一个专门为LLM设计的缓存引擎扩展,提供了一个创新的解决方案,旨在减少响应时间(TTFT)并提升系统吞吐量。 ## 项目介绍 LMCache的核心概念是将可重用的文本键值对(KV cache)存储在多个位置(包括GPU、CPU DRAM...

gitblog_00182的博客 1166

手把手教你用三菱PLC控制JET伺服原点:从硬件接线到GXWORKS3程序调试

本文详细介绍了如何使用三菱PLC控制JET伺服系统实现原点回归功能,涵盖硬件接线、参数配置到GX Works3程序调试的全流程。通过实战指南,帮助工程师快速掌握伺服控制技术,提升工业自动化项目的实施效率。

weixin_30642561的博客 535

【Get深一度】小波分析概念1——紧支撑集是什么意思,通俗解释

最近学到小波,在仿真中也用到了紧支撑函数;紧支撑性越好,说明能量越集中;用最通俗的话来讲,紧支撑是这样的: 对于函数f(x),如果自变量x在 0附近的取值范围内,f(x)能取到 C; 而在此之外,f(x)取值为 0; 那么这个函数f(x)就是紧支

Trey_优快云 的优快云博客 8348

vLLM v1 对接 LMCache 实战:CPU Offload、分布式 Prefill(Disaggregated Prefill)与 KV Cache 共享

vLLM 仓库在 `examples/disaggregated/lmcache/` 目录下提供了一组完整的示例,演示 LMCache 如何作为 vLLM v1 的 KV 缓存扩展层,覆盖三大场景:单节点 CPU/磁盘卸载(KV cache offloading)、基于 NIXL 的分布式 prefill(disaggregated prefilling)以及跨实例 KV cache 共享。读完本

gitblog_00151的博客 233

手把手教你用FFmpeg实操:H.264转码、AVS2编码与H.265/HEVC参数调优避坑指南

本文详细解析了使用FFmpeg进行H.264转码、AVS2编码与H.265/HEVC参数调优的实战技巧。通过具体命令示例和参数详解,帮助开发者避开常见编码陷阱,提升视频处理效率和质量,特别适合音视频开发者和内容创作者参考。

weixin_30889885的博客 482

vLLM Ascend 预填充-解码分离(Disaggregated Prefill)架构解析与 Mooncake 连接器实战

Disaggregated Prefill(预填充-解码分离)是 vLLM Ascend 为大型推理任务优化 **TTFT(首 Token 时延)** 与 **TPOT(单 Token 生成时延)** 的关键特性:它将 Prefill(P 节点)与 Decode(D 节点)拆分为独立服务实例,由全局 Proxy 分发请求,并通过 Mooncake 连接器在节点间点对点传输 KV Cache。读完本

gitblog_00765的博客 219

1. Klipper从安装到运行

本文记录Klipper固件从安装,配置到运行的详细过程

weixin_42098934的博客 1万+

你学Simulink--基于储能系统的建模与仿真场景:飞轮储能系统在电网调频中的作用仿真

本文详细介绍了利用Simulink+Simscape搭建飞轮储能系统(FESS)电网调频仿真模型的全过程。主要内容包括:系统工作原理及调频作用分析,基于Simulink的模块化建模步骤(飞轮、电机/发电机、功率电子接口等组件搭建),调频控制策略实现(频率检测、功率指令生成和模式切换),以及仿真参数设置与结果分析方法。该模型可有效模拟FESS在电网频率调节中的快速响应特性,为新能源存储和智能电网研究提供重要仿真工具,同时可通过参数优化和算法改进进一步提升系统性能。

xiaoheshang_123的博客 168

vLLM 分离式预填充(Disaggregated Prefilling)完全指南:架构、连接器配置与实战

本文围绕 vLLM 的 **Disaggregated Prefilling(分离式预填充,实验特性)** 展开,系统讲解该特性将 LLM 推理的 prefill 与 decode 阶段拆分到不同 vLLM 实例中独立运行的技术动机、三种核心抽象(Connector / LookupBuffer / Pipe)、以 `--kv-transfer-config` 为主的连接器配置方式,以及基于仓库示

gitblog_00001的博客 399

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 288

vLLM 分离式 Prefill/Decode 部署实战:XpYd 代理、多轮 KV 复用与 KV Cache 事件发布

本文围绕 [disaggregated_serving 示例目录](https://link.gitcode.com/i/8a0d4c0a5cb02a9787b692a6b213cd83) 展开,讲解 vLLM 的 Disaggregated Serving(Prefill/Decode 分离部署)能力:从最经典的 XpYd(X 个 Prefill 实例 + Y 个 Decode 实例)拉取模式代

gitblog_00945的博客 555

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 使用与 OpenAI 兼容的格式,可以通过修改配置使用 OpenAI SDK。生成的 API Key 只会显示一次,请妥善保存。注册并登录账号,进入左侧导航栏的。创建 API Key。

blues_C的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LMCache终极配置指南:从零开始实现10倍LLM推理加速

LMCache是一款革命性的KV缓存优化工具,专为长上下文大语言模型(LLM)推理设计。通过智能的缓存管理和存储优化,LMCache能够显著提升推理性能,降低计算成本,是现代AI基础设施中不可或缺的组件。本文将为你提供完整的配置指南,从基础设置到高级优化,帮助你充分发挥LMCache的潜力。 ## LMCache架构解析:理解核心组件与工作流程 LMCache的核心价值在于其多层次缓存架构和智

gitblog_00302的博客 1008

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

仓颉 std.unittest.common 常量与变量解析:optionsInfo 与 unittestOptionsRegistryClosed 的框架内部机制

在仓颉(Cangjie)标准库的 `std.unittest.common` 单元测试框架内部,`optionsInfo` 与 `unittestOptionsRegistryClosed` 是两个承载"选项注册"核心状态的关键成员:前者是记录所有单元测试选项元信息的全局注册表,后者是控制注册窗口开闭的开关标志。本文以 [unittest_common_constants_vars.md](htt

gitblog_00319的博客 553

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

10 分钟搭好 Sunshine 免费游戏串流:零月费把书房 PC 接进客厅电视

周六傍晚,你瘫在沙发上,想开书房那台 PC 里的 3A。Sunshine 游戏串流主机免费把画面和手柄推到客厅,Moonlight 客户端是收信号那端的收音机。零月费,十分钟出画面,这篇 Sunshine 教程带你走完。 ## 开工前把票根收齐 硬件这头,装 Sunshine 的 PC 要带硬件编码的显卡,NVIDIA、AMD、Intel 都可以,内存 4GB 往上,CPU 到 Ryzen 3

gitblog_00822的博客 853

Jasna 高级处理完全指南:去噪、检测稳定化、场景切换、fMP4、LUT、锐化与导出后动作

Jasna 是一套面向"特殊场景"的 GPU 视频修复工具链,除了主流程的检测与修复之外,还提供了一系列针对实际成片质量的进阶能力。本文以 [docs/ja/advanced_processing.md](https://link.gitcode.com/i/3facc1580876b9a148e3d9fdb03c22b0) 为核心骨架,结合 [CLI 参考](https://link.gitco

gitblog_00773的博客 176

五步把 Windows 11 换回经典桌面:ExplorerPatcher 完整配置指南

如果你受够了 Windows 11 的居中任务栏、磁贴开始菜单和巨型 Alt+Tab 卡片,ExplorerPatcher 能把它们逐项换回经典布局。它通过挂钩 `explorer.exe` 进程修改系统界面,所有开关集中在一个设置面板里,原理一句话带过即可。以下内容基于仓库真实源码与配置整理,可直接照做。 ## 装之前先确认两件事 **第一件:你的系统版本受不受支持。** 以 [versio

gitblog_00957的博客 132

LMCache KV缓存管理实战指南:10倍性能提升的LLM推理加速方案

LMCache作为新一代KV缓存管理层,专为解决大语言模型推理中的内存瓶颈和性能挑战而生。通过将KV缓存从临时状态转变为可持久化、可共享、可监控的AI原生知识,LMCache能够显著降低首token延迟(TTFT)并提升吞吐量,特别适用于长上下文对话、多轮问答和RAG增强等场景。作为厂商中立的技术栈,LMCache支持主流开源推理引擎、硬件平台和存储系统,为用户提供灵活的技术选型空间。 ## 技

gitblog_00066的博客 536

Mooncake × vLLM:使用 MooncakeStoreConnector 构建分布式 KV 缓存池与 XpYd 分离式推理

> **导读**:本文以 Mooncake 仓库中 `MooncakeStoreConnector` 的部署指南为核心,系统讲解如何在 vLLM V1 中通过该 KV Connector 把 `MooncakeDistributedStore` 作为共享 KV 缓存池,实现 CPU/SSD 缓存卸载、跨实例前缀缓存命中,以及 `kv_both` / `kv_producer` / `kv_cons

gitblog_00794的博客 393

Mooncake 分布式 KV Cache 存储与共享:基于 vLLM 的 KV Cache Storage & Sharing 部署实战指南

本文是一份面向 vLLM 用户的实战部署指南,讲解如何利用 Mooncake 项目的 `MooncakeStoreConnector` / `MooncakeStore` 为 vLLM 构建**分布式 KV Cache 存储池**:将 KV Cache 卸载到 CPU/SSD 以扩展有效缓存容量、基于 block-hash 去重在多个 vLLM 实例间共享前缀缓存、以及支持动态调整 prefill

gitblog_00909的博客 194

gat 三层配置继承机制:团队共享设置与本地覆盖的终极指南

gat 是一款简单、快速的大文件版本管理工具,它通过一套「三层配置继承机制」让团队轻松共享统一设置,同时保留每位成员个人本地覆盖的能力。本文带你完整理解 gat 的配置继承规则:全局、项目、本地三层如何合并,哪些配置按字段继承、哪些按名称整体替换,以及 `gat config`、`--local`、`--unset` 这些常用参数背后的原理,帮助你在协作中既保持团队一致,又满足个人差异。 ##

gitblog_01031的博客 416

Mooncake × llm-d 集成指南:在 Kubernetes 上搭建 vLLM KV Cache 卸载与 P/D 传输三层栈

Mooncake 是 Kimi 背后的 LLM 服务平台,而 llm-d 将其与 vLLM 一起打包到 Kubernetes:llm-d 负责把 vLLM 推理编排为 Deployment/DaemonSet,Mooncake 作为其下方的 KV 存储与传输层。本文以 [llm-d 集成文档](https://link.gitcode.com/i/07e67f6afc4bded02ff008961

gitblog_00687的博客 296

LMCache 配置实战:从 5 分钟起步到缓存命中率 70%+

你在 vLLM 上跑长上下文推理,想给 KV 缓存加速,至少得写一份 LMCache 配置。这篇带你走完整条线:从 5 分钟的最小配置,到命中率稳在 70% 以上,适合做推理部署与调优的工程师。 ## 🔧 先做选择:LMCache 配置文件还是环境变量 LMCache 的配置方式有两种: - **配置文件**:YAML(官方推荐)或 JSON,用 `LMCACHE_CONFIG_FILE`

gitblog_00785的博客 430
上一篇: 整合多源植物转录组数据,山东理工大学等构建 PlantLncBoost 模型,跨物种 lncRNA 预测准确率最高达 96%
下一篇: MIT团队利用大模型筛选25类水泥熟料替代材料,相当于减排12亿吨温室气体
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值