vitoplantamura/OnnxStream
Lightweight inference library for ONNX files, written in C++. It can run Stable Diffusion XL 1.0 on a RPI Zero 2 (or in 298MB of RAM) but also Mistral 7B on desktops and servers. ARM, x86, WASM, RISC-V supported. Accelerated by XNNPACK. Python, C# and JS(WASM) bindings available.
解决的问题
OnnxStream 是一个轻量级的推理库,旨在让大型 AI 模型(如 Stable Diffusion 和 LLM)在 RAM 极其有限的硬件(例如 512MB 内存的 Raspberry Pi Zero 2)上运行。标准机器学习框架通常优先考虑速度和吞吐量,而非内存效率,往往需要数 GB 的 RAM,而低端设备无法满足这一需求。
工作原理
该库通过 WeightsProvider 将推理引擎与权重加载过程解耦,从而最小化内存消耗。这使得权重可以从磁盘甚至 HTTP 服务器流式加载,而无需全部加载到 RAM 中。它采用了多种内存节省技术:
- 注意力切片(Attention Slicing):通过将查询张量分割成较小的块,防止在多头注意力过程中创建巨大的中间张量。
- 量化(Quantization):支持动态(8 位无符号)和静态(W8A8)量化,以降低权重和激活的精度和大小。
- 分块解码(Tiled Decoding):对于大型 VAE 解码器(如 SDXL),将输入张量分割为重叠的块,分别解码后再拼接回原图。
- XNNPACK 集成:使用 XNNPACK 加速 MatMul 和 Convolution 等基本运算。
适用人群
- 针对超低资源嵌入式设备(如 Raspberry Pi Zero)的开发者。
- 希望在无专用 GPU 或高内存硬件上运行大型生成模型的用户。
- 寻找可修改、极简 C++ 推理引擎并带有 Python 和 C# 绑定的工程师。
主要亮点
- 极致内存效率:对于某些模型,内存消耗比 OnnxRuntime 最多可减少 55 倍。
- 广泛模型支持:可运行 Stable Diffusion 1.5、SDXL 1.0、SDXL Turbo、TinyLlama、Mistral 7B、YOLOv8 以及 OpenAI 的 Whisper。
- 跨平台支持:支持 Linux、Mac、Windows、Termux、FreeBSD 和 WebAssembly(浏览器中执行)。
- 灵活的权重加载:权重可通过 RAM、磁盘(支持或不支持预取)或自定义流式提供者加载。
相关
- Dispatch
- 项目
- 项目
- 项目
- 项目