โมเดลและแพลตฟอร์ม AI
PowerInfer: ระบบการอนุมานภาษาขนาดใหญ่เร็วสำหรับ GPU ระดับผู้บริโภค
เนื่องจากความสามารถในการสร้างเนื้อหาที่น่าทึ่ง โมเดลภาษาขนาดใหญ่แบบสร้าง (Generative Large Language Models) อยู่ที่แนวหน้าของการปฏิวัติ AI โดยมีการพยายามปรับปรุงความสามารถในการสร้างเนื้อหาของพวกมันอย่างต่อเนื่อง อย่างไรก็ตาม แม้จะมีการพัฒนาอย่างรวดเร็ว โมเดลเหล่านี้ต้องการพลังการประมวลผลและทรัพยากรที่สำคัญ สาเหตุหลักมาจากการที่พวกมันประกอบด้วยพารามิเตอร์หลายร้อยพันล้านตัว นอกจากนี้ เพื่อให้ทำงานได้อย่างราบรื่น โมเดล AI ที่สร้างขึ้นขึ้นอยู่กับ GPU หลายพันตัว ซึ่งนำไปสู่ต้นทุนการดำเนินการที่สำคัญ ต้องการพลังการประมวลผลสูงเป็นเหตุผลหลักที่ทำให้โมเดล AI ที่สร้างขึ้นยังไม่ได้รับการใช้งานอย่างมีประสิทธิภาพบนอุปกรณ์ส่วนบุคคล
ในบทความนี้ เราจะพูดถึง PowerInfer ซึ่งเป็นเครื่องมือการอนุมาน LLM ที่มีความเร็วสูงซึ่งออกแบบมาสำหรับคอมพิวเตอร์มาตรฐานที่มี GPU ระดับผู้บริโภค เฟรมเวิร์ก PowerInfer มุ่งหวังที่จะใช้ประโยชน์จากความสัมพันธ์ที่สูงใน LLM ซึ่งแสดงด้วยการกระจายกำลังของการกระตุ้นニューロน (neuron activation) ซึ่งหมายความว่าที่เวลาใดเวลาหนึ่ง จะมีเซตย่อยของ ‘hot’ 뉴ーロนที่กระตุ้นอยู่เสมอระหว่างอินพุต ในขณะที่ ‘cold’ 뉴โรนที่เหลือจะกระตุ้นตามอินพุตหรือความต้องการเฉพาะ วิธีการนี้ช่วยให้เฟรมเวิร์ก PowerInfer ลดพลังการประมวลผลที่จำเป็นสำหรับ AI ที่สร้างขึ้นในการผลิตเอาต์พุตที่ต้องการ
เราจะพูดถึงเฟรมเวิร์ก PowerInfer ในรายละเอียด โดยสำรวจวิธีการและผลลัพธ์จากการใช้งานจริง มาเริ่มกัน
PowerInfer: ระบบการอนุมานภาษาขนาดใหญ่เร็วสำหรับ GPU ระดับผู้บริโภค
โมเดลภาษาขนาดใหญ่แบบสร้าง เช่น ChatGPT และ DALL-E เป็นที่รู้จักในด้านการประมวลผลภาษาธรรมชาติและงานสร้างเนื้อหาที่ซับซ้อน เนื่องจากต้องการพลังการประมวลผลสูง โมเดลเหล่านี้จึงถูกใช้งานในศูนย์ข้อมูลที่มี GPU ที่ทันสมัย ต้องการพลังการประมวลผลสูงเป็นเหตุผลหลักที่ทำให้โมเดลภาษาขนาดใหญ่ไม่สามารถใช้งานบนแพลตฟอร์มท้องถิ่นเช่นคอมพิวเตอร์ส่วนบุคคลได้
การเพิ่มความสามารถในการเข้าถึงโมเดลภาษาขนาดใหญ่อาจช่วยลดต้นทุนการอนุมานและสร้างเนื้อหาออกมาได้ นอกจากนี้ การใช้งานโมเดลเหล่านี้บนอุปกรณ์ท้องถิ่นยังช่วยเพิ่มความเป็นส่วนตัวของข้อมูลและทำให้สามารถปรับแต่งโมเดลได้ นอกจากนี้ ในขณะที่การวางระบบในศูนย์ข้อมูลมุ่งเน้นไปที่การประมวลผลที่รวดเร็ว การใช้งานโมเดลเหล่านี้บนอุปกรณ์ท้องถิ่นอาจมุ่งเน้นไปที่การลดความหน่วงเนื่องจากขนาดแบตช์ที่เล็กกว่า
อย่างไรก็ตาม การใช้งานโมเดลเหล่านี้บนอุปกรณ์ท้องถิ่นมีความท้าทายเนื่องจากต้องการหน่วยความจำที่มาก โมเดลภาษาขนาดใหญ่ทำงานเป็นทรานส์ฟอร์เมอร์ที่สร้างขึ้นแบบอัตโนมัติ โดยสร้างข้อความทีละโทเค็น โดยแต่ละโทเค็นต้องเข้าถึงโมเดลทั้งหมด ซึ่งประกอบด้วยพารามิเตอร์หลายร้อยพันล้านตัว ซึ่งต้องการ GPU สูงหลายตัวเพื่อสร้างเอาต์พุตที่มีความหน่วงต่ำ นอกจากนี้ การใช้งานบนอุปกรณ์ท้องถิ่นมักจะประมวลผลคำขอแบบลำดับ ซึ่งจำกัดความสามารถในการประมวลผลแบบขนาน
เพื่อแก้ไขปัญหาหน่วยความจำที่ซับซ้อนของเฟรมเวิร์ก AI ที่สร้างขึ้น วิธีแก้ปัญหาแบบเดิมใช้วิธีการเช่นการโหลดโมเดลและบีบอัด โมเดลเหล่านี้ลดขนาดโมเดล แต่ยังคงใหญ่เกินไปสำหรับ GPU ระดับผู้บริโภคในคอมพิวเตอร์ส่วนบุคคล การโหลดโมเดลซึ่งแบ่งโมเดลที่ชั้น Transformer ระหว่าง CPU และ GPU ช่วยให้สามารถประมวลผลชั้นแบบกระจายบนหน่วยความจำ CPU และ GPU แต่วิธีนี้ถูกจำกัดโดยการเชื่อมต่อ PCIe ที่ช้าและความสามารถในการประมวลผลที่จำกัดของ CPU ซึ่งนำไปสู่การอนุมานที่มีความหน่วงสูง
เฟรมเวิร์ก PowerInfer เสนอว่าความไม่ตรงกันระหว่างคุณลักษณะการอนุมานของ LLM และโครงสร้างฮาร์ดแวร์เป็นสาเหตุหลักของปัญหาหน่วยความจำในการอนุมาน LLM ใน理想แล้ว ข้อมูลที่เข้าถึงบ่อยควรเก็บไว้ใน GPU ที่มีแบนด์วิธสูงและความจุจำกัด ในขณะที่ข้อมูลที่เข้าถึงไม่บ่อยควรเก็บไว้ใน CPU ที่มีแบนด์วิธต่ำและความจุสูง อย่างไรก็ตาม ปริมาณพารามิเตอร์ที่มากของแต่ละการวนซ้ำของ LLM ทำให้เซตการทำงานใหญ่เกินไปสำหรับ GPU เดียว ซึ่งนำไปสู่การประมวลผลที่ไม่มีประสิทธิภาพ
กระบวนการอนุมานในโมเดลภาษาขนาดใหญ่แสดงให้เห็นถึงความสัมพันธ์ที่สูง โดยแต่ละการวนซ้ำจะกระตุ้นニューロนจำนวนจำกัด เฟรมเวิร์ก PowerInfer มุ่งหวังที่จะใช้ประโยชน์จากความสัมพันธ์นี้โดยการจัดการニューロน ‘hot’ จำนวนเล็กน้อยด้วย GPU ในขณะที่ CPU จัดการニューロน ‘cold’ เฟรมเวิร์กนี้เลือกและโหลดニューロน ‘hot’ ล่วงหน้าใน GPU และระบุニューロนที่กระตุ้นระหว่างการทำงาน วิธีการนี้ลดการถ่ายโอนข้อมูล PCIe ที่มีค่าใช้จ่ายสูงและช่วยให้ GPU และ CPU ประมวลผลニューロนที่ได้รับมอบหมายของตนอย่างอิสระ
อย่างไรก็ตาม การใช้งาน LLM บนอุปกรณ์ท้องถิ่นเผชิญกับอุปสรรค ตัวคาดการณ์ออนไลน์ที่จำเป็นสำหรับการระบุニューロนที่กระตุ้นจะใช้หน่วยความจำ GPU จำนวนมาก เฟรมเวิร์ก PowerInfer ใช้วิธีการปรับตัวในการสร้างตัวคาดการณ์ที่เล็กสำหรับชั้นที่มีความเบ้และการกระจายตัวสูง ซึ่งรักษาความแม่นยำในขณะที่ลดขนาด นอกจากนี้ เฟรมเวิร์ก LLM ต้องการตัวดำเนินการแบบกระจายที่มีเอกลักษณ์เฉพาะตัว เฟรมเวิร์ก PowerInfer ใช้ตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロนโดยตรง ซึ่งสามารถสื่อสารกับニューロนได้โดยไม่ต้องแปลงรูปแบบการกระจายตัวระหว่างการทำงาน
สุดท้าย การวางตำแหน่งニューロนที่กระตุ้นระหว่าง CPU และ GPU เป็นเรื่องที่ท้าทาย เฟรมเวิร์ก PowerInfer ใช้ระยะเวลาออฟไลน์เพื่อสร้างนโยบายการวางตำแหน่งニューロน โดยวัดผลกระทบของแต่ละニュโรนต่อผลลัพธ์ของ LLM และสร้างเป็นปัญหาการเขียนเชิงจำนวนเต็ม
สถาปัตยกรรมและวิธีการ
รูปด้านล่างแสดงสถาปัตยกรรมของเฟรมเวิร์ก PowerInfer ซึ่งประกอบด้วยส่วนออฟไลน์และส่วนออนไลน์ในกระบวนการ

