
ความผิดพลาดเล็ก ๆ ที่ส่งผลมหาศาล: ถอดรหัสบั๊กแม่นยำใน Apple Silicon ที่ทำโมเดล AI พังยับ
ทำไมโมเดลภาษาขนาดใหญ่ (LLM) ถึงต้องรันเร็วบนเครื่องเรา?
ทุกวันนี้ โมเดลภาษาขนาดใหญ่ หรือ LLM กำลังเป็นที่พูดถึงอย่างกว้างขวาง หลายคนคงอยากเห็นมันทำงานได้ลื่นไหลบนคอมพิวเตอร์ส่วนตัว โดยเฉพาะอย่างยิ่งเครื่องที่ใช้ชิป Apple Silicon ซึ่งขึ้นชื่อเรื่องประสิทธิภาพและประหยัดพลังงาน
การทำให้ LLM ทำงานได้เร็วบนฮาร์ดแวร์ส่วนบุคคล ไม่ใช่แค่เรื่องของความเร็วในการประมวลผลเท่านั้น แต่ยังรวมถึงการจัดการหน่วยความจำให้มีประสิทธิภาพสูงสุดด้วย เพราะโมเดลเหล่านี้มีขนาดใหญ่มาก
เป้าหมายคือการสร้าง AI ที่มีพลังแต่เข้าถึงง่าย ไม่ต้องพึ่งพาเซิร์ฟเวอร์คลาวด์ตลอดเวลา นี่คือสิ่งที่นักพัฒนาพยายามผลักดันกันอย่างหนัก
การลดความแม่นยำ (Quantization) เทคนิคเพื่อความเร็ว
วิธีหนึ่งที่ใช้กันบ่อยเพื่อเพิ่มความเร็วและลดการใช้หน่วยความจำของ LLM คือ การลดความแม่นยำ หรือ Quantization
ปกติแล้วคอมพิวเตอร์จะใช้ตัวเลขแบบ 32-bit float ซึ่งมีความละเอียดสูง แต่เราสามารถ “บีบอัด” ตัวเลขเหล่านี้ให้เป็น 16-bit float หรือแม้แต่ 8-bit integer ได้ ซึ่งช่วยลดขนาดโมเดลและทำให้การคำนวณเร็วขึ้นมาก
อย่างไรก็ตาม การลดความแม่นยำนี้เหมือนเหรียญสองด้าน มันช่วยให้โมเดลทำงานได้ไวขึ้นก็จริง แต่ก็อาจแลกมาด้วยความเสี่ยงที่ ความถูกต้องของผลลัพธ์ จะลดลงได้
บั๊กปริศนาในหัวใจของ Apple Silicon
เรื่องน่าตกใจเพิ่งถูกค้นพบในเฟรมเวิร์ก MLX ของ Apple ซึ่งเป็นหัวใจสำคัญในการขับเคลื่อน AI/ML บนชิป Apple Silicon
บั๊กนี้อยู่ในส่วนที่เรียกว่า “Attention Kernel” โดยเฉพาะอย่างยิ่งในการทำงานของฟังก์ชัน Softmax ซึ่งเป็นกลไกสำคัญใน Transformer Models ที่เป็นรากฐานของ LLM
ปัญหาอยู่ที่ ค่าสเกลลิ่ง ซึ่งเป็นตัวเลขที่ใช้ปรับขนาดข้อมูลก่อนเข้าฟังก์ชัน Softmax
ค่าสเกลลิ่งตัวนี้ดันถูกปัดเป็นแบบ 16-bit float เร็วเกินไป ทั้ง ๆ ที่การคำนวณส่วนใหญ่ในตอนนั้นยังใช้ความแม่นยำแบบ 32-bit float อยู่เลย
ผลกระทบจากการปัดเศษที่แสนเล็กน้อย
ความผิดพลาดเล็ก ๆ น้อย ๆ จากการปัดเศษนี้ ดูเผิน ๆ อาจไม่มีอะไร
แต่เมื่อมันไปรวมกับคุณสมบัติทางคณิตศาสตร์ของฟังก์ชัน Softmax ที่มีลักษณะการขยายค่าแบบ เลขยกกำลัง (exponential) ผลลัพธ์ที่ได้จึงเป็นหายนะ
ข้อผิดพลาดที่ดูเล็กจิ๋ว กลับถูกขยายใหญ่ขึ้นอย่างรวดเร็ว จนทำให้เอาต์พุตของการคำนวณ Attention กลายเป็นข้อมูลที่ไร้ความหมายโดยสิ้นเชิง
ในบางกรณี ความแม่นยำลดลงถึง 100% พูดง่าย ๆ คือ โมเดลให้ผลลัพธ์ที่ผิดพลาดทั้งหมด เหมือนสุ่มเดาขึ้นมานั่นเอง
บทเรียนสำคัญจากการแก้ไขบั๊ก
การแก้ไขบั๊กนี้ค่อนข้างตรงไปตรงมา แค่ปรับโค้ดเพื่อให้ค่าสเกลลิ่งคงความแม่นยำแบบ 32-bit float ไว้จนกว่าจะคำนวณเสร็จ ก่อนที่จะแปลงเป็น 16-bit float ในขั้นตอนถัดไป
เหตุการณ์นี้แสดงให้เห็นว่า ในโลกของการพัฒนา AI โดยเฉพาะอย่างยิ่งการทำงานกับ ฮาร์ดแวร์และซอฟต์แวร์ระดับล่าง รายละเอียดเล็ก ๆ น้อย ๆ เกี่ยวกับ ความแม่นยำของตัวเลข มีความสำคัญอย่างยิ่งยวด
การตัดสินใจผิดพลาดเพียงเสี้ยววินาทีของการปัดเศษ สามารถส่งผลกระทบอย่างร้ายแรงต่อ ความน่าเชื่อถือและความถูกต้องของโมเดล AI ได้
เรื่องนี้เน้นย้ำถึงความซับซ้อนและความใส่ใจในรายละเอียดที่จำเป็นในการสร้างเทคโนโลยี AI ที่ทรงพลังและเชื่อถือได้ให้กับผู้ใช้งานทุกคน