<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ComfyUI on 鬼哥的空间</title><link>https://guige.ai/tags/comfyui/</link><description>Recent content in ComfyUI on 鬼哥的空间</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 05 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://guige.ai/tags/comfyui/index.xml" rel="self" type="application/rss+xml"/><item><title>Qwen Image 40 步对上 Viggle Turbo 6 步：4090 上的四组实测</title><link>https://guige.ai/p/qwen-image-turbo/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/qwen-image-turbo/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Qwen Image 40 步对上 Viggle Turbo 6 步：4090 上的四组实测" /&gt;&lt;p&gt;最近鬼哥在折腾一件挺有意思的事：以自己的 4090 机器为算力核心，在本地搭起一整套做口播视频的工作流和基础服务。语音生成、字幕处理、图像生成、人物口播视频，逐步接进同一个工作台，从一段文案和一张人物图，走到带声音、带字幕的视频。&lt;/p&gt;
&lt;p&gt;先放一段已经做出来的成品：Diana 介绍 DI CLI 的口播。下面是带字幕的版本，约 12 秒，视频由 4090 上的 H3 生成。&lt;/p&gt;
&lt;video controls playsinline preload="none" poster="diana-poster.webp" style="width:100%;max-width:512px;height:auto;border-radius:12px;"&gt;
 &lt;source src="diana-talk.mp4" type="video/mp4"&gt;
 你的浏览器不支持内嵌视频，可以&lt;a href="diana-talk.mp4"&gt;下载 Diana 口播视频&lt;/a&gt;观看。
&lt;/video&gt;
&lt;p&gt;&lt;a class="link" href="diana-talk.mp4" &gt;下载 Diana 口播视频&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我想给后面自己做视频剧先铺好路。人物形象、配音、场景和口播都能在本地反复试，就不用每生成一版都去买云端额度了。机器已经在手，日常试错主要花的是电费和等待时间，改台词、换造型时也能更放得开。&lt;/p&gt;
&lt;p&gt;当然，一段口播离一部视频剧还有距离，角色一致性、镜头衔接、表演和剪辑都要继续磨。这套基础服务先把素材生成串起来，后面才有条件一集一集往下做。&lt;/p&gt;
&lt;p&gt;这篇先聊其中的&lt;strong&gt;生图部分&lt;/strong&gt;。语音、字幕和视频的部署细节留待后面展开；眼下要解决的问题是：给人物换造型、做场景素材时，能不能更快拿到一张可用的图？&lt;/p&gt;
&lt;h2 id="从一张咖啡海报开始"&gt;从一张咖啡海报开始
&lt;/h2&gt;&lt;p&gt;一张咖啡海报，左边画了四十步，右边只画了六步。把两张图并排放好，最先吸引我注意的，是它们都把“秋日限定 · 桂花拿铁”写对了。&lt;/p&gt;
&lt;p&gt;左边的工作流用了 38.4 秒，右边用了 10.2 秒。杯子、拉花和叶片有变化，但如果只是想给一杯秋日咖啡做张海报，右边已经很有说服力。&lt;/p&gt;
&lt;p&gt;&lt;img alt="中文咖啡海报对比，左为 Qwen Image 基础版 40 步，右为 Viggle Turbo 6 步" class="gallery-image" data-flex-basis="409px" data-flex-grow="170" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/poster-comparison.webp" srcset="https://guige.ai/p/qwen-image-turbo/poster-comparison_hu_31fea73db0c26bf1.webp 800w, https://guige.ai/p/qwen-image-turbo/poster-comparison.webp 1536w" width="1536"&gt;&lt;/p&gt;
&lt;p&gt;这组结果让我想继续看下去：&lt;strong&gt;生成快了将近四倍，省下的那些步骤，到底从画面哪里拿走了东西？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我把 Qwen-Image-2.1 和 Viggle 的 Turbo 方案放到自己的 4090 机器上，跑了人像、中文海报、换背景、换衣服四组对比。一共八张图，先看实际效果，再决定值不值得接进本地工作台。&lt;/p&gt;
&lt;h2 id="先认清这两位选手"&gt;先认清这两位选手
&lt;/h2&gt;&lt;p&gt;说是“两种模型”，它们其实有很近的亲缘关系。&lt;/p&gt;
&lt;p&gt;基础版用的是 &lt;strong&gt;Qwen-Image-2.1 的 INT8 权重&lt;/strong&gt;，这次跑 40 步。Turbo 则在同一个基础模型上，加载 &lt;strong&gt;Viggle v0.3 的六步蒸馏 LoRA，rank 128&lt;/strong&gt;，配合专用采样时间点运行。&lt;/p&gt;
&lt;p&gt;可以把每一步理解成模型对画面的一次修正。蒸馏让模型学习用更少的修正走到一个可用结果。因此，要得到这次的六步效果，需要 Turbo 的适配权重和采样配置一起配合。直接把基础版的步数框改成 6，并不等于完成了这套配置。&lt;a class="link" href="https://huggingface.co/Viggle/Qwen-Image-2.1-viggle-turbo" target="_blank" rel="noopener"
 &gt;Viggle 模型说明&lt;/a&gt;给出了具体用法。&lt;/p&gt;