ด้วยความแตกต่างที่สังเกตได้ในคุณสมบัติของความสัมพันธ์ระหว่างโมเดลภาษาขนาดใหญ่ต่างๆ ส่วนออฟไลน์จะสร้างโปรไฟล์ความเบ้ของการกระตุ้น LLM ซึ่งช่วยให้สามารถแยกニューロน ‘hot’ และ ‘cold’ ออกได้ ในช่วงออฟไลน์ ตัวอนุมานจะโหลดสองประเภทของニューロนเข้าไปใน CPU และ GPU เพื่อใช้งานระหว่างการทำงาน
ระยะออฟไลน์: ตัวแก้ปัญหาและโปรไฟล์ LLM
ในช่วงออฟไลน์ ส่วนโปรไฟล์ LLM จะใช้คำขอที่ได้รับจากชุดข้อมูลทั่วไปเพื่อรวบรวมข้อมูลการกระตุ้นจากกระบวนการอนุมาน ในขั้นตอนแรก มันจะตรวจสอบการกระตุ้นของニューロนทั่วทั้งชั้นในเฟรมเวิร์ก และใช้ตัวแก้ปัญหาเพื่อจัดประเภทニューロนเป็น ‘hot’ หรือ ‘cold’ วัตถุประสงค์หลักของตัวแก้ปัญหา คือ การจัดสรรニューロนที่กระตุ้นบ่อยให้กับชั้น GPU ในขณะที่ส่วนที่เหลือให้กับชั้น CPU ในขั้นตอนต่อไป ตัวแก้ปัญหาใช้เมตริกผลกระทบของニューロนและคุณสมบัติฮาร์ดแวร์เพื่อสร้างสมดุลของงานระหว่างชั้น และเพิ่มเมตริกผลกระทบของ GPU สำหรับニュโรนด้วยการเขียนเชิงจำนวนเต็ม
ระยะออนไลน์: ตัวอนุมาน LLM ที่ตระหนักถึงニューロน
หลังจากที่ช่วงออฟไลน์เสร็จสิ้น เฟรมเวิร์กจะดำเนินช่วงออนไลน์ ในขั้นตอนที่สามของกระบวนการ ตัวอนุมานออนไลน์จะจัดสรรニューロน ‘hot’ และ ‘cold’ ให้กับหน่วยประมวลผลที่เกี่ยวข้องตามผลลัพธ์ของตัวแก้ปัญหาในช่วงออฟไลน์ ระหว่างการทำงาน ตัวอนุมานออนไลน์จะจัดการการประมวลผล CPU-GPU โดยการสร้างตัวดำเนินการ CPU และ GPU ที่เป็นเธรดที่ทำงานบน CPU ด้าน ตัวอนุมานจะคาดการณ์ニューロนที่กระตุ้นและข้ามニュโรนที่ไม่กระตุ้น ニューロนที่กระตุ้นจะถูกโหลดล่วงหน้าเข้าไปใน GPU เพื่อประมวลผล ในขณะที่ CPU คำนวณและถ่ายโอนผลลัพธ์สำหรับニュโรนของมันเพื่อรวมกับ GPU ตัวอนุมานออนไลน์สามารถมุ่งเน้นไปที่แถวและคอลัมน์ของเมทริกซ์ภายในเนื่องจากใช้ตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロนบน CPU และ GPU

