Flux 2 在纯C实现:零依赖图像生成

Flux 2 在纯C实现:零依赖图像生成

Flux 2 是最新一代的潜在扩散模型,能够在 四个采样步骤 内将提示转换为惊艳的图像。Black Forest Labs 发布了小型 “Klein” 变体,仅含 4 B 参数,但推理代码仍然庞大——16 GB 的权重。Flux 2‑c 为你提供一个快速、轻量、纯C 实现,可在 macOS 或 Linux 上运行,无需 Python、CUDA 或完整的 ML 堆栈。

为什么使用C实现?

  • 零外部运行时 – 仅需 C 标准库,生成的可执行文件可在任何支持 C 编译的环境中运行。
  • 内存映射权重 – 默认 --mmap 模式将 16 GB 的 safetensors 保存在磁盘上,按需加载,将峰值内存降至约 4–5 GB。
  • GPU 加速(可选) – 在 Mac 上使用 Apple Metal(MPS),或在 Intel/Linux 上使用 BLAS,可比纯C基准提升约 30×。

快速开始

# 1. 克隆仓库
git clone https://github.com/antirez/flux2.c
cd flux2.c

# 2. 选择后端
make mps          # Apple Silicon(最快)
# make blas      # Intel Mac / Linux 搭配 OpenBLAS
# make generic   # 纯C,无依赖

# 3. 下载 16 GB 模型
./download_model.sh          # shell 脚本(curl)
# 或:pip install huggingface_hub && python download_model.py

# 4. 运行演示
./flux -d flux-klein-model \
       -p "A woman wearing sunglasses" \
       -o output.png

若终端支持 Kitty 协议,图像将立即显示。

功能一览

功能 描述
文本到图像 从任意分辨率(64–1792 px)提示生成图像
图像到图像 使用现有图像作为引用进行上下文条件化
多重引用 组合最多 16 张参考图像以生成复合图像
交互式CLI 省略 -p 可启动 REPL,记住引用 ID
终端预览 --show / --show-steps 可直接在 Kitty/Ghostty/iTerm2 显示图像
零依赖API 导出简单的 C 库(libflux.a),提供 flux_generate()flux_img2img()
富元数据PNG PNG 图像包含种子与模型信息,便于复现
基准测试 在 M3 Max 下,4 步纯C MPS 生成 512×512 大约 13 秒,匹配 PyTorch

从源代码编译

先决条件 – C 编译器,以及可选的 OpenBLAS(用于 blas 目标)或 Apple Accelerate(用于 mps)。

# 在 macOS
clang -framework Accelerate -o flux flux.c flux_h*.c ...
# 在 Linux(OpenBLAS)
gcc -fopenmp -L/usr/lib -lopenblas -o flux flux.c flux_h*.c ...

运行 make 可列出所有可用后端。每个目标都会生成一个二进制文件,并自动为你的平台选择最快路径。

在你自己的项目中使用库

#include "flux.h"
#include <stdio.h>
int main(void) {
    flux_ctx *ctx = flux_load_dir("flux-klein-model");
    if (!ctx) { printf("Failed: %s\n", flux_get_error()); return 1; }

    flux_params p = FLUX_PARAMS_DEFAULT;
    p.width = 512; p.height = 512; p.seed = 42;

    flux_image *img = flux_generate(ctx, "A fluffy orange cat", &p);
    if (!img) { printf("Error: %s\n", flux_get_error()); return 1; }

    flux_image_save(img, "cat.png");
    flux_image_free(img);
    flux_free(ctx);
    return 0;
}

编译命令:gcc -o myapp myapp.c -L. -lflux -lm -framework Accelerate(macOS)或等价的 OpenBLAS 版本。

调试 & 与 Python 对比

仓库内带有 debug/ 文件夹,包含 Python 脚本,可逐层打印 Black Forest 原始实现中的张量。使用 --debug-py 运行 C 二进制文件,以验证像素级别的一致性。

./flux -d flux-klein-model --debug-py -o c_debug.png

这在微调模型权重或分词器时,对保持 sanity checks 非常有价值。

常见问题

问题 回答
可以在 Windows 上使用吗? 可以 – 只需要 C 编译器和可选的 BLAS 库即可构建二进制文件;MPS 仅适用于 macOS
需要 GPU 吗? 不是强制的;generic 版可在 CPU 上运行。GPU 后端只是加速推理
16 GB 下载怎么办? 使用内存映射权重(--mmap),让 8 GB 系统在不将整个模型载入 RAM 的情况下生成图像

结论

Flux 2‑c 将顶级图像生成技术带给那些想在不依赖 Python 运行时或 CUDA 的情况下获得高性能的开发者。它小巧的占用、可选 GPU 支持以及在 C/C++ 项目中嵌入的可能性,使其非常适合嵌入式系统、边缘计算,亦或是为艺术家提供一个有趣的 CLI 工具。克隆、构建、开始创作——你的终端现在可以免费绘制大师级作品。

原创文章: 查看原文

分享本文