Loading
CamelliaV の BLOG
0%
INITIALIZING
[2026.9.27] 8GB 显存跑 Qwen-Image 2.1:部署复盘与占用
DOC_ID // 3e8ca1ONLINE

[2026.9.27] 8GB 显存跑 Qwen-Image 2.1:部署复盘与占用

2026-9-27
技术分享
READ 4 MIN/COUNT 1319
#开发#复盘#实用
CamelliaV の BLOG
💡
5060 8GB laptop跑 Qwen-Image 2.1:权重放内存、按块搬进显存。1K 方图 172.6 秒,竖版海报 151.4 秒。采样本身只要几秒,时间几乎都花在搬运权重上。

为什么不是常驻显存

Qwen-Image 2.1 的视觉部分是 7B 单流 DiT,文本编码器是 Qwen3-VL 8B。官方给 ComfyUI 的 INT8 主模型大约 7.3GB,再加一个完整精度或 INT8 的 8B 编码器,8GB 显存装不下常驻权重。
改成 stable-diffusion.cpp:三个文件都留在内存里,计算到哪一块再搬进显存,用完释放。

实际用的权重

NVFP4 是 Blackwell 的原生 4-bit 格式,但这套推理程序吃的是 GGUF,没有对应的 NVFP4 文本编码器可用。文本编码器改成同规格的 Q4_K_M,并且用了社区的 Heretic 消融版:它改的是拒绝方向,不是再压一次精度。原作者在有害问题集上测到 5/100 拒绝,相对原版的 KL 散度是 0.022。
组件
规格
磁盘
加载后
DiT
Q4_K_M GGUF
4.0 GB
4005 MB
文本编码器
Heretic Q4_K_M GGUF
4.7 GB
4302 MB
VAE
BF16 safetensors
645 MB
644 MB
合计
约 9.3 GB
8952 MB,全部在内存
程序报的显存占用是 0。权重在 CUDA host 上,峰值大约 8.8GB,分成 72 块按需送进 GPU。

环境

  • GPU:RTX 5060 Laptop,驱动报告可用显存 7774 MiB,计算能力 12.0
  • 内存:32GB,跑的时候空闲大约 15GB
  • 推理:stable-diffusion.cpp,当时 master 的 42ab1c1,本机 CUDA 13.4 编,架构 120a
  • 发行版没有 Linux CUDA 包,只有 Windows CUDA 12 包,所以是源码编译
  • Web UI 子模块没拉全,前端目标关掉,只编了命令行
编译时宿主编译器用 GCC 15。NCCL 没装,单卡不影响。

参数

两张图用同一组参数,只改了分辨率和提示词:
  • Euler,CFG 6.0,扩散侧 Flash Attention 打开
  • --offload-to-cpu,VAE tiling 打开
  • qwen_image_2_1_prefix_cache=false。8GB 上前缀 KV 缓存不划算,FP16 前缀就要大约 2GB
  • 种子都是默认的 42,没有开 EasyCache,也没有加速 LoRA

两次出图

1024×1024
768×1280
总耗时
172.6 秒
151.4 秒
文本编码
3.6 秒
3.0 秒
去噪步数
请求 25,实际跑了 49 步
请求 25,实际跑了 45 步
去噪速度
第一步 13.0 秒,之后约 6.2 秒/步
第一步 9.9 秒,之后约 5.3 秒/步
VAE 解码
7.9 秒
7.1 秒
请求的是 25 步,进度条却走到 49 和 45。日志里正负两条条件分开走,CFG 6 不是 1,所以步数大约翻倍。竖图的 token 更少(潜空间边长按 16 压缩,768×1280 比 1024×1024 少),所以单步更快,总时间也更短。
172 秒里,文本编码加解码大约 11 秒。剩下的 160 秒里,真正的矩阵计算只占一部分,另一部分是每步把 100MB 左右的权重块从内存搬进显存。这和那篇记录里“耗时大头在搬运权重”一致。他们开了 EasyCache 之后 1K 大约 70 秒;这次没开,25 步的方图是 173 秒。
最后一次出的图,768×1280,151.4 秒。提示词里的标题没有写出来。
notion image

竖图那次的占用

采样从进入去噪后开始,每 5 秒一次,26 个点,覆盖最后 134 秒。开头大约 17 秒没采到。
平均
峰值
进程内存
5.4 GB
9.2 GB
显存
6912 MiB
7178 / 7774 MiB
GPU 占用
94%
100%
功耗
109 W
116 W
竖图去噪中途的整机监控。用户名和内网地址已抹掉,功耗和显存数字留着。这一帧是 114W、显存 7.3/8.0GB,和表里的峰值同一段。
notion image
显存在去噪阶段一直贴着 7.1GB,GPU 接近满载。进程内存从 9.2GB 掉到 1GB 以下,是用完的权重组被释放。功耗计时冲过了这张卡标称的 100W 上限,平均仍在 109W。进程退出后,显存回到桌面自己的 3GB 出头。

踩到的坑

  1. Hugging Face 的 Xet 下载开了几十条连接,带宽占用很高,但目标文件几分钟停在 0 字节,内存却涨到 700MB。环境变量压不住并发。改成单连接 curl 之后稳定在 3.2MB/s,4.7GB 下了 25 分钟,中途没有断。
  1. 下载客户端留下的锁文件会挡住下一次启动。旧进程还活着时不要再开一个,两个会抢同一把锁。
  1. 前端子模块是空目录时,整次编译会在装前端依赖那一步失败。只要命令行的话,把前端目标关掉即可。
  1. 文本编码器的 GGUF 没有带视觉塔,日志会写 vision disabled。文生图不影响。要做参考图编辑,还得另下 mmproj,用单独的参数传进去。

结论

8GB 显存能跑 Qwen-Image 2.1,代价是 1K 图大约 3 分钟,而且显存在去噪时基本占满。加速应该先减搬运:EasyCache,或者步数更少的加速 LoRA。加显存解决的是另一件事,这次的墙主要不在算力。
NAVIGATION // Related Articles
Loading...
© 2024-2026 CamelliaV