&lt;p&gt;这轮两边都用相同提示词、seed 42、1024 × 1024 输出、CFG 1，并且关闭提示词增强。文生图用同样的文字，编辑任务用同一张参考图。每个场景各跑一次，所以这是一轮样片观察，还不足以给模型的整体能力排座次。&lt;/p&gt;
&lt;h2 id="干活的还是那台-4090"&gt;干活的还是那台 4090
&lt;/h2&gt;&lt;p&gt;&lt;img alt="鬼哥此前拍摄的 4090 主机内部照片，复用于本次实测文章" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/cover.webp" srcset="https://guige.ai/p/qwen-image-turbo/cover_hu_edb61d0e495f5eb9.webp 800w, https://guige.ai/p/qwen-image-turbo/cover.webp 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;这张照片之前放在&lt;a class="link" href="https://guige.ai/p/desktop-ai-studio/" &gt;《桌面 AI Studio》&lt;/a&gt;里。机器继续负责重推理，Mac 负责开发和整理结果。这次图像生成也交给它。&lt;/p&gt;
&lt;p&gt;先把最容易误会的规格写在前面：&lt;strong&gt;这张卡在系统里显示 49140 MiB 显存，约 48GB。&lt;/strong&gt; 读者如果拿普通 24GB 4090 对照，显存余量得另外算。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;硬件&lt;/th&gt;
 &lt;th&gt;本次机器&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CPU&lt;/td&gt;
 &lt;td&gt;Intel Core i5-13600K，14 核、20 线程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;系统内存&lt;/td&gt;
 &lt;td&gt;64GB，Linux 显示约 62 GiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;GPU&lt;/td&gt;
 &lt;td&gt;NVIDIA GeForce RTX 4090&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;显存&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;nvidia-smi&lt;/code&gt; 显示 49140 MiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;软件环境也列出来，方便以后对照：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;软件 / 模型组件&lt;/th&gt;
 &lt;th&gt;本次配置&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;操作系统&lt;/td&gt;
 &lt;td&gt;Ubuntu 24.04.3 LTS，x86_64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;NVIDIA 驱动&lt;/td&gt;
 &lt;td&gt;570.158.01&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Python&lt;/td&gt;
 &lt;td&gt;3.12，独立虚拟环境&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PyTorch&lt;/td&gt;
 &lt;td&gt;2.11.0+cu128，CUDA 12.8 运行时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ComfyUI&lt;/td&gt;
 &lt;td&gt;0.38.0，固定提交 &lt;code&gt;6b747c0428c34&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;主模型&lt;/td&gt;
 &lt;td&gt;Qwen-Image-2.1，INT8 convrot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;文本编码器&lt;/td&gt;
 &lt;td&gt;Qwen3-VL 8B，INT8 convrot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;VAE&lt;/td&gt;
 &lt;td&gt;Qwen-Image-2.1，BF16&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Turbo 适配器&lt;/td&gt;
 &lt;td&gt;Viggle v0.3，6-step LoRA，rank 128&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;注意力实现&lt;/td&gt;
 &lt;td&gt;PyTorch SDPA；关闭可选的 kitchen INT8 attention&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;主模型、文本编码器、VAE 和 LoRA 的权重文件合计约 18GB。这里的 INT8 指权重存储配置，不代表整个计算过程全部使用 INT8。&lt;/p&gt;
