ComfyUI 的异步权重流:4GB 显存跑满大模型的工程魔法
一块 4GB 显存的旧显卡,一台 8GB 内存的普通笔记本,跑起 12B 参数的扩散模型——不是靠魔法,是靠把"搬数据"这件事做到了极致。
目录
ComfyUI 的异步权重流:4GB 显存跑满大模型的工程魔法
仓库:Comfy-Org/ComfyUI
语言:Python
Trending:155 stars/day
一句话
一块 4GB 显存的旧显卡,一台 8GB 内存的普通笔记本,跑起 12B 参数的扩散模型——不是靠魔法,是靠把"搬数据"这件事做到了极致。
场景开篇
你买了一张 RTX 3070,8GB 显存。跑 Stable Diffusion 1.5 没问题,跑 SDXL 勉强能行,跑 FLUX 或者 LTX-2 视频模型?显存直接爆了。系统提示 "CUDA out of memory",你盯着屏幕发呆。
传统解法很简单——买更大的卡。RTX 4090 24GB,RTX 5090 32GB。但一张卡一两万块,不是每个人都掏得起。
ComfyUI 团队过去几个月悄悄做了一件事:不换硬件,靠软件把显存墙推后。他们管这套技术叫"异步权重流"(async offloading)配合"钉住内存"(pinned memory),2025 年 12 月默认开启,所有 NVIDIA 显卡免费生效。RTX 3070 跑大模型的采样速度提升了 10-50%,RTX 4070ti 提升 20-60%,RTX 5070ti 在 NVFP4 量化加持下直接翻倍。
这不是算法创新,是系统工程的胜利。
核心机制:把"搬数据"变成"流水线"
问题在哪
扩散模型推理的瓶颈不是算力,是带宽。一个 12B 参数的模型,fp16 精度下权重占 24GB。你的显卡只有 8GB 显存,怎么办?
传统方案是"权重卸载"(weight offloading):把模型放在系统内存里,推理时按需把当前层搬到显存,算完再搬出来。问题是搬运速度跟不上计算速度——GPU 算完一层,等下一层从内存搬过来,干等着。
打个比方:你在厨房做菜,食材都在楼下冰箱里。每做一道菜,你要跑下楼拿食材,再跑上楼炒菜。炒菜 30 秒,跑楼 2 分钟。GPU 大部分时间在"等食材"。
异步卸载:提前搬,不等
ComfyUI 的方案叫 async offload——异步卸载。核心思路是:在 GPU 还在算当前层的时候,提前把下一层的权重从内存搬到显存。
回到厨房的比喻:你还在炒第一道菜的时候,你的助手已经下楼去拿第二道菜的食材了。等你炒完第一道,第二道的食材已经在灶台上了,直接开炒。
技术实现上,这需要两件事: 1. 预测下一层:知道模型结构,提前规划搬运顺序 2. 异步传输:用 CUDA stream 让搬运和计算并行
关键指标是 PCIe 带宽。PCIe 4.0 x16 理论带宽 32GB/s,实际约 25GB/s。一层权重 200MB,搬运时间约 8ms。如果计算时间超过 8ms,搬运完全被计算掩盖,零额外开销。
钉住内存:减少搬运税
从系统内存到 GPU 显存,中间要经过操作系统。普通内存是"可分页"的——操作系统可以把它换到硬盘上。GPU 不能直接访问可分页内存,必须先复制到一块"钉住"的内存区域,再从那里传到 GPU。这多了一次复制。
Pinned memory(钉住内存)绕过了这次复制。ComfyUI 预分配一块钉住内存作为中转站,权重从普通内存到钉住内存到 GPU 显存,少了一跳。
效果有多大?ComfyUI 团队的基准测试显示,在 RTX 3070 上跑 1024x1024 图像,采样速度提升 10-30%。RTX 4070ti 提升 20-50%。关键是——零配置,默认开启。
DynamicVRAM:看着水位放水
第三层优化是 DynamicVRAM。传统显存管理是静态的——你告诉系统"留 2GB 给模型,其余给推理"。但不同模型、不同分辨率需要的显存不一样,静态分配经常浪费或不够。
DynamicVRAM 做的是动态水位控制:实时监控显存压力,高了就多卸载一些到内存,低了就多留一些在显存。甚至能在显存和内存都满的时候,把权重进一步卸载到 SSD。
这解释了 ComfyUI README 里那句看起来像吹牛的话:"run even the biggest open source models on as low as 4GB vram + 8GB ram"。4GB 显存确实能跑,只是速度会慢——因为大部分时间在搬数据,不在算数据。
NVFP4:Blackwell 架构的翻倍外挂
如果你恰好有 RTX 50 系列显卡,还有一层加速:NVFP4 量化。
NVFP4 是 NVIDIA Blackwell 架构原生支持的 4-bit 浮点格式。相比 fp8 或 bf16,权重体积再小一半,采样速度翻倍。ComfyUI 在 LTX-2 发布时正式支持了 NVFP4。
基准测试:RTX 5070ti 跑 LTX-2 视频,NVFP4 模式比 fp8 快约 2 倍。
但有个坑——需要 PyTorch with CUDA 13.0 (cu130)。如果你的 PyTorch 是 cu124 或更早,NVFP4 模型反而会比 fp8 慢一倍。这是最常见的"我用了新功能反而变慢了"的陷阱。
这套优化意味着什么
对个人用户
一张 RTX 3070 可以跑 FLUX、LTX-2 这种以前需要 24GB 显存的模型。不是跑得飞快,但能跑。这对没有专业显卡的独立开发者、学生、内容创作者是实打实的门槛降低。
对工程实践
ComfyUI 的做法揭示了一个被忽视的优化方向:在算力和带宽之间找平衡。大模型推理的瓶颈正在从"算不够"转向"搬不过来"。GPU 算力每年翻倍,但 PCIe 带宽增长缓慢。异步卸载 + 钉住内存 + 动态水位,本质上是在带宽受限环境下最大化算力利用率。
对生态
ComfyUI 把这些优化默认开启,不需要用户配置。这是正确的工程决策——大多数用户不知道什么是 pinned memory,也不应该知道。好的基础设施是隐形的。
数据说话
ComfyUI 团队在 RTX 3070 (8GB)、RTX 4070ti (12GB)、RTX 5070ti (16GB) 上做了基准测试,使用 Ryzen 5950x + 128GB RAM @ PCIe 4.0 x16:
- RTX 3070:1024x1024 采样,async offload + pinned memory 后速度提升 10-30%
- RTX 4070ti:1328x1328 采样,提升 20-50%
- RTX 5070ti:NVFP4 量化 + async offload,速度翻倍
一点思考
ComfyUI 的这套优化让我想到一个更普遍的工程原则:当硬件升级遇到瓶颈时,软件优化的边际收益会突然变高。
GPU 显存从 8GB 涨到 24GB 花了五年,价格翻了三倍。但异步卸载让 8GB 显存能干以前 24GB 才能干的事,成本是零。这不是"用算法换硬件"的妥协,是"用系统工程重新定义资源边界"。
类似思路在其他领域也适用:LLM 推理里的 KV cache 卸载到 CPU 内存,数据库里的冷热数据分层,操作系统的页面置换。核心都是同一个——当资源不够时,不要让资源闲置,让搬运和计算重叠。
ComfyUI 做到了,而且做得足够好,好到可以默认开启。
项目地址:https://github.com/Comfy-Org/ComfyUI
优化博客:https://blog.comfy.org/p/new-comfyui-optimizations-for-nvidia
桌面应用:支持 Windows、macOS、Linux
协议:GPL-3.0