ไม่สูญเสียคุณภาพ แต่ก็ไม่ฟรี: เมื่อไหร่ที่ Speculative Decoding จะได้ผล
Speculative Decoding เป็นหัวข้อที่กำลังมาแรงในการทำ LLM inference
บริษัทอย่าง DSpark อ้างว่าสามารถเพิ่มความเร็วได้ถึง 60% ถึง 85% นอกจากนี้ Google ยังได้เผยแพร่งานวิจัยเกี่ยวกับวิธีการนี้ด้วย
แนวคิดนี้เรียบง่ายมาก: โมเดลร่าง (draft model) ขนาดเล็กจะเขียน token ขึ้นมา จากนั้นโมเดลเป้าหมาย (target model) ขนาดใหญ่จะทำการตรวจสอบในครั้งเดียว ซึ่งช่วยให้การสร้างข้อความ (generation) เร็วขึ้น
แต่ในฐานะวิศวกร คุณต้องตั้งคำถามสองข้อ:
- มันเพิ่มการหลอน (hallucinations) หรือไม่?
- โมเดลที่เพิ่มเข้ามาทำให้สิ้นเปลืองทรัพยากรการคำนวณ (compute) หรือไม่?
มาดูข้อเท็จจริงกัน
ประการแรก คุณภาพไม่สูญเสีย (lossless) โมเดลเป้าหมายจะตรวจสอบทุก token หากโมเดลร่างทำผิดพลาดที่ token ที่ 3 โมเดลเป้าหมายจะปฏิเสธและเริ่มสร้างใหม่จากจุดนั้น ผลลัพธ์ที่ได้จะเหมือนกับโมเดลเป้าหมายเพียงอย่างเดียวในทางคณิตศาสตร์ และไม่ได้ทำให้การหลอน (hallucinations) เพิ่มขึ้น
ประการที่สอง ต้นทุนนั้นมีอยู่จริง การรันโมเดลขนาดเล็กมีต้นทุนต่ำกว่าโมเดลขนาดใหญ่มาก เช่น โมเดลขนาด 7B อาจมีต้นทุนเพียง 1/10 ของโมเดลขนาด 70B
Speculative Decoding คือการเดิมพัน
- หากสำเร็จ (full hit) คุณจะประหยัดทรัพยากรการคำนวณได้อย่างมหาศาล
- หากล้มเหลว (full miss) คุณจะขาดทุน เพราะคุณต้องรันทั้งโมเดลร่างและขั้นตอนเพิ่มเติมของโมเดลเป้าหมาย ซึ่งจะช้ากว่าการทำ inference แบบมาตรฐาน
เพื่อที่จะชนะ คุณต้องปฏิบัติตามกฎนี้: จำนวน token เฉลี่ยที่ได้รับการยอมรับ (accepted tokens) จะต้องมากกว่า 1 บวกกับค่า overhead ของโมเดลร่าง
หากโมเดลร่างของคุณทำงานบางอย่างได้ไม่ดี อัตราการยอมรับ (acceptance rate) จะลดลง และหากมันลดลงต่ำเกินไป Speculative Decoding จะทำให้ระบบของคุณช้าลง
วิธีตัดสินใจว่าควรใช้หรือไม่:
- วัดอัตราการยอมรับ (acceptance rate) ของคุณ อย่าเชื่อแค่ benchmark ทั่วไป ให้ใช้ข้อมูลและงานของคุณเอง
- ตรวจสอบประเภทของงาน ใช้กับงานที่คาดเดาได้ เช่น การเติมโค้ด (code completion) และหลีกเลี่ยงงานที่คาดเดาไม่ได้ เช่น การเขียนเชิงสร้างสรรค์ (creative writing)
- ตรวจสอบ p99 latency ของคุณ เพราะการล้มเหลวโดยสิ้นเชิง (full miss) จะทำให้เกิด latency พุ่งสูงขึ้น
การปรับแต่ง (optimization) ที่ดีที่สุดไม่ใช่สิ่งที่ชนะเสมอไป แต่คือสิ่งที่คุณรู้ว่าควรจะปิดเมื่อไหร่
ใช้มันเมื่ออัตราความสำเร็จ (hit rate) สูง และหยุดใช้เมื่ออัตราความสำเร็จลดฮวบลง
Optional learning community: https://t.me/GyaanSetuAi