31 GiB 的权重下完,我在自己写的方寸智匣里点「生成」,报错。改一处,再点,还是报错。第三次才出图——而三次报错里有两次,连一句能看懂的提示都没有。
先把结论放前面:**这个模型值得装,理由是中文。**它能在一块木质牌匾上写对「方寸智匣」四个金漆楷书大字,也能在水墨荷塘的左上角竖写「痴心妄想」。速度是 M5 Pro 上 1024×1024、20 步 69 秒。但从「权重下完」到「第一张图」之间那三个坑,我觉得比速度更值得说。

先说这次测什么、什么算通过
我这次不是跑基准分。我要回答的是一个很具体的问题:把它接进一个已经在跑 Z-Image 的本地应用,需要付出什么?
所以验收口径是三条:权重能不能完整加载;同一条代码路径能不能同时喂给两个模型;出来的图有没有达到「值得占 31 GiB 硬盘」的程度。速度我只记单次实测,不做跨引擎对比——我没装别的推理引擎,那种对比我做不了。
机器是 M5 Pro、20 核 GPU、64GB 统一内存。权重按 bf16 加载到 Metal,没有做 CPU 卸载。下面所有数字都是这一台机器、这一套配置跑出来的。
权重 30.8 GiB,加载 15 秒
先看它由什么组成。这不是一个单体模型,是四个部件拼起来的流水线:
| 部件 | 是什么 | 权重 |
|---|---|---|
text_encoder |
Qwen3-VL-8B | 16.33 GiB(4 片) |
transformer |
QwenImage21Transformer2DModel | 13.25 GiB(2 片) |
vae |
AutoencoderKLQwenImage21 | 1.26 GiB |
processor / scheduler |
纯配置,没有权重 | — |
合计 30.8 GiB。文本编码器比出图的那部分还大——一个八十亿参数的视觉语言模型专门用来读你的提示词。这也解释了它为什么能把中文写对:理解汉字的那一半,本来就是个正经的中文大模型。
从磁盘加载到 Metal 显存用了 15 秒。之后每张图的成本是固定的:1024×1024、20 步 69 秒;28 步我连跑四张,分别是 90.9、89.1、94.0、98.6 秒。步数和耗时基本是线性的,没有什么意外。
第一个坑:缺一个库,而它不报这个错
第一次点生成,报的是这个:
ImportError: Qwen3VLVideoProcessor requires the Torchvision library but it was not found
它的 processor 是 Qwen3VLProcessor,会顺手拉起 Qwen3VLVideoProcessor,而后者硬依赖 torchvision。我的环境里没有——因为原来跑的 Z-Image 不需要它。
这个坑真正难受的地方在于它躲过了所有提前检查。应用装完运行环境会当场验一句 from diffusers import QwenImage21Pipeline,这句能过,因为那只是导入一个类。要等到 from_pretrained 真的去加载 processor,缺的库才暴露。
换句话说:你装好环境、看到绿色的「安装完成」、下完 31 GiB、点了生成,才第一次看见这个错。**导入级的检查挡不住加载级的依赖。**我现在把 torchvision 加进了依赖清单,并且在安装后那道检查里补了一句 import torchvision——能在装完当场问的,就别留到用户点生成时。
第二个坑:两个模型的同一个参数,名字不一样
装上 torchvision,流水线加载成功了。再点,换了个错:
TypeError: QwenImage21Pipeline.__call__() got an unexpected keyword argument 'guidance_scale'
我去读了签名,对比很干净:
| 流水线 | 引导参数 |
|---|---|
ZImagePipeline |
guidance_scale |
QwenImage21Pipeline |
true_cfg_scale,没有 guidance_scale |
而我的代码里写死了前者。Z-Image 一直正常,所以这个假设从没被质疑过。
修法我选了「问签名」而不是「按模型名分派」:程序去读流水线 __call__ 的实际参数表,看它认哪个名字就传哪个。这样将来再进第三个流水线,这里不用再改。
顺带一个值得知道的细节:true_cfg_scale 的默认值是 1.0,而且官方文档写得很直接——这个模型 meant to be sampled without guidance,本来就该不加引导采样,要大于 1 并且带负向提示词才会真正启用。我第一次测试时手贱传了 4.0,它直接回了一句提醒说没有负向提示词所以没启用。这说明我的参数默认值对这个模型偏高,但我这轮没改——那是用户可调的设置,改默认值影响面超出这次范围。
第三个坑:我改对了代码,但改错了地方
改完参数名,自己写了个小脚本测,一次通过。高高兴兴接到应用里,再点生成——
name 'inspect' is not defined
我加的那个 import inspect 在服务端文件的开头。但真正跑生成的不是服务端,是它拉起的一个 worker 子进程,那段代码作为一个独立字符串传给 python -c,不共享服务端的任何 import。
这个坑让我记了一笔:我自己写的复刻脚本永远测不出它,因为复刻脚本里压根没有「子进程」这一层。一个只在真实路径上存在的结构,只能在真实路径上测。改完之后重跑本体,69 秒出图。
图怎么样:中文是它的主场
四张图都是 1024×1024、28 步,提示词一次成型,没有反复抽卡。

美女与野兽这张是纯粹的画面能力:兽角的弯度、鬃毛的层次、金裙的织物反光、背景舞者的景深虚化,都没有塌。

这张才是我眼睛一亮的地方。左上角那四个毛笔字——「痴心妄想」,一个不错,竖排,笔锋和飞白都在。我用过不少文生图模型,中文写到四个字还能全对的不多,更别说写成书法。

