คู่มือทางเทคนิค

การเติมข้อมูลล่วงหน้าแบบแยกส่วนและการแสดงการถอดรหัส

สถาปัตยกรรมการให้บริการที่แบ่งการอนุมานโมเดลภาษาขนาดใหญ่ออกเป็นสองเฟส ได้แก่ เติมล่วงหน้าและถอดรหัส และรันบนกลุ่ม GPU ที่แตกต่างกัน

อ่าน 2 นาทีอัปเดตล่าสุด

ภาพรวม

It matters because these two phases have opposite hardware appetites, and forcing them onto the same machines wastes capacity and hurts latency.

เจาะลึก

เมื่อ LLM ตอบกลับ มันจะทำงานในสองขั้นตอน การเติมล่วงหน้าจะอ่านพรอมต์ทั้งหมดในครั้งเดียวและสร้างแคชคีย์-ค่า (KV) นี่เป็นการระเบิดครั้งใหญ่แบบขนานและขอบเขตการคำนวณที่ทำให้หน่วยทางคณิตศาสตร์ของ GPU อิ่มตัว จากนั้นถอดรหัสจะสร้างโทเค็นทีละรายการ แต่ละขั้นตอนจะอ่านแคช KV ทั้งหมด ซึ่งเป็นหยดที่จำกัดแบนด์วิดท์หน่วยความจำและคำนวณเพียงเล็กน้อย เมื่อทำงานร่วมกัน การกรอกข้อมูลล่วงหน้าแบบยาวจะทำให้การถอดรหัสของทุกคนหยุดชะงัก (การบล็อกส่วนหัวของบรรทัด) และการแบทช์ทั้งสองจะสร้างการรบกวน การแยกส่วนจะทำการกรอกข้อมูลล่วงหน้าบนพูล GPU หนึ่งและถอดรหัสบนอีกพูลหนึ่ง โดยถ่ายโอนแคช KV ระหว่างพวกมันผ่านการเชื่อมต่อระหว่างกันที่รวดเร็ว เช่น NVLink หรือ InfiniBand แต่ละพูลได้รับการปรับแต่งและปรับขนาดอย่างเป็นอิสระ ปรับปรุง goodput ลดเวลาแฝงของส่วนท้าย และปล่อยให้ผู้ปฏิบัติงานเข้าถึงเป้าหมายโทเค็นเวลาถึงโทเค็นแรกและเวลาต่อเอาต์พุตที่จำกัดพร้อมกัน

ข้อมูลเชิงลึกทางเทคนิค

ทั้งสองระยะมีความแตกต่างกันในคอขวด การกรอกข้อมูลล่วงหน้าจะประมวลผลโทเค็นพร้อมท์ทั้งหมดแบบขนาน ดังนั้น FLOP จะปรับขนาดตามความยาวพร้อมท์และเพิ่มแกนเทนเซอร์ให้สูงสุด การถอดรหัสเป็นแบบถดถอยอัตโนมัติ: โทเค็นใหม่แต่ละโทเค็นต้องมีการส่งต่อหนึ่งครั้งซึ่งจะอ่านแคช KV แบบเต็มจาก HBM อีกครั้ง ดังนั้นปริมาณงานจะถูกควบคุมโดยแบนด์วิดท์หน่วยความจำ ไม่ใช่การคำนวณ การแยกส่วนใช้ประโยชน์จากสิ่งนี้โดยการกำหนดขนาด การจัดกลุ่ม และแม้แต่การเลือกความคล้ายคลึงที่แตกต่างกันสำหรับแต่ละพูล จากนั้นจัดส่งแคช KV จากผู้ปฏิบัติงานที่กรอกข้อมูลล่วงหน้าเพื่อถอดรหัสผู้ปฏิบัติงาน

ผลกระทบเชิงกลยุทธ์

ต้นทุนและงบประมาณ

การตัดสินใจด้านสถาปัตยกรรมขับเคลื่อนประสิทธิภาพและต้นทุนการดำเนินงานเป็นเวลาหลายปี

การตัดสินใจที่ชัดเจนยิ่งขึ้น

การศึกษาด้านเทคนิคช่วยให้ทีมเลือกกลุ่มที่เหมาะสม ไม่ใช่แค่กลุ่มใหม่ล่าสุด

การควบคุมคุณภาพ

ตัวเลือกทางวิศวกรรมที่ดีกว่าจะช่วยลดเหตุการณ์ด้านความน่าเชื่อถือในการผลิต

อนาคตของการให้บริการการเติมล่วงหน้าและการถอดรหัสแบบแยกส่วน

คาดว่าการแยกส่วนจะกลายเป็นค่าเริ่มต้นในสแต็คการผลิต ระบบต่างๆ เช่น DistServe, Splitwise และ Mooncake ทำให้เป็นที่นิยม และตอนนี้ vLLM และ NVIDIA Dynamo ก็มีโหมดแบบแยกส่วนแล้ว การวิจัยกำลังผลักดันการเพิ่มประสิทธิภาพการถ่ายโอนแคช KV การรวมแคชและการใช้ซ้ำข้ามคำขอ การปรับสมดุลแบบไดนามิกของอัตราส่วนการเติมล่วงหน้า/ถอดรหัสภายใต้การรับส่งข้อมูลที่เปลี่ยนแปลง และการผสานรวมที่เข้มงวดมากขึ้นด้วยการแคชคำนำหน้าและการเติมล่วงหน้าแบบก้อน เมื่อหน้าต่างบริบทขยายเป็นโทเค็นนับล้าน การแยกขั้นตอนเหล่านี้จึงกลายเป็นสิ่งจำเป็นมากขึ้นสำหรับการให้บริการที่คุ้มค่าและมีความหน่วงต่ำ

