- บทความนี้กล่าวถึงการรัน Stable Diffusion XL 1.0 บน Raspberry Pi Zero 2 ซึ่งเป็นไมโครคอมพิวเตอร์ที่มี RAM 512MB
- ความท้าทายคือการรัน Stable Diffusion 1.5 ซึ่งเป็นโมเดลทรานส์ฟอร์มเมอร์ขนาดใหญ่ที่มีพารามิเตอร์เกือบ 1 พันล้านตัว โดยไม่เพิ่มพื้นที่สว็อปหรือออฟโหลดผลลัพธ์ระหว่างทางลงดิสก์
- ผู้เขียนได้สร้าง OnnxStream ซึ่งเป็นไลบรารีอนุมานขนาดเล็กที่ปรับแต่งได้ง่าย โดยมุ่งเน้นการลดการใช้หน่วยความจำให้เหลือน้อยที่สุด
- OnnxStream แยกเอนจินอนุมานออกจากคอมโพเนนต์ที่จัดหา model weights ทำให้รองรับการโหลด การแคช และการพรีเฟตช์พารามิเตอร์โมเดลได้หลายรูปแบบ
- OnnxStream ใช้หน่วยความจำน้อยกว่า OnnxRuntime ถึง 55 เท่า แต่ช้ากว่าเพียง 0.5-2 เท่าเท่านั้น
- บทความนี้มีภาพที่สร้างโดยตัวอย่างการติดตั้ง Stable Diffusion ด้วย OnnxStream ภายใต้ความละเอียดเชิงตัวเลขที่หลากหลายของ VAE decoder
- ตอนนี้ตัวอย่างการติดตั้ง Stable Diffusion ของ OnnxStream รองรับ SDXL 1.0 แล้ว ซึ่งมีต้นทุนการคำนวณสูงกว่า SD 1.5 แต่สามารถสร้างภาพที่ใหญ่กว่าได้
- OnnxStream สามารถรัน SDXL 1.0 ได้ด้วย RAM ต่ำกว่า 300MB ทำให้เหมาะกับ Raspberry Pi Zero 2
- บทความนี้พูดถึงการปรับแต่งเฉพาะสำหรับ SDXL 1.0 ซึ่งรวมถึงการใช้ tile decoding เพื่อลดการใช้หน่วยความจำจาก 4.4GB เหลือ 298MB
- ความสามารถของ OnnxStream ได้แก่ การแยก inference engine ออกจาก WeightsProvider, attention slicing, dynamic และ static quantization, การรองรับ FP16 เป็นต้น
- บทความนี้ให้คำแนะนำอย่างละเอียดเกี่ยวกับวิธี build ตัวอย่าง Stable Diffusion บนระบบปฏิบัติการต่าง ๆ
- การติดตั้ง Stable Diffusion ของ sd.cpp ในบทความนี้อิงจากอีกสองโปรเจ็กต์ และถูกปรับให้ใช้ OnnxStream แทน NCNN
1 ความคิดเห็น
ความเห็นจาก Hacker News