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
  • 项目
  • 项目
  • 项目
  • 项目