การใช้งานจริงในโลกแห่งความเป็นจริง

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

NVIDIA Dynamo และ vLLM ช่วยให้ผู้ปฏิบัติงานปรับใช้กลุ่มผู้ปฏิบัติงานที่กรอกข้อมูลล่วงหน้าและถอดรหัสแยกกัน ดังนั้นการแจ้งเตือนที่ยาวต่อเนื่องจะไม่หยุดการทำงานรุ่นต่อเนื่อง

Mooncake (ใช้โดย Kimi จาก Moonshot AI) แยกการกรอกข้อมูลล่วงหน้าและถอดรหัส และเพิ่มพูล KV-cache แบบกระจายเพื่อลดการคำนวณซ้ำพร้อมท์ซ้ำซ้อนในขนาดต่างๆ

บริการเติมโค้ดให้สมบูรณ์มีพูลการกรอกล่วงหน้าขนาดเล็กสำหรับพรอมต์สั้น ๆ และพูลการถอดรหัสขนาดใหญ่ เนื่องจากต้นทุนส่วนใหญ่มาจากการสตรีมโทเค็นเอาต์พุตจำนวนมาก

ความเสี่ยงและรั้ว

การเพิ่มประสิทธิภาพเกณฑ์มาตรฐานหนึ่งรายการสามารถซ่อนจุดอ่อนของระบบในวงกว้างได้

ต้นทุนโครงสร้างพื้นฐานและการบำรุงรักษามักถูกประเมินต่ำไป

ช่องว่างด้านความปลอดภัยและความสามารถในการสังเกตสามารถเพิ่มขึ้นได้เมื่อระบบมีความซับซ้อนมากขึ้น

แผนงานการดำเนินงาน

1

กำหนดเป้าหมายเวลาแฝง คุณภาพ และต้นทุนก่อนนำไปใช้งาน

2

เกณฑ์มาตรฐานภายใต้สภาวะโหลดและข้อมูลจริง

3

การตรวจสอบเครื่องมือเพื่อหาข้อผิดพลาด การเบี่ยงเบน และผลกระทบต่อผู้ใช้

4

เตรียมเส้นทางการย้อนกลับและการตอบสนองต่อเหตุการณ์ก่อนปรับขนาด

สำรวจต่อไป

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Disaggregated Prefill and Decode Serving quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

เริ่มแบบทดสอบ

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

คำแนะนำต่อไป

KServe และโมเดลที่ให้บริการบน Kubernetes

คำถามที่พบบ่อย

What is Disaggregated Prefill and Decode Serving?

สถาปัตยกรรมการให้บริการที่แบ่งการอนุมานโมเดลภาษาขนาดใหญ่ออกเป็นสองเฟส ได้แก่ เติมล่วงหน้าและถอดรหัส และรันบนกลุ่ม GPU ที่แตกต่างกัน เป็นเรื่องสำคัญเนื่องจากทั้งสองระยะนี้มีความต้องการด้านฮาร์ดแวร์ที่ตรงกันข้าม และการบังคับให้เข้าสู่เครื่องเดียวกันจะทำให้ความจุสิ้นเปลืองและทำให้เวลาในการตอบสนองลดลง

อะไรคือเหตุผลด้านฮาร์ดแวร์หลักในการแยกการกรอกข้อมูลล่วงหน้าและถอดรหัสไปยังกลุ่ม GPU ต่างๆ

การกรอกข้อมูลล่วงหน้าจะประมวลผลพรอมต์ทั้งหมดในแบบคู่ขนานและทำให้การประมวลผลอิ่มตัว ในขณะที่ถอดรหัสจะอ่านแคช KV ในแต่ละขั้นตอน และถูกจำกัดโดยแบนด์วิดท์หน่วยความจำ—ความต้องการที่ตรงกันข้ามซึ่งปรับพูลที่แยกจากกันและปรับอย่างอิสระ

โครงสร้างข้อมูลใดที่ต้องถ่ายโอนจากผู้ปฏิบัติงานที่กรอกข้อมูลล่วงหน้าเพื่อถอดรหัสผู้ปฏิบัติงาน

การเติมล่วงหน้าจะสร้างแคช KV สำหรับพรอมต์ decode ต้องการให้แคชนั้นสร้างต่อไป ดังนั้นแคชจึงถูกส่งผ่านการเชื่อมต่อที่รวดเร็วไปยังกลุ่มการถอดรหัส

ปัญหาใดที่การแยกย่อยลดลงโดยเฉพาะในการตั้งค่า GPU ที่ใช้ร่วมกัน

บน GPU ที่ใช้ร่วมกัน การกรอกข้อมูลล่วงหน้าที่ยาวนานสามารถบล็อกขั้นตอนการถอดรหัสที่กำลังดำเนินอยู่ การแยกพวกมันออกจากกันป้องกันการรบกวนนั้นและทำให้เวลาแฝงของหางคงที่

เหตุใดการเติมล่วงหน้าจึงสามารถแบทช์อย่างจริงจัง แต่ถอดรหัสประโยชน์จากการปรับแต่งที่ต่างกัน

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

โดยทั่วไปการเชื่อมต่อระหว่างกันใดที่ใช้ในการย้ายแคช KV ระหว่างพูลที่แยกส่วน

จำเป็นต้องมีลิงก์แบนด์วิธสูงและมีเวลาแฝงต่ำ เช่น NVLink (ภายในโหนด) และ InfiniBand (ระหว่างโหนด) ดังนั้นการถ่ายโอน KV-cache จะไม่กลายเป็นปัญหาคอขวดใหม่