OnnxStream
极轻量 ONNX 推理库,298MB 内存即可运行 Stable Diffusion XL 和 Mi
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
极轻量 ONNX 推理库,298MB 内存即可运行 Stable Diffusion XL 和 Mi
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你有一台 298MB 内存的 Raspberry Pi Zero 2,想跑一个 Stable Diffusion XL 生成一张图片。通常来说,这像是「用吸管喝西瓜汁」——根本不可能。但 OnnxStream 做到了。这个由独立开发者 Vito Plantamura 创建的 C++ 推理库,正在用一种极端的工程思路,重新定义「AI 模型的硬件门槛」。
这个项目在 GitHub 已获得超过 2000 颗星。它的 Slogan 足够震撼:「能在树莓派 Zero 2 上跑 SDXL 1.0,也能在桌面和服务器上跑 Mistral 7B」——而这一切,只需要 298MB 内存,不是 8GB,不是 16GB,是 298MB。
传统 ONNX 推理依赖 ONNX Runtime,这是个功能完善但体积庞大的通用引擎。ONNX Runtime 的优势是兼容性强,劣势是内存开销大,对于嵌入式设备和资源受限场景并不友好。
OnnxStream 的出现,回答了一个被大厂忽略的问题:当你只有一块树莓派,但想体验 SDXL 文生图时,该怎么办? 作者 Vito Plantamura 在 2023 年开始这个项目,目标是做出一个「极度精简」的 ONNX 模型推理工具,核心追求只有一个——极低的内存占用。
OnnxStream 最大的技术创新,在于它将推理引擎与权重(模型参数)存储完全解耦。传统推理框架(如 ONNX Runtime)需要将整个模型权重一次性加载到内存,而 OnnxStream 采用按需流式加载策略:
这种设计的核心哲学是:让推理设备和存储设备解耦。即使模型有 7GB 之巨,设备只需要能装下推理所需的中间激活值(通常几十到几百 MB),而不需要容纳整个模型。
OnnxStream 并非只支持某一类模型,而是覆盖了当前 AI 领域最主流的几类任务:
图像生成类:
语言模型类:
音频模型类:
作者在 assets/LLM.md 中提供了详细的性能数据:TinyLlama 1.1B 在 2018 年老旧笔记本(CPU only,FP16 精度)上可流畅对话;Mistral 7B 在 Google Colab 免费版 T4 GPU(16GB 显存)上可运行 FP16 精度推理。
OnnxStream 的内存控制核心依赖两大机制:量化(Quantization) 和 权重分块加载。
项目支持多种量化精度组合:
作者在 assets 目录提供了不同精度下的 SDXL 生成效果对比图,展示了从 FP16 到 INT8 量化下图像质量的渐进衰减。实际测试表明,W8A8 在显著降低内存的同时,生成质量下降在可接受范围内。
OnnxStream 的推理性能依赖 Google 的 XNNPACK 库,这是 Google 为移动端/嵌入式场景优化的神经网络算子库,提供了高效的卷积、矩阵乘法等核心操作的 SIMD 实现(支持 ARM NEON、x86 SSE/AVX 等指令集)。
项目通过 CMake ExternalProject 自动下载并编译 XNNPACK,对用户透明。同时支持 CUDA 加速选项(-DOS_CUDA=ON),在有 NVIDIA GPU 的环境下可切换至 GPU 推理。
OnnxStream 的跨平台设计非常彻底:
项目还支持 Bazel 构建系统(src/BUILD.bazel),适合大规模构建场景。
2024 年 9 月,项目新增了 Python 和 C# 官方绑定:
src/bindings.py:Python 绑定,通过构建共享库(.so/.dll)后 import 使用src/bindings.cs:C# 绑定,支持 .NET 生态这意味着 AI 应用开发者无需直接写 C++,通过熟悉的 Python 或 C# 即可调用 OnnxStream 的推理能力。Whisper 的 WASM 示例也证明了浏览器端推理的可行性——用户无需服务器,直接在浏览器里完成语音识别。
对于普通用户,最简单的体验方式是 Docker:
sudo docker build -t sd .
sudo docker run -t -i --init -v .:/current sd --models-path /current --output /current/result.png --steps 1 --turbo
或者从源码编译(需要 CMake >= 3.10 和 C++ 编译器):
mkdir build && cd build
cmake -DOS_LLM=ON ..
cmake --build . --config Release
Docker 方式约 15 分钟完成部署,从源码编译约 10-20 分钟(取决于网络速度,XNNPACK 需要下载)。无 Web UI,纯 CLI 工具,参数通过命令行传递。
1. 功能局限性:OnnxStream 是推理引擎,不包含模型训练能力。它只负责「跑模型」,不负责「训练模型」。
2. 精度 vs 内存的取舍:INT8 量化虽然降低了内存,但生图质量有可感知的下降。对于生产级应用,FP16 仍是更稳妥的选择,而这意味着更高的硬件要求。
3. 维护风险:这是一个个人维护项目,活跃度高,但长期维护依赖作者的个人兴趣。ONNX 格式规范本身在演进,若 ONNX 算子支持发生变化,项目需要及时跟进。
4. 非标准算子处理:ONNX 有些算子在各运行时实现不一致,OnnxStream 需要自行处理这些兼容性问题,这是持续的开发负担。
OnnxStream 代表了一种**「极端轻量化 AI 推理」**的技术方向。随着 AI 落地进入深水区,如何在边缘设备上运行大模型成为关键挑战。OnnxStream 用工程技巧(流式权重加载 + XNNPACK 加速 + 激进量化)突破了硬件壁垒,为移动端 AI、IoT 设备 AI、以及浏览器端 AI 提供了一条可行的技术路径。
它的出现也印证了一个趋势:AI 推理正在从「云端集中」走向「端侧分散」。随着模型压缩技术(量化、剪枝、知识蒸馏)的进步,越来越多的模型可以在消费级硬件上运行,而这正是 OnnxStream 所推动的方向。