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

อ่านรวดเดียว แต่เขียนทีละคำ

loop ในบทที่ 1 (เดา → ต่อท้าย → เดาใหม่) เวลาหมดไปตรงไหน?

คำถามชวนคิด

เลือกตอบprompt 7,000 token ได้คำตอบ 300 token ช่วงไหนนานกว่า?
ดูเฉลยข้อนี้

คำตอบ: เขียนคำตอบ

เขียนนานกว่าราว 5 เท่า เพราะต้องเขียนทีละ token ดูตัวเลขด้านล่าง

ขั้นอ่าน prompt (prefill)ช่วงแรกของการตอบ ที่โมเดลประมวลผล token ทั้งหมดใน prompt พร้อมกันรวดเดียว แล้วได้ token แรกของคำตอบดูคำศัพท์ทั้งหมด: prompt รู้ครบแล้ว จึงดันทั้ง 7,000 token ผ่านทุกชั้นพร้อมกัน อ่านน้ำหนักครั้งเดียวใช้กับทุก token การ์ดจึงทำงานเต็มที่ ต่อ token จึงเร็ว

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

decode กินเวลาการ์ดมากกว่า หลายเจ้าจึงคิดราคา output แพงกว่า input (หน้า 10)

สองช่วงของการตอบ: prefill และ decodeprompt 7,000 token ถูกอ่านพร้อมกันในขั้น prefill ได้ token แรก จากนั้นขั้น decode เขียนทีละ token วนหลายร้อยรอบ ทุกรอบใช้และเพิ่มข้อมูลใน KV cacheprompt7,000 tokenprefillอ่านพร้อมกันรวดเดียวtoken แรกTTFTdecode ทีละรอบรอบ 1+1 tokenรอบ 2+1 tokenรอบ 3+1 tokenรอบ …300+1 tokenKV cacheprefill เขียนครั้งแรกdecode เพิ่มทีละ token และอ่านทุกรอบ

ลองคิดตาม (prefill 5,000 และ decode 40 token ต่อวินาที)

  • อ่าน prompt: 7,000 ÷ 5,000 = 1.4 วินาที
  • เขียนคำตอบ: 300 ÷ 40 = 7.5 วินาที
  • รวม 8.9 วินาที

prompt เป็น 95.9% ของ token แต่ใช้แค่ 15.7% ของเวลารอ

งานจริงจึงวัด 2 ค่า: เวลาจนคำแรกโผล่ (time to first token, TTFT)เวลาตั้งแต่ส่งคำขอจนเห็น token แรกของคำตอบ รวมเวลาต่อคิวและเวลาอ่าน promptดูคำศัพท์ทั้งหมด (ต่อคิว + prefill) และ token ต่อวินาทีตอนเขียน

อ่าน prompt (prefill) ทำพร้อมกันได้รวดเดียว แต่เขียนคำตอบ (decode) ต้องทีละ token token ของคำตอบจึงช้ากว่าหลายเท่า

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

มังคุด

อ่าน prompt พร้อมกันได้ แล้วทำไมเขียนคำตอบพร้อมกันไม่ได้ล่ะ?