[代码学习] vLLM 如何把大模型权重临时搬到 CPU:PR #51710 源码阅读

发布时间:2026/10/23 15:52:58

[代码学习] vLLM 如何把大模型权重临时搬到 CPU:PR #51710 源码阅读 最近读了 vLLM 的 PR #51710。这个 PR 解决的问题很直接MoE 模型太大专家权重放不进显存怎么办它给出的答案是先把一部分权重放在 CPU 内存里GPU 快用到它们时再提前拷贝回来。只要拷贝和计算重叠得足够好就能用一些 PCIe 流量换取几十 GB 显存。先弄清楚它在搬什么MoE 模型的每一层里通常有很多专家。虽然一次推理只会选中部分专家但所有专家的权重往往都要常驻显存。DeepSeek-V4 这类模型的专家权重非常大多卡切分以后每张卡仍然可能放不下。这里搬的是模型权重不是 KV Cache也不是请求数据。权重平时放在 pinned CPU memory 中某层快要执行时vLLM 把对应权重异步复制到 GPU 的临时缓冲区。CPU第2、5、8、11 层的专家权重 GPU固定大小的临时权重缓冲区 GPU 计算第2层时后台复制第5层 GPU 计算第5层时后台复制第8层哪些层会被卸载核心判断其实很朴素ifmodule_index%group_sizegroup_size-num_in_group:# 选择这一层进行 offload假设group_size3、num_in_group1代码会把每三个模块分成一组然后选择每组最后一个模块模块012|345|678卸载 √|√|√接着代码还会根据参数名做一次筛选。比如只卸载experts.w13_weight和experts.w2_weight而保留attention和其他小参数。匹配时在名字两边补上 .是为了让w2_weight不会误匹配到w2_weight_scale。GPU 缓冲区为什么要循环使用如果每次预取都重新申请显存开销会很大也很难放进 CUDA Graph。PR 使用StaticBufferPool提前申请固定缓冲区常驻 GPU 的权重不走这套逻辑slot_idxlayer_idx%prefetch_stepbufferbuffers[slot_idx]例如prefetch_step3GPU 只准备三组槽位offload unit0-slot0offload unit1-slot1offload unit2-slot2offload unit3-slot0前面的层用完后后面的层继续覆盖同一块显存。参数对象会提前指向这些静态 buffer因此 forward 时不需要反复替换参数也不需要动态申请 tensor。需要注意buffer 不能只按 tensor shape 复用。量化后的权重可能有不同的 stride 和 dtype所以实际 key 中包含参数名、shape、stride 和 dtype。预取是怎么插进 forward 的PR 给选中的模块包了一层 forward hook。简化以后大致是这样defforward(*args,**kwargs):wait_prefetch(current_layer)outputoriginal_forward(*args,**kwargs)start_prefetch(current_layerprefetch_step)returnoutput执行当前层之前计算 stream 等待该层权重复制完成。当前层算完后马上在单独的 copy stream 上预取后面的权重。理想情况下H2D copy 会被中间几层的计算时间盖住。这里的prefetch_step不是越大越好。太小权重可能来不及搬完GPU 只能停下来等太大又需要更多 GPU buffer节省的显存会变少。为什么还要处理 CUDA Graphcopy stream 和 compute stream 是两条不同的 CUDA stream。CUDA Graph capture 结束时如果 copy stream 启动了任务却没有重新汇合到当前 stream就会报cudaErrorStreamCaptureUnjoined所以 PR 增加了join_after_forward()。它会检查哪些预取任务是在 capture 期间启动、但还没有被等待然后通过 CUDA event 把这些任务重新接回当前 stream。这部分看起来只是同步细节但很关键。作者的 baseline 可以完成权重加载却会在 CUDA Graph capture 阶段失败补上这个生命周期以后服务才能真正启动。H2D copy 为什么会拖慢 TP在 PCIe 机器上CPU 到 GPU 的权重复制和 GPU 之间的 TP collective 可能争抢同一批链路。一笔很大的权重复制占着链路时all-reduce 或 all-gather 会变慢而 TP 中所有 rank 都在等它。PR 因此加入--offload-comm-aware把大 copy 切成小块collective 开始时暂缓复制collective 完成后再继续。这个逻辑只在 TP 1 时启用。作者在 TP8 的 DeepSeek-V4-Pro 上测得开启这项控制后 TTFT 降低约 9.7%吞吐提高约 10.9%。这说明预取不只是“尽量早搬”还要知道什么时候应该让路。Schedule Planner 是干什么的三个参数可以组合出很多方案。以前只能换一组参数、启动一次模型然后看是否 OOM。这个 PR 允许第一次启动时输出 manifest记录每个位置的权重大小、buffer layout 和实际卸载结果VLLM_PREFETCH_LOG_SCHEDULE1vllm serve...随后可以离线运行 plannerpython-m vllm.benchmarks.weight_offload.plannerplanner 会计算每个方案剩余多少常驻权重、需要多大的运行时 buffer以及每次 forward 要重新传输多少字节。它只计算内存不预测延迟因为真实延迟还取决于 PCIe 带宽、每层计算时间和 TP 通信竞争。实际效果和限制作者在 DeepSeek-V4-Pro、TP8、RTX PRO 6000 上每个 rank 卸载约 31.38 GiB 权重使用约 4.71 GiB GPU 临时 buffer最终净释放约 26.67 GiB 显存。每次 forward 需要重新搬运约 33.69 GB但超过 99.8% 的复制时间被计算覆盖。它也不是免费的CPU 必须有足够大的 pinned memoryPCIe 必须有足够带宽还要给 fused-MoE workspace 留出显存。
延伸阅读

