- 이 기사는 Raspberry Pi Zero 2라는 512MB RAM을 가진 마이크로 컴퓨터에서 Stable Diffusion XL 1.0을 실행하는 논의를 다룹니다.
- 도전 과제는 스왑 공간을 늘리거나 중간 결과를 디스크에 오프로드하지 않고 거의 10억 개의 파라미터를 가진 대형 트랜스포머 모델인 Stable Diffusion 1.5를 실행하는 것입니다.
- 저자는 메모리 소비를 최소화하는 데 초점을 맞춘 작고 해킹 가능한 추론 라이브러리인 OnnxStream을 만들었습니다.
- OnnxStream은 추론 엔진과 모델 가중치를 제공하는 컴포넌트를 분리하여 모델 파라미터의 다양한 유형의 로딩, 캐싱, 프리페칭을 허용합니다.
- OnnxStream은 OnnxRuntime보다 메모리를 55배 덜 소비하면서도 0.5-2배 느릴 뿐입니다.
- 이 기사에는 OnnxStream을 사용하여 VAE 디코더의 다양한 정밀도에서 Stable Diffusion 예제 구현에 의해 생성된 이미지가 포함되어 있습니다.
- OnnxStream Stable Diffusion 예제 구현은 이제 SDXL 1.0을 지원하며, 이는 SD 1.5보다 계산 비용이 더 많이 들지만 더 큰 이미지를 생성할 수 있습니다.
- OnnxStream은 SDXL 1.0을 300MB 미만의 RAM에서 실행할 수 있어 Raspberry Pi Zero 2에 적합합니다.
- 이 기사는 SDXL 1.0에 대한 특정 최적화를 논의하며, 이에는 메모리 소비를 4.4GB에서 298MB로 줄이기 위해 타일 디코딩을 사용하는 것이 포함됩니다.
- OnnxStream의 기능에는 추론 엔진과 WeightsProvider의 분리, attention slicing, 동적 및 정적 양자화, FP16 지원 등이 포함됩니다.
- 이 기사는 다양한 운영 체제에서 Stable Diffusion 예제를 구축하는 방법에 대한 자세한 지침을 제공합니다.
- sd.cpp의 Stable Diffusion 구현은 다른 두 프로젝트를 기반으로 하며, NCNN 대신 OnnxStream을 사용하도록 수정되었습니다.