ตัวคาดการณ์ความเบ้แบบปรับตัว
แนวคิดหลักที่อยู่เบื้องหลังการลดภาระการประมวลผลของตัวอนุมานออนไลน์ในเฟรมเวิร์ก PowerInfer คือการประมวลผลเฉพาะニューロนที่คาดการณ์ว่าจะกระตุ้น โดยทั่วไป เฟรมเวิร์กจะใช้ตัวคาดการณ์สองตัวในแต่ละชั้น Transformer เพื่อคาดการณ์การกระตุ้นของニューロนในบล็อก MLP และการดึงความสนใจ ซึ่งนำไปสู่การอนุมานที่จำกัดเฉพาะニュโรนที่คาดการณ์ว่าจะกระตุ้น อย่างไรก็ตาม การออกแบบตัวคาดการณ์ที่มีประสิทธิภาพสำหรับการใช้งานท้องถิ่นเป็นเรื่องที่ท้าทายเนื่องจากทรัพยากรที่จำกัดทำให้ยากต่อการสร้างสมดุลระหว่างขนาดโมเดลและความแม่นยำของการคาดการณ์ ตัวคาดการณ์เหล่านี้ถูกใช้บ่อยโดยเฟรมเวิร์กเพื่อคาดการณ์ニューロนที่กระตุ้น และต้องถูกเก็บไว้ใน GPU เพื่อให้สามารถเข้าถึงได้อย่างรวดเร็ว แต่โดยทั่วไป เฟรมเวิร์กจะใช้ตัวคาดการณ์จำนวนมากที่ใช้หน่วยความจำจำนวนมาก ซึ่งรวมถึงพื้นที่ที่จำเป็นสำหรับพารามิเตอร์ LLM
นอกจากนี้ ขนาดของตัวคาดการณ์โดยทั่วไปจะถูกกำหนดโดยสองปัจจัย: ความเบ้ภายในและความเบ้ของชั้น LLM

เพื่อปรับให้เหมาะสมกับปัจจัยเหล่านี้ เฟรมเวิร์ก PowerInfer ใช้วิธีการฝึกอบรมแบบวนซ้ำสำหรับตัวคาดการณ์แต่ละตัวในชั้น Transformer โดยไม่มีขนาดที่กำหนดไว้ล่วงหน้า ในขั้นตอนแรก ขนาดของโมเดลฐานจะถูกกำหนดตามโปรไฟล์ความเบ้ของโมเดล และขนาดของโมเดลจะถูกปรับเปลี่ยนแบบวนซ้ำโดยพิจารณาจากความเบ้ภายในเพื่อรักษาความแม่นยำ
การวางตำแหน่งและจัดการニューロน
ตามที่กล่าวไว้ก่อนหน้านี้ ในขณะที่ส่วนตัวแก้ปัญหาในช่วงออฟไลน์กำลังกำหนดนโยบายการวางตำแหน่งニューロน ส่วนตัวอนุมานในช่วงออนไลน์จะโหลดโมเดลเข้าไปในหน่วยความจำ GPU และ CPU ตามนโยบายที่สร้างขึ้น สำหรับชั้นที่อาจมีหลายเมทริกซ์หน่วยความจำ เฟรมเวิร์ก PowerInfer จะจัดสรรニューロนแต่ละตัวให้กับ CPU หรือ GPU ตามว่าニューロนเป็น ‘hot’ หรือไม่ การคำนวณที่แม่นยำของニューロนที่ถูกตัดออกในลำดับที่กำหนดเป็นสิ่งจำเป็นสำหรับผลลัพธ์ที่แม่นยำ เพื่อแก้ไขปัญหานี้ เฟรมเวิร์ก PowerInfer จะสร้างตารางニューロนสองตาราง: หนึ่งใน GPU และอีกหนึ่งในหน่วยความจำ CPU โดยมีตารางที่สอดคล้องกับニューロนแต่ละตัวกับตำแหน่งเดิมในเมทริกซ์
ตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロน
ด้วยความเบ้ของการกระตุ้นที่สังเกตได้ในโมเดลภาษาขนาดใหญ่ ニューロนที่ไม่ทำงานและน้ำหนักของมันสามารถถูกข้ามโดยการคูณเมทริกซ์ ซึ่งทำให้เกิดความจำเป็นในการใช้ตัวดำเนินการแบบกระจาย แทนที่จะใช้ตัวดำเนินการแบบกระจายที่มีข้อจำกัด เฟรมเวิร์ก PowerInfer ใช้ตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロนโดยตรง ซึ่งสามารถคำนวณニューロนที่ทำงานและน้ำหนักของมันบน GPU และ CPU โดยไม่ต้องแปลงเป็นรูปแบบการกระจายตัวระหว่างการทำงาน ตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロนแตกต่างจากตัวดำเนินการแบบกระจายแบบดั้งเดิมในด้านที่มันเน้นไปที่เวกเตอร์รายแถวและคอลัมน์ภายในเมทริกซ์เดียวมากกว่าการเน้นไปที่เมทริกซ์ทั้งหมด
นโยบายการวางตำแหน่งニューロน
เพื่อใช้ประโยชน์จากความสามารถในการประมวลผลของ CPU และ GPU ส่วนออฟไลน์ของเฟรมเวิร์ก PowerInfer จะสร้างนโยบายการวางตำแหน่งที่ช่วยให้เฟรมเวิร์กสามารถจัดสรรニューロนให้กับ CPU หรือ GPU ได้ นโยบายที่สร้างขึ้นโดยส่วนตัวแก้ปัญหาในช่วงออฟไลน์จะควบคุมการวางตำแหน่งニューロนภายในแต่ละชั้น ซึ่งช่วยในการกำหนดภาระงานการประมวลผลสำหรับหน่วยประมวลผลแต่ละตัว เมื่อสร้างนโยบายการวางตำแหน่ง ส่วนตัวแก้ปัญหาในช่วงออฟไลน์จะพิจารณาปัจจัยต่างๆ รวมถึงความถี่การกระตุ้นของแต่ละニューロน ค่าใช้จ่ายในการสื่อสาร และความสามารถในการประมวลผล เช่น แบนด์วิธและขนาดหน่วยความจำของหน่วยประมวลผลแต่ละตัว
ผลลัพธ์และการนำไปใช้
เพื่อแสดงความสามารถในการทั่วไปของเฟรมเวิร์ก PowerInfer บนอุปกรณ์ที่มีการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน การทดลองจะถูกดำเนินบนคอมพิวเตอร์ส่วนบุคคลสองเครื่อง: หนึ่งเครื่องมีโปรเซสเซอร์ Intel (INTC ) i9-13900K, GPU NVIDIA RTX 4090 และหน่วยความจำ 192 GB ในขณะที่อีกเครื่องหนึ่งใช้โปรเซสเซอร์ Intel i7-12700K, GPU NVIDIA RTX 2080Ti และหน่วยความจำ 64 GB
การแสดงผลของเฟรมเวิร์ก PowerInfer จะถูกเปรียบเทียบกับ llama.cpp โดยใช้ขนาดแบตช์ 1 และการตั้งค่าการใช้งานแบบดั้งเดิม เฟรมเวิร์กจะใช้คำสั่งจากชุดข้อมูล ChatGPT และ Alpaca โดยพิจารณาจากความแปรผันของความยาวในอินพุตและเอาต์พุตของการสนทนา

