RAM แค่ 512KB แต่ ESP32-S3 รัน AI 28.9 ล้านพารามิเตอร์ได้!
Highlight
นักพัฒนา slvDev เปิดตัวโครงการโอเพนซอร์สที่สามารถนำโมเดลภาษาขนาด 28.9 ล้านพารามิเตอร์มารันโดยตรงบน ESP32-S3 ไมโครคอนโทรลเลอร์ราคาประมาณ 8 ดอลลาร์ โดยประมวลผลทั้งหมดบนชิป ไม่ต้องส่งข้อมูลไปยังเซิร์ฟเวอร์ และสามารถสร้างข้อความได้ราว 9 tokens ต่อวินาที
สิ่งที่น่าสนใจคือ ESP32-S3 มี SRAM เพียง 512KB แต่กลับสามารถรองรับโมเดลที่มีขนาดใหญ่กว่าสถิติเดิมบนฮาร์ดแวร์ระดับใกล้เคียงกันถึงประมาณ 100 เท่า ด้วยเทคนิคการจัดเก็บพารามิเตอร์บางส่วนไว้ใน Flash แทนที่จะโหลดทั้งหมดเข้าสู่ RAM
In Detail
นักพัฒนา slvDev ได้เผยแพร่โครงการโอเพนซอร์สที่สาธิตการนำโมเดลภาษาขนาด 28.9 ล้านพารามิเตอร์ ( 28.9 million parameter) มารันโดยตรงบน ESP32-S3 ไมโครคอนโทรลเลอร์ที่มีราคาประมาณ 300 กว่าบาท โดยโมเดลสามารถทำงานบนตัวชิปทั้งหมดโดยไม่จำเป็นต้องส่งข้อมูลไปประมวลผลบนเซิร์ฟเวอร์ภายนอก
ระบบสามารถสร้างข้อความได้ประมาณ 9 tokens ต่อวินาที และแสดงผลผ่านจอขนาดเล็กที่เชื่อมต่อกับบอร์ด ความสำเร็จครั้งนี้น่าสนใจเป็นพิเศษ เพราะ ESP32-S3 มีหน่วยความจำ SRAM สำหรับการประมวลผลเพียง 512KB ขณะที่โมเดลภาษาที่มีขนาดใหญ่ที่สุดซึ่งเคยนำมารันบนฮาร์ดแวร์ในระดับใกล้เคียงกัน มีขนาดประมาณ 260,000 พารามิเตอร์เท่านั้น เท่ากับโครงการนี้สามารถรันโมเดลที่มีขนาดใหญ่กว่าประมาณ 100 เท่า
หัวใจสำคัญอยู่ที่เทคนิคการจัดการหน่วยความจำที่ได้รับแรงบันดาลใจจากโมเดล Gemma ของ Google ซึ่งเรียกว่า Per-Layer Embeddings โดยทั่วไป พารามิเตอร์จำนวนมากของโมเดลภาษาจะอยู่ในตาราง Embedding ซึ่งโมเดลมีหน้าที่อ่านข้อมูลจากตารางดังกล่าว มากกว่าที่จะต้องนำข้อมูลทั้งหมดมาคำนวณพร้อมกัน
slvDev จึงนำตาราง Embedding ที่มีขนาดประมาณ 25 ล้านพารามิเตอร์ ไปเก็บไว้ใน Flash ซึ่งมีความเร็วต่ำกว่า SRAM จากนั้นจึงดึงข้อมูลออกมาใช้เฉพาะส่วนที่จำเป็นในแต่ละ Token โดยอ่านเพียงประมาณ 6 แถว หรือราว 450 ไบต์ต่อ Token ขณะที่ส่วนของโมเดลที่ต้องใช้การคำนวณอย่างหนักและต้องการความเร็วสูง ยังคงเก็บไว้ใน SRAM
แนวทางนี้ช่วยให้โมเดลขนาดใหญ่สามารถทำงานบนไมโครคอนโทรลเลอร์ที่มี RAM จำกัดได้ โดยไม่จำเป็นต้องโหลดพารามิเตอร์ทั้งหมดเข้าสู่หน่วยความจำในเวลาเดียวกัน ส่งผลให้การใช้ SRAM อยู่ในระดับต่ำ แม้ตัวโมเดลจะมีขนาดใหญ่กว่าความจุ RAM ของชิปหลายเท่าตัว
ในด้านฮาร์ดแวร์ โมเดลที่ผ่านการ Quantization มีขนาดประมาณ 14.9MB ที่ความละเอียด 4-bit โดยระบบที่ใช้ในการทดสอบประกอบด้วย SRAM 512KB, PSRAM 8MB และ Flash 16MB
อย่างไรก็ตาม โมเดลนี้ไม่ได้ถูกออกแบบมาให้ใช้งานได้หลากหลาย เพราะได้รับการฝึกด้วยชุดข้อมูล TinyStories ซึ่งประกอบด้วยตัวอย่างเรื่องราวสั้น ๆ สำหรับฝึกโมเดลให้เรียนรู้การสร้างข้อความในลักษณะดังกล่าว เมื่อทำงาน โมเดลจึงสามารถสร้างเรื่องราวสั้น ๆ ที่มีเนื้อหาต่อเนื่องและพออ่านเข้าใจได้เป็นหลัก แต่ไม่สามารถนำไปใช้ถามตอบทั่วไป ทำตามคำสั่ง เขียนโค้ด หรือค้นหาคำตอบจากความรู้ที่โมเดลเรียนรู้มาได้
ผู้พัฒนาระบุว่า จุดประสงค์หลักของโครงการไม่ได้อยู่ที่การแสดงความสามารถของโมเดล แต่เป็นการพิสูจน์ว่า สถาปัตยกรรมการจัดการหน่วยความจำสามารถทำให้โมเดลภาษาขนาดใหญ่ทำงานบนไมโครคอนโทรลเลอร์ที่มีทรัพยากรจำกัดได้
รายละเอียดทั้งหมดของโครงการ ตั้งแต่ Firmware, วิธีการต่อวงจร, โค้ดสำหรับฝึกโมเดล ไปจนถึงผลการทดสอบ Benchmark ฉบับเต็ม ถูกเผยแพร่ไว้ใน GitHub นอกจากนี้ยังมีประวัติการพัฒนาและ Commit ต่าง ๆ ที่แสดงให้เห็นถึงการแก้ไขข้อผิดพลาดในการนับจำนวนพารามิเตอร์ ซึ่งผู้พัฒนาพบและแก้ไขระหว่างการพัฒนาโครงการอีกด้วย
Bupunpajarn Insight :
โดยภาพรวม บทความนี้มีจุดเด่นที่ ประเด็นข่าวชัดและน่าสนใจสำหรับสาย Embedded เพราะแสดงให้เห็นว่า ESP32-S3 ซึ่งมี SRAM เพียง 512KB สามารถรันโมเดลภาษาขนาด 28.9 ล้านพารามิเตอร์ได้ โดยใช้เทคนิคย้าย Embedding ไปเก็บใน Flash ทำให้เห็นแนวทางจัดการข้อจำกัดด้านหน่วยความจำได้อย่างเป็นรูปธรรม ขณะเดียวกัน เนื้อหายังอธิบายข้อจำกัดของโมเดลไว้อย่างตรงไปตรงมา จึงไม่ทำให้ผู้อ่านเข้าใจผิดว่าเป็นโมเดล AI สำหรับใช้งานทั่วไป
อย่างไรก็ตาม เนื้อหาค่อนข้างเน้นรายละเอียดด้านสถาปัตยกรรมและตัวเลขทางเทคนิค หากเป็นผู้อ่านทั่วไปอาจต้องทำความเข้าใจเรื่อง Embedding, SRAM, PSRAM และ Quantization เพิ่มเติม อีกทั้งตัวโมเดลเองมีความสามารถจำกัดมาก เพราะถูกฝึกมาเพื่อสร้างเรื่องราวสั้น ๆ ไม่สามารถใช้แทน ChatGPT หรือโมเดลภาษาสำหรับถามตอบทั่วไปได้ ดังนั้น คุณค่าหลักของโครงการจึงอยู่ที่เทคนิคการนำ AI ไปรันบนฮาร์ดแวร์ทรัพยากรจำกัด มากกว่าความสามารถของตัวโมเดล ซึ่งเป็นประเด็นที่ควรเน้นให้ชัดในบทความข่าวครับ
ESP32-S3 AI Project (Open Source): GitHub
Source : circuitdigest.com
Translated and edited by Bunpajarn
ESP32 | AI | 28.9 Parameters |
