ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

8步出图:Z-Image单流DiT文生图模型如何跑通并读懂核心源码

8步出图:Z-Image单流DiT文生图模型如何跑通并读懂核心源码

8步出图:Z-Image单流DiT文生图模型如何跑通并读懂核心源码

【免费下载链接】Z-Image项目地址: https://gitcode.com/gh_mirrors/zi/Z-Image

Z-Image 是阿里的 6B 参数文生图模型族,单流 DiT 架构让 Z-Image-Turbo 只需 8 步去噪即可出图,16G 显存即可运行。仓库提供 PyTorch 原生推理实现与参考源码,适合想在本地跑通图生图链路、或想读懂扩散 Transformer 内部结构的工程师。照着本文,你能在半小时内拿到第一张 1024×1024 的生成图。

🚀 快速上手:三步跑通 Z-Image 推理环境

  1. 克隆仓库。拿到本地代码后即可进入下一步,仓库体积很小,秒级完成。
git clone https://gitcode.com/gh_mirrors/zi/Z-Image
  1. 安装依赖。构建虚拟环境后执行pip install -e .即可,依赖声明在 pyproject.toml 里,要求 Python ≥ 3.10、torch ≥ 2.5,安装过程约两分钟。

  2. 运行 inference.py。脚本会先自动下载 Z-Image-Turbo 权重到ckpts/Z-Image-Turbo,再选设备、生成图片,成功后目录里会多出example.png,终端同时打印耗时。首次运行主要耗时在权重下载,之后都是缓存命中。

如果你习惯 Hugging Face 生态,也可以装最新版diffusers后用ZImagePipeline加载Tongyi-MAI/Z-Image-Turbo,参数与原生脚本一一对应。

该图展示了 Z-Image 的单流 DiT 架构:文本 token 与图像 VAE token 拼接为统一序列,经 RMS Norm、U-Rope 位置编码后进入共享的 Transformer Block 处理

🧩 核心机制拆解:三个模块看懂生成链路

单流 DiT 结构:文本与图像 token 拼成一条序列

它做的事很直接:把图像先切 patch、再嵌入成 token,和文本特征 token 拼成一条序列,交给同一个 Transformer 处理。这点对比其他 DiT 的关键在于参数效率——双流架构需要两套模块分别处理文本和图像,单流架构让 30 层、30 头的共享 Block 直接做跨模态交互,结构上就像把两种原料倒进同一口锅炒,而不必各炒一盘再拼桌。

源码在 src/zimage/transformer.py:ZImageTransformer2DModel.forward里能看到patchify_and_embed把 latent 切成 patch、unified部分把图像与文本 token 拼接、最后unpatchify还原回特征图。

Flow Matching 调度器:动态时间步偏移支撑 8 步生成

它负责决定每一步去噪往哪个方向走。Z-Image-Turbo 只跑 8 步还能出好图,背后是少步蒸馏:Decoupled-DMD 把 CFG 增强当作蒸馏主引擎、分布匹配当作稳定正则项,两者解耦后分别优化,才换来 8 NFE 的推理步数。

该图展示了 Decoupled-DMD 的机制:CFG 增强与分布匹配两种角色被解耦,分别驱动与稳定少步蒸馏过程

推理时还有一个细节:时间步偏移 μ 不是常数,而是按当前图像 token 数线性插值(256 token 对应 0.5、4096 token 对应 1.15),分辨率越高采样偏移越大。调度器实现在 src/zimage/scheduler.py,偏移计算在 src/zimage/pipeline.py 的calculate_shift。

多注意力后端与权重清单:推理性能的弹性开关

dispatch_attention会在运行时挑选 Flash Attention 2/3、SDPA 等后端,通过环境变量ZIMAGE_ATTENTION即可切换,不侵入业务代码。权重侧也做了一致性保障:src/config/manifests/z-image-turbo.txt 记录了 text_encoder、transformer、vae 每个分片的 md5,配合ensure_model_weights可校验下载完整性。对自部署服务来说,这两处基本决定了你的吞吐和容错上限。

🎛️ 进阶玩法:接入业务与常见坑

接入建议

  • 批量出图直接用 batch_inference.py:提示词每行一条,通过环境变量PROMPTS_FILE指定文件,结果自动按序号命名存入outputs/。
  • 需要中间结果时,generate支持output_type="latent",把 latent 拿去接 ControlNet、LoRA 或二次编辑链路。
  • 调参差异要分清:Turbo 版固定guidance_scale=0.0、num_inference_steps=8;基础 Z-Image 才需要 guidance 3.0~5.0、28~50 步,并强烈建议加负向提示词。

常见坑

  • 分辨率必须是 16 的倍数(VAE 下采样 8 倍再乘 2 倍 patch),否则直接抛异常。
  • 想压低延迟可在inference.py里把compile=True并切到_flash_3后端,Hopper 级 GPU 上预热后可达亚秒级;显存不足时改用 diffusers 路线并开启enable_model_cpu_offload。

Z-Image 的价值在于把"8 步出图 + 16G 显存"做成了消费级显卡上可用的事实,Turbo 版适合追求速度的在线服务,基础版则留出负向提示词与 CFG 调参空间适合微调与精修。它的边界同样清晰:Turbo 牺牲了多样性换速度,编辑能力依赖 Edit/Omni-Base 分支,选哪个变体先看你卡的是延迟还是可控性。

【免费下载链接】Z-Image项目地址: https://gitcode.com/gh_mirrors/zi/Z-Image

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进