ERNIE-Image × mflux:在 Apple Silicon Mac 上原生 MLX 运行 8B 文生图模型

Jul 9, 2026

ERNIE-Image × mflux:在 Apple Silicon Mac 上原生 MLX 运行 8B 文生图模型

发布时间:2026-07-09
发布平台:ernie-image.app

一、背景:Apple Silicon 上的 ERNIE-Image 新选择

ERNIE-Image 发布三个月以来,社区已经探索了多种本地部署方式——从 SGLang 推理服务器到 GGUF 量化,从 AMD ROCm 到 Google Colab 免费部署。对于 Apple Silicon Mac 用户来说,之前的主要方案是通过 Diffusers + PyTorch MPS 后端运行,但这种方式有一个明显的痛点:MPS 后端性能不理想,且需要通过 PyTorch 做一层额外的抽象。

2026 年 7 月,mflux 项目正式加入了 ERNIE-Image 支持,为 Mac 用户提供了一条全新的路线:无需 Diffusers、无需 PyTorch,直接在 MLX 框架上原生运行 ERNIE-Image 和 ERNIE-Image-Turbo。

mflux 是什么?它是一个"逐行 MLX 移植"项目,将 HuggingFace Diffusers 和 Transformers 中的生成式图像模型直接移植到 Apple 的 MLX 框架上。这种做法的好处在于——去掉中间层,让模型直接在 Metal Performance Shaders 上运行,性能更好、占用更小。

目前 mflux 支持 ERNIE-Image(Base)和 ERNIE-Image-Turbo 两个版本,完整覆盖了 text-to-image、image-to-image、LoRA 微调、量化推理等全部常用功能。

二、mflux 是什么?为什么选择它

mflux 的核心理念很简洁:所有模型都用 MLX 从零实现,只使用 HuggingFace Transformers 的 tokenizer 组件。项目的代码风格受 Andrej Karpathy 的 "从头实现" 理念影响——保持最小化和显式化。

对于 Mac 用户来说,mflux 相较于 Diffusers + MPS 有以下优势:

  • 原生 MLX 推理:模型权重直接从 PyTorch 转换为 MLX 格式(NCHW → NHWC),不需要通过 PyTorch 的 MPS 桥接层
  • 磁盘占用更低:通过量化(q8/q4)可以大幅减少模型文件大小
  • LoRA 训练支持:内置 mflux-train 工具,支持对 ERNIE-Image 进行 LoRA 微调
  • 批量生成:支持一次性生成多张图片
  • HTTP API 服务:可以启动远程推理服务器,作为 API 使用

更重要的是,社区开发者 treadon 已经将 ERNIE-Image-Turbo 的 MLX 权重预转换并上传到 HuggingFace(treadon/ERNIE-Image-Turbo-MLX),用户下载后开箱即用,无需自行转换。

三、安装与快速上手

安装

mflux 使用 uv 作为包管理器,安装非常简单:

# 安装 uv(如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh

安装 mflux

uv pip install mflux

如果需要更快的下载速度,可以添加 hf_transfer 扩展:

uv pip install "mflux[hf_transfer]"

基本使用:文本生成图像

使用 ERNIE-Image-Turbo 生成第一张图片:

mflux-generate-ernie-image-turbo \
  --prompt "一只黑白相间的中华田园犬在草地上奔跑,阳光明媚" \
  --width 1024 \
  --height 1024 \
  --seed 42 \
  --steps 8 \
  -q 8

第一次运行会自动下载模型权重(~12GB q8 量化),后续运行直接使用本地缓存。

参数说明:

  • -q 8:使用 8-bit 量化,磁盘占用约 12GB,推荐大多数用户使用
  • -q 4:使用 4-bit 量化,磁盘占用约 6.2GB,适合显存有限的 Mac
  • --steps:Turbo 版本推荐 8 步,Base 版本推荐 28-50 步
  • --guidance:Base 版本可使用 CFG(推荐 4.0),Turbo 版本固定为 1.0

使用 Base 模型

Base(非蒸馏)版本的 ERNIE-Image 需要更多步数,但支持分类器自由引导(CFG),适合对指令遵循要求更严格的任务:

mflux-generate-ernie-image \
  --prompt "一张带有日语菜单的复古咖啡馆招牌,暖色调灯光" \
  --width 1024 \
  --height 1024 \
  --seed 42 \
  --steps 28 \
  --guidance 4.0

图像到图像(img2img)

mflux 支持基于输入图像的二次生成,通过 --image-path 和 --image-strength 参数控制:

mflux-generate-ernie-image-turbo \
  --prompt "将草图转化为精美的水彩画" \
  --image-path /path/to/sketch.png \
  --image-strength 0.6 \
  --steps 8 \
  -q 8

--image-strength 范围 0.0~1.0,值越大保留原图特征越多。

四、性能基准测试

根据社区开发者 treadon 在 M4 Pro 64GB 上的测试数据:

管线 总时间 每步时间
PyTorch/MPS(diffusers) 137.0s 17.1s/步
MLX(mflux) 134.2s 16.0s/步

细分耗时:

组件 耗时
Text encode(PyTorch) 0.1s
Denoise(MLX) 128s
VAE decode(MLX) 6s
总计 ~134s

