首先预祝大家国庆假期快乐!本文封面的 3D 图由 FLUX.1 [schnell] 生成,只要按照下面的教程,你可以在自己的电脑上生成这样的图片。
以下为正文, enjoy!
FLUX.1 是由 Black Forest Labs 开发的开源图像生成模型,他们也是 Stable Diffusion 的创作者。最近,他们发布了 FLUX.1 [schnell],这是一个轻量级、高速的版本,专为本地使用设计,非常适合个人项目,并采用 Apache 2.0 许可证发布。WasmEdge 版本 0.14.1 添加了 Stable Diffusion 插件的支持,你可以使用 LlamaEdge[1] (Rust + Wasm 堆栈)在你的机器上运行 FLUX.1 [schnell] 模型和 Stable Diffusion 模型,从而使用文本生成图像,而无需安装复杂的 Python 包或 C++ 工具链!
本指南中,我将在我的 MacBook Air(16GB RAM)上运行 FLUX.1 [schnell] 模型。生成图像大约需要 3 分钟。如果在性能更好的机器上,如 Mac Studio 和 NVIDIA A6000,分别需要 60 秒和 40 秒。
注意:不推荐在 CPU 上运行 FLUX.1 [schnell],一张图大概耗时 30分钟。
在自己的机器上运行 FLUX.1 [schnell] 模型
第一步:安装 WasmEdge 和 Stable Diffusion 插件
首先,安装 WasmEdge 版本 0.14.1 以获得最新的 Stable Diffusion 插件支持。
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s -- -v 0.14.1
Stable Diffusion 的支持仍处于早期阶段,因此你需要手动安装插件。如果你想帮助简化安装过程,欢迎给 WasmEdge repo 提交 pull request!
Mac Apple Silicon
# 下载适用于 Mac Apple Silicon 的 Stable Diffusion 插件:
curl -LO https://github.com/WasmEdge/WasmEdge/releases/download/0.14.1/WasmEdge-plugin-wasmedge_stablediffusion-metal-0.14.1-darwin_arm64.tar.gz
# 将插件解压到 $HOME/.wasmedge/plugin
tar -xzf WasmEdge-plugin-wasmedge_stablediffusion-metal-0.14.1-darwin_arm64.tar.gz -C $HOME/.wasmedge/plugin
# 删除不必要的动态库:
rm $HOME/.wasmedge/plugin/libwasmedgePluginWasiNN.dylib
CUDA 12.0 (Ubuntu).
# 下载适用于 CUDA 12.0 的 Stable Diffusion 插件:
curl -LO https://github.com/WasmEdge/WasmEdge/releases/download/0.14.1/WasmEdge-plugin-wasmedge_stablediffusion-cuda-12.0-0.14.1-ubuntu20.04_x86_64.tar.gz
# 将插件解压到 $HOME/.wasmedge/plugin
tar -xzf WasmEdge-plugin-wasmedge_stablediffusion-cuda-12.0-0.14.1-ubuntu20.04_x86_64.tar.gz -C $HOME/.wasmedge/plugin
Cuda 11.0 请参见 release assets[2]。
第二步:下载 FLUX.1 [schnell] 模型文件
FLUX.1 [schnell] 模型需要多个文件。请按以下方式下载它们:
`# Main model
curl -LO https://huggingface.co/second-state/FLUX.1-schnell-GGUF/resolve/main/flux1-schnell-Q4_0.gguf`
# VAE file
curl -LO https://huggingface.co/second-state/FLUX.1-schnell-GGUF/resolve/main/ae-f16.gguf
# clip_l encoder
curl -LO https://huggingface.co/second-state/FLUX.1-schnell-GGUF/resolve/main/clip_l-Q8_0.gguf
# t5xxl encoder
curl -LO https://huggingface.co/second-state/FLUX.1-schnell-GGUF/resolve/main/t5xxl-Q2_K.gguf
第三步:下载 API server 程序
API server 是一个跨平台的 Wasm 应用,可以在不同的 CPU 和 GPU 设备上运行。
curl -LO https://github.com/LlamaEdge/sd-api-server/releases/latest/download/sd-api-server.wasm
第四步:启动 API Server
运行以下命令启动 API 服务器:
wasmedge --dir .:. sd-api-server.wasm \
--model-name flux1-schnell \
--diffusion-model flux1-schnell-Q4_0.gguf \
--vae ae-f16.gguf \
--clip-l clip_l-Q8_0.gguf \
--t5xxl t5xxl-Q2_K.gguf
在屏幕上看到类似以下的信息时,API 服务器已准备就绪:[2024-09-25 16:48:45.462] [info] sd_api_server in src/main.rs:168: Listening on 0.0.0.0:8080
第五步:生成图像
现在,可以发送 API 请求来生成图像:
curl -X POST 'http://localhost:8080/v1/images/generations' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux1-schnell",
"prompt": "Astronaut, wearing futuristic astonaut outfit with space helmet, beautiful body and face, very breathtaking beautiful image, cinematic, 4k, epic Steven Spielberg movie still, sharp focus, emitting diodes, smoke, artillery, sparks, racks, system unit, motherboard, by pascal blanche rutkowski repin artstation hyperrealism painting concept art of detailed character design matte painting, 4 k resolution blade runner",
"cfg_scale": 1.0,
"sample_method": "euler",
"steps": 4
}'
如果一切设置正确,几分钟后终端将输出以下内容并将生成的图像保存为 “output.png”:
{"created":1727254825,"data":[{"url":"/archives/file_624f0ead-cb78-482f-a3f5-0a2a55b1534b/output.png","prompt":"Astronaut, wearing futuristic astonaut outfit with space helmet, beautiful body and face, very breathtaking beautiful image, cinematic, 4k, epic Steven Spielberg movie still, sharp focus, emitting diodes, smoke, artillery, sparks, racks, system unit, motherboard, by pascal blanche rutkowski repin artstation hyperrealism painting concept art of detailed character design matte painting, 4 k resolution blade runner"}]}%
行星图像的提示词是:A dramatic landscape on an exoplanet with a breathtaking view of a ringed gas giant in the sky. The planet surface is rugged and alien, with strange rock formations and vibrant, otherworldly vegetation. The rings of the gas giant cast colorful shadows and reflections, creating a surreal and captivating environment.
FLUX.1 [schnell] 模型分解
在运行 FLUX.1 [schnell]时,涉及多个组件。让我们了解一下这些模型对应的功能。
wasmedge --dir .:. sd-api-server.wasm \
--model-name flux1-schnell \
--diffusion-model flux1-schnell-Q4_0.gguf \
--vae ae-f16.gguf \
--clip-l clip_l-Q8_0.gguf \
--t5xxl t5xxl-Q2_K.gguf
模型组件
flux1-schnell-Q4_0.gguf:
核心 FLUX.1 模型,负责文本到图像的生成。它被量化为 Q4_0 以提高效率,对于资源有限的系统非常合适。ae-f16.gguf
: VAE(变分自编码器)文件,用于压缩和解压图像以提高性能,采用 float16 精度。clip_l-Q8_0.gguf
: CLIP 编码器,将文本提示词与图像连接,使用量化过的值以加快推理速度。t5xxl-Q2_K.gguf
: T5-XXL 编码器,处理和编码文本提示,进行资源高效的量化。
如果你的机器内存够大,可以使用原始的 safetensors 文件而不是量化版本。请查看 Hugging Face[3] 上的完整模型列表。
LlamaEdge: https://github.com/second-state/LlamaEdge/
[2]release assets: https://github.com/WasmEdge/WasmEdge/releases/tag/0.14.1
[3]Hugging Face: https://huggingface.co/second-state/FLUX.1-schnell-GGUF
关于 WasmEdge
WasmEdge 是轻量级、安全、高性能、可扩展、兼容OCI的软件容器与运行环境。目前是 CNCF 沙箱项目。WasmEdge 被应用在 SaaS、云原生,service mesh、边缘计算、边缘云、微服务、流数据处理、LLM 推理等领域。
GitHub:https://github.com/WasmEdge/WasmEdge
官网:https://wasmedge.org/
Discord 群:https://discord.gg/U4B5sFTkFc
文档:https://wasmedge.org/docs