Mac 用户也能上车M2 Ultra 跑轻量版 Qwen-Image 的完整手册当 Qwen-Image-2.1 这样的旗舰级图像模型还在为40 步去噪 高显存的高门槛所困时Mac 用户长期只能隔着屏幕羡慕 NVIDIA 玩家。Viggle 发布的蒸馏版 turbo 系列改变了这一局面把 40 步蒸馏到 6 步、砍掉 classifier-free guidanceCFG、端到端提速约 5 倍配合 Metal 加速的 PyTorch社区已经有人在 Apple Silicon M2 Ultra 上跑通了完全离线的本地图像生成与编辑——峰值占用约 14.2GB单步响应约 3.8 秒模型量化后可压缩到 2.1GB 级别加载。本文以 Qwen-Image-2.1-viggle-turbo 仓库源码为准给你一份从安装到批量生产的完整手册。一、为什么 M2 Ultra 这次真的能跑40 步 → 6 步的蒸馏红利先算一笔账。Qwen-Image-2.1 基础模型采样需要 40 步且依赖 CFG 提升质量——CFG 意味着每一步都要做两次模型前向条件 无条件成本直接翻倍。在 Mac 的统一内存架构上这不是显存够不够的问题而是步数 × 单步时延的耐心问题。viggle-turbo 的破解思路在仓库 README 里写得非常直白这是基于 Qwen-Image-2.1 的 few-step 蒸馏版6 步替代 40 步且全程无 CFGtrue_cfg_scale1.0。无 CFG 意味着每步只有一次模型调用配合蒸馏后的 LoRA 适配器端到端比 40 步基础模型快约 5 倍而官方示例上的画质与基础模型大多数提示词难以分辨。更关键的是它在 Mac 生态的适配路径。社区实测在 M2 Ultra 上通过 Metal 专用 PyTorch 原生部署峰值显存约 14.2GB、单步约 3.8 秒——对 M2 Ultra 动辄 64–192GB 的统一内存而言余量非常充足而且是完全离线运行。这不再是一场能不能跑的博弈而是怎么配置最优的手艺问题。二、第一站Metal 专用 PyTorch 与依赖安装仓库的安装说明是针对 diffusers 生态的标准路径在 Mac 上唯一需要调整的是把推理设备从cuda换成mps。依赖安装如下源自 README.mdpip install -U torch transformers5.17,6 accelerate safetensors peft pillow pip install githttps://github.com/huggingface/diffusers.git80c7ed262aeffbeb43ef13ae04baeb9b84515a69注意第二行QwenImage21Pipeline尚未进入已发布的 diffusers 版本所以必须安装这个固定的 git commitpeft是加载 LoRA 的硬依赖。Mac 上官方 PyTorch wheel 自带 MetalMPS后端无需额外编译安装后直接用torch.device(mps)即可。这里有一个仓库层面的重要事实见 NOTICE本仓库不重新分发文本编码器、VAE 和 processor这些在运行时从Qwen/Qwen-Image-2.1加载。也就是说你本地只需要持有蒸馏产物——LoRA 适配器、量化后的 transformer 以及一个关键配置其余全部按需拉取。三、量化精简选型从 20GB 到够用每 GB 都是内存轻量版不是单一文件而是一整套选型矩阵。仓库提供了两条路径对应 README.md 的表格路径 ALoRA 运行时加载质量最优组件文件体积基础 transformerqwen_image_2.1_int8_convrot.safetensors或 bf167.3 / 14.2 GB文本编码器qwen3vl_8b_int8_convrot.safetensors或 bf169.4 / 17.5 GBVAEqwen_image_2.1_vae_bf16.safetensors0.7 GBv0.3 LoRAQwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r256.safetensorsr256ComfyUI 用 r128 版1.3 / 0.7 GB路径 B单文件 merged transformer最省事LoRA 已按 fp32 精度合并进基础 transformer再一次性量化见仓库根目录的Qwen-Image-2.1-viggle-turbo-v0.3-6step-{int8_convrot,fp8_e4m3fn}.safetensors与...-6step-{Q8_0,Q6_K,Q5_K_M,Q4_K_M}.ggufint8/fp8 各 7.3GB、GGUF Q8_0 7.7GB、Q6_K 6.0GB、Q5_K_M 5.1GB、Q4_K_M 4.3GB。仓库还给出了严格的 LPIPS 对比数据Q8_0 与 LoRA 路径的差距最小0.051 vs 0.041Q4_K_M 漂移最明显0.100且 96 个请求中 23–29 个肉眼可见变化只有内存实在不够时才建议 Q4_K_M。无论哪条路径scheduler/scheduler_config.json 都是不可跳过的基础模型的调度器配置shift_terminal: 0.02会直接毁掉最后一步本仓库将其改为null并启用了 resolution-dependent 的 exponential shift——必须用随仓库附带的这份配置这也是社区能在低步数下保质量的关键细节之一。四、CLI 服务启动文本生成与指令编辑的最小脚本最直接的上车方式就是一段 diffusers 脚本。核心初始化代码把 README 示例中的cuda换为mpsimport torch from diffusers import QwenImage21Pipeline, FlowMatchEulerDiscreteScheduler pipe QwenImage21Pipeline.from_pretrained(Qwen/Qwen-Image-2.1, dtypetorch.bfloat16) pipe.load_lora_weights( Viggle/Qwen-Image-2.1-viggle-turbo, weight_nameQwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r256.safetensors, ) pipe.scheduler FlowMatchEulerDiscreteScheduler.from_pretrained( Viggle/Qwen-Image-2.1-viggle-turbo, subfolderscheduler ) pipe.to(mps) STEPS, SIGMAS 6, [1.0, 0.9375, 0.875, 0.75, 0.5, 0.25] # 每次调用都必须传入文本生成image pipe( promptA studio portrait of an old fisherman mending a net, warm rim light, 85mm., height1024, width1024, num_inference_stepsSTEPS, sigmasSIGMAS, true_cfg_scale1.0, # 无 CFG这也是默认值 generatortorch.Generator(mps).manual_seed(0), ).images[0] image.save(out.png)指令编辑支持 1–3 张参考图from diffusers.utils import load_image image pipe( promptReplace the background with a sunset beach, keep the subject unchanged., image[load_image(input.png)], # 列表顺序决定 image1、image2 的指代 output_resolution1024, num_inference_stepsSTEPS, sigmasSIGMAS, true_cfg_scale1.0, generatortorch.Generator(mps).manual_seed(0), ).images[0]三条硬规则README Rules that matter 一节sigmas必须原样传这 6 个值pipeline 会自己做分辨率相关 shifttrue_cfg_scale1.0且不要负向提示词想改步数只能在高噪声端增删5 步[1, 0.875, 0.75, 0.5, 0.25]7 步[1, 0.9583, 0.9167, 0.875, 0.75, 0.5, 0.25]乱动低噪声端会让图像变软单纯改num_inference_steps不传sigmas是没有用的。如果你追求更细的纹理和更稳的小文字渲染仓库还提供了9 步模式前 7 步用 turbo LoRA第 8 步起关掉 LoRA 交给基础模型收尾耗时约为 6 步的 1.4–1.5 倍仍比基础模型快约 3.5 倍。实现上需要包装pipe.transformer.forward处理 K/V 缓存并用callback_on_step_end在i 6时执行pipe.disable_lora()并强制重新抽取参考 K/V——完整代码见 README.md 的 9 steps 小节直接抄就能跑。五、浏览器交互界面ComfyUI 工作流开箱即用CLI 脚本适合自动化与批处理想要可视化拖拽与浏览器交互仓库直接附带了整套 ComfyUI 工作流。目录里有两个东西是核心自定义节点 viggle_turbo.py复制到ComfyUI/custom_nodes/重启后提供两个节点Viggle Turbo Sigmas把 6 步调度按输出分辨率做动态 shift 的专用节点。它读取 latent 尺寸计算 token 数再用mu 0.5 (0.9-0.5)*(tokens-256)/(8192-256)做指数 shift——这就是分辨率相关调度的落地实现普通 KSampler 自带的 scheduler 无法替代Viggle Turbo LoRA (unmerged)以运行时旁路分支y Wx BAx方式施加 LoRA刻意不做权重融合。原因写得很清楚bf16 权重下融合会丢掉约 30% 的 LoRA 更新int8 权重下融合会引入约 4 倍于其本身的噪声。代价是每步多 10–25% 耗时但保住了质量。强度务必保持 1.0。工作流 JSONcomfyui/Qwen-Image-2.1-viggle-turbo-t2i.json文生图与comfyui/Qwen-Image-2.1-viggle-turbo-edit.json指令编辑直接拖入 ComfyUI 即可。两者的固定组合是euler采样器 BasicGuiderCFG off、无负向提示词 上面的 unmerged LoRA 节点。官方默认组合int8 模型 r128 LoRA 提示增强在 1248×832 分辨率下峰值约 26GBM2 Ultra 完全吃得下。工作流里内置的提示增强器值得单独说蒸馏模型是在长描述提示词上训练的TextGenerate节点会用 Qwen3-VL 文本编码器按官方 rewriter 系统提示词重写你的输入greedy 解码几秒完成Prompt used节点可查看改写结果。仓库还很贴心地保留了中文指令开关——把 edit 工作流里PE request节点的f_string从(Write the description in English.)改成描述用中文写。即可。多参考编辑时工作流中的QwenImage21Cache节点会把参考图的 K/V 只计算一次并缓存复用避免每一步都重算整个参考序列——dtype保持default时无损。六、语义指令局部编辑与批量处理实测技巧清单编辑工作流附带了两个示例参考图comfyui/input/woman2.webp人物参考与 comfyui/input/cat.webp宠物参考把它们复制进ComfyUI/input/就能立刻体验基于仓库源码与实测反馈把最有价值的技巧整理如下1. 参考图顺序即语义。diffusers 中输出宽高比跟随最后一张参考图而 ComfyUI 工作流中输出尺寸跟随image 1约 1MP。所以想要谁的构图就拿谁当第一张——写提示词时用image 1、image 2或image1、image2指代。2. 分辨率甜点区在 1MP 附近。官方建议约 1MP 为最佳、最高可到约 4MP宽高必须是 16 的倍数工作流的 Output size 节点按 32 对齐。超出 1MP 时画质提升有限、耗时与内存却线性上涨批量生成时尤其要注意。3. 提示词策略分场景。提示增强器对复杂构图与渲染文字有明显帮助但如果你的提示词本身已经写得很详细关掉它反而更快更稳thinking保持开启只是为了让 ComfyUI 不追加空的 think 块。4. 批量处理走脚本最顺。ComfyUI 工作流适合交互式调参一旦要跑一批图diffusers 脚本 固定generatorseed 是可控复现的标准姿势——同样的 seed、噪声与提示词能得到一致结果方便做对照实验。多参考批量场景下脚本侧也别忘了利用参考 K/V 缓存9 步模式的reextract钩子思路同样适用于普通编辑避免每步重复计算参考序列。5. 复杂的编辑要设预期。蒸馏模型的已知短板README Known limitations集中在三类多参考合成/换脸/身份保持类编辑可能出现鬼影或身份漂移小而密集的渲染文字易乱色彩饱和度比基础模型低几个百分点。9 步模式是这些场景的第一补救手段——7 步 turbo 2 步基础模型通常能救回小文字但不保证 100%。七、版本选择与合规提醒仓库里不止 v0.3 一个版本v0.2.12026-09-24与 v0.2 同样保留。v0.3 的特点是颗粒更少、表面更干净但细纹理略软如果你偏爱更锐利的外观回退 v0.2.1 完全合法同一套用法。单文件 merged transformer 目前只支持 6 步模式9 步模式仅存在于 diffusers 与 demo Space 中。最后是必须强调的合规边界本模型是 Qwen-Image-2.1 的衍生作品依据 LICENSE 中的Qwen RESEARCH LICENSE AGREEMENT分发仅限研究或评估用途、禁止商用商用需向权利人单独申请许可。README 与 NOTICE 也明确列出了每个文件的增补与修改清单LoRA 适配器、合并量化 transformer、ComfyUI 节点与工作流、以及shift_terminal修改遵守开源生态的署名义务同样重要。至此从 Metal 专用 PyTorch 安装、量化选型到 CLI 脚本与 ComfyUI 浏览器界面再到语义编辑与批处理技巧M2 Ultra 上跑轻量版 Qwen-Image 的全链路已经闭环。下次生成图像时你可以理直气壮地说这活Mac 也能干。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考