最近 Z-Image-Turbo 模型在社区热度很高,以极快的推理速度著称。网上关于 Windows (NVIDIA 显卡) 的部署教程已经非常丰富,大多推荐使用 FP8 精度版本。

image_1764581845173.png

然而在 macOS (M 系列芯片) 上部署该模型时,情况完全不同。由于 MPS (Metal Performance Shaders) 后端对数据类型的支持差异,直接照搬 Windows 的流程会遇到不少阻碍。本文记录了在 Mac 上基于ComfyUI + GGUF 方案部署 Z-Image-Turbo,并封装 OpenAI 兼容 API 的全过程。

在这次部署中,我主要依赖了几个核心工具来构建整套系统。首先是 ComfyUI,这是一个基于节点流的 Stable Diffusion 操作界面,它极高的灵活性允许我们对推理管线进行精细的控制。其次是 GGUF 格式及其对应的 ComfyUI 插件,GGUF 原本是大语言模型领域常用的量化格式,现在被引入到图像生成领域,能够极大地降低显存占用并提升在 Mac 设备上的运行效率。最后是 ComfyUI API Bridge,这是一个基于 Python FastAPI 构建的中间件,它的作用是将复杂的 ComfyUI 工作流封装成我们熟悉的 OpenAI 标准接口,使得外部应用可以通过简单的 HTTP 请求来调用本地的绘图能力。

项目的起步并不顺利。我最初尝试直接加载官方推荐的 Z-Image-Turbo FP8 模型,但 ComfyUI 的控制台迅速泼了一盆冷水,报错提示 MPS 后端不支持 Float8 数据类型。这是因为 FP8 是专为 NVIDIA Tensor Core 优化的格式,而 macOS 依赖的 Metal Performance Shaders 目前尚未支持这种精度。为了解决这个问题,我果断放弃了 FP8 路线,转而投向了 GGUF 的怀抱。我下载了 3-bit 量化的 GGUF 版本模型,并将其作为 UNet 组件放置在特定的目录下。与传统的一体化模型不同,GGUF 方案需要我们将模型拆解,因此我还需要分别准备 Qwen-4B 的 CLIP 模型用于文本理解,以及 Flux 的 VAE 模型用于图像解码,这种模块化的加载方式虽然繁琐,但却是在 Mac 上跑通高性能模型的必经之路。

image_1764581974642.png

解决了模型兼容性问题后,我在服务架构搭建上又遇到了意想不到的端口冲突。按照设计,ComfyUI 负责底层的推理,而 API Bridge 负责对外的接口转发。然而在 macOS 上启动桌面版 ComfyUI 时,它似乎强制绑定了 8000 端口,即使我在启动命令中指定了其他端口也无济于事。巧合的是,我的 API Bridge 默认也监听 8000 端口,这就导致了经典的“端口打架”现象,服务一度无法启动。为了解决这个问题,我调整了网络拓扑,保留 ComfyUI 占用 8000 端口,转而修改 API Bridge 的配置,将其迁移至 8001 端口,并显式指定上游地址指向本地的 8000 端口,从而打通了前后端的通信链路。

部署的最后一公里是工作流协议的对接。API Bridge 需要向 ComfyUI 发送 JSON 格式的绘图指令,但我最初直接使用了 ComfyUI 前端保存的工作流文件。这是一个常见的误区,因为前端保存的文件包含了大量 UI 布局信息,呈数组结构,而 ComfyUI 的 API 接口实际上需要的是一个以节点 ID 为键值的字典结构,且每个节点必须包含具体的类型定义。这种格式上的错位导致 Bridge 在解析时抛出了属性错误的异常。为了修复这个问题,我不得不手动重构了一个符合 API 规范的纯净版 JSON 文件,显式地定义了从 GGUF 加载器到 CLIP 文本编码,再到 KSampler 采样器和 VAE 解码的完整链路,确保每一个参数都能被 Bridge 正确识别和注入。

当终端最终显示加载成功,并且 Web 前端在数秒内渲染出一张高质量的赛博朋克风格图像时,整个系统的闭环终于完成。通过这次折腾,我不仅在 macOS 上成功运行了原本被认为“不兼容”的 Z-Image-Turbo,还通过 GGUF 量化技术将显存压力降到了最低,更重要的是,利用 API Bridge 实现了工程化的封装。这意味着我现在拥有了一个私有、免费且响应迅速的 AI 绘图后端,完全可以在没有网络的情况下,像调用 GPT 一样调用本地的算力进行创作。这证明了在非 NVIDIA 生态下,只要选对工具并理清架构,依然可以构建出生产级的本地 AI 服务。