本地 AI 生成的工作空间

最近尝试在本地部署一个 AI 图像生成服务,让整个流程可以离线完成。经过一番调研,最终选择了 Z-Image-Turbo 模型。

为什么选 Z-Image-Turbo?#

主要有几个考量:

  1. 开源可商用:模型完全开源,不用担心授权问题
  2. 速度快:8 步推理就能出图,相比传统扩散模型动辄 20-50 步,效率高很多
  3. 量化支持好:有 GGUF 量化版本,Mac 也能跑

硬件要求#

配置显存/内存需求推荐模型版本
高端 GPU (RTX 4090等)24GB+完整版 (~32GB)
中端 GPU8-16GBQ4_K_S 量化版 (~4.7GB)
Mac (M1/M2/M3)统一内存 16GB+Q4_K_S 量化版
纯 CPU32GB+ 内存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