โมเดลและแพลตฟอร์ม AI

การเพิ่มประสิทธิภาพการวางแบบ LLM: vLLM PagedAttention และอนาคตของการเสิร์ฟ AI ที่มีประสิทธิภาพ

mm
เพิ่ม Unite.AI ลงในแหล่งข้อมูลที่คุณต้องการบน Google

โมเดลภาษาขนาดใหญ่ (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>

&nbsp;

[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 เปิดโอกาสใหม่สำหรับการรวมโมเดลภาษาที่มีพลังเข้ากับแอปพลิเคชันต่าง ๆ

ฉันใช้เวลาที่ผ่านมา 5 ปีในการศึกษาสิ่งที่น่าสนใจเกี่ยวกับ Machine Learning และ Deep Learning ความเชี่ยวชาญและความหลงใหลของฉันทำให้ฉันเข้าร่วมในโครงการพัฒนาซอฟต์แวร์มากกว่า 50 โครงการที่มีความหลากหลาย โดยมุ่งเน้นไปที่ AI/ML ความอยากรู้อยากเห็นของฉันยังทำให้ฉันสนใจในด้าน Natural Language Processing ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป