06 · VRAM 驻留窗口的两个坑

发布时间:2026/10/13 9:02:19

06 · VRAM 驻留窗口的两个坑 06 · VRAM 驻留窗口的两个坑一句话显存装不下整模型时要让设备侧只保留一层有界工作集——但「驱逐」这件事有两个反直觉的坑驱逐未来层会让代价对 keep 完全平坦用cudaFree做驱逐的同步抖动比省下的重传还贵。前置建议先读 第 03 篇 · 权重条带缓存与融合权重、第 05 篇 · 卸载集合。环境x86-64 NVIDIA RTX 5090sm_120· 阶段一 2B 稠密Qwen3-VL-2B q81.85 GB。一、问题与结论这不是加速开关是「跑得起」的开关。目标是让显存装不下的模型能以有界显存工作集跑起来。问题做法判定该驱逐哪些层只驱逐过去层保留当前与未来实测不对称才按 keep 缩放驱逐时怎么释放走设备缓冲池不用cudaFree实测cudaFree同步更贵驻留会影响输出吗不会——只改缓存占用实测7 档 TOKIDS 8/8 相同开窗时还要预热吗跳过会被立刻驱逐实测纯浪费二、背景与规则引擎宿主侧已有「逐层驻留」VLLM_VQF_STREAM。GPU 侧在同一个层边界钩子上推进两边锁步驱逐 layer cur_layer - keep 1 的所有权重 cur_layer 本身与所有「未到来」的层保持常驻 lm_head 永远常驻。规则落在vcuda_dev_wcache_window()里挂载点是vqf_stream_layer_advance的同一处4 处层循环/* 文件src/npu/cuda/vllm_cuda_kernels.cuvcuda_dev_wcache_window节选 */constintlocur_layer-keep1;intevicted0;for(inti0;iVCUDA_MAX_ENTRIES;i){vc_wentry_t*es-ent[i];if(!e-used)continue;if(e-layerVCUDA_LMHEAD_LAYER)continue;/* lm_head: always keep */if(e-layerlo)continue;/* current all upcoming: keep */s-bytes-e-bytes;vc_ent_release(s,e);e-used0;e-key0;s-n_ent--;s-n_evict;evicted;}为什么不对称因为一层循环只向前扫cur之上的层马上要用——驱逐它们等于下一层立刻重传cur-keep1之下的层本轮已消费完——它们才是可以丢的。三、核心机制3.1 坑 1驱逐未来层 → 代价对 keep 完全平坦第一版实现「同时驱逐 cur1的未来层」结果keep124816ms/tok184178170163159代价与 keep 几乎无关——不管留多少都是 ~160–184 ms/tok。原因就是第二节说的未来层马上要用驱逐它们 → 每 token 把所有层权重重传一遍。于是「省显存」变成了「每 token 全量重传」keep 这个参数失去了意义。改法只驱逐过去层。改完后代价才按预期随 keep 缩放。3.2 坑 2用cudaFree驱逐 → 抖动比省下的重传还贵第二版改对了方向但驱逐动作是cudaFree一对cudaFree是设备同步调用。每层 6 次 free 的抖动比它省下的重传还贵。改法加设备缓冲池同几何复用VCUDA_POOL_MAX128槽驱逐退化成 O(1) 指针移动/* 文件src/npu/cuda/vllm_cuda_kernels.cuvc_ent_release节选 */if(e-dWTe-dbsTs-n_poolVCUDA_POOL_MAXe-Npad0e-ngroups0){s-pool[s-n_pool].dWTe-dWT;s-pool[s-n_pool].wt_bytes(size_t)e-K*(size_t)e-Npad;s-pool[s-n_pool].dbsTe-dbsT;s-pool[s-n_pool].bs_bytes(size_t)e-ngroups*(size_t)e-Npad*sizeof(float);s-pool[s-n_pool].Npade-Npad;s-pool[s-n_pool].ngroupse-ngroups;s-n_pool;e-dWTNULL;e-dbsTNULL;e-bytes0;return;}vc_ent_free(e);/* 池满时的退化路径真 free */池复用要求几何完全一致Npad与ngroups都相同这样布局逐字节匹配、无需重排/* 文件src/npu/cuda/vllm_cuda_kernels.cuvc_ent_alloc节选 */if(s-pool[i].Npade-Npads-pool[i].ngroupse-ngroupss-pool[i].wt_byteswt_bytess-pool[i].bs_bytesbs_bytes){…}resident 窗口下同一批形状循环出现所以复用几乎总命中预热后不再cudaMalloc。效果keep1从 159 →94–106 ms/tok。3.3 修正后的代价曲线2B Q88 token 均值keepoff2726201241ms/tok3233376178115106设备常驻条数19719018314185298读法常驻43%权重keep12→ decode 慢2.4×常驻14%权重keep4→ decode 慢3.6×模型装得下就别开它。它是「跑得起大模型」的开关不是加速开关。附带的一个反直觉点keep1 反而比 keep4 略快——常驻越少池复用率越高。3.4 不变式驻留不影响输出这是它能安全落地的前提。实测 keep ∈ {1,4,12,20,26,27} 与关闭共7 档greedy TOKIDS8/8 完全相同。原因驻留只改缓存占用不改任何 GEMM 的输入、顺序或结果——下次用就重新上传。这与宿主侧「跨驻留档 TOKIDS 逐位相同」的红线同构但只在本后端内成立。同理预热与懒加载两条路径的输出也一致TOKIDS 前缀与翻转点逐位相同。3.5 开窗时自动跳过预热窗口会在第一个层边界驱逐窗口外的权重所以全量预热等于「传完即丢」——纯浪费。因此VLLM_CUDA_STREAM 0时跳过预热让窗口的按需路径自己传/* 文件src/model/vllm_safetensors.cst_cuda_preload_all节选 */constchar*egetenv(VLLM_CUDA_STREAM);if(ee[0]atoi(e)0)return0;/* 窗口模式跳过全量预热 */四、实测数据口径数值判定标注驱逐未来层第一版keep1…16184 / 178 / 170 / 163 / 159 ms/tok代价对 keep 平坦实测仅驱逐过去 缓冲池 keep1159 → 94–106 ms/tok缓冲池有效实测2B Q8 8-token 均值代价曲线见上表off 32 → keep4 115 / keep1 106 ms/tok装得下就别开实测驻留不变式7 档 keep 与关闭 TOKIDS 8/8 相同输出不变实测窗口重传吞吐~7.7 GB/s离 PCIe 上限还远实测五、边界与已知限制只有 2B1.85 GB在本机可跑窗口的省显存收益需要 8B/30B 才能实测现有 8B VQF 的布局标志0x1与引擎修订构建的0x3不匹配无法加载——见 第 07 篇。窗口的重传成本实测 ~7.7 GB/s离 PCIe 上限还很远瓶颈在 memset 转置 同步的固定开销。「按层预取上装」算第l层时并行上装l1是明确的下一步。「驻留不变式」7 档 TOKIDS 8/8只在本后端内成立不能外推到与 CPU 的位级一致。池复用的 O(1) 驱逐依赖「同几何形状循环出现」形状频繁变化的负载下命中率会下降。CPU 对照迁移前基线CPU 参考kestrel-llm/src/model/vqf.c函数vqf_stream_layer_advanceVLLM_VQF_STREAM逐层驻留—— 每层权重用时建文件页、算完立即MADV_DONTNEED释放只留 keep 层常驻。迁移要点CPU 的逐层驻留 → CUDA 侧的不对称驱逐窗口只丢过去层、保当前与未来lm_head永不驱逐cudaFree换成缓冲池 O(1) 复用窗口档输出不变TOKIDS 8/8。真机验证未独立复现需 1.85GB 2B Q8 keep∈{1…27} 七档实测与重传吞吐~7.7 GB/s无对应模型与探针。六、小结可复用结论只驱逐过去层不碰未来层循环只向前扫驱逐未来 → 每 token 全量重传代价对 keep 平坦、参数失去意义。驱逐别用cudaFree它是设备同步调用每层 6 次 free 的抖动比它省下的重传还贵缓冲池把驱逐退化成 O(1)。池复用要求几何一致Npad与ngroups都相同布局才逐字节匹配、无需重排。驻留必须输出不变7 档 TOKIDS 8/8 相同这条不变式是它能安全落地的前提它只改缓存占用。开窗跳过预热预热会被窗口立刻驱逐等于纯浪费让窗口的按需路径自己传。相关篇目第 03 篇 · 权重条带缓存与融合权重、第 05 篇 · 卸载集合、第 07 篇 · 8B 阶段源码与配套资源本仓库 https://gitee.com/pei-xiaoguang/kestrel-llm-cuda.gitCPU 推理源码 https://gitee.com/pei-xiaoguang/kestrel-llm
延伸阅读