&lt;p&gt;图像环境有独立的 Python 虚拟环境和 ComfyUI 副本，与现有 H3 视频服务共用 GPU 排队锁。一次图像任务结束，运行时退出并释放显存。八张图跑完后，显存占用回到了 15 MiB，H3 的健康检查也正常。&lt;/p&gt;
&lt;p&gt;这个安排很适合我现在的用法：同一张卡轮流承担图像和视频任务，避免两个大任务一起上来争显存。&lt;/p&gt;
&lt;h2 id="人像第一处差别在脸上"&gt;人像：第一处差别在脸上
&lt;/h2&gt;&lt;p&gt;第一组提示词要的是成年东亚女性、黑色齐肩发、米色亚麻外套、左侧柔和窗光，以及自然的皮肤纹理。&lt;/p&gt;
&lt;p&gt;&lt;img alt="人像对比：左侧基础版 40 步，右侧 Turbo 6 步" class="gallery-image" data-flex-basis="409px" data-flex-grow="170" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/portrait-comparison.webp" srcset="https://guige.ai/p/qwen-image-turbo/portrait-comparison_hu_95d7159075b23ad8.webp 800w, https://guige.ai/p/qwen-image-turbo/portrait-comparison.webp 1536w" width="1536"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="portrait-base40.webp" &gt;基础版原尺寸图&lt;/a&gt; · &lt;a class="link" href="portrait-turbo6.webp" &gt;Turbo 原尺寸图&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;两张图的构图、衣服和光线都很接近。缩小看，六步版没有出现明显的结构崩坏，也没有突然换一种摄影风格。&lt;/p&gt;
&lt;p&gt;放大脸部，差别就有了：基础版的眼周、面颊纹理更明显，Turbo 的皮肤更平滑，五官的局部形态也有细微变化。&lt;/p&gt;
&lt;p&gt;如果用来试头像方向或看服装配色，我会愿意先用 Turbo。如果想要更有年龄感、更强调皮肤质地的人像，基础版这张更接近提示词里“自然纹理”的要求。这里的平滑是否算损失，取决于你想要什么样的照片。&lt;/p&gt;
&lt;p&gt;这一组很能说明问题：六步没有把画面压缩成半成品，但它改变了细节的表达。&lt;/p&gt;
&lt;h2 id="中文海报这次六步没有把字写坏"&gt;中文海报：这次六步没有把字写坏
&lt;/h2&gt;&lt;p&gt;开头那张海报指定了四行文字：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;慢下来，喝杯咖啡&lt;br&gt;
秋日限定 · 桂花拿铁&lt;br&gt;
每日现磨，新鲜烘焙&lt;br&gt;
营业时间 09:00—21:00&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;a class="link" href="poster-base40.webp" &gt;基础版原尺寸图&lt;/a&gt; · &lt;a class="link" href="poster-turbo6.webp" &gt;Turbo 原尺寸图&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;两边都把这四行文字画得正确、可读。版式也接近：大标题、品名、咖啡主体、小字说明，各自待在该待的位置。&lt;/p&gt;
&lt;p&gt;这比“画了一杯好看的咖啡”更让我在意。做中文配图，经常卡在最后几个字上：主体都很漂亮了，标题偏偏多一笔少一画，还得再抽一张。这一组里，六步版保住了文字，省下的等待才真正有用。&lt;/p&gt;
&lt;p&gt;当然，四行短句还难不倒所有模型的边界。长段落、密集小字、复杂表格，这次都没跑，不能从一张咖啡海报推导出“中文随便写”。&lt;/p&gt;
&lt;p&gt;至于杯形、拉花和叶片的差别，两边各有自己的画法，我没有看到足以让我为了这张海报坚持等待四十步的优势。&lt;/p&gt;
&lt;h2 id="换背景花园来了人也被轻轻改了一下"&gt;换背景：花园来了，人也被轻轻改了一下
&lt;/h2&gt;&lt;p&gt;后两组用的是现有工作台里的 girl-avatar。先放参考图，方便看清到底保留了什么。&lt;/p&gt;
&lt;p&gt;&lt;img alt="人物编辑使用的 girl-avatar 参考图" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1024" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/girl-avatar.webp" srcset="https://guige.ai/p/qwen-image-turbo/girl-avatar_hu_4ea1cb82d792c1b2.webp 800w, https://guige.ai/p/qwen-image-turbo/girl-avatar.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;p&gt;第一项要求是把背景换成有阳光、虚化的花园，同时保留人物。&lt;/p&gt;
&lt;p&gt;&lt;img alt="换背景对比：左侧基础版 40 步，右侧 Turbo 6 步" class="gallery-image" data-flex-basis="409px" data-flex-grow="170" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/background-comparison.webp" srcset="https://guige.ai/p/qwen-image-turbo/background-comparison_hu_8fd5225ab9e8daaf.webp 800w, https://guige.ai/p/qwen-image-turbo/background-comparison.webp 1536w" width="1536"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="background-base40.webp" &gt;基础版原尺寸图&lt;/a&gt; · &lt;a class="link" href="background-turbo6.webp" &gt;Turbo 原尺寸图&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;两边都完成了花园背景。发夹、心形耳饰、白领灰衣这些显眼特征也都留住了，乍看很适合继续拿去做人物素材。&lt;/p&gt;
&lt;p&gt;但对着参考图看，会发现两版都稍微放宽了取景范围，展示出更多衣服和躯干，皮肤和发丝也有局部重绘。Turbo 的对比感更强一些，细节更平滑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“人物看起来还是她”和“人物像素完全不动”，是两种不同的要求。&lt;/strong&gt; 这一组满足了前者，没有做到后者。需要严格保留原片时，仍然要考虑蒙版、抠图和合成流程，不能把一句“只换背景”当成锁定按钮。&lt;/p&gt;
&lt;p&gt;值得注意的是，基础版四十步也有这个问题。等得久一点，并没有自动换来像素级的编辑边界。&lt;/p&gt;
&lt;h2 id="换衣服六步已经能拿来试造型"&gt;换衣服：六步已经能拿来试造型
&lt;/h2&gt;&lt;p&gt;最后一组，把原来的服装改成藏蓝色西装，里面穿白色圆领上衣。&lt;/p&gt;
&lt;p&gt;&lt;img alt="换服装对比：左侧基础版 40 步，右侧 Turbo 6 步" class="gallery-image" data-flex-basis="409px" data-flex-grow="170" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/qwen-image-turbo/outfit-comparison.webp" srcset="https://guige.ai/p/qwen-image-turbo/outfit-comparison_hu_2b295dd9c513780e.webp 800w, https://guige.ai/p/qwen-image-turbo/outfit-comparison.webp 1536w" width="1536"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="outfit-base40.webp" &gt;基础版原尺寸图&lt;/a&gt; · &lt;a class="link" href="outfit-turbo6.webp" &gt;Turbo 原尺寸图&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;两边都完成了换装，脸、表情、发型和饰品整体接近参考图。西装的领口、面料和局部阴影各有差别，皮肤与发丝同样存在重绘。&lt;/p&gt;
&lt;p&gt;如果我要为工作台的人物试几个造型，这个结果已经足够让我继续往下做。先看看藏蓝西装是否合适，再决定换成衬衫还是针织衫，十几秒拿到一张图，会更愿意多试几次。&lt;/p&gt;
&lt;p&gt;不过，“更愿意多试”是我的使用判断。这里没有做多 seed 的稳定性统计，也没有测试连续编辑几轮后人物会漂移多少。&lt;/p&gt;
&lt;h2 id="到底省了多少时间"&gt;到底省了多少时间？
&lt;/h2&gt;&lt;p&gt;四组任务的数据放在一起：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;场景&lt;/th&gt;
 &lt;th style="text-align: right"&gt;基础版 40 步&lt;/th&gt;
 &lt;th style="text-align: right"&gt;Turbo 6 步&lt;/th&gt;
 &lt;th style="text-align: right"&gt;工作流加速比&lt;/th&gt;
 &lt;th style="text-align: right"&gt;显存峰值：基础 / Turbo&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;人像生成&lt;/td&gt;
 &lt;td style="text-align: right"&gt;38.44 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.15 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.79×&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15.99 / 16.58 GiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;中文海报&lt;/td&gt;
 &lt;td style="text-align: right"&gt;38.43 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.15 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.78×&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15.99 / 16.58 GiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;人物换背景&lt;/td&gt;
 &lt;td style="text-align: right"&gt;42.50 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.19 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.49×&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.74 / 21.21 GiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;人物换服装&lt;/td&gt;
 &lt;td style="text-align: right"&gt;42.52 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.18 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.49×&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.71 / 21.24 GiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这里的时间包含模型加载、文本编码、采样和 VAE 解码，是完整工作流耗时。加上独立运行时启动，基础版每张约 &lt;strong&gt;43～48 秒&lt;/strong&gt;，Turbo 约 &lt;strong&gt;15～17 秒&lt;/strong&gt;。如果以后改成长驻服务、复用已加载模型，还需要重新测量，不能直接拿这张表当服务延迟。&lt;/p&gt;
