บทที่ 6 · ตอนมันตอบจริง หน้า 6/12 ~3 นาที

รวมหลายคำขอในรอบเดียว

จากหน้า 2: ทุกก้าวของ ขั้นเขียนคำตอบ (decode, decoding phase)ช่วงที่โมเดลเขียนคำตอบทีละ token แต่ละก้าวต้องรันโมเดลหนึ่งรอบ จึงช้ากว่าขั้นอ่าน prompt เมื่อคิดต่อ tokenดูคำศัพท์ทั้งหมด ต้องอ่านน้ำหนักทุกตัว เพื่อเขียน token เดียว

การ์ดสมมติอ่านหน่วยความจำได้ 1,000 GB ต่อวินาที โมเดล 16 GB จึงใช้ 16 มิลลิวินาที ต่อก้าว ได้ไม่เกิน 62.5 token/วินาที ต่อคน น้ำหนัก 4 บิต (4 GB) ใช้ 4 มิลลิวินาที เพดาน 250 token/วินาที

หน้า 2 สมมติแค่ 40 token/วินาที เพราะยังต้องอ่าน แคชคีย์และแวลู (KV cache)ที่เก็บ key และ value ของ token ที่คำนวณแล้วในทุกชั้น จะได้ไม่ต้องคำนวณซ้ำทุกครั้งที่เขียน token ใหม่ ยิ่งข้อความยาวยิ่งใช้หน่วยความจำมากดูคำศัพท์ทั้งหมด และงานอื่น

การรวมคำขอเป็นชุด (batching)การประมวลผลคำขอของหลายคนพร้อมกันในรอบเดียว อ่านน้ำหนักโมเดลครั้งเดียวแต่ได้ token ของหลายคน จึงได้ปริมาณงานรวมสูงขึ้นดูคำศัพท์ทั้งหมด คือใช้จังหวะที่ต้องอ่านน้ำหนักอยู่แล้ว คำนวณ token ของ 8 คนไปพร้อมกันในก้าวเดียว เหมือนรถรับส่งพนักงานรอบเดียวรับได้ทั้งคัน ตารางนี้สมมติว่าแชตสั้นจน KV cache ไม่ต้องนับ

แบบมิลลิวินาที/ก้าวtoken/วินาที ต่อคนtoken/วินาที รวมทุกคน
16 บิต, 1 คน1662.562.5
16 บิต, 8 คน1662.5500
4 บิต, 1 คน4250250

แต่ทุกก้าวต้องอ่าน KV cache ของทุกคนด้วย 8 คน คนละ 8,000 token แคชรวม 8.39 GB ที่ 16 บิต ราวครึ่งของน้ำหนัก แชตยาวและคนเยอะจึงช้าลง และ 16.0 + 8.39 + 1 GB (ส่วนอื่นๆ) = 25.4 GB ก็เกินการ์ด 24 GB (หน้าถัดไป)

เซิร์ฟเวอร์จริงเพิ่มและเอาคำขอออกได้ทุกก้าว (continuous batching) งานรวมสูงขึ้น แต่ต่อคนช้าลงบ้าง

ตอนเขียนทีละ token และแชตยังสั้น เวลาส่วนใหญ่หมดไปกับการอ่านน้ำหนัก การรวมหลายคำขอเป็นชุดจึงได้ token ต่อวินาทีรวมสูงขึ้นมาก

มังคุด มาสคอตมังคุด

มังคุด

รวมหลายคนในรอบเดียว คำตอบของหนูจะปนกับคนอื่นมั้ย?