<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Qwen-Image on 鬼哥的空间</title><link>https://luoli523.github.io/tags/qwen-image/</link><description>Recent content in Qwen-Image on 鬼哥的空间</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://luoli523.github.io/tags/qwen-image/index.xml" rel="self" type="application/rss+xml"/><item><title>32G 的 M6 Mac mini，怎么同时养活聊天和画图两个大模型</title><link>https://luoli523.github.io/p/mac-mini-ai-workstation/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://luoli523.github.io/p/mac-mini-ai-workstation/</guid><description>&lt;img src="https://luoli523.github.io/" 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://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-yuanxi.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_709be419d31aa2f4.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_b2cd3c1774aaf780.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-yuanxi_hu_1d423ec5c6cd3011.webp 2400w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-token-speed.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-token-speed_hu_26392401c8f0b2e5.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-token-speed_hu_eddcc2dc0606ba56.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-token-speed_hu_dcf5f520f21d2c5.webp 2400w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/comfyui-workflow.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/comfyui-workflow_hu_80c5188e5a372da6.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/comfyui-workflow_hu_53d706c1af4ffafb.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/comfyui-workflow_hu_e535f5d8cf386462.webp 2400w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/qwen-neon-sign.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/qwen-neon-sign_hu_54f21b0c22eb7504.webp 800w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-image-chat.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-image-chat_hu_c926d75ec217de96.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-image-chat_hu_138c356301c9f3b1.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/openwebui-image-chat_hu_edd233e466021f12.webp 2400w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/qwen-beijing-diorama.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/qwen-beijing-diorama_hu_a6c2a9b48f482b96.webp 800w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/qwen-sketchbook.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/qwen-sketchbook_hu_61523fe518e88c6c.webp 800w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/qwen-fake-signature.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/qwen-fake-signature_hu_cc7fcf21c974d9fd.webp 800w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/memory-relay.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/memory-relay_hu_22e0ae362537f6f1.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/memory-relay_hu_9b330611f8dbcbf8.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/memory-relay_hu_9edf3de8579fd1c1.webp 2400w, https://luoli523.github.io/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://luoli523.github.io/p/mac-mini-ai-workstation/workstation-architecture.webp" srcset="https://luoli523.github.io/p/mac-mini-ai-workstation/workstation-architecture_hu_a551005e6e148216.webp 800w, https://luoli523.github.io/p/mac-mini-ai-workstation/workstation-architecture_hu_b7b4cad2e86dc83c.webp 1600w, https://luoli523.github.io/p/mac-mini-ai-workstation/workstation-architecture_hu_5dfd6ba5a8042fa0.webp 2400w, https://luoli523.github.io/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>