&lt;p&gt;四十步变成六步，步数少了约 6.7 倍，整个流程只加速约 3.5～3.8 倍，也很好理解：读模型、理解提示词、解码图片这些工作仍然要做，少采样并不会把它们一起省掉。&lt;/p&gt;
&lt;p&gt;另一个容易忽略的地方是显存。Turbo 在这四组里反而略高一点，最高约 21.24 GiB。它加快了生成，但没有在本轮测量中带来显存节省。&lt;/p&gt;
&lt;p&gt;这个峰值看起来落在 24GB 以内，我也不会据此承诺普通 24GB 4090 能照搬配置稳定运行。这里用的是 48GB 卡，而且显存数据是每两秒采集一次的全卡占用，可能漏掉短暂尖峰。&lt;/p&gt;
&lt;h2 id="我会怎么把它放进工作台"&gt;我会怎么把它放进工作台
&lt;/h2&gt;&lt;p&gt;看完这四组图，我倾向于把 &lt;strong&gt;Turbo 六步做成快速模式，基础版四十步保留作对照选项&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;人像试方向、海报试布局、人物试服装，先用六步出结果。碰到皮肤质地、细小文字或复杂编辑这些值得较真的地方，再拿基础版比较。两种配置生成的细节会不同，基础版也需要逐张判断。&lt;/p&gt;
&lt;p&gt;目前做到的是独立命令行评估，图像 API 和 WebUI 还没有接入。这次部署复用了机器上已有的 H3 源码与 CUDA 依赖，并没有完成一台全新 Ubuntu 从 checkout 开始的一键安装验收。&lt;/p&gt;
&lt;p&gt;下一轮真正值得加的，是更多随机种子、密集中文、多参考图和更高分辨率。它们会决定六步版能走多远。这四组样片已经回答了一个更小、也更实际的问题：它值得继续接进来试用。&lt;/p&gt;
&lt;p&gt;回到开头那杯咖啡。如果六步已经把布局、杯子和四行字交代清楚了，我更愿意把省下的时间用来改一句标题、换一种配色。那句“慢下来，喝杯咖啡”，倒是不必让显卡也照着执行。&lt;/p&gt;
&lt;h2 id="本轮参数备忘"&gt;本轮参数备忘
&lt;/h2&gt;&lt;p&gt;实测日期为 2026 年 10 月 5 日。基础版使用 Euler / simple、40 步；Turbo 使用独立、未合并的 LoRA，强度 1.0，以及作者提供的六步 sigma 配置。两边均使用 INT8 主模型与文本编码器、BF16 VAE、CFG 1，关闭提示词增强。&lt;/p&gt;
&lt;p&gt;每张图启动新进程，但没有清空操作系统文件缓存；每个场景每种配置只有一次记录，表中没有多次平均。这套 ComfyUI 配置也不等同于逐项复刻作者的 Diffusers 基准。&lt;/p&gt;
&lt;p&gt;正文并排图用于快速浏览，图下的原尺寸链接为原始 PNG 无损转换的 WebP，适合放大看细节。主机照片复用本人此前文章中的实拍图。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Viggle/Qwen-Image-2.1-viggle-turbo" target="_blank" rel="noopener"
 &gt;Viggle：Qwen-Image-2.1-viggle-turbo 模型与用法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Qwen/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;Qwen-Image-2.1 官方模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Comfy-Org/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;Comfy-Org：Qwen-Image-2.1 权重&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Comfy-Org/workflow_templates/blob/main/templates/image_qwen_image_2_1_t2i.json" target="_blank" rel="noopener"
 &gt;ComfyUI 官方 Qwen Image 2.1 文生图工作流&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://guige.ai/p/ollama-local-dev/" &gt;鬼哥：一张 4090 跑 Gemma4 26B&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;模型页面标注 Qwen Research 许可证；商用前请另行确认对应权重与适配器的许可条件。&lt;/p&gt;</description></item><item><title>32G 的 M6 Mac mini，怎么同时养活聊天和画图两个大模型</title><link>https://guige.ai/p/mac-mini-ai-workstation/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/mac-mini-ai-workstation/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 32G 的 M6 Mac mini，怎么同时养活聊天和画图两个大模型" /&gt;&lt;p&gt;新 Mac mini 让人等了快两年。8 月 25 日，苹果终于&lt;a class="link" href="https://www.apple.com/newsroom/2026/08/apple-unveils-a-more-powerful-mac-mini-featuring-the-all-new-m6-and-m5-pro/" target="_blank" rel="noopener"
 &gt;发布了新款&lt;/a&gt;，入门款是苹果第一颗 2nm 芯片 M6，高配款是 M5 Pro。&lt;/p&gt;
