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 RAM을 가진 Raspberry Pi Zero 2)에서 실행할 수 있도록 설계된 경량 추론 라이브러리입니다. 표준 머신러닝 프레임워크는 속도와 처리량을 우선시하기 때문에, 저사양 장치가 보유한 메모리(수 기가바이트)를 요구하는 경우가 많아, 이러한 장치에서는 실행이 어려운 문제가 있습니다.
작동 방식
이 라이브러리는 WeightsProvider를 통해 추론 엔진과 가중치 로딩 프로세스를 분리함으로써 메모리 사용량을 최소화합니다. 이로 인해 가중치를 RAM에 완전히 로드하는 대신 디스크나 HTTP 서버에서 스트리밍으로 로드할 수 있습니다. 다음과 같은 메모리 절약 기술을 사용합니다:
- Attention Slicing: 다중 헤드 어텐션 중 거대한 중간 텐서가 생성되는 것을 방지하기 위해 쿼리 텐서를 작은 조각으로 나눕니다.
- 양자화: 동적(8비트 부호 없는) 및 정적(W8A8) 양자화를 모두 지원하여 가중치와 활성화의 정밀도와 크기를 줄입니다.
- 타일 기반 디코딩: 대규모 VAE 디코더(예: SDXL)의 경우 입력 텐서를 겹치는 타일로 나누어 별도로 디코딩한 후 다시 결합합니다.
- XNNPACK 통합: MatMul 및 Convolution과 같은 가속된 기본 연산에 XNNPACK를 사용합니다.
대상 사용자
- 초저자원 임베디드 장치(예: Raspberry Pi Zero)를 타겟으로 하는 개발자.
- 전용 GPU나 고메모리가 없는 하드웨어에서 대규모 생성 모델을 실행하고자 하는 사용자.
- 해킹 가능하고 최소한의 C++ 추론 엔진을 원하는 엔지니어(파이썬 및 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
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트