更多相关文章

2026/10/21 1:26:32

工程项目管理破局:用数字化闭环解决管控乱象

一、工程项目普遍存在的管理痛点:全周期信息断层工程行业从业者普遍有一个共性体验:项目中标初期,整体规划、流程、节点都清晰明确,但随着施工推进,各项工作会逐渐陷入信息不透明、状态不清晰的被动局面。材料进场状态…

2026/10/21 1:26:11

国产AI数据大屏生成工具对比分析与数字孪生大屏选型指南

我们公司最近在筹备一个智慧园区的数字孪生展厅,需要一块能展示园区实时运营数据的大屏。本来打算找外包公司做,但报价动辄几十万,而且后续数据更新还得依赖他们,想想就不划算。于是我开始研究市面上国产的AI数据大屏生成工具&…

2026/10/21 22:06:03

康养中心节能提质改造!智能直流照明打造舒适康养光环境

一、系统概述康养中心作为服务老年群体的特殊公共场景,对光照舒适度、运行安全性、环境稳定性有着极高要求。传统照明系统光线频闪严重、电压不稳定、无法适配老人作息规律,不仅能耗浪费严重,还容易引发老人视觉疲劳、情绪焦躁等问题。同时康…

2026/10/23 15:48:56

JavaScript核心机制详解:事件循环、作用域与异步编程避坑指南

简介:这是一份面向JavaScript初学者的系统教程,适合对编程感兴趣但尚未系统接触过JS的人,也适合有一定基础想深入理解核心概念的开发者,目标是解决语法零散、DOM操作不熟、异步逻辑混淆等常见入门难题。资源包仅含1个docx文档&…

2026/10/23 15:48:56

Rake接收机Matlab仿真:分集接收与合并技术详解

简介:这份资源面向无线通信、扩频与CDMA方向的学习者和研究人员,提供Rake接收机的Matlab仿真实现,用于理解多径衰落信道下的分集接收与信号合并机制。压缩包为rar格式,共2个文件,均为.m脚本,分别对应发射端…

2026/10/23 15:48:56

Windows Server 2012 R2 离线安装 IIS 8.5 完整指南:SxS 源配置与避坑

简介:这份离线安装包面向需要在无外网环境中为 Windows Server 2012 R2 部署或更新 IIS 的 IT 管理员与运维人员,解决内网、隔离机房或严格网络安全策略下无法在线拉取系统组件的问题。压缩包共 1568 个文件,约 99.04MB,以 dll 动…

2026/10/23 15:43:53

多重ELISA检测:从单靶标定量到多因子并行分析的技术演进

简述酶联免疫吸附测定(ELISA)作为经典的蛋白定量方法,长期以来是生物标志物检测的“金标准”。然而,随着对复杂疾病分子网络认知的深入,单一靶标检测在通量、样本消耗和系统性信息获取方面的局限日益凸显。多重ELISA检…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