更多相关文章

2026/10/12 3:59:59

adjacency matrix-自考大学-东方仙盟

Given the adjacency matrix of a graph (∞ means no direct edge):V1V2V3V4V5V6V7V1∞12∞∞∞∞8V2∞∞∞11∞∞∞V310∞∞∞∞∞9V4∞∞∞∞∞∞8V5∞∞11∞∞∞∞V6∞∞∞158∞∞V7∞13∞∞128∞Choose the correct statement: A. This is an undirected graph with a uni…

2026/10/13 9:00:17

圆弧趋近直线时的圆心与半径极限分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 9:00:17

ComfyUI本地部署全指南:从硬件要求到实战优化

说实话,ComfyUI是我用过所有AI绘图工具里“入门门槛最低、天花板最高”的一个。低是因为装好之后跑第一张图的流程跟开游戏差不多,双击启动,拖个工作流,点运行,图就出来;高是因为想复现网上那些复杂到能自动…

2026/10/13 9:00:17

多Agent自动化模板

# 基于 PostgreSQL xxxxxxx 的 xxxx 标量混合搜索索引:多 Agent 协同示例## 一、目标形式化与验收标准### 1.1 总目标设计并实现一个xxxxxxxxxxxxxxxx。### 1.2 成功标准(可验证)| 编号 | 验收项 | 验证方式 | |------|--------|----------|…

2026/10/13 9:00:17

水杉2.4.8低模建模实战:安装激活、操作技巧与Blender联动

简介:Metasequoia 2.4.8繁体版是一款专为繁体中文用户打造的三维建模与动画制作工具,由日本公司开发,昵称“水杉”,其完全汉化的界面免去了语言障碍,适合从初学者到专业美术师等不同层级的创作者使用。压缩包共含152个…

2026/10/13 8:55:17

工业影像制作:技术翻译与视觉表达的艺术

1. 工业影像领域的专业深耕者在制造业转型升级的大背景下,工业影像作为企业品牌传播和技术展示的重要载体,其专业价值日益凸显。中之网科技作为这个细分领域的深耕者,20年来始终专注于工业制造类企业宣传片的拍摄制作,形成了独特的…

2026/10/13 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

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

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

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