在 MacBook Pro M4 Max 上本地运行 FLUX AI 图像生成
← Back to Home

Essay

在 MacBook Pro M4 Max 上本地运行 FLUX AI 图像生成

一份实用、不注水的指南,教你在 Apple Silicon 上完全本地安装并运行 FLUX 图像模型。内容涵盖 ComfyUI、DrawThings 和 Diffusers,36 GB 与 128 GB M4 Max 的内存预算、提示词技巧以及典型生成耗时。

为什么要在自己的笔记本上运行

远程图像 API 既便宜又快速,那为什么还要费劲在 MacBook Pro M4 Max 上本地运行图像模型?在我的日常工作中,有三个理由反复出现:

  • 隐私。 提示词、参考图和生成结果都不会离开这台机器。如果你在做早期产品设计、客户样稿或任何受 NDA 约束的工作,单凭这一点就值得折腾一番。
  • 迭代速度。 模型预热后,M4 Max 几秒内就能生成一张 1024x1024 的图像,没有任何速率限制,也没有按张计费。你可以为测试一个提示词想法跑上 400 次生成,除了电量之外不花一分钱。
  • 学习。 搞清楚扩散模型在 Neural Engine、GPU 和 CPU 上运行时到底发生了什么,是不再把这些模型当作魔法的最快途径。

关于名字的一点说明:并不存在叫“Fury AI”的图像模型。今年人人笔记本上都在跑的模型是 Black Forest Labs 推出的 FLUX——你想问的很可能就是它。下文全部以 FLUX.1 为目标,但同样的配置也适用于 SDXL、Stable Diffusion 3.5、Qwen-Image 以及较新的 FLUX.2 预览版。

M4 Max 实际能给你什么

M4 Max 是在 macOS 上进行本地图像生成的最佳选择。这一点很重要,因为扩散模型不仅吃算力,更吃内存。

  • GPU: 最多 40 核,支持硬件光线追踪,内存通道比 M3 Max 宽得多。顶配版本的统一内存带宽约为 546 GB/s。
  • 统一内存: 36 GB、48 GB、64 GB 或 128 GB。全部可被 GPU 访问。在 Nvidia 平台上,对应的数字就是显存,而 24 GB 显存的显卡价格非常昂贵。
  • Neural Engine: 16 核,对某些转换为 CoreML 的模型有用,但目前并不是运行 FLUX 的主要途径。

在 Apple Silicon 上运行 FLUX.1 的经验法则:

  • 36 GB M4 Max: 可轻松运行 FLUX.1-schnell(4 步,fp8 或 int4);FLUX.1-dev 以 fp8 运行时需借用 CPU 内存作溢出,耗时会更长。
  • 48 GB 及以上: FLUX.1-dev 以 fp8 或 bf16 运行无需交换内存,能获得最佳的质量与速度平衡。
  • 64 GB / 128 GB: 可以同时让模型、一组 LoRA、一个 ControlNet 和一个 VAE 常驻内存,生成 2048x2048 图像或用 Wan/Hunyuan 生成短视频时,风扇甚至都不会转起来。

三种方式,从最省心到最折腾

在 M4 Max 上运行本地图像模型有三种合理的方式。根据你真正想做的事情选一种即可。

1. Draw Things —— 零配置,App Store 安装

如果你今晚就想生成图像,而不想碰终端,那就从 Mac App Store 安装 Draw Things。这是一款由 liuliu 维护、针对 Metal 优化的原生应用,它会帮你下载 FLUX / SDXL / SD3.5 模型权重,在 M 系列芯片上速度确实很快。

  • 打开 Draw Things,进入 Models,下载 FLUX.1 [schnell](最快)或 FLUX.1 [dev](质量更高、速度更慢,非商业许可)。
  • schnell 的采样器设为 Euler A(4 步),dev 设为 DPM++ 2M(20–28 步)。
  • 分辨率:从 1024x1024 开始。M4 Max 处理 1536x1536 毫无压力。

如果你想要出色的界面、LoRA 支持、局部重绘,并且不想做任何配置,就选它。

2. ComfyUI —— 基于节点的标准方案

如果你想使用网上其他人分享的同款工作流,就安装 ComfyUI。它是一个用于扩散流水线的节点图编辑器,通过 PyTorch MPS 在 Apple Silicon 上原生运行。

bash
# Prereqs: Xcode Command Line Tools + Homebrew + Python 3.11
brew install python@3.11 git git-lfs
git lfs install

# Clone and set up ComfyUI
git clone https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
python3.11 -m venv .venv
source .venv/bin/activate

# PyTorch nightly gives the best MPS performance right now
pip install --pre torch torchvision torchaudio \\
  --index-url https://download.pytorch.org/whl/nightly/cpu
pip install -r requirements.txt

# Download FLUX.1 [schnell] (Apache 2.0, commercial-friendly)
mkdir -p models/unet models/vae models/clip
huggingface-cli download black-forest-labs/FLUX.1-schnell \\
  flux1-schnell.safetensors --local-dir models/unet
huggingface-cli download black-forest-labs/FLUX.1-schnell \\
  ae.safetensors --local-dir models/vae
huggingface-cli download comfyanonymous/flux_text_encoders \\
  clip_l.safetensors t5xxl_fp8_e4m3fn.safetensors --local-dir models/clip

