在 AMD 迷你 PC 上做本地 AI 图像生成:ComfyUI + Z-Image Turbo

发布日期
2026年7月11日
作者
Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
阅读时长
约 9 分钟阅读

简单来说: 我如何配置自己那台小型 AMD 电脑,在家生成 AI 图像——每张大约 27 秒,没有订阅费,也没有按张收费。这篇指南会带你走一遍整套配置,让它自动启动、直接能用。它证明了做 AI 图像不需要昂贵的云服务,也不需要特定品牌的显卡。

我的迷你 PC 能把一句文字提示词变成一张完成的 1024×1024 图像,大约只要 27 秒:不需要云端账号,不按张收费,也不用排在别人成千上万条提示词后面。而做到这一切的,是一颗大多数人都以为根本干不了这活的 AMD 芯片。

TL;DR

  • 这是什么: ComfyUI + Z-Image Turbo,图像生成完全在本地硬件上完成——OpenAIMidjourney 完全不掺和。
  • 花多少钱: 不管生成多少张,每张 $0。连个要注册的账号都没有。
  • 需要什么: 一块拥有真实显存的 AMD APU 或 GPU(我这块有 64GB)、一台 Linux 主机,外加一次 ROCm 配置的折腾。就一次。
  • 最终得到什么: 一张 1024×1024 图像大约 27 秒,一个常驻的 systemd 服务,外加一行命令就能无头批量生成图片。

最终得到什么

配置的事一会儿再说。日常使用中,我要么打开一个浏览器标签页,要么从终端直接调用。不管哪种方式:

指标数值
分辨率1024×1024
步数 / CFG8 步,CFG 1.0
热启动生成耗时约 27 秒(实测区间:26.5–30.4 秒)
冷启动(重启后第一张图)约 43.5 秒,期间要加载约 20GB 的权重文件

这台机器上真正的用途,不是为了艺术而艺术,而是一个脚本:为一个聊天机器人项目批量生成头像变体——输出文件夹里已经有 222 张 PNG,还在增加。枯燥、靠谱的基础设施,而这正是你希望从一个"图好玩做出来、后来却开始依赖上了"的东西身上得到的品质。

硬件

这是一台 128GB 统一内存的机器:一颗 AMD Ryzen AI Max+ 395("Strix Halo"),Radeon 8060S 核显跟 CPU 封装在同一块芯片上。哪儿都没有独立显卡。

重点在这儿。固件把这 128GB 里的 64 GiB 划出来,当作专用"显存"交给了核显——ComfyUI 自己的启动日志上写着 Total VRAM 65536 MB, total RAM 63920 MB。这比任何消费级 NVIDIA 显卡卖的显存都多,因为它根本不是焊在显卡上的昂贵 GDDR 芯片,只是固件分配给 GPU 的系统内存,而且如果需要,后面还有大约 31GB GPU 可访问的 GTT 空间垫底。

部件规格
CPUAMD Ryzen AI Max+ 395,16 核 / 32 线程
核显Radeon 8060S,ROCm 架构 gfx1151
内存128GB 统一 LPDDR5X——64GiB 划作显存,留给 Linux 约 62GiB
操作系统Bazzite(不可变系统,基于 Fedora Silverblue)
独立显卡

整套配置的模型权重加起来大约 20.7GB。塞进 64GB 里绰绰有余;放到常见的 8–16GB 消费级显卡上就没戏了,除非把一部分层卸载到系统内存里,并接受随之而来的速度损失。

软件技术栈

让这一切能跑起来的版本,就是现在实际安装的这些:

组件版本
ComfyUIv0.27.0(git checkout)
Python3.12.13,跑在用 uv 建的 venv 里
PyTorch2.12.1+rocm7.2
torchvision0.27.1+rocm7.2
torchaudio2.11.0+rocm7.2
pytorch-triton-rocm3.5.1
ROCm7.2,原生支持 gfx1151

好玩的细节在这儿:ROCm 版的 PyTorch 会假扮成 CUDA。启动日志上写的原话是 Device: cuda:0 AMD Radeon 8060S : native。为 NVIDIA 显卡写的 Python 代码就这么直接跑起来了,因为它以为自己在跟一块 NVIDIA 显卡对话。ComfyUI 在这套硬件上还会自动禁用 cuDNN,退回到普通的 PyTorch attention 实现(没有 xformers,没有 flash-attn),而且没有它们照样跑得很好。

驯服 ROCm

配置上的折腾都集中在启动脚本里的几个环境变量上:

HSA_OVERRIDE_GFX_VERSION=11.5.1
PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
HIP_VISIBLE_DEVICES=0
  • HSA_OVERRIDE_GFX_VERSION 告诉 ROCm 这块 GPU 是 gfx1151。在 ROCm 7.2 上其实是多余的(日志里已经写了"native"),但我还是留着当个保险,因为在更早的 ROCm 版本上,这个 override 对这类核显能不能跑起来是必需的。
  • PYTORCH_HIP_ALLOC_CONF=expandable_segments:True 能防止分配器在统一内存上把显存搞得支离破碎。没有它,即便理论上还有大把内存空闲,也可能撞上内存不足的错误。
  • HIP_VISIBLE_DEVICES=0 就是钉死用这一块 GPU。不算什么亮点,但万一以后加了硬件,它就有用了。

