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 工具。克隆、构建、开始创作——你的终端现在可以免费绘制大师级作品。
原创文章:
查看原文