[代码学习] 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/8/25 23:14:18 阅读更多 →
DeepSeek多模态怎么样?|附带保姆级配置教程(codex、claude)

DeepSeek多模态怎么样?|附带保姆级配置教程(codex、claude)

DeepSeek 多模态终于来了。这次上线的是实验性视觉模型:DeepSeek-V4-Flash-Vision-ExpAPI 模型名:deepseek-v4-flash-vision-exp它不仅支持文字,还加入了图片输入、截图理解、OCR、图表分析等能力,并且可以直接接入 Codex。但问题…

2026/8/25 23:13:18 阅读更多 →
历史学硕士论文降AI教程:历史专业研究生论文AIGC超标4.8元知网维普达标完整操作指南

历史学硕士论文降AI教程:历史专业研究生论文AIGC超标4.8元知网维普达标完整操作指南

历史学硕士论文降AI教程:历史专业研究生论文AIGC超标4.8元知网维普达标完整操作指南 同学问过好几次历史学硕士论文降AI怎么操作,干脆写篇教程。嘎嘎降AI(www.aigcleaner.com),4.8元,达标率99.26%&#xf…

2026/8/25 23:13:18 阅读更多 →

最新新闻

单相统一功率因数变流器控制:基于d-q解耦与SPWM的Simulink仿真实践

单相统一功率因数变流器控制:基于d-q解耦与SPWM的Simulink仿真实践

1. 项目背景与核心价值:为什么需要“统一功率因数”控制?在电力电子和电机驱动的世界里,我们经常听到“功率因数校正”这个词。传统的PFC(Power Factor Correction)电路,比如Boost PFC,大家已经…

2026/8/27 3:39:01 阅读更多 →
澜起PCIe 6.x/CXL 3.x重定时器入PCI-SIG名录,Retimer技术全面解读

澜起PCIe 6.x/CXL 3.x重定时器入PCI-SIG名录,Retimer技术全面解读

澜起科技把 PCIe 6.x / CXL 3.x 重定时器做进了 PCI-SIG 供应商名录,这件事在高速互连圈里算是个明确的信号:国产重定时器芯片正在进入下一代服务器互连的合规赛道。如果你平时接触服务器主板、AI 加速卡、NVMe 盘阵或者 CXL 内存池化方案,这…

2026/8/27 3:39:01 阅读更多 →
FDE模式深度解析:前线部署工程师如何重塑研发效能与业务闭环

FDE模式深度解析:前线部署工程师如何重塑研发效能与业务闭环

FDE 模式正在成为软件研发和交付领域一个高频出现的关键词。很多人第一次听到 FDE 时,会下意识把它理解为“派驻现场的程序员”,或者“更懂业务的技术支持”。如果只是这样看,很容易把 FDE 模式做成一个人员外包的变体,最后既没有…

2026/8/27 3:39:01 阅读更多 →
51单片机ADC实战:从XPT2046触摸校准到抗干扰采样

51单片机ADC实战:从XPT2046触摸校准到抗干扰采样

1. 这不是“又一本单片机教材”,而是一份能让你亲手把模拟信号变成数字世界的操作手记你手上那块普中51开发板,或者郭天祥教程里配套的STC89C52最小系统,再或者你自己焊的带ADC模块的电路板——它上面那个标着“AIN0”“VREF”的引脚&#xf…

2026/8/27 3:39:01 阅读更多 →
手机秒变热像仪:红外热成像原理、实测与选购指南

手机秒变热像仪:红外热成像原理、实测与选购指南

身边不少朋友看到我拿着一块加厚的手机壳对着路由器、插座、充电宝扫来扫去,第一反应都是:这东西到底在干嘛?我说这叫红外热成像,能让你的手机直接“看见”温度。他们对IR这个词多少有点陌生,但当我打开热成像画面&…

2026/8/27 3:39:01 阅读更多 →
C++11类功能升级:default/delete、可变参数模板与emplace操作详解

C++11类功能升级:default/delete、可变参数模板与emplace操作详解

1. 从“能用”到“好用”:C11为类功能带来的质变如果你写过一段时间的C,尤其是维护过一些老旧的C98/03代码,你可能会对类的编写有一种复杂的感情。一方面,C的面向对象能力强大而灵活;另一方面,为了实现一些…

2026/8/27 3:38:01 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →