Z-Image(造相):阿里60亿参数开源文生图模型|8步出图媲美闭源SOTA
Z-Image(造相)是阿里通义发布的60亿参数开源文生图模型,性能媲美甚至超越闭源模型!8步推理亚秒出图,16G显存可跑。支持中英文文字渲染,AI Arena人类偏好评测领先。本文包含安装部署与代码示例。
本文发布于 295 天前,内容可能已过时,请注意甄别。
Z-Image(造相) 是阿里通义实验室(Tongyi Lab)最新发布的高效图像生成基础模型。这个模型真的让人印象深刻——它拥有 60亿参数,却能在仅 8步推理 内生成高质量图像,在企业级 H800 GPU 上实现 亚秒级推理延迟,甚至能在 16G显存的消费级显卡 上流畅运行!
想象一下,你只需要输入一段文字描述,Z-Image 就能快速生成逼真的照片级图像,还能准确渲染中英文文字。这种高效与高质量的结合,可以说是图像生成领域的又一次重要突破。
举个例子,你可以让 Z-Image 生成一张”穿着红色汉服的中国女孩,手持折扇,背景是西安大雁塔”的图片,它不仅能准确理解这些复杂的描述,还能生成令人惊艳的高质量图像!
核心亮点
- 极致高效 — 仅需 8 步推理,H800 上亚秒级延迟
- 低显存需求 — 16G 显存消费级显卡即可运行
- 照片级质量 — 出色的写实图像生成能力
- 双语文字渲染 — 准确渲染中英文复杂文字
- 强指令遵循 — 精准理解和执行用户的文字描述
- 开源可用 — 模型权重在 Hugging Face 和 ModelScope 开放下载
模型架构
S3-DiT 架构
Z-Image 采用了创新的 可扩展单流 DiT(Scalable Single-Stream DiT,S3-DiT) 架构。与传统的双流方法不同,S3-DiT 将文本、视觉语义 token 和图像 VAE token 在序列级别进行拼接,作为统一的输入流,最大化参数效率。
这种设计带来了几个关键优势:
- 参数效率更高 — 相比双流方法,单流架构能更充分地利用模型参数
- 推理速度更快 — 统一的输入流减少了计算开销
- 扩展性更强 — 架构设计支持灵活的模型扩展
模型变体
Z-Image 目前有三个变体:
| 模型 | 说明 | 状态 |
|---|---|---|
| Z-Image-Turbo | 蒸馏版本,8步推理,亚秒级延迟 | ✅ 已发布 |
| Z-Image-Base | 非蒸馏基础模型,支持社区微调 | 🔜 即将发布 |
| Z-Image-Edit | 图像编辑专用版本,支持自然语言编辑指令 | 🔜 即将发布 |
核心技术
Decoupled-DMD 蒸馏算法
Z-Image-Turbo 的高效推理得益于 Decoupled-DMD 蒸馏算法。这个算法的核心洞察是:现有 DMD(Distribution Matching Distillation)方法的成功来自两个独立协作的机制:
- CFG 增强(CA) — 驱动蒸馏过程的主要引擎
- 分布匹配(DM) — 作为正则化器,确保输出的稳定性和质量
通过解耦这两个机制,团队能够独立研究和优化它们,最终开发出显著提升少步生成性能的改进蒸馏流程。
DMDR 强化学习融合
在 Decoupled-DMD 的基础上,团队进一步提出了 DMDR,将强化学习(RL)与 DMD 协同集成:
- RL 释放 DMD 的性能潜力 — 增强模型的生成能力
- DMD 有效正则化 RL — 保持输出的稳定性
这种融合进一步提升了语义对齐、美学质量和结构连贯性,生成的图像具有更丰富的高频细节。
模型下载
Hugging Face
- 模型权重:Tongyi-MAI/Z-Image-Turbo
- 在线演示:Z-Image-Turbo Space
ModelScope
- 模型权重:Tongyi-MAI/Z-Image-Turbo
- 在线演示:Z-Image-Turbo 在线体验
环境安装
系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Linux / Windows / MacOS |
| Python | 3.8+ |
| PyTorch | 2.0+ |
| CUDA | 11.8+(推荐) |
| GPU | NVIDIA GPU(推荐 16GB+ 显存) |
| 内存 | 16GB+ RAM |
Step 1: 安装 diffusers
Z-Image 已经集成到 🤗 diffusers 官方库中。你需要从源码安装最新版本的 diffusers:
# 从源码安装最新版 diffusers
pip install git+https://github.com/huggingface/diffusers
为什么需要从源码安装?
Z-Image 的支持已经通过两个 PR(#12703 和 #12715)合并到 diffusers 官方仓库。为了获得最新的 Z-Image 支持,需要从源码安装。
Step 2: 安装其他依赖
# 安装 PyTorch(根据你的 CUDA 版本选择)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
# 可选:安装 Flash Attention 以获得更好的性能
pip install flash-attn --no-build-isolation
Step 3: 验证安装
# 测试安装是否成功
import torch
from diffusers import ZImagePipeline
print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 可用: {torch.cuda.is_available()}")
print("Z-Image 安装成功!")
快速开始
基础图像生成
import torch
from diffusers import ZImagePipeline
# 1. 加载模型
# 使用 bfloat16 以获得最佳性能
print("正在加载 Z-Image-Turbo 模型...")
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=False,
)
pipe.to("cuda")
print("模型加载完成!")
# 2. 设置提示词
prompt = "Young Chinese woman in red Hanfu, intricate embroidery. Impeccable makeup, red floral forehead pattern. Elaborate high bun, golden phoenix headdress, red flowers, beads. Holds round folding fan with lady, trees, bird. Neon lightning-bolt lamp (⚡️), bright yellow glow, above extended left palm. Soft-lit outdoor night background, silhouetted tiered pagoda (西安大雁塔), blurred colorful distant lights."
# 3. 生成图像
print("开始生成图像...")
image = pipe(
prompt=prompt,
height=1024,
width=1024,
num_inference_steps=9, # 实际上是 8 次 DiT 前向传播
guidance_scale=0.0, # Turbo 模型的 guidance 应设为 0
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
# 4. 保存结果
image.save("z_image_example.png")
print("图像已保存到: z_image_example.png")
中文提示词生成
Z-Image 对中文提示词有很好的支持:
import torch
from diffusers import ZImagePipeline
# 加载模型
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
# 中文提示词
prompt = "一位穿着精美汉服的中国古典美女,站在江南水乡的石桥上,手持油纸伞,背景是烟雨蒙蒙的白墙黑瓦建筑,柳树依依,水面倒影,画面充满诗意"
# 生成图像
image = pipe(
prompt=prompt,
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
generator=torch.Generator("cuda").manual_seed(123),
).images[0]
image.save("chinese_beauty.png")
print("中文提示词图像生成完成!")
文字渲染示例
Z-Image 在中英文文字渲染方面表现出色:
import torch
from diffusers import ZImagePipeline
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
# 包含文字的提示词
prompt = 'A professional business card design with the text "创意设计工作室" and "Creative Design Studio" elegantly displayed, minimalist style, white background, gold accents'
image = pipe(
prompt=prompt,
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
generator=torch.Generator("cuda").manual_seed(456),
).images[0]
image.save("text_rendering.png")
print("文字渲染图像生成完成!")
高级配置
启用 Flash Attention
如果你的 GPU 支持 Flash Attention,可以启用以获得更好的效率:
import torch
from diffusers import ZImagePipeline
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
# 启用 Flash Attention 2
pipe.transformer.set_attention_backend("flash")
# 或者启用 Flash Attention 3(如果支持)
# pipe.transformer.set_attention_backend("_flash_3")
# 生成图像
image = pipe(
prompt="A beautiful sunset over the ocean",
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
).images[0]
模型编译加速
使用 PyTorch 编译可以进一步加速推理:
import torch
from diffusers import ZImagePipeline
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
# 编译 DiT 模型(第一次运行会比较慢,后续会更快)
pipe.transformer.compile()
# 生成图像
image = pipe(
prompt="A futuristic city skyline at night",
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
).images[0]
CPU 卸载(低显存设备)
如果你的显存有限,可以启用 CPU 卸载:
import torch
from diffusers import ZImagePipeline
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
# 启用 CPU 卸载以节省显存
pipe.enable_model_cpu_offload()
# 生成图像
image = pipe(
prompt="A cozy coffee shop interior",
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
).images[0]
实际应用案例
批量图像生成
import torch
from diffusers import ZImagePipeline
def batch_generate_images(prompts, output_dir="outputs"):
"""
批量生成图像
"""
import os
os.makedirs(output_dir, exist_ok=True)
# 加载模型
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
results = []
for i, prompt in enumerate(prompts):
print(f"生成第 {i+1}/{len(prompts)} 张图像...")
image = pipe(
prompt=prompt,
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
generator=torch.Generator("cuda").manual_seed(i * 42),
).images[0]
output_path = os.path.join(output_dir, f"image_{i:03d}.png")
image.save(output_path)
results.append({
"prompt": prompt,
"output": output_path
})
print(f"✓ 已保存: {output_path}")
print(f"批量生成完成!共生成 {len(results)} 张图像")
return results
# 使用示例
prompts = [
"A serene Japanese garden with cherry blossoms",
"A cyberpunk street scene with neon lights",
"A cozy library with warm lighting",
"A majestic mountain landscape at sunrise",
]
results = batch_generate_images(prompts)
不同尺寸图像生成
import torch
from diffusers import ZImagePipeline
def generate_multiple_sizes(prompt, sizes):
"""
生成不同尺寸的图像
"""
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
results = []
for width, height in sizes:
print(f"生成 {width}x{height} 图像...")
image = pipe(
prompt=prompt,
height=height,
width=width,
num_inference_steps=9,
guidance_scale=0.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
output_path = f"output_{width}x{height}.png"
image.save(output_path)
results.append({
"size": (width, height),
"output": output_path
})
print(f"✓ 已保存: {output_path}")
return results
# 使用示例
prompt = "A beautiful landscape with mountains and lake"
sizes = [
(1024, 1024), # 正方形
(1024, 768), # 横向
(768, 1024), # 纵向
]
results = generate_multiple_sizes(prompt, sizes)
随机种子探索
import torch
from diffusers import ZImagePipeline
def explore_seeds(prompt, num_seeds=5):
"""
探索不同随机种子的效果
"""
pipe = ZImagePipeline.from_pretrained(
"Tongyi-MAI/Z-Image-Turbo",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
results = []
for seed in range(num_seeds):
print(f"使用种子 {seed} 生成图像...")
image = pipe(
prompt=prompt,
height=1024,
width=1024,
num_inference_steps=9,
guidance_scale=0.0,
generator=torch.Generator("cuda").manual_seed(seed),
).images[0]
output_path = f"seed_{seed:03d}.png"
image.save(output_path)
results.append({
"seed": seed,
"output": output_path
})
print(f"✓ 种子 {seed} 完成")
print(f"探索完成!生成了 {len(results)} 张不同种子的图像")
return results
# 使用示例
prompt = "A magical forest with glowing mushrooms"
results = explore_seeds(prompt, num_seeds=5)
性能表现
根据 阿里 AI Arena 的 Elo 人类偏好评估,Z-Image-Turbo 在与其他领先模型的对比中表现出高度竞争力,并在开源模型中达到了最先进的水平。
性能对比
| 特性 | Z-Image-Turbo | 其他开源模型 |
|---|---|---|
| 推理步数 | 8 步 | 通常 20-50 步 |
| 推理延迟 | 亚秒级 | 数秒 |
| 显存需求 | 16GB | 通常 24GB+ |
| 文字渲染 | 中英文支持 | 通常仅英文 |
| 指令遵循 | 优秀 | 一般 |
效果展示
写实图像生成
Z-Image-Turbo 在写实图像生成方面表现出色,能够生成高质量的照片级图像,同时保持优秀的美学质量。
双语文字渲染
Z-Image-Turbo 能够准确渲染复杂的中英文文字,这在图像生成模型中是相当难得的能力。
提示词增强与推理
通过提示词增强器,模型具备了推理能力,能够超越表面描述,挖掘底层的世界知识。
相关资源
| 资源类型 | 链接 |
|---|---|
| 官方网站 | Z-Image 博客 |
| GitHub 仓库 | Tongyi-MAI/Z-Image |
| 技术报告 | Z-Image Report |
| 艺术画廊 | Web Art Gallery |
在线体验
想先体验 Z-Image 的效果?直接访问在线演示:
| 平台 | 链接 |
|---|---|
| Hugging Face | Z-Image-Turbo Demo |
| ModelScope | Z-Image-Turbo 在线体验 |
常见问题
为什么 guidance_scale 要设为 0?
Z-Image-Turbo 是经过蒸馏的模型,已经将 CFG(Classifier-Free Guidance)的效果内化到模型中,因此不需要额外的 guidance。
如何获得更好的文字渲染效果?
在提示词中明确指定要渲染的文字内容,使用引号包裹文字,并描述文字的样式和位置。
模型支持哪些分辨率?
推荐使用 1024x1024 的分辨率,也支持其他常见的宽高比如 1024x768、768x1024 等。
如何减少显存使用?
可以使用 pipe.enable_model_cpu_offload() 启用 CPU 卸载,或者降低生成分辨率。
更多文章