&lt;p&gt;鬼哥盯着 M5 Pro 看了很久。64G 内存，带宽快了将近一倍，拿来跑本地大模型确实香。可顶配要 3199 美元，折合两万多人民币。鬼哥掐指一算：这得是多少碗米粉。&lt;/p&gt;
&lt;p&gt;最后下单的是 M6、32G 那一款。为了它，鬼哥省了好几个月早餐的米粉加一个蛋。&lt;/p&gt;
&lt;img src="mac-mini-photo.webp" alt="M6 Mac mini" style="width: 360px; max-width: 100%; margin: 24px auto;"&gt;
&lt;p&gt;倒也不全是穷。鬼哥的主力工作，写代码、查资料、改长文，都是靠 Claude 和 Codex 的订阅在云端完成的。本地模型对鬼哥来说还是探索：看看它在写作、内容创作、日常开发里到底能帮上多少忙。为一个还在摸索的爱好，把早餐钱全搭进去，不太划算。&lt;/p&gt;
&lt;p&gt;问题就来了：32G 这个&amp;quot;够用的下限&amp;quot;，能不能撑起一台私人 AI 工作站？不连云、不花 API 费，能陪鬼哥写东西，也能按一句话画出一张像样的图。&lt;/p&gt;
&lt;p&gt;鬼哥决定从写作和内容创作开始试。折腾了两个晚上，答案是能。不过真正难的地方，跟一开始想的不一样。&lt;/p&gt;
&lt;h2 id="先让它开口一行命令的-open-webui"&gt;先让它开口：一行命令的 Open WebUI
&lt;/h2&gt;&lt;p&gt;机器上原本就装着 Ollama，拉好了 Qwen3.8 的 27B 模型。缺的是一个像样的聊天界面。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/open-webui/open-webui" target="_blank" rel="noopener"
 &gt;Open WebUI&lt;/a&gt; 基本就是一个自己托管的 ChatGPT 网页版，对话历史、多用户、知识库、联网搜索一应俱全，还能接各种模型。鬼哥原以为要跟 Python 环境搏斗一晚上，结果官方包用 &lt;code&gt;uv&lt;/code&gt; 一行就能跑：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DATA_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.open-webui uvx --python 3.11 open-webui@latest serve
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;指定 Python 3.11，是因为 Open WebUI 只认 3.11 到 3.12，而鬼哥系统里的 Python 已经 3.14 了，太新，人家不要。浏览器打开 &lt;code&gt;localhost:8080&lt;/code&gt;，第一个注册的账号自动当管理员。它会自己找到本机 11434 端口上的 Ollama，下拉框里直接就有 &lt;code&gt;qwen3.8&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;第一题鬼哥出得有点刁：用辛弃疾《青玉案·元夕》的场景，写一篇书生和姑娘惊鸿一瞥的小故事。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Qwen3.8 在 Open WebUI 里写的元夕故事" class="gallery-image" data-flex-basis="345px" data-flex-grow="144" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/openwebui-yuanxi.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_709be419d31aa2f4.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_b2cd3c1774aaf780.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_1d423ec5c6cd3011.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-yuanxi.webp 2880w" width="2880"&gt;&lt;/p&gt;
&lt;p&gt;它写了一千来字，题目叫《灯火阑珊》。开头是&amp;quot;元宵那夜，汴京的东风是带着花香来的&amp;quot;，结尾有一句鬼哥挺喜欢：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;他写的时候手是稳的，可墨迹落纸，&amp;ldquo;阑珊&amp;quot;二字却洇开了。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;一台比饭盒大不了多少的盒子，能写到这个份上，鬼哥是有点意外的。当然也有翻车的地方：写到烟花炸开那句，它突然冒出一个 &amp;ldquo;fireworks&amp;rdquo;。辛弃疾要是看到自己的元宵节里放的是洋烟花，大概也会洇开。&lt;/p&gt;
&lt;p&gt;Open WebUI 在每条回复下面记了速度：这篇生成了 1021 个 token，每秒约 14 个；读入提示词每秒约 276 个 token。从回车到写完，不到两分钟。&lt;/p&gt;
&lt;p&gt;&lt;img alt="回复下方的信息图标：每秒 13.94 个 token" class="gallery-image" data-flex-basis="345px" data-flex-grow="144" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/openwebui-token-speed.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/openwebui-token-speed_hu_26392401c8f0b2e5.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-token-speed_hu_eddcc2dc0606ba56.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-token-speed_hu_dcf5f520f21d2c5.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-token-speed.webp 2880w" width="2880"&gt;&lt;/p&gt;
&lt;p&gt;模型在内存里占 18G 左右，是 27.8B 参数、nvfp4 量化的 MLX 版本。其他几段对话里，生成速度大多在每秒 14 到 20 个 token 之间，比鬼哥读小说的速度快。&lt;/p&gt;
&lt;p&gt;还有个意外之喜：Open WebUI 默认监听所有网卡，所以装了 Tailscale 的其他设备，用 &lt;code&gt;http://mac-mini的机器名:8080&lt;/code&gt; 就能直接访问。桌上这台 Mac mini，从此成了随身 AI 的后端。&lt;/p&gt;
&lt;h2 id="想让它画画先撞上一堵-33g-的墙"&gt;想让它画画，先撞上一堵 33G 的墙
&lt;/h2&gt;&lt;p&gt;会写字了，自然想让它会画画。鬼哥看中的是 &lt;a class="link" href="https://huggingface.co/Qwen/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;Qwen-Image-2.1&lt;/a&gt;：7B 参数的图像生成模型，文字渲染是出了名的强，还支持图片编辑和透明背景。&lt;/p&gt;
&lt;p&gt;打开模型页，算了一下账：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th style="text-align: right"&gt;官方 BF16 大小&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;文本编码器（Qwen3-VL-8B）&lt;/td&gt;
 &lt;td style="text-align: right"&gt;17.5 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;图像生成模型（7B DiT）&lt;/td&gt;
 &lt;td style="text-align: right"&gt;14.2 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;VAE&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1.4 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;合计&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&lt;strong&gt;33.1 GB&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;鬼哥的机器是 32G。差了 1G，就像米粉钱差一块，老板也不会给你加蛋。&lt;/p&gt;