ตามที่เห็นได้ เฟรมเวิร์ก PowerInfer สามารถสร้างโทเค็นได้ 8.32 โทเค็นต่อวินาที และสามารถสร้างได้ถึง 16 โทเค็นต่อวินาที ซึ่งแสดงให้เห็นว่าสามารถเอาชนะเฟรมเวิร์ก llama.cpp ได้อย่างมีนัยสำคัญ นอกจากนี้ เมื่อจำนวนโทเค็นเอาต์พุตเพิ่มขึ้น การแสดงผลของเฟรมเวิร์ก PowerInfer ก็จะดีขึ้นเช่นกัน เนื่องจากขั้นตอนการสร้างส่งผลกระทบต่อเวลาการอนุมานโดยรวมอย่างมาก

นอกจากนี้ ตามที่เห็นได้จากภาพด้านบน เฟรมเวิร์ก PowerInfer สามารถเอาชนะเฟรมเวิร์ก llama.cpp บนคอมพิวเตอร์ที่มีประสิทธิภาพต่ำ โดยมีอัตราการสร้างสูงสุด 7 โทเค็นต่อวินาที และอัตราการสร้างเฉลี่ย 5 โทเค็นต่อวินาที

ภาพด้านบนแสดงการกระจายภาระงานของニューロนระหว่าง GPU และ CPU สำหรับเฟรมเวิร์กทั้งสอง ตามที่เห็นได้ เฟรมเวิร์ก PowerInfer เพิ่มส่วนแบ่งของภาระงานニューロนของ GPU อย่างมีนัยสำคัญ จาก 20% ถึง 70%

