เอนจิน inference แบบโอเพนซอร์ส vLLM ได้รับความสนใจอย่างมากสำหรับความสามารถในการให้บริการโมเดลภาษาขนาดใหญ่อย่างมีประสิทธิภาพในระดับใหญ่ การวิเคราะห์เทคนิคโดยละเอียดเผยให้เห็นว่าระบบสามารถบรรลุปริมาณงานสูงผ่านกลยุทธ์การจัดกลุ่มที่เป็นนวัตกรรมและเทคนิคการจัดการหน่วยความจำที่เพิ่มการใช้งาน GPU ให้สูงสุดโดยไม่ลดคุณภาพการตอบสนอง
คอมโพเนนต์สถาปัตยกรรม vLLM V1:
- AsyncLLM: ตัวห่อหุ้มแบบอะซิงโครนัสที่จัดการการแปลงโทเค็นและการสื่อสาร IPC
- EngineCore: เอนจิ้นอนุมานหลักที่มีตรรกะการจัดตารางและการดำเนินการ
- Scheduler: จัดการการรวมกลุ่มคำขอและการจัดสรรโทเค็น
- ModelExecutor: ประสานงานการโหลดโมเดลข้าม GPU worker โดยใช้ Ray
- ModelRunner: ดำเนินการ forward pass บน GPU แต่ละตัว
- KVCacheManager: จัดการหน่วยความจำ GPU เป็นระบบเพจจิ้งด้วยบล็อกขนาดคงที่
![]() |
---|
สำรวจ vLLM : วิธีการนำโมเดลภาษาขนาดใหญ่มาใช้งานอย่างมีประสิทธิภาพในระดับใหญ่ |
Continuous Batching รักษาคุณภาพในขณะที่เพิ่มประสิทธิภาพ
หนึ่งในข้อกังวลหลักที่นักพัฒนามีเกี่ยวกับการจัดกลุ่มคำขอหลายรายการคือว่าจะส่งผลกระทบต่อประสิทธิภาพของโมเดลหรือไม่ การอภิปรายในชุมชนเผยให้เห็นว่าแนวทางของ vLLM แก้ไขข้อกังวลนี้ได้อย่างมีประสิทธิภาพ ซึ่งแตกต่างจากวิธีการจัดกลุ่มแบบดั้งเดิมที่อาจรวมพรอมต์ต่างๆ เข้าในบริบทเดียวกัน vLLM ประมวลผลคำขอแยกกันแบบขนานในขณะที่แบ่งปันทรัพยากรการคำนวณ ซึ่งหมายความว่าไม่มีการแลกเปลี่ยนในด้าน perplexity หรือคุณภาพการตอบสนอง - ผู้ใช้จะได้รับประสิทธิภาพของโมเดลเดียวกันกับที่คาดหวังจากคำขอแต่ละรายการ แต่มีประสิทธิภาพที่ดีขึ้นอย่างมาก
อัลกอริทึม continuous batching ทำงานโดยการรักษางบประมาณโทเค็นที่ยืดหยุ่นในคำขอหลายรายการ ตัวอย่างเช่น หากคำขอสามรายการมีโทเค็นพรอมต์ 3, 5 และ 12 ตัวตามลำดับ โดยมีงบประมาณ 10 โทเค็น ตัวจัดตารางเวลาอาจประมวลผล 3 โทเค็นจากคำขอแรก 5 โทเค็นจากคำขอที่สอง และ 2 โทเค็นจากคำขอที่สามในการส่งผ่านไปข้างหน้าครั้งเดียว การจัดสรรแบบไดนามิกนี้ช่วยให้มั่นใจว่าทรัพยากร GPU ได้รับการใช้งานอย่างเต็มที่ในขณะที่รักษาความยุติธรรมระหว่างคำขอ
งบประมาณโทเค็น: จำนวนโทเค็นสูงสุดที่สามารถประมวลผลได้ในการส่งผ่านไปข้างหน้าครั้งเดียวผ่านโมเดล
ตัวอย่าง Continuous Batching:
- 3 คำขอที่มี 3, 5, และ 12 prompt tokens ตามลำดับ
- งบประมาณ token 10 tokens ต่อ forward pass
- ขั้นตอนที่ 0: ประมวลผล 3 tokens (R1) + 5 tokens (R2) + 2 tokens (R3)
- ขั้นตอนที่ 1: ประมวลผล 8 tokens ที่เหลือ (R3) + 1 decode token สำหรับแต่ละคำขอ (R1, R2)
![]() |
---|
กระบวนการจัดสรร token ใน continuous batching ช่วยปรับปรุงประสิทธิภาพสำหรับคำขอหลายรายการ |
ข้อจำกัดของแบนด์วิดท์หน่วยความจำเปิดใช้งานการประมวลผลแบบขนาน
ประสิทธิผลของแนวทางการจัดกลุ่มของ vLLM เกิดจากลักษณะพื้นฐานของสถาปัตยกรรม LLM ปัจจุบัน โมเดลภาษาสมัยใหม่ถูกจำกัดอย่างรุนแรงโดยแบนด์วิดท์หน่วยความจำมากกว่าความสามารถในการคำนวณ ข้อจำกัดนี้เกิดขึ้นเพราะระบบใช้เวลามากในการรอให้น้ำหนักของโมเดลถ่ายโอนจากหน่วยความจำวิดีโอ (VRAM) ไปยังหน่วยความจำแบนด์วิดท์สูง (HBM) ในช่วงเวลารอเหล่านี้ การประมวลผลคำขอหลายรายการพร้อมกันจึงเกือบจะไม่มีค่าใช้จ่ายจากมุมมองการคำนวณ
ข้อมูลเชิงลึกนี้อธิบายว่าทำไม vLLM จึงสามารถบรรลุการปรับปรุงประสิทธิภาพที่น่าทึ่งได้ ระบบเติมช่องว่างการคำนวณที่จะสูญเสียไปในการรอการถ่ายโอนหน่วยความจำ คอร์ GPU ที่จะนิ่งไม่ทำงานระหว่างการดำเนินการหน่วยความจำสามารถทำงานกับคำขอเพิ่มเติมได้โดยไม่ส่งผลกระทบต่อความเร็วในการประมวลผลของคำขอแต่ละรายการ
ลักษณะประสิทธิภาพแยกตามระยะ:
- ระยะ Prefill: การใช้งานคอมพิวต์สูง, การรับส่งข้อมูลหน่วยความจำต่ำ, ประมวลผล prompt tokens ทั้งหมดแบบขนาน
- ระยะ Decode: ความต้องการคอมพิวต์เบา, การรับส่งข้อมูลหน่วยความจำหนักสำหรับการเข้าถึง KV cache, การสร้าง token แบบต่อเนื่อง
- ข้อจำกัดหน่วยความจำ: สถาปัตยกรรม LLM ปัจจุบันถูกจำกัดด้วย memory bandwidth มากกว่าความสามารถในการคำนวณ
Paged Attention และการจัดการ KV Cache
นอกเหนือจาก continuous batching แล้ว ระบบการจัดการหน่วยความจำของ vLLM มีบทบาทสำคัญในข้อได้เปรียบด้านประสิทธิภาพ ระบบใช้เทคนิคที่เรียกว่า Paged Attention ซึ่งพัฒนาโดยทีม vLLM และได้รับการนำไปใช้โดยเอนจิน inference อื่นๆ แนวทางนี้ปฏิบัติต่อหน่วยความจำ GPU เหมือนระบบเพจจิ้ง โดยจัดเก็บข้อมูล key-value (KV) cache ในบล็อกขนาดคงที่แทนที่จะต้องการการจัดสรรหน่วยความจำแบบต่อเนื่องขนาดใหญ่
KV cache จัดเก็บคีย์และค่าความสนใจของ transformer สำหรับแต่ละโทเค็น ซึ่งจำเป็นสำหรับการสร้างโทเค็นต่อไปอย่างมีประสิทธิภาพ โดยการแบ่งแคชนี้เป็นบล็อกที่จัดการได้ vLLM สามารถจัดสรรหน่วยความจำแบบไดนามิกตามต้องการและหลีกเลี่ยงปัญหาการกระจัดกระจายของหน่วยความจำที่รบกวนระบบการให้บริการอื่นๆ แนวทางแบบบล็อกนี้ยังช่วยให้การใช้หน่วยความจำดีขึ้นในคำขอพร้อมกันหลายรายการ
KV cache: หน่วยความจำ GPU ที่จัดเก็บคีย์และค่าความสนใจจากโทเค็นก่อนหน้า ช่วยให้สามารถสร้างโทเค็นใหม่ได้อย่างมีประสิทธิภาพโดยไม่ต้องคำนวณสถานะในอดีตใหม่
ลักษณะประสิทธิภาพของ Prefill เทียบกับ Decode
ระบบจัดการสองขั้นตอนที่แตกต่างกันของ inference แต่ละขั้นตอนมีลักษณะประสิทธิภาพที่เป็นเอกลักษณ์ ในระหว่างขั้นตอน prefill โทเค็นพรอมต์ทั้งหมดสามารถประมวลผลพร้อมกันได้เพราะ query tensor สำหรับแต่ละตำแหน่งพร้อมใช้งานทันที การประมวลผลแบบขนานนี้ทำให้การดำเนินการ prefill ค่อนข้างเร็วและเข้มข้นในการคำนวณโดยมีความต้องการ memory I/O น้อยที่สุด
ขั้นตอน decode ทำงานแตกต่างกัน โดยสร้างโทเค็นทีละตัวตามลำดับ โทเค็นใหม่แต่ละตัวขึ้นอยู่กับผลลัพธ์ของโทเค็นก่อนหน้า ป้องกันการสร้างแบบขนานภายในคำขอเดียว อย่างไรก็ตาม ขั้นตอนนี้ต้องการ memory I/O อย่างกว้างขวางเพื่อเข้าถึงคีย์และค่าที่จัดเก็บไว้จากขั้นตอน prefill ความแตกต่างระหว่างขั้นตอนเหล่านี้เน้นย้ำว่าทำไมการจัดกลุ่มคำขอหลายรายการจึงมีค่ามากยิ่งขึ้น - ในขณะที่คำขอหนึ่งรอการดำเนินการหน่วยความจำ คำขออื่นๆ สามารถใช้ทรัพยากรการคำนวณที่มีอยู่ได้
คำถามเกี่ยวกับประสิทธิภาพและการปรับปรุงในอนาคต
แม้จะมีคำอธิบายทางเทคนิคโดยละเอียด สมาชิกชุมชนบางคนสังเกตเห็นการขาดหายไปของเกณฑ์มาตรฐานประสิทธิภาพเฉพาะเจาะจงและข้อกำหนดฮาร์ดแวร์ การขาดตัวเลขปริมาณงานที่เป็นรูปธรรมทำให้ยากต่อการประเมินประสิทธิภาพของ vLLM เทียบกับทางเลือกอื่นหรือประมาณประสิทธิภาพที่คาดหวังในการกำหนดค่าฮาร์ดแวร์เฉพาะ
มีประสิทธิภาพเพิ่มเติมที่คุณสามารถบีบออกมาจาก vLLM ได้
โอกาสการปรับปรุงเพิ่มเติมมีอยู่นอกเหนือจากความสามารถหลักของ vLLM องค์กรบางแห่งกำลังสร้างบนพื้นฐานของ vLLM โดยเพิ่มระบบคิวรวมศูนย์และการสนับสนุนการจัดกลุ่มฝั่งไคลเอ็นต์อย่างชัดเจนเพื่อบรรลุอัตราปริมาณงานที่สูงยิ่งขึ้น
การอภิปรายยังเน้นข้อพิจารณาการปรับใช้งานจริง เช่น การจัดการการสนทนาแบบ stateful ในอินสแตนซ์โมเดลหลายตัว ในขณะที่โมเดลเองเป็น stateless บริบทการสนทนาต้องการกลยุทธ์การกำหนดเส้นทางที่ระมัดระวังในระดับ load balancer เพื่อรักษาประโยชน์ด้านประสิทธิภาพจาก prompt caching และการนำ KV cache กลับมาใช้
การรวมกันของ continuous batching, paged attention และการจัดการหน่วยความจำที่มีประสิทธิภาพของ vLLM แสดงถึงความก้าวหน้าที่สำคัญในเทคโนโลยีการให้บริการ LLM โดยการแก้ไขข้อจำกัดพื้นฐานในสถาปัตยกรรม transformer ระบบบรรลุการปรับปรุงประสิทธิภาพที่สำคัญในขณะที่รักษาคุณภาพการตอบสนอง ทำให้เป็นตัวเลือกที่น่าสนใจสำหรับองค์กรที่ปรับใช้โมเดลภาษาขนาดใหญ่ในระดับใหญ่
อ้างอิง: Life of an inference request (vLLM V1): How LLMs are served efficiently at scale