&lt;p&gt;这里得先说清楚 Mac 的内存是怎么回事。PC 上，显卡有自己的显存，显存不够时可以把模型&amp;quot;卸载到内存&amp;rdquo;。Mac 的 CPU 和 GPU 共用同一块统一内存，所谓卸载到内存，就是把东西从左边口袋放进右边口袋，总重量一克没少。何况 macOS 默认也不会把全部内存都分给 GPU。所以官方示例里的 &lt;code&gt;enable_model_cpu_offload()&lt;/code&gt;，在这台机器上帮不了什么忙。&lt;/p&gt;
&lt;p&gt;解法是量化。ComfyUI 官方整理了一套 &lt;a class="link" href="https://huggingface.co/Comfy-Org/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;int8 版本&lt;/a&gt;：图像模型 7.3G，文本编码器 9.4G，VAE 0.7G，一共 17.3G，差不多瘦身一半。&lt;/p&gt;
&lt;p&gt;接下来要挑一个生图工具。Mac 上最省事的是 Draw Things，原生 App，对 Apple 芯片做了深度优化。但鬼哥想要的是在 Open WebUI 里聊着天就能出图，这条路只有 &lt;a class="link" href="https://github.com/comfyanonymous/ComfyUI" target="_blank" rel="noopener"
 &gt;ComfyUI&lt;/a&gt; 走得通：它自带 API，Open WebUI 支持把它当生图后端。ComfyUI 的界面是一块节点画布，加载模型、编码提示词、采样、解码、保存，每一步一个方块，用线连起来。第一次看像在拆电视机，看熟了发现什么都能拆开调。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ComfyUI 的节点工作流" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1800" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/comfyui-workflow.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/comfyui-workflow_hu_80c5188e5a372da6.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/comfyui-workflow_hu_53d706c1af4ffafb.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/comfyui-workflow_hu_e535f5d8cf386462.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/comfyui-workflow.webp 3200w" width="3200"&gt;&lt;/p&gt;