还有一点:服务器的监听地址在启动脚本里被硬编码成了 127.0.0.1——不是一个配置开关,是写死的值。那里的注释把它称为"这就是全部的安全模型",而这话说得没错。想从别的设备访问?那是你自己去搭反向代理或 VPN 的事,故意没做成一个能随手打开的开关。

一句提示词是怎么变成一张图的

大家总觉得这一步很神秘,其实不是。这是一条短小、固定的流水线,由 ComfyUI 从官方模板里搭出来:

Z-Image Turbo 的设置

Z-Image Turbo 是阿里巴巴 Z-Image 模型的蒸馏加速版(据我了解出自他们的通义实验室,大约 60 亿参数,Apache-2.0 协议)。这里的"蒸馏"是个很实在的说法:8 步、CFG 1.0 就能出一张完成的图像,而不是老模型动辄要的 20 到 30 步以上。以下是我保存下来的工作流里的设置,其实就是官方模板的默认值,没有什么需要去挖的神奇组合。

设置项数值
步数8
CFG1.0
采样器res_multistep
调度器simple
ModelSamplingAuraFlow 的 shift3
分辨率1024×1024
CLIPLoader 的 typelumina2
负面提示词被清零(ConditioningZeroOut)

最后一行值得解释一下:在 CFG 1.0 下,负面提示词根本没有可以"顶推"的对象,所以这套工作流用一个 ConditioningZeroOut 节点把它清零,而不是白白编码一段不起作用的文字。如果打上负面提示词能让你觉得更有掌控感,那就打呗,反正不会改变图像结果。

真正干活的三个文件:

文件大小作用
z_image_turbo_bf16.safetensors12.3GB扩散 transformer(bf16)
qwen_3_4b.safetensors8.0GB文本编码器
ae.safetensors0.34GBVAE

实测性能

这些数字不是来自哪篇发布博客,而是取自这台机器自己的日志。连续 20 次提示词的一轮测试,耗时落在 26.62 到 30.41 秒之间,所以"约 27 秒"是一个朴实无华、可重复的平均值,不是挑出来的最佳情况。折算下来,算上文本编码和 VAE 解码,大约每步采样耗时 2.5 到 3 秒。

服务冷启动之后的第一张图花了 43.54 秒,因为那一次要从磁盘加载大约 20GB 的权重。之后就都是热启动状态了。如果你一天里的第一张图感觉特别慢,原因就在这儿,不是哪里坏了。

把它当服务来跑

我不想每次想生成一张图,就得在终端里看着一个 Python 进程,所以这跑成了一个 systemd 用户单元,跟登录会话一起启动:

ExecStart=%h/comfy/start-comfyui.sh
WorkingDirectory=%h/comfy/ComfyUI
EnvironmentFile=-%h/comfy/comfy.env
Restart=on-failure
RestartSec=5
TimeoutStartSec=120

环境变量文件把端口和额外的启动参数集中放在一个可编辑的地方。在这之上还有一个小小的封装脚本 comfyctl,让日常使用变成:

comfyctl start      # starts the service, waits for it to answer, opens the workflow
comfyctl status     # server health + unit state + newest output file
comfyctl generate "a foggy harbor at dawn, cinematic"
comfyctl stop
comfyctl logs

如果进程挂了,Restart=on-failure 会在 5 秒后把它拉起来,一分钟内最多重试 5 次,超过这个数 systemd 就会放弃(这样真正的崩溃循环不会无限空转)。一个每周执行的定时任务会用 git pull --ff-only 拉取更新,重启服务,并检查一遍 /system_stats 才会宣布成功。这东西的桌面图标就是模型自己生成的,这一点我喜欢的程度可能有点超标。

无头运行

网页界面适合偶尔用一下,但这里的日常用法是脚本化的。一个只依赖标准库的 Python 脚本把工作流构建成 JSON、发出去、轮询结果,再打印出生成完成的 PNG 路径:

python3 ~/comfy/comfy-generate.py "a foggy harbor at dawn, cinematic" \
  --steps 8 --width 1024 --height 1024 --out ~/Pictures/harbor.png

HTTP API、控制脚本,以及从其他设备安全远程访问的做法,专门写了一篇文章来讲:无头 ComfyUI:把它当作服务运行,随处可用

容易踩的坑

  • 日志里的 "cuda:0" 是正常现象。ROCm 版的 PyTorch 会把这块 AMD GPU 报告成一个 CUDA 设备。这不是配置错误,也不是偷偷用了 NVIDIA 显卡。
  • 重启后的第一张图会比较慢。权重加载期间约 43 秒,之后会稳定在约 27 秒。别在生成过程中重启,然后又慌张地以为什么东西坏了。
  • 负面提示词在这里不起作用。CFG 1.0 会按设计把它清零。如果你在调试一张效果不好的图,问题不会出在负面提示词上。
  • 没法直接从手机打开它。监听地址被故意硬编码成了 127.0.0.1。远程访问意味着你要自己搭反向代理或 VPN,而不是改一个配置文件就行。
  • 它每周会自动更新自己。大多数时候挺方便的——直到不方便的那一周。只做快进(fast-forward-only)的拉取能防止悄无声息的合并冲突,但上游的破坏性变更还是可能在你没盯着的时候落地。
  • 64GB 听着很多,一旦加载得多了照样会不够用。这套工作流用掉大约 20.7GB 的权重。如果同时加载好几个大模型,或者旁边还跑着别的吃显存的东西,余量会消失得很快。

← 更多AI 与本地 LLM