- Bài viết này bàn về việc chạy Stable Diffusion XL 1.0 trên Raspberry Pi Zero 2, một máy tính siêu nhỏ có 512MB RAM.
- Thử thách là chạy Stable Diffusion 1.5, một mô hình transformer lớn với gần 1 tỷ tham số, mà không tăng không gian swap hoặc offload các kết quả trung gian ra đĩa.
- Tác giả đã tạo ra OnnxStream, một thư viện suy luận nhỏ gọn, dễ tùy biến, tập trung vào việc giảm thiểu mức tiêu thụ bộ nhớ.
- OnnxStream tách biệt bộ máy suy luận với thành phần cung cấp trọng số mô hình, cho phép nhiều kiểu nạp, cache và prefetch khác nhau đối với các tham số mô hình.
- OnnxStream tiêu thụ ít bộ nhớ hơn OnnxRuntime tới 55 lần, trong khi chỉ chậm hơn khoảng 0.5-2 lần.
- Bài viết có kèm các hình ảnh được tạo bởi bản triển khai ví dụ Stable Diffusion bằng OnnxStream với nhiều mức độ chính xác khác nhau của bộ giải mã VAE.
- Bản triển khai ví dụ Stable Diffusion của OnnxStream hiện đã hỗ trợ SDXL 1.0, phiên bản đòi hỏi chi phí tính toán cao hơn SD 1.5 nhưng có thể tạo ra ảnh lớn hơn.
- OnnxStream có thể chạy SDXL 1.0 với chưa tới 300MB RAM, phù hợp với Raspberry Pi Zero 2.
- Bài viết thảo luận các tối ưu hóa cụ thể cho SDXL 1.0, trong đó có việc dùng giải mã theo tile để giảm mức tiêu thụ bộ nhớ từ 4.4GB xuống 298MB.
- Các tính năng của OnnxStream gồm tách biệt bộ máy suy luận và WeightsProvider, attention slicing, lượng tử hóa động và tĩnh, hỗ trợ FP16, v.v.
- Bài viết cung cấp hướng dẫn chi tiết về cách build ví dụ Stable Diffusion trên nhiều hệ điều hành khác nhau.
- Bản triển khai Stable Diffusion của sd.cpp dựa trên hai dự án khác và đã được chỉnh sửa để dùng OnnxStream thay cho NCNN.
1 bình luận
Ý kiến trên Hacker News