&lt;p&gt;安装本身不复杂：克隆仓库，用 &lt;code&gt;uv&lt;/code&gt; 建一个 Python 3.13 环境，装 PyTorch nightly（Mac 上靠它的 MPS 后端调用 GPU），再把三个模型文件放进对应的文件夹。更省心的是，ComfyUI 自带的模板里已经有 Qwen-Image-2.1 的文生图工作流，用的正是这套 int8 文件，推荐参数是 25 步、CFG 1、euler 采样器。鬼哥照着它写了一份 API 格式的工作流，自己测试用，也给 Open WebUI 用。&lt;/p&gt;
&lt;h2 id="第一张图招牌上的字一个都没错"&gt;第一张图：招牌上的字，一个都没错
&lt;/h2&gt;&lt;p&gt;测试提示词是模型卡上的例子：雨夜里一块霓虹招牌，写着 &amp;ldquo;QWEN IMAGE 2.1&amp;rdquo;，湿漉漉的路面有倒影。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Qwen-Image-2.1 在 Mac mini 上生成的霓虹招牌" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1024" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/qwen-neon-sign.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/qwen-neon-sign_hu_54f21b0c22eb7504.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/qwen-neon-sign.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;p&gt;1024×1024、25 步，用了 222 秒，每步大约 8 秒。够鬼哥下楼嗦半碗粉。&lt;/p&gt;
&lt;p&gt;慢是真慢，但看到图的那一刻，鬼哥原谅它了。&amp;ldquo;QWEN&amp;rdquo; 是冷白色的霓虹管，&amp;ldquo;IMAGE 2.1&amp;rdquo; 是红色，字母一个没错，连 2 和 1 中间的小数点都在。地面上红灯的倒影、斑马线、远处橱窗里的灯，都像雨夜里手机随手一拍。几年前，本地生图模型写字还像鬼画符。&lt;/p&gt;
&lt;p&gt;接入 Open WebUI 之后，鬼哥又画了几张。最喜欢的是这张北京微缩沙盘：长城沿着山脊蜿蜒，故宫、天坛、鸟巢、水立方、央视大楼挤在同一块地图上，浅景深把周围的地图虚化掉，很像旅行杂志的内页。&lt;/p&gt;
&lt;p&gt;&lt;img alt="在 Open WebUI 里用一段中文描述，图直接出现在对话中" class="gallery-image" data-flex-basis="345px" data-flex-grow="144" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/openwebui-image-chat.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/openwebui-image-chat_hu_c926d75ec217de96.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-image-chat_hu_138c356301c9f3b1.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-image-chat_hu_edd233e466021f12.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/openwebui-image-chat.webp 2880w" width="2880"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Qwen-Image-2.1 生成的北京微缩沙盘" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1024" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/qwen-beijing-diorama.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/qwen-beijing-diorama_hu_a6c2a9b48f482b96.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/qwen-beijing-diorama.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;p&gt;它也有露怯的时候。让它画一页插画师的手绘设定稿，人物的造型、表情、比例都很有样子，页面上那些手写批注却全是天书。它擅长的是提示词里点名要写的大字；画面里顺手添的小字，基本就是装饰花纹。&lt;/p&gt;
&lt;p&gt;&lt;img alt="手绘设定稿：人物画得不错，批注小字是乱码" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1024" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/qwen-sketchbook.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/qwen-sketchbook_hu_61523fe518e88c6c.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/qwen-sketchbook.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;p&gt;还有一张时装人像，左下角冒出来一个谁也没要求的&amp;quot;签名&amp;quot;，看着还挺像那么回事。鬼哥第一反应是在负面提示词里写上&amp;quot;不要水印&amp;quot;，查了参数才发现写了也白写：这套工作流的 CFG 是 1，负面提示词根本不起作用。想去掉签名，得把 &amp;ldquo;no text, no watermark, no signature&amp;rdquo; 这类要求直接写进正面提示词。官方模板的示例提示词，结尾就是一长串 &amp;ldquo;no text, no letters, no logos, no watermark&amp;rdquo;，看来官方早就防着它这一手。&lt;/p&gt;
&lt;p&gt;&lt;img alt="时装人像，左下角冒出一个假签名" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1024" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/qwen-fake-signature.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/qwen-fake-signature_hu_cc7fcf21c974d9fd.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/qwen-fake-signature.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;h2 id="两个大模型挤不进同一块内存"&gt;两个大模型，挤不进同一块内存
&lt;/h2&gt;&lt;p&gt;聊天和生图各自都能跑了，鬼哥在 Open WebUI 的图像设置里填上 ComfyUI 的地址，上传工作流，把提示词、尺寸、步数、种子分别对应到工作流里的节点。然后在聊天框里打开生图开关，直接用中文描述想要的画面。&lt;/p&gt;
&lt;p&gt;流程是这样的：Qwen3.8 先把你的描述扩写成一段详细的英文提示词，交给 ComfyUI；四分钟后，图片出现在对话里，Qwen3.8 再补一句说明。&lt;/p&gt;
&lt;p&gt;第一次端到端跑通，图出来了，鬼哥顺手看了一眼系统状态，笑容凝固了：swap 已用从 4G 涨到了 14G，交换空间上限才 15G。&lt;/p&gt;
&lt;p&gt;原因不复杂，但事先没想到：两边都舍不得放下模型。Ollama 默认会把模型在内存里留 5 分钟，方便你接着聊；ComfyUI 出完图，也会把模型留着，方便画下一张。Qwen3.8 刚写完提示词，占着 18G 不走，ComfyUI 紧接着又要加载将近 17G 的生图模型。两个加起来超过 32G，macOS 只能把内存往 SSD 上的 swap 里硬塞。&lt;/p&gt;
&lt;p&gt;两个胖子挤一张单人床，谁也睡不好。这次速度倒没怎么掉，但每生成一张图，SSD 上就要写进去十来 G 的 swap。swap 一旦用满，轻则卡顿，重则进程被系统请出去。&lt;/p&gt;
&lt;p&gt;**在 32G 的统一内存上，两个大模型不能同时在内存里，只能轮流用。**如果当初买的是 64G 的 M5 Pro，这一节大概可以直接跳过。可谁让鬼哥省下的只是米粉钱，那就只能让它们学会排队。一共三处调整。&lt;/p&gt;
&lt;p&gt;第一处，让 Ollama 早点放手。鬼哥先用 &lt;code&gt;launchctl setenv OLLAMA_KEEP_ALIVE 1m&lt;/code&gt; 把全局保留时间改成 1 分钟，然后就以为万事大吉了。后来查进程的环境变量才发现，Ollama 一直没重启，这个设置根本没生效。真正起作用的，是在 Open WebUI 里给 qwen3.8 设的 &lt;code&gt;keep_alive = 1m&lt;/code&gt;。这个设置存在 Open WebUI 的数据库里，电脑重启也不会丢。&lt;/p&gt;
&lt;p&gt;第二处，ComfyUI 一接到任务，就立刻请 Ollama 让位。Qwen3.8 的提示词已经写完、交到 ComfyUI 手里了，这一步它没事可干，占着位置纯属浪费。鬼哥在 ComfyUI 的起停脚本里加了一个后台循环：发现队列从空变成有任务，就查一下 Ollama 当前加载了哪些模型，挨个发一个 &lt;code&gt;keep_alive: 0&lt;/code&gt; 的请求。这只是把模型请出内存，文件还在硬盘上。&lt;/p&gt;
&lt;p&gt;第三处，ComfyUI 出完图，5 秒内收拾走人。这里 Mac 又有个特别的地方：ComfyUI 的 &lt;code&gt;/free&lt;/code&gt; 接口，只带 &lt;code&gt;unload_models&lt;/code&gt; 参数的话，模型只是从&amp;quot;显存&amp;quot;挪到&amp;quot;内存&amp;quot;，在 Mac 上又是左口袋换右口袋。必须同时带上 &lt;code&gt;free_memory&lt;/code&gt;，把节点缓存也清掉，内存才会真正还回来。实测，出完图后 ComfyUI 的内存占用从 9.8G 降到了 0.6G。&lt;/p&gt;
&lt;p&gt;第一处调整之后，鬼哥每改一步就盯一次生图，每 5 秒记一次 swap。三次记录放在一起看：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th style="text-align: right"&gt;只把 keep_alive 改成 1 分钟&lt;/th&gt;
 &lt;th style="text-align: right"&gt;再加上生图开始时卸载 Ollama&lt;/th&gt;
 &lt;th style="text-align: right"&gt;再加上出图后 5 秒释放&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;生图开始时 swap 峰值&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15.5 GB&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.7 GB&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.0 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;生图过程中 swap&lt;/td&gt;
 &lt;td style="text-align: right"&gt;约 5 GB&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.7 GB&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.8 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;出图后 swap 峰值&lt;/td&gt;
 &lt;td style="text-align: right"&gt;—&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.0 GB&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7.5 GB，几秒后回落&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024 图耗时&lt;/td&gt;
 &lt;td style="text-align: right"&gt;243 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;234 秒&lt;/td&gt;
 &lt;td style="text-align: right"&gt;235 秒&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最后那 3.8G 是其他程序早先换出去的内存，一直留在 swap 里，跟这套工作站无关。出图后那几秒的小峰值，是 Qwen3.8 急着回来写回复，ComfyUI 还没来得及收拾完，两边在门口撞了一下。内存压力不大，鬼哥决定不跟它计较。&lt;/p&gt;
