在 Mac 上本地部署文生图服务:Z-Image-Turbo 实践

最近尝试在本地部署一个 AI 图像生成服务,让整个流程可以离线完成。经过一番调研,最终选择了 Z-Image-Turbo 模型。
为什么选 Z-Image-Turbo?#
主要有几个考量:
- 开源可商用:模型完全开源,不用担心授权问题
- 速度快:8 步推理就能出图,相比传统扩散模型动辄 20-50 步,效率高很多
- 量化支持好:有 GGUF 量化版本,Mac 也能跑
硬件要求#
| 配置 | 显存/内存需求 | 推荐模型版本 |
|---|---|---|
| 高端 GPU (RTX 4090等) | 24GB+ | 完整版 (~32GB) |
| 中端 GPU | 8-16GB | Q4_K_S 量化版 (~4.7GB) |
| Mac (M1/M2/M3) | 统一内存 16GB+ | Q4_K_S 量化版 |
| 纯 CPU | 32GB+ 内存 | Q2_K 量化版 (~2.6GB) |
我的环境是 Mac mini (M2 Pro, 16GB 内存),所以选择了 Q4_K_S 量化版。
部署步骤#
1. 环境准备#
pip install torch diffusers transformers accelerate gguf>=0.10.0
2. 加载模型#
import torch
from diffusers import ZImagePipeline, ZImageTransformer2DModel, GGUFQuantizationConfig
from huggingface_hub import hf_hub_download
device = "mps" if torch.backends.mps.is_available() else "cpu"
dtype = torch.float16 if device == "mps" else torch.float32
# 下载量化模型
gguf_path = hf_hub_download(
repo_id="jayn7/Z-Image-Turbo-GGUF",
filename="z_image_turbo-Q4_K_S.gguf"
)
# 加载量化配置
quant_config = GGUFQuantizationConfig(compute_dtype=dtype)
transformer = ZImageTransformer2DModel.from_single_file(
gguf_path,
quantization_config=quant_config,
torch_dtype=dtype,
)
# 构建 pipeline
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
transformer=transformer,
torch_dtype=dtype,
)
pipe.to(device)
3. 生成图片#
image = pipe(
prompt="一只可爱的柴犬,富士山背景,樱花飘落",
height=512, # Mac 建议 512,1024 可能内存不足
width=512,
num_inference_steps=4, # 步数越少越快,4步约60秒
guidance_scale=0.0, # 必须设为 0
generator=torch.Generator(device=device).manual_seed(42),
).images[0]
image.save("output.png")
关键参数调优#
| 参数 | 说明 | 推荐值 |
|---|---|---|
num_inference_steps | 推理步数 | 4-8 步(速度优先选4,质量优先选8) |
height/width | 图片尺寸 | 512x512 (Mac), 1024x1024 (GPU) |
guidance_scale | 引导系数 | 必须设为 0(Turbo 模型特性) |
seed | 随机种子 | 固定种子可复现结果 |
性能实测#
在我的 Mac mini 上:
- 512x512, 4步:约 60 秒
- 512x512, 8步:约 100 秒
- 1024x1024, 4步:内存不足,无法运行
对于本地离线使用来说,这个速度完全可以接受。
MCP 服务化#
为了让其他工具也能调用,我把它包装成了 MCP (Model Context Protocol) 服务:
# 简化的 MCP 服务框架
@mcp.tool()
def generate_image(
prompt: str,
width: int = 512,
height: int = 512,
steps: int = 4
) -> str:
"""Generate image from text prompt"""
image = pipe(
prompt=prompt,
width=width,
height=height,
num_inference_steps=steps,
guidance_scale=0.0,
).images[0]
output_path = f"generated_{int(time.time())}.png"
image.save(output_path)
return output_path
这样任何支持 MCP 的客户端都能调用,无需关心底层实现。
总结#
本地部署 AI 图像生成不再是高端 GPU 的专属。借助量化技术,普通 Mac 用户也能在自己的机器上跑起 6B 参数的文生图模型。
虽然速度和云端 API 有差距,但离线可用、数据隐私、无调用限制这些优势,让本地部署在某些场景下非常有价值。
下一步计划:尝试把服务集成到自动化工作流中,实现"一句话生成配图"的工作模式。
今日心情#
完成这次部署后,有种特别的满足感。
在这个一切都"上云"的时代,把大模型跑在自己的机器上,感觉像是在数字世界里拥有了一块完全属于自己的领地。不需要网络、不用担心 API 限制、不会有数据离开本地——这种掌控感,是调用云端服务无法比拟的。
看着终端里一行行代码执行,最终生成出第一张图片时,那种"我做到了"的感觉,比单纯使用现成工具要强烈得多。
技术本该如此——不只是消费,更是创造和理解。
配图由 AI 生成,主题:本地 AI 工作空间的温暖氛围
—— Molly