- 人工智能
- 大模型
- 计算机视觉
- 媒体生成
- 微调
【免费下载链接】texture-fix-vae-for-qwen-image-2.1
在 fp16 精度下运行 Qwen-Image-2.1 的 VAE 解码器时,输出图片出现大片品红色的 NaN 花屏?texture-fix-vae-for-qwen-image-2.1 是一个针对该问题的微调修复版 VAE:它不仅通过"两步走"方案彻底消除了 fp16 溢出导致的 NaN,还顺带治好了原 VAE 的棋盘格伪影,让纹理细节更干净自然。本文将带你快速理解问题根源、修复原理,以及两步替换的完整上手流程。
为什么 fp16 下会爆 NaN?
先说清楚问题的本质。fp16 的数值上限只有约 65504,一旦中间激活值超过这个范围,就会直接溢出为 inf / NaN,最终污染整张解码图(README 中的演示甚至用 fp16_demo.py 专门把坏像素染成品红色来可视化)。
实测数据显示,原版 Qwen-Image-2.1-VAE 解码器在 fp16 下的最大激活值高达约350 万,远超上限;185 个压力测试输入中甚至有 75 个直接产出 NaN。官方推荐因此只能退回更吃显存的 bf16,而 bf16 在不少消费级显卡上效率不高。
texture-fix-vae 的修复版则把最大激活值压到约 1300,185 个测试输入全部 0 NaN——fp16 下可以安心跑解码了。
两步修复方案:解码器微调 + 权重缩放
| 步骤 | 做法 | 效果 |
|---|---|---|
| 第 1 步:微调解码器权重 | 参考 SDXL-VAE-FP16-Fix 的思路,微调每层卷积的 scale / bias 和 RMSNorm 增益(约 6.1 万参数),保持输出不变的同时压低激活幅度,并加入大量透明区域训练切片 | 消除 fp16 下的 NaN 溢出 |
| 第 2 步:手动缩放权重 | 按精确的 2 的幂次手动缩小特定权重(解码器 ÷512,编码器 ÷8),进一步压缩残差流的数值规模;由于每个残差分支都带 RMSNorm,输出结果不变 | 预留出 fp16 数值头room,彻底杜绝溢出 |
顺带一提,编码器权重只是按 2 的幂缩放,计算函数与原模型完全一致,可以放心替换。
附带福利:棋盘格伪影也被治好了
除了 NaN 问题,原版 Qwen-Image-2.1-VAE 在高细节照片风格图像上还容易出现棋盘格伪影。这个项目用 TAESD 的对抗式训练配方对最高分辨率的解码块做了微调,rFID 感知质量指标从 3.38 提升到 2.07(fp16 下甚至 2.06),PSNR / LPIPS 仅轻微下降——肉眼观感更干净,是更划算的取舍。
下面是同一 latent 解码出的细节对比:左图为原版 VAE(带轻微棋盘格噪点感),右图为 texture-fix-vae(花丛细节更清晰、噪点更少)。
再看另一处岩石与花草的局部对比,右侧修复版的块状伪影明显减少:
快速上手:两步替换 VAE
方式一:ComfyUI 一键替换
- 将权重文件 texture_fix_vae_for_qwen_image_2.1_bf16.safetensors 下载后放入
ComfyUI/models/vae/目录; - 在
Load VAE节点中选择该文件,替换原来的qwen_image_2.1_vae_bf16.safetensors; - 完成。开启
--fp16-vae参数时同样可以正常工作,这正是本修复版的核心卖点。
方式二:Diffusers 代码加载
如果你使用 🧨 Diffusers 框架,只需两行代码即可换入修复版 VAE:
vae = AutoencoderKLQwenImage21.from_pretrained("madebyollin/texture-fix-vae-for-qwen-image-2.1", torch_dtype=torch.bfloat16) pipe = QwenImage21Pipeline.from_pretrained("Qwen/Qwen-Image-2.1", vae=vae, torch_dtype=torch.bfloat16).to("cuda")如需离线使用,也可以先 clone 仓库再本地加载:
git clone https://gitcode.com/hf_mirrors/madebyollin/texture-fix-vae-for-qwen-image-2.1文件速查与许可说明
| 文件 | 说明 |
|---|---|
| texture_fix_vae_for_qwen_image_2.1_bf16.safetensors | ComfyUI 用 bf16 权重,放入models/vae/即可 |
| diffusion_pytorch_model.safetensors | Diffusers 默认加载路径的权重文件 |
| config.json | VAE 配置,包含 64 通道 latent 的均值与标准差(latents_mean / latents_std) |
| fp16_demo.py | 复现 fp16 NaN 对比演示脚本,可直观看到品红色坏像素区域 |
| NOTICE | 归属说明:基于 Qwen-Image-2.1 修改,仅限非商业 / 研究用途 |
⚠️注意:本项目基于 Qwen 研究许可(详见 LICENSE),仅允许非商业和研究用途,商用前请务必确认许可条款。
常见问题
Q:替换后生成结果会变吗?bf16 下纹理会略微更干净(rFID 更好),像素级精度(PSNR)略有下降;编码器功能与原模型完全一致,不影响已有 latent 的复用。
Q:为什么 fp16 下原版 VAE 的 NaN 常出现在透明区域?原版解码器在处理全透明区域时激活幅度最大,NaN 从透明区域产生后还会"渗"进周围正常内容,所以整张图都会受影响。修复版通过压低激活幅度根治了这一问题。
Q:显存不够时优先用哪种精度?消费级显卡优先选 fp16 跑修复版 VAE——既省显存又无 NaN;支持 bf16 的专业卡两种都可以,推荐直接上 bf16 权重。
- 人工智能
- 大模型
- 计算机视觉
- 媒体生成
- 微调
【免费下载链接】texture-fix-vae-for-qwen-image-2.1
相关推荐
SDXL VAE半精度修复:彻底解决FP16下图像生成难题
SDXL VAE半精度修复:彻底解决FP16下图像生成难题 你是否在使用SDXL模型时遇到过这样的困扰?明明配置了fp16半精度想要节省显存和加速推理,结果却得
终极MiroFish安装教程:3种部署方式快速搭建你的预测引擎
终极MiroFish安装教程:3种部署方式快速搭建你的预测引擎 MiroFish是一款简洁通用的群体智能引擎,能够预测万物。本教程将为你介绍3种快速部署Miro
人工智能大模型AI Agent多智能体Agent 编排彻底解决SDXL VAE FP16推理NaN问题:从根源修复到生产级部署
彻底解决SDXL VAE FP16推理NaN问题:从根源修复到生产级部署 🔥 为什么这个修复关乎每个SDXL开发者 你是否曾在A100显卡上流畅运行SDXL,
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考