宇航猫用来看质感:面罩上地球的反光、舱内仪表盘的橙绿微光、猫瞳的高光,三层光源没有互相打架。
也有没做到的。那张牌匾我要求右下角小字竖写「本地部署」,它给了横写。四个大字完全正确,小字位置也对,就是排布方向没听。这一条我不打算含糊过去:它的中文很强,但不是指哪打哪。
参考图:它其实是「一个流水线两种活」
接下来是我这次专门去核实的部分。Qwen-Image-2.1 的 __call__ 里有一个 image 参数,读源码文档串写得很清楚:
One or more condition images……encoded by the text encoder as vision context and by the VAE into latent tokens prepended to the noise.
三件事:可以多张;参考图走两条路(文本编码器当视觉上下文,VAE 编成潜在 token 拼在噪声前面);传列表表示「整批共享的一组图」,不是一张图对一条提示词。
另外一条很实用:不指定尺寸时,输出跟随参考图的宽高比(文档原话是 Derived from the condition image’s aspect ratio if omitted)。
我拿一张已经生成的橘猫图当参考,要求换到雪地里:


82 秒。姿态、身形、尾巴的摆法、眯着眼的神态都带过来了,场景按提示词换掉了,毛上还落了雪。色温被雪景拉冷了一档,橘色没有刚才那么明显——花纹还认得出,但「保持同一只猫」这个要求,它完成得不算满分。
这些能证明什么,不能证明什么
**能证明的:**在 M5 Pro、64GB、bf16 这套条件下,它能稳定出 1024×1024 的图,20 步 69 秒;中文四字书法可以写对;参考图能把主体的姿态与神态带过去。
不能证明的,有四条我得主动说清楚:
第一,我没有做跨模型横评。我没在同一台机器上跑另一个文生图模型做同题对比,所以「它比谁强」这种话我说不了。
第二,一张图不能证明批量稳定。每种题材我只跑了一次,没有重复采样,也没有换种子复测。书法那张写对了四个字,不等于换四个字还能对。
第三,我没测量化版本。用的是官方那份 bf16 权重,31 GiB 就是 31 GiB。低内存机器上量化之后会掉多少,这轮完全没碰。
第四,参考图我只测了单张。文档说支持多张,我核实了参数类型接受列表,但没有真的喂两张进去看效果。接口通了,效果没验。
谁会为它买单,谁不会
这套账很直接。吃亏的是内存不够的人:31 GiB 权重加上激活,32GB 的机器基本进不来,48GB 勉强,64GB 才舒服。再加上它的文本编码器是个 8B 的视觉语言模型,这部分内存省不掉。
**沉默的一方是量化。**开放权重的发布方没有动机告诉你「这个尺寸在消费级机器上要怎么砍」,那是社区的活。等到有人放出质量可接受的量化版,这笔账才会被重算一遍。
还有一条时间线值得单独说,因为它直接决定你能不能装上:Qwen-Image-2.1 的支持(diffusers 的 PR #14804)在 2026-09-18 合进 main,而 diffusers 最后一个发行版 v0.40.0 是 2026-08-20——任何已发行版本都加载不了它。所以依赖必须钉在那个合并提交上,它自报的版本号是 0.41.0.dev0。文本编码器那边同理:Qwen3-VL-8B 要求 transformers ≥ 5.17,而 5.17.0 是 2026-09-09 才发行的。
**一个模型的「已发布」和「你装得上」之间,可以差出一个多月。**这段时间里任何按发行版装依赖的人,拿到的都是一句看不懂的报错。
想自己跑一遍
- 机器门槛:Apple Silicon、64GB 统一内存比较稳妥;bf16 权重 31 GiB,硬盘先留够。
- 依赖:diffusers 必须钉提交(发行版不行),transformers ≥ 5.17,别忘了 torchvision——它是这次最容易漏的一个,而且漏了之后的报错离真正原因很远。
- 参数:引导用
true_cfg_scale,默认 1.0 就好;这个模型本来就是设计成不加引导采样的。想用参考图就传image,不指定尺寸让它跟随参考图的比例。 - 在方寸智匣里:主页或多媒体工具的「启动模型」下拉里选 Qwen-Image-2.1,生图面板下方可以添加参考图,画幅选「跟随参考图」。所选模型不支持参考图时,后端会明确报错,不会悄悄把你的图忽略掉。
回到开头那个「卡了三次」。三次里有两次的报错文字,都指不到真正的原因——缺 torchvision 报的是一个视频处理类,改错层报的是一个用不上的变量名。**本地部署最贵的从来不是显存,是这种「报错和病因隔着三层」的时间。**这篇写出来,就是想让下一个装它的人少卡两次。
🧰 我做的工具
这些工具都由我持续维护。预览版会明确标注,下载、更新和已知边界以发行页为准。
信息:黑粉剪辑 HyphenCut 状态: 初步构建 · 预览版
Rust 写的本地专业视频剪辑:达芬奇键位、AI 助理直接改真实工程,免费
信息:黑粉盒子 HyphenBox 状态: 初步构建 · 预览版
免费大模型 API 雷达:持续复测可用性,本地统一接口,Key 只存本机
信息:方寸智匣 LocalBrain 状态: 正式迭代
本地模型的多模态 MCP 工具箱:TTS / Whisper / 视频生成一站接入
信息:ScreenLex 光影词库 状态: 正式迭代
看美剧顺手把生词背了,Mac/Windows 双平台,免费
信息:黑粉录屏 HyphenScreen 状态: 初步构建 · 预览版
录屏 + 智能剪辑一体:达芬奇式时间线、自动打码、导出前成片体检,免费
引用:黑粉科技 让AI成为你的超能力 本地部署 · 免费白嫖 · 自制软件 https://hyphentech.top

留言
正在加载留言…