这意味着在 M4 Pro 上,使用 ERNIE-Image-Turbo 生成一张 1024×1024 的图片大约需要 2 分钟。这个速度虽然不如云端 GPU 方案快,但对于本地推理来说已经是可用的水平——特别是当你想在离线环境下工作,或者需要处理敏感内容时。

注意:不同 Mac 配置的性能差异较大:

  • M1 Max(64GB):预计 180-220s
  • M2 Ultra(128GB):预计 100-120s
  • M4 Pro(64GB):参考值 ~134s
  • M4 Max(128GB):预计 80-100s

五、量化与磁盘占用

ERNIE-Image 的完整模型权重约 22GB,对于大多数 Mac 用户来说这个数字有些大。mflux 支持两种量化级别:

量化级别 磁盘占用 说明
无量化(float16) ~22GB 完整精度,磁盘要求高
q8(8-bit) ~12GB 推荐选项,质量损失极小
q4(4-bit) ~6.2GB 适合磁盘空间有限的场景

使用 mflux-save 命令进行模型量化保存:

# 下载并保存为 q8 量化
mflux-save --model ernie-image-turbo -q 8

下载并保存为 q4 量化

mflux-save --model ernie-image-turbo -q 4

六、LoRA 微调:在 Mac 上定制专属风格

mflux 内置了 LoRA 训练工具 mflux-train,支持对 ERNIE-Image 进行微调。这意味着你可以在自己的 Mac 上训练专属风格模型,无需云端 GPU。

使用示例配置:

mflux-train --config train_ernie_image_turbo.json

训练配置文件示例(train_ernie_image_turbo.json):

{
  "model": "ernie-image-turbo",
  "dataset_path": "./my_dataset",
  "lora_rank": 16,
  "lora_alpha": 32,
  "learning_rate": 1e-4,
  "num_epochs": 10,
  "batch_size": 1,
  "quantize": 8
}

支持的目标层包括:

  • mlp.* — MLP 层
  • time_embedding.* — 时间嵌入层
  • adaln_modulation — Adaptive Layer Norm 调制层
  • final_norm.linear — 最终归一化线性层

训练好的 LoRA 权重可以在推理时直接加载:

mflux-generate-ernie-image-turbo \
  --prompt "my_style: 一只猫" \
  --lora-weights /path/to/lora.safetensors \
  --lora-scale 0.8

七、Python API 与 HTTP 服务

Python 脚本方式

mflux 也支持通过 Python API 调用,适合集成到更大的工作流中:

# /// script
# dependencies = ["mflux"]
# ///

from mflux import mflux_generate

mflux_generate(
model="ernie-image-turbo",
prompt="一只站在悬崖上的海鹦",
width=1280,
height=500,
seed=42,
steps=8,
quantize=8
)

启动 HTTP 服务

mflux 支持启动远程推理服务器,提供 HTTP API 接口:

mflux-server --model ernie-image-turbo -q 8 --port 8080

然后可以通过 REST API 调用:

curl -X POST http://localhost:8080/generate \
  -H "Content-Type: application/json" \
  -d '{"prompt": "赛博朋克风格的东京夜景", "width": 1024, "height": 1024}'

这为将 ERNIE-Image 集成到本地 Web 应用或自动化工作流提供了极大便利。

八、适用场景与注意事项

最适合的场景

  • 离线环境:没有网络连接时仍可生成高质量图片
  • 隐私敏感项目:图片数据不需要上传到云端
  • 原型开发与测试:快速测试 prompt 效果
  • LoRA 实验:在本地低成本训练和测试风格 LoRA
  • 教育演示:在 MacBook 上现场演示 ERNIE-Image 能力

注意事项

  1. 内存要求:ERNIE-Image-Turbo q8 量化需要约 16GB 统一内存,建议 24GB 以上的 Mac
  2. 首次下载:模型权重较大(q8 约 12GB),首次运行需要较长时间下载
  3. 速度 vs 云端:本地推理速度远慢于云端 GPU(fal.ai 等平台约 9 秒/张),适合低吞吐量场景
  4. Turbo 优先:在 Mac 上优先使用 Turbo 版本(8 步),Base 版本(50 步)耗时过长

九、总结

mflux 为 Apple Silicon Mac 用户提供了一条在不依赖云端 GPU 的情况下运行 ERNIE-Image 的实用路径。虽然本地推理速度无法与云端 H100 相比,但离线可用性、数据隐私、以及原生 LoRA 训练支持,使其成为开发者和内容创作者在 Mac 上使用 ERNIE-Image 的重要补充方案。

关键要点:

  • mflux 原生支持 ERNIE-Image 和 ERNIE-Image-Turbo
  • 8-bit 量化后磁盘占用约 12GB,M4 Pro 上推理约 134 秒/张
  • 支持 LoRA 训练、img2img、HTTP 服务
  • 社区已有预转换 MLX 权重(treadon/ERNIE-Image-Turbo-MLX)
  • 推荐 q8 量化 + Turbo 版本作为日常使用配置

关键词:ernie-image mflux ernie-image apple silicon ernie-image mlx ernie-image mac mflux ernie-image turbo mlx apple silicon ai image generation

ERNIE-Image Team