&lt;p&gt;&lt;img alt="一次生图的内存接力" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1440" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/memory-relay.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/memory-relay_hu_22e0ae362537f6f1.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/memory-relay_hu_9b330611f8dbcbf8.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/memory-relay_hu_9edf3de8579fd1c1.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/memory-relay.webp 2560w" width="2560"&gt;&lt;/p&gt;
&lt;h2 id="现在这台工作站长什么样"&gt;现在这台工作站长什么样
&lt;/h2&gt;&lt;p&gt;整理下来，一次&amp;quot;聊着天出张图&amp;quot;的完整过程是这样的：&lt;/p&gt;
&lt;p&gt;&lt;img alt="私人 AI 工作站的组成" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1440" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mac-mini-ai-workstation/workstation-architecture.webp" srcset="https://guige.ai/p/mac-mini-ai-workstation/workstation-architecture_hu_a551005e6e148216.webp 800w, https://guige.ai/p/mac-mini-ai-workstation/workstation-architecture_hu_b7b4cad2e86dc83c.webp 1600w, https://guige.ai/p/mac-mini-ai-workstation/workstation-architecture_hu_5dfd6ba5a8042fa0.webp 2400w, https://guige.ai/p/mac-mini-ai-workstation/workstation-architecture.webp 2560w" width="2560"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;鬼哥在 Open WebUI 里用中文说想要什么画面；&lt;/li&gt;
&lt;li&gt;Qwen3.8-27B 把它写成详细的英文提示词；&lt;/li&gt;
&lt;li&gt;ComfyUI 接到任务，先请 Ollama 把 Qwen3.8 卸载掉，再加载 Qwen-Image-2.1 的 int8 模型；&lt;/li&gt;
&lt;li&gt;大约 4 分钟后出图，图片回到对话里；&lt;/li&gt;
&lt;li&gt;ComfyUI 5 秒内释放模型，Qwen3.8 重新加载，补一句说明。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;有几件事最好提前知道。速度上，一张 1024 的图要 4 分钟左右；官方默认的 2048 尺寸像素是它的 4 倍，按比例估算要十几分钟，这个鬼哥还没试，怕等到饿。许可上，Qwen-Image-2.1 用的是 Qwen Research License，个人研究和玩没问题，商用要先读条款。至于 Open WebUI 本身，0.11.4 版本新建对话时生成标题会报一个 &lt;code&gt;KeyError&lt;/code&gt;，对话只是没有自动标题，其他功能都正常，等上游修就好。&lt;/p&gt;
&lt;p&gt;它不会比云端服务快，也不会比云端的旗舰模型聪明。但写故事、改文章、画张配图这类日常活，它都能在鬼哥的桌上完成：数据不出门，不按次计费，断网也能用。深夜想到一个画面，不用先去看 API 余额，这一点比预想的更让人舒服。何况这台机器是用早餐钱换的，每多画一张图，那几个月的蛋就吃得更值一点。&lt;/p&gt;
&lt;p&gt;回到那个元夕故事。那天夜里，书生在灯海里寻了那个姑娘千百回，最后在一盏快燃尽的旧灯下找到了她。这台 Mac mini 上的两个大模型，比那两个人好安排：一个写完提示词就退场，一个画完图也退场，同一时刻，内存里只留一个。&lt;/p&gt;
&lt;p&gt;32G 统一内存能同时装下的大模型，其实只有一个。它能当私人 AI 工作站，靠的是让两个模型轮流用这块内存。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;这篇文章的封面，也是这台 Mac mini 上的 Qwen-Image-2.1 画的：1344×768，大约 8 分钟。&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="附关键配置速查"&gt;附：关键配置速查
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Open WebUI 图像设置&lt;/strong&gt;（管理员面板 → 设置 → 图像）&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;设置项&lt;/th&gt;
 &lt;th&gt;值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;引擎&lt;/td&gt;
 &lt;td&gt;ComfyUI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Base URL&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;http://127.0.0.1:8188&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;默认模型&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;qwen_image_2.1_int8_convrot.safetensors&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;尺寸 / 步数&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;1024x1024&lt;/code&gt; / &lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;节点映射&lt;/td&gt;
 &lt;td&gt;prompt → 文本编码节点的 &lt;code&gt;prompt&lt;/code&gt;；width/height → EmptyLatentImage；steps/seed → KSampler；model → UNETLoader 的 &lt;code&gt;unet_name&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;模型文件&lt;/strong&gt;（来自 &lt;code&gt;Comfy-Org/Qwen-Image-2.1&lt;/code&gt;）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;models/diffusion_models/qwen_image_2.1_int8_convrot.safetensors 7.3 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;models/text_encoders/qwen3vl_8b_int8_convrot.safetensors 9.4 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;models/vae/qwen_image_2.1_vae_bf16.safetensors 0.7 GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;让两个模型轮流用内存的核心逻辑&lt;/strong&gt;（ComfyUI 起停脚本里的后台循环）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 队列从空闲变成有任务：卸载 Ollama 里所有已加载的模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; name in &lt;span class="k"&gt;$(&lt;/span&gt;curl -s localhost:11434/api/ps &lt;span class="p"&gt;|&lt;/span&gt; grep -o &lt;span class="s1"&gt;&amp;#39;&amp;#34;name&amp;#34;:&amp;#34;[^&amp;#34;]*&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; cut -d&lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt; -f4&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl -s localhost:11434/api/generate -d &lt;span class="s2"&gt;&amp;#34;{\&amp;#34;model\&amp;#34;: \&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="s2"&gt;\&amp;#34;, \&amp;#34;keep_alive\&amp;#34;: 0}&amp;#34;&lt;/span&gt; &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 队列空闲 5 秒：卸载 ComfyUI 的模型并清掉缓存（Mac 上两个参数缺一不可）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s localhost:8188/free -H &lt;span class="s1"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;unload_models&amp;#34;: true, &amp;#34;free_memory&amp;#34;: true}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.apple.com/newsroom/2026/08/apple-unveils-a-more-powerful-mac-mini-featuring-the-all-new-m6-and-m5-pro/" target="_blank" rel="noopener"
 &gt;Apple Newsroom：新款 Mac mini，搭载 M6 和 M5 Pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.macrumors.com/guide/m6-vs-m5-pro-mac-mini/" target="_blank" rel="noopener"
 &gt;MacRumors：M6 vs. M5 Pro Mac mini 选购指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/open-webui/open-webui" target="_blank" rel="noopener"
 &gt;Open WebUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Qwen/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;Qwen-Image-2.1 模型卡&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Comfy-Org/Qwen-Image-2.1" target="_blank" rel="noopener"
 &gt;Comfy-Org/Qwen-Image-2.1 量化权重&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/comfyanonymous/ComfyUI" target="_blank" rel="noopener"
 &gt;ComfyUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ollama/ollama/blob/main/docs/faq.md" target="_blank" rel="noopener"
 &gt;Ollama FAQ：如何控制模型在内存中的保留时间&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>