ภาพด้านบนเปรียบเทียบการแสดงผลของเฟรมเวิร์กทั้งสองบนคอมพิวเตอร์สองเครื่องโดยมีการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน ตามที่เห็นได้ เฟรมเวิร์ก PowerInfer สามารถสร้างโทเค็นได้อย่างต่อเนื่องโดยมีอัตราการสร้างสูงสุดเมื่อเทียบกับเฟรมเวิร์ก llama.cpp
ความคิดสุดท้าย
ในบทความนี้ เราได้พูดถึง PowerInfer ซึ่งเป็นเครื่องมือการอนุมาน LLM ที่มีความเร็วสูงสำหรับคอมพิวเตอร์มาตรฐานที่มี GPU ระดับผู้บริโภค โดยมีจุดประสงค์หลักในการใช้ประโยชน์จากความสัมพันธ์ที่สูงใน LLM ซึ่งแสดงด้วยการกระจายกำลังของการกระตุ้นニューロน เฟรมเวิร์ก PowerInfer เป็นระบบการอนุมานที่รวดเร็วซึ่งออกแบบมาสำหรับโมเดลภาษาขนาดใหญ่ โดยใช้ตัวคาดการณ์ที่ปรับตัวและตัวดำเนินการแบบกระจายที่ตระหนักถึงニューロนเพื่อกระตุ้นニューロนและลดภาระการประมวลผล