# Launch — MPS is picked automatically on Apple Silicon
python main.py --force-fp16

然后在浏览器中打开 http://127.0.0.1:8188,把 Comfy 示例仓库中的官方 FLUX 工作流 JSON 拖进去,点击 Queue Prompt。首次运行会编译内核并下载 T5 编码器,冷启动预计约 90 秒。在 40 核 / 48 GB 的 M4 Max 上,预热后用 FLUX.1-schnell 生成 1024x1024 图像,每张约 8–14 秒。

在 Apple Silicon 上真正有用的技巧:

  • 除非你的内存在 64 GB 或以上,否则请使用 fp8 版本的 T5 文本编码器(t5xxl_fp8_e4m3fn.safetensors),而不是 fp16 版本。它能将编码器内存占用减半,且看不出画质损失。
  • 在 shell 中设置 PYTORCH_ENABLE_MPS_FALLBACK=1,这样任何尚未支持 MPS 的算子都会悄悄改在 CPU 上运行,而不是直接崩溃。
  • 每次切换模型后的第一次生成都会很慢,因为正在编译 Metal 内核。保持同一个模型权重加载不变,在提示词上反复迭代即可。

3. Diffusers + MLX —— 可编写脚本的方式

当你想把图像生成嵌入到自己的工具中时,就用 Python 来驱动它。Hugging Face Diffusers 开箱即可在 MPS 上运行,而 Apple 的 MLX 框架有一个 mlx-flux 移植版本,能同时从 Neural Engine 和 GPU 中榨取更多性能。

python
# pip install --upgrade diffusers transformers accelerate safetensors
import torch
from diffusers import FluxPipeline

pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-schnell",
    torch_dtype=torch.bfloat16,
)
pipe.enable_attention_slicing()
pipe.to("mps")

image = pipe(
    prompt="a serene mountain lake at sunrise, cinematic, 35mm film",
    guidance_scale=0.0,          # schnell wants 0.0
    num_inference_steps=4,       # schnell is a 4-step model
    max_sequence_length=256,
).images[0]

image.save("out.png")

如果你追求极致的推理速度,并且不介意使用较新的框架,可以看看 GitHub 上的 mlx-flux 和 mflux。两者都会把 FLUX 编译为 MLX 原生计算图,在同一台 48 GB M4 Max 上,可将 FLUX.1-schnell 生成每张 1024x1024 图像的时间缩短到约 5–7 秒。

写好 FLUX 提示词,得到你真正想要的结果

FLUX 与 SDXL 完全是两码事。养成两个习惯能帮你省去很多烦恼:

  1. 写完整的句子,而不是堆砌标签。 FLUX 使用 T5 文本编码器,它理解的是自然语言,而不是 danbooru 标签。A close-up portrait of an elderly Chinese fisherman at dawn, weathered hands mending a net, soft golden light 的效果远胜于 chinese, old man, fisherman, morning, portrait, cinematic, hands, net, 4k。
  2. 保持较低的 CFG。 FLUX.1-schnell 使用 guidance_scale=0.0。FLUX.1-dev 的默认最佳值是 3.5。像在 SDXL 上那样把它调高,只会让图像“过曝烧坏”。

在图像中渲染文字是 FLUX 的拿手好戏——它确实能渲染出简短且可读的文字。如果你需要成段清晰可读的文字,那就换用 Qwen-Image,它正是为此专门打造的。

M4 Max 上的真实性能数据

在一台配备 40 核 GPU、48 GB 统一内存、运行 macOS 15 的 14 英寸 M4 Max 上:

  • Draw Things,FLUX.1-schnell,1024x1024,4 步: 预热后每张 6–9 秒。
  • ComfyUI,FLUX.1-schnell fp8,1024x1024,4 步: 预热后每张 8–14 秒。
  • ComfyUI,FLUX.1-dev fp8,1024x1024,20 步: 每张 45–70 秒。
  • Diffusers on MPS,FLUX.1-schnell bf16,1024x1024,4 步: 每张 12–18 秒。
  • mflux (MLX),FLUX.1-schnell,1024x1024,4 步: 每张 5–7 秒。

需要重点关注的是内存压力。如果统一内存占用持续在 90% 以上,并且你看到活动监视器中的“已使用的交换”数值不断攀升,那就改用 fp8 权重、降低分辨率,或者在下一台机器上升级内存规格。

我在日常使用中的实际选择

做概念设计和客户草图时,我会在一个桌面上开着 Draw Things,在另一个桌面上开着 ComfyUI。对一个提示词的前五十次探索,Draw Things 更胜一筹——因为它的界面是一个正经的 Mac 应用,迭代起来更快。找到想要的构图后,我会切换到 ComfyUI,锁定一个 LoRA,加上 ControlNet,生成最终的各个变体。每当流水线需要自动化时——例如在一个更大的工具中为博客文章生成头图——我就会用 Diffusers 或 mflux 写脚本来完成。

M4 Max 是第一款让这一切都不再感觉是妥协的 Apple 笔记本。如果你一直在为那些从不离开云端的图像向 OpenAI 或 Midjourney 付费,那么今年就是自己运行模型的时候了。