ESP32-S3 รัน LLM ขนาด 28.9 ล้านพารามิเตอร์ได้โดยตรง ด้วยความเร็ว 9 โทเค็นต่อวินาที

Slava S. (slvDev) ได้ปรับแต่งโมเดล LLM ที่มีพารามิเตอร์ 28.9 ล้านตัว ให้สามารถทำงานบนบอร์ดพัฒนา ESP32-S3 ได้แบบรันภายในเครื่อง (Local) โดยมีความเร็วในการสร้างข้อความประมาณ 9 โทเคนต่อวินาที (tokens/s) สำหรับการแต่งเรื่องสั้น

ก่อนหน้านี้เราเคยนำเสนอการใช้งาน LLM บน ESP32 มาแล้ว แต่โดยทั่วไปบอร์ดเหล่านี้มักทำหน้าที่เป็นเกตเวย์พลังงานต่ำสำหรับเชื่อมต่อกับ LLM ที่รันอยู่บนเซิร์ฟเวอร์ประสิทธิภาพสูงในศูนย์ข้อมูล ตัวอย่างเช่น HiWonderLLM “smart chat module”, ESP-Claw framework หรือ ESP32 Agent Dev Kit แต่โปรเจกต์ esp32-ai ของ Slava มีความแตกต่างอย่างชัดเจน เพราะโมเดล LLM ทั้งหมดทำงานอยู่บนไมโครคอนโทรลเลอร์ ESP32-S3 โดยตรง ไม่ต้องพึ่งพาเซิร์ฟเวอร์ภายนอกหรือการประมวลผลบนคลาวด์เลย

ESP32-S3 local LLM

โปรเจกต์นี้ไม่สามารถใช้งานได้กับบอร์ด ESP32-S3 ทุกตัว เนื่องจากต้องมีหน่วยความจำและพื้นที่จัดเก็บเพียงพอสำหรับเก็บไฟล์โมเดลขนาด 14.9MB (แบบ 4-bit) โดย Slava ได้ทดสอบเดโมบนบอร์ด ESP32-S3 ราคาประมาณ $8 (~270฿) ที่มาพร้อมกับ SRAM 512KB + PSRAM 8MB และแฟลช 16MB พร้อมเชื่อมต่อกับจอแสดงผล I2C ขนาดเล็กสำหรับแสดงนิทานสั้น ๆ ที่โมเดลสร้างขึ้น

ก่อนหน้านี้ Dave Bennett เคยพัฒนาโปรเจกต์ ESP32-LLM ในลักษณะคล้ายกัน แต่ใช้โมเดลที่มีพารามิเตอร์เพียง 260,000 ตัว ซึ่งถือว่าเล็กมากเมื่อเทียบกับโมเดล 28.9 ล้านพารามิเตอร์ ที่ใช้ในโปรเจกต์นี้ เคล็ดลับสำคัญคือ ไม่เก็บโมเดลทั้งหมดไว้ในหน่วยความจำความเร็วสูง (SRAM ขนาด 512KB) อีกต่อไป เนื่องจากพารามิเตอร์ส่วนใหญ่ของโมเดลภาษาอยู่ใน Embedding Table ที่มีประมาณ 25 ล้านแถว ซึ่งสามารถอ่านได้โดยตรงจากหน่วยความจำแฟลชที่มีความเร็วต่ำกว่า ดังนั้นในการประมวลผลแต่ละโทเคน ระบบจะโหลดเฉพาะข้อมูลจากไม่กี่แถวที่จำเป็นเท่านั้น หรือคิดเป็นข้อมูลประมาณ 450 ไบต์ เข้าสู่ SRAM เพื่อประมวลผล ทำให้สามารถรันโมเดลขนาดใหญ่กว่ามากบนไมโครคอนโทรลเลอร์ที่มีหน่วยความจำจำกัดได้

Slava อธิบายว่าแนวคิดนี้ได้รับแรงบันดาลใจจากเทคนิค Google Per-Layer Embeddings  ที่ใช้ในโมเดล Gemma 3n และ Gemma 4 โดยโครงสร้างการจัดวางหน่วยความจำ (Memory Layout) บน ESP32-S3 มีลักษณะดังนี้:


โปรเจกต์นี้ถือเป็นความสำเร็จด้านวิศวกรรม (Engineering Feat) มากกว่าจะเป็นโปรเจกต์ LLM ที่นำไปใช้งานจริงได้ในวงกว้าง เนื่องจากโมเดลได้รับการฝึกด้วยชุดข้อมูล TinyStories ซึ่งออกแบบมาเพื่อสร้าง นิทานสั้น ๆ ที่ใช้ภาษาง่ายเท่านั้น ดังนั้นโมเดลจึงไม่สามารถตอบคำถาม ทำตามคำสั่ง เขียนโค้ด หรือทำงานอื่น ๆ ที่ผู้ใช้คาดหวังจาก LLM ทั่วไปได้

ด้านล่างนี้เป็นตัวอย่างการสาธิตการทำงานของโปรเจกต์ดังกล่าว:

สามารถดูซอร์สโค้ด, คำแนะนำในการใช้งาน และ รายละเอียดเพิ่มเติมเกี่ยวกับผลลัพธ์ของโปรเจกต์ได้บน GitHub, นอกจากนี้ยังมีข้อมูลเพิ่มเติมจากการพูดคุยบน Reddit รวมถึงวิดีโอด้านล่างสำหรับผู้ที่ต้องการคำอธิบายแบบเห็นภาพเกี่ยวกับหลักการทำงานและวิธีที่โปรเจกต์นี้ทำงานทั้งหมด

แปลภาษาไทย : 28.9M-parameter LLM runs locally on ESP32-S3 at 9 tokens/s

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
โฆษณา