โมเดลและแพลตฟอร์ม AI
การเพิ่มประสิทธิภาพการวางแบบ LLM: vLLM PagedAttention และอนาคตของการเสิร์ฟ AI ที่มีประสิทธิภาพ
โมเดลภาษาขนาดใหญ่ (LLM) ที่ใช้งานในแอปพลิเคชันจริงมีความท้าทายที่เป็นเอกลักษณ์ โดยเฉพาะอย่างยิ่งในด้านทรัพยากรการคำนวณ ความหน่วง และความคุ้มค่า ในคู่มือที่ครอบคลุมนี้ เราจะสำรวจภูมิทัศน์ของการเสิร์ฟ LLM โดยมุ่งเน้นไปที่ vLLM (เวกเตอร์ Language Model) ซึ่งเป็นโซลูชันที่เปลี่ยนแปลงวิธีการวางแบบและโต้ตอบกับโมเดลเหล่านี้ที่มีพลัง
ความท้าทายในการเสิร์ฟ Large Language Models
ก่อนที่จะพิจารณาโซลูชันเฉพาะ เรามาสำรวจความท้าทายหลักที่ทำให้การเสิร์ฟ LLM เป็นงานที่ซับซ้อน:
ทรัพยากรการคำนวณ
LLM มีชื่อเสียงในเรื่องจำนวนพารามิเตอร์ที่มาก โดยมีตั้งแต่พันล้านถึงร้อยพันล้าน ตัวอย่างเช่น GPT-3 มีพารามิเตอร์ 175 พันล้าน ในขณะที่โมเดลที่ใหม่กว่า เช่น GPT-4 มีพารามิเตอร์มากกว่านั้น ความใหญ่โตนี้ส่งผลให้ต้องการทรัพยากรการคำนวณที่มากสำหรับการอนุมาน
ตัวอย่าง:
พิจารณา LLM ที่มีพารามิเตอร์ 13 พันล้าน เช่น LLaMA-13B โมเดลนี้ต้องการ:
– ประมาณ 26 GB ของหน่วยความจำเพียงเพื่อจัดเก็บพารามิเตอร์ของโมเดล (โดยสมมติว่าใช้ความแม่นยำ 16 บิต)
– หน่วยความจำเพิ่มเติมสำหรับการกระตุ้น กลไกความสนใจ และการคำนวณระหว่างกลาง
– กำลังคำนวณ GPU ที่มากสำหรับการอนุมานแบบเรียลไทม์
ความหน่วง
ในหลายแอปพลิเคชัน เช่น แชทบอทหรือการสร้างเนื้อหาที่มีความหน่วงต่ำเป็นสิ่งสำคัญสำหรับการให้ประสบการณ์ที่ดีแก่ผู้ใช้ อย่างไรก็ตาม ความซับซ้อนของ LLM สามารถทำให้เวลาการประมวลผลนาน โดยเฉพาะสำหรับลำดับที่ยาว
ตัวอย่าง:
นึกถึงแชทบอทที่ใช้ LLM หากการตอบสนองแต่ละครั้งใช้เวลาหลายวินาทีในการสร้าง การสนทนาจะรู้สึกไม่ธรรมชาติและน่าหงุดหงิดสำหรับผู้ใช้
ค่าใช้จ่าย
ฮาร์ดแวร์ที่ต้องการในการรัน LLM ในระดับที่ใหญ่มากสามารถมีราคาแพงมาก GPU หรือ TPU ที่มีคุณภาพสูงมักจำเป็น และการบริโภคพลังงานของระบบเหล่านี้มีมาก
ตัวอย่าง:
การรันคลัสเตอร์ของ NVIDIA A100 GPUs (ที่ใช้สำหรับการอนุมาน LLM) สามารถมีค่าใช้จ่ายหลายพันดอลลาร์ต่อวันในค่าใช้จ่ายการประมวลผลบนคลาวด์
วิธีการแบบดั้งเดิมในการเสิร์ฟ LLM
ก่อนที่จะสำรวจโซลูชันที่ทันสมัยกว่า มาทำความรู้จักกับวิธีการแบบดั้งเดิมในการเสิร์ฟ LLM:
การวางแบบอย่างง่ายด้วย Hugging Transformers
ไลบรารี Hugging Face Transformers ให้วิธีการวางแบบ LLM ที่ตรงไปตรงมา แต่ไม่ได้ถูกปรับให้เหมาะสมสำหรับการเสิร์ฟที่มีปริมาณมาก
ตัวอย่างโค้ด:
จาก transformers import AutoModelForCausalLM, AutoTokenizer
นำเข้า torch
<p>ชื่อโมเดล = "meta-llama/Llama-2-13b-hf"
โมเดล = AutoModelForCausalLM.from_pretrained(ชื่อโมเดล, device_map="auto")
ตัวแบ่งคำ = AutoTokenizer.from_pretrained(ชื่อโมเดล)</p>
<p>def generate_text(ข้อความ, max_length=100):
inputs = ตัวแบ่งคำ(ข้อความ, return_tensors="pt").to(โมเดล.device)
outputs = โมเดล.generate(**inputs, max_length=max_length)
return ตัวแบ่งคำ.decode(outputs[0], skip_special_tokens=True)</p>
<p>print(generate_text("อนาคตของ AI คือ"))</p>
<h3>การใช้ TorchServe หรือเฟรมเวิร์กที่คล้ายกัน</h3>
เฟรมเวิร์กอย่าง TorchServe มีการเสิร์ฟที่มีความสามารถมากกว่า รวมถึงการกระจายภาระงานและการจัดการเวอร์ชันโมเดล อย่างไรก็ตาม ยังไม่ได้กล่าวถึงความท้าทายเฉพาะของการเสิร์ฟ LLM เช่น การจัดการหน่วยความจำที่มีประสิทธิภาพสำหรับโมเดลขนาดใหญ่
<h2>การทำความเข้าใจการจัดการหน่วยความจำในการเสิร์ฟ LLM</h2>
การจัดการหน่วยความจำที่มีประสิทธิภาพเป็นสิ่งสำคัญสำหรับการเสิร์ฟ LLM เนื่องจากต้องการทรัพยากรการคำนวณที่มาก
<h3>หน่วยความจำแบบส่วนหรือหน่วยความจำแบบเพจ</h3>
<div>
[caption id="attachment_203335" align="aligncenter" width="544"]<a href="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172007.png"><img class="wp-image-203335" src="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172007.png" alt="การจัดการหน่วยความจำใน OS เทียบกับ vLLM" width="544" height="300" /></a> <a href="https://www.youtube.com/watch?v=p9yZNLeOj4s">การจัดการหน่วยความจำใน OS เทียบกับ vLLM</a>[/caption]
</div>
<div>
[caption id="attachment_203334" align="aligncenter" width="556"]<a href="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172018.png"><img class="wp-image-203334" src="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172018.png" alt="การจัดการหน่วยความจำใน OS เทียบกับ vLLM" width="556" height="301" /></a> <a href="https://www.youtube.com/watch?v=p9yZNLeOj4s">การจัดการหน่วยความจำใน OS เทียบกับ vLLM</a>[/caption]
</div>
<h3>กลไกความสนใจใน LLM</h3>
[caption id="attachment_203332" align="aligncenter" width="415"]<a href="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172131.png"><img class="wp-image-203332" src="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172131.png" alt="กลไกความสนใจใน LLM" width="415" height="245" /></a> กลไกความสนใจใน LLM[/caption]
<h3>การเปรียบเทียบการเสิร์ฟ</h3>
[caption id="attachment_203331" align="aligncenter" width="401"]<a href="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172325.png"><img class="wp-image-203331" src="https://www.unite.ai/wp-content/uploads/2024/07/Screenshot-2024-07-14-172325.png" alt="vLLM: การเสิร์ฟ LLM ที่ง่าย เร็ว และราคาไม่แพงด้วย PagedAttention" width="401" height="265" /></a> vLLM: การเสิร์ฟ LLM ที่ง่าย เร็ว และราคาไม่แพงด้วย PagedAttention [/caption]
<h2>vLLM: อาร์คิเทคเจอร์การเสิร์ฟ LLM ใหม่</h2>
vLLM ที่พัฒนาโดยนักวิจัยจาก UC Berkeley เป็นขั้นตอนสำคัญในการพัฒนาเทคโนโลยีการเสิร์ฟ LLM
<h3>PagedAttention</h3>
ที่ใจกลางของ vLLM คือ PagedAttention ซึ่งเป็นอัลกอริทึมความสนใจที่สร้างสรรค์โดยได้รับแรงบันดาลใจจากการจัดการหน่วยความจำเสมือนในระบบปฏิบัติการ
<h3>การแบตช์แบบต่อเนื่อง</h3>
vLLM ใช้การแบตช์แบบต่อเนื่อง ซึ่งประมวลผลคำขอแบบไดนามิกตามที่มาถึง
<h3>การสร้างตัวอย่างแบบขนานที่มีประสิทธิภาพ</h3>
สำหรับแอปพลิเคชันที่ต้องการตัวอย่างเอาต์พุตหลายตัวต่อคำขอ (เช่น ผู้ช่วยเขียนสร้างสรรค์) vLLM มีความสามารถในการแบ่งปันหน่วยความจำ KV
<h2>การเปรียบเทียบประสิทธิภาพของ vLLM</h2>
เพื่อประเมินผลกระทบของ vLLM เรามาดูการเปรียบเทียบประสิทธิภาพ:
<h3>การเปรียบเทียบปริมาณการเสิร์ฟ</h3>
ตามข้อมูลที่ให้มา vLLM มีปริมาณการเสิร์ฟที่มากกว่าโซลูชันการเสิร์ฟอื่น ๆ
<h3>ประสิทธิภาพของหน่วยความจำ</h3>
PagedAttention ของ vLLM ส่งผลให้การใช้หน่วยความจำที่มีประสิทธิภาพ:
- มีการสูญเสียหน่วยความจำเพียง 4% เทียบกับ 60-80% ในระบบดั้งเดิม
- ประสิทธิภาพนี้ช่วยให้สามารถเสิร์ฟโมเดลที่ใหญ่ขึ้นหรือจัดการคำขอพร้อมกันมากขึ้นด้วยฮาร์ดแวร์เดียวกัน
<h2>การเริ่มต้นใช้งาน vLLM</h2>
ตอนนี้ที่เราสำรวจถึงประโยชน์ของ vLLM มาทำความรู้จักกับกระบวนการในการตั้งค่าและใช้งาน:
<h3>6.1 การติดตั้ง</h3>
การติดตั้ง vLLM เป็นเรื่องง่ายโดยใช้ pip:
[code language="PYTHON"]
!pip install vllm
6.2 การใช้งานพื้นฐานสำหรับการอนุมานออฟไลน์
ตัวอย่างการใช้งาน vLLM สำหรับการสร้างข้อความออฟไลน์:
จาก vllm import LLM, SamplingParams
<p># โหลดโมเดล
llm = LLM(model="meta-llama/Llama-2-13b-hf")</p>
<p># เตรียมข้อความ
prompts = [
"เขียนบทกวีสั้นเกี่ยวกับ AI",
"อธิบายการคำนวณควอนตัมในคำพูดที่ง่าย"
]</p>
<p># ตั้งค่าพารามิเตอร์การตัวอย่าง
sampling_params = SamplingParams(temperature=0.8, max_tokens=100)</p>
<p># สร้างข้อความ
outputs = llm.generate(prompts, sampling_params)</p>
<p># พิมพ์ผลลัพธ์
for output in outputs:
print(f"ข้อความ: {output.prompt}")
print(f"ข้อความที่สร้าง: {output.outputs[0].text}\n")
หัวข้อที่ซับซ้อนเกี่ยวกับ vLLM
ในขณะที่ vLLM มีการปรับปรุงที่สำคัญในการเสิร์ฟ LLM มีหัวข้อที่ซับซ้อนและขั้นสูงอื่น ๆ ที่ควรสำรวจ:
7.1 การปรับขนาดโมเดล
สำหรับการเสิร์ฟที่มีประสิทธิภาพมากขึ้น โดยเฉพาะบนฮาร์ดแวร์ที่มีหน่วยความจำจำกัด เทคนิคการปรับขนาดสามารถใช้ได้
7.2 การอนุมานแบบกระจาย
สำหรับโมเดลขนาดใหญ่มากหรือแอปพลิเคชันที่มีการเข้าถึงสูง การอนุมานแบบกระจายอาจจำเป็น
7.3 การติดตามและความสามารถในการสังเกต
เมื่อเสิร์ฟ LLM ในการผลิต การติดตามเป็นสิ่งสำคัญ
สรุป
การเสิร์ฟ LLM ที่มีประสิทธิภาพเป็นงานที่ซับซ้อนแต่จำเป็นในยุค AI vLLM ด้วยอัลกอริทึม PagedAttention ที่สร้างสรรค์และการนำไปใช้ที่มีประสิทธิภาพ เป็นขั้นตอนสำคัญในการทำให้การวางแบบ LLM มีความสามารถและคุ้มค่ามากขึ้น
โดยการปรับปรุงปริมาณการเสิร์ฟ ลดการสูญเสียหน่วยความจำ และทำให้สามารถเสิร์ฟได้หลากหลาย vLLM เปิดโอกาสใหม่สำหรับการรวมโมเดลภาษาที่มีพลังเข้ากับแอปพลิเคชันต่าง ๆ












