مصنوعی ذہانت
ایل ایل ایم کی تعیناتی کو بہتر بنانا: وی ایل ایل ایم پیجڈ توجہ اور موثر AI سرونگ کا مستقبل

حقیقی دنیا کی ایپلی کیشنز پر تعینات بڑے لینگویج ماڈلز (LLMs) منفرد چیلنجز پیش کرتے ہیں، خاص طور پر کمپیوٹیشنل وسائل، تاخیر، اور لاگت کی تاثیر کے لحاظ سے۔ اس جامع گائیڈ میں، ہم vLLM (ویکٹر لینگویج ماڈل) پر خاص توجہ کے ساتھ، LLM سرونگ کے منظر نامے کو تلاش کریں گے، جو ایک ایسا حل ہے جو ان طاقتور ماڈلز کو تعینات کرنے اور ان کے ساتھ تعامل کرنے کے طریقے کو نئی شکل دے رہا ہے۔
بڑی زبان کے ماڈلز پیش کرنے کے چیلنجز
مخصوص حلوں میں غوطہ لگانے سے پہلے، آئیے ان کلیدی چیلنجوں کا جائزہ لیتے ہیں جو LLM کو ایک پیچیدہ کام انجام دیتے ہیں:
کمپیوٹیشنل وسائل
LLMs اربوں سے لے کر سیکڑوں اربوں تک اپنے بہت زیادہ پیرامیٹر کی گنتی کے لیے بدنام ہیں۔ مثال کے طور پر، GPT-3 175 بلین پیرامیٹرز کا حامل ہے، جبکہ حالیہ ماڈلز جیسے GPT-4 اس سے بھی زیادہ ہونے کا اندازہ ہے۔ یہ سراسر سائز اندازہ کے لیے اہم کمپیوٹیشنل تقاضوں کا ترجمہ کرتا ہے۔
: مثال کے طور پر
ایک نسبتا معمولی پر غور کریں ایل ایل ایم 13 بلین پیرامیٹرز کے ساتھ، جیسے LLaMA-13B۔ یہاں تک کہ اس ماڈل کی ضرورت ہے:
- تقریباً 26 جی بی میموری صرف ماڈل پیرامیٹرز کو ذخیرہ کرنے کے لیے (16 بٹ درستگی فرض کرتے ہوئے)
- ایکٹیویشنز، توجہ کے طریقہ کار، اور انٹرمیڈیٹ کمپیوٹیشنز کے لیے اضافی میموری
- ریئل ٹائم انفرنس کے لیے کافی GPU کمپیوٹ پاور
تاخیر
بہت سی ایپلی کیشنز میں، جیسے کہ چیٹ بوٹس یا ریئل ٹائم مواد جنریشن، کم تاخیر ایک اچھے صارف کے تجربے کے لیے اہم ہے۔ تاہم، LLMs کی پیچیدگی اہم پروسیسنگ کے اوقات کا باعث بن سکتی ہے، خاص طور پر طویل سلسلے کے لیے۔
: مثال کے طور پر
LLM کے ذریعے چلنے والی کسٹمر سروس چیٹ بوٹ کا تصور کریں۔ اگر ہر جواب کو پیدا ہونے میں کئی سیکنڈ لگتے ہیں، تو گفتگو صارفین کے لیے غیر فطری اور مایوس کن محسوس ہوگی۔
قیمت
LLMs کو پیمانے پر چلانے کے لیے درکار ہارڈ ویئر انتہائی مہنگا ہو سکتا ہے۔ اعلی درجے کے GPUs یا TPUs اکثر ضروری ہوتے ہیں، اور ان سسٹمز کی توانائی کی کھپت کافی ہوتی ہے۔
: مثال کے طور پر
NVIDIA A100 GPUs (اکثر LLM تخمینہ کے لیے استعمال کیا جاتا ہے) کے کلسٹر کو چلانے پر کلاؤڈ کمپیوٹنگ فیس میں روزانہ ہزاروں ڈالر خرچ ہو سکتے ہیں۔
ایل ایل ایم سرونگ کے لیے روایتی طریقے
مزید جدید حل تلاش کرنے سے پہلے، آئیے LLM کی خدمت کے لیے کچھ روایتی طریقوں کا مختصراً جائزہ لیتے ہیں:
گلے لگانے والے چہرے کے ٹرانسفارمرز کے ساتھ سادہ تعیناتی۔
Hugging Face Transformers لائبریری LLMs کو تعینات کرنے کا ایک سیدھا سا طریقہ فراہم کرتی ہے، لیکن یہ ہائی تھرو پٹ سرونگ کے لیے موزوں نہیں ہے۔
مثال کوڈ:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name = "meta-llama/Llama-2-13b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_name) def generate_text(prompt, max_length=100): inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=max_length) return tokenizer.decode(outputs[0], skip_special_tokens=True) print(generate_text("The future of AI is"))
اگرچہ یہ نقطہ نظر کام کرتا ہے، یہ وسائل کے غیر موثر استعمال اور خدمت کے لیے اصلاح کی کمی کی وجہ سے زیادہ ٹریفک ایپلی کیشنز کے لیے موزوں نہیں ہے۔
TorchServe یا اس سے ملتے جلتے فریم ورک کا استعمال
TorchServe جیسے فریم ورک زیادہ مضبوط سرونگ کی صلاحیتیں فراہم کرتے ہیں، بشمول لوڈ بیلنسنگ اور ماڈل ورژننگ۔ تاہم، وہ اب بھی LLM کی خدمت کے مخصوص چیلنجوں، جیسے کہ بڑے ماڈلز کے لیے میموری کا موثر انتظام نہیں کرتے ہیں۔
ایل ایل ایم سرونگ میں میموری مینجمنٹ کو سمجھنا
وسیع پیمانے پر کمپیوٹیشنل وسائل کی ضرورت کی وجہ سے بڑے لینگویج ماڈلز (LLMs) کی خدمت کے لیے موثر میموری کا انتظام بہت ضروری ہے۔ درج ذیل تصاویر میموری مینجمنٹ کے مختلف پہلوؤں کو واضح کرتی ہیں، جو LLM کارکردگی کو بہتر بنانے کے لیے لازمی ہیں۔
سیگمنٹڈ بمقابلہ پیجڈ میموری
یہ دونوں خاکے سیگمنٹڈ میموری اور پیجڈ میموری مینجمنٹ تکنیک کا موازنہ کرتے ہیں، جو عام طور پر آپریٹنگ سسٹمز (OS) میں استعمال ہوتی ہیں۔
- منقسم میموری: یہ تکنیک میموری کو مختلف حصوں میں تقسیم کرتی ہے، ہر ایک مختلف پروگرام یا عمل سے مطابقت رکھتا ہے۔ مثال کے طور پر، LLM پیش کرنے والے سیاق و سباق میں، ماڈل کے مختلف اجزاء، جیسے ٹوکنائزیشن، ایمبیڈنگ، اور توجہ کے طریقہ کار کے لیے مختلف طبقات مختص کیے جا سکتے ہیں۔ ہر طبقہ آزادانہ طور پر بڑھ سکتا ہے یا سکڑ سکتا ہے، لچک فراہم کرتا ہے لیکن اگر حصوں کا صحیح طریقے سے انتظام نہ کیا جائے تو ممکنہ طور پر ٹکڑے ٹکڑے ہو جاتا ہے۔
- پیجڈ میموری: یہاں، میموری کو فکسڈ سائز کے صفحات میں تقسیم کیا جاتا ہے، جو کہ جسمانی میموری پر نقش ہوتے ہیں۔ صفحات کو ضرورت کے مطابق اندر اور باہر تبدیل کیا جا سکتا ہے، جس سے میموری کے وسائل کے موثر استعمال کی اجازت دی جا سکتی ہے۔ ایل ایل ایم کی خدمت میں، یہ ماڈل وزن اور انٹرمیڈیٹ کمپیوٹیشنز کو ذخیرہ کرنے کے لیے درکار میموری کی بڑی مقدار کو منظم کرنے کے لیے اہم ہو سکتا ہے۔
OS بمقابلہ vLLM میں میموری کا انتظام
یہ تصویر روایتی OS میموری مینجمنٹ کو vLLM میں استعمال ہونے والے میموری مینجمنٹ اپروچ سے متصادم ہے۔
- OS میموری مینجمنٹ: روایتی آپریٹنگ سسٹمز میں، عمل (مثال کے طور پر، عمل A اور عمل B) جسمانی میموری میں میموری کے صفحات (صفحہ 0، صفحہ 1، وغیرہ) مختص کیے جاتے ہیں۔ یہ مختص وقت کے ساتھ ساتھ فریگمنٹیشن کا باعث بن سکتا ہے کیونکہ پروسیسز کی درخواست اور میموری کو جاری کیا جاتا ہے۔
- vLLM میموری مینجمنٹ: vLLM فریم ورک میموری کو زیادہ موثر طریقے سے منظم کرنے کے لیے کلیدی قدر (KV) کیشے کا استعمال کرتا ہے۔ درخواستیں (مثال کے طور پر، درخواست A اور درخواست B) KV کیش کے بلاکس مختص ہیں (KV بلاک 0، KV بلاک 1، وغیرہ)۔ یہ نقطہ نظر ٹکڑے ٹکڑے کو کم سے کم کرنے میں مدد کرتا ہے اور میموری کے استعمال کو بہتر بناتا ہے، جس سے ماڈل کو تیز اور زیادہ موثر پیش کرنے کی اجازت ملتی ہے۔
LLMs میں توجہ کا طریقہ کار
توجہ کا طریقہ کار ٹرانسفارمر ماڈلز کا ایک بنیادی جزو ہے، جو عام طور پر LLMs کے لیے استعمال ہوتے ہیں۔ یہ خاکہ توجہ کے فارمولے اور اس کے اجزاء کی وضاحت کرتا ہے:
- سوال (Q): میں ایک نیا ٹوکن ڈیکوڈر مرحلہ یا آخری ٹوکن جو ماڈل نے دیکھا ہے۔
- کلید (K): سابقہ سیاق و سباق جس میں ماڈل کو شرکت کرنی چاہیے۔
- قدر (V): پچھلے سیاق و سباق پر وزنی رقم۔
فارمولہ کلیدوں کے ساتھ استفسار کے ڈاٹ پروڈکٹ کو لے کر، کلیدی جہت کے مربع جڑ سے اسکیلنگ کرکے، سافٹ میکس فنکشن کو لاگو کرکے، اور آخر میں قدروں کے ساتھ ڈاٹ پروڈکٹ کو لے کر توجہ کے اسکور کا حساب لگاتا ہے۔ یہ عمل ماڈل کو ہر ٹوکن تیار کرتے وقت ان پٹ ترتیب کے متعلقہ حصوں پر توجہ مرکوز کرنے کی اجازت دیتا ہے۔
سرونگ تھرو پٹ موازنہ
یہ تصویر مختلف فریم ورک (HF، TGI، اور vLLM) کے درمیان سرونگ تھرو پٹ کا موازنہ پیش کرتی ہے۔ ایل ایل اے ایم اے ماڈلز مختلف ہارڈ ویئر سیٹ اپ پر۔
- LLaMA-13B, A100-40GB: vLLM HuggingFace Transformers (HF) سے 14x - 24x زیادہ تھرو پٹ حاصل کرتا ہے اور HuggingFace Text Generation Inference (TGI) سے 2.2x - 2.5x زیادہ تھرو پٹ حاصل کرتا ہے۔
- LLaMA-7B, A10G: اسی طرح کے رجحانات دیکھے جاتے ہیں، جس میں vLLM نمایاں طور پر HF اور TGI دونوں کو پیچھے چھوڑ رہا ہے۔
vLLM: ایک نیا LLM سرونگ آرکیٹیکچر
vLLM، تیار کردہ یو سی برکلے کے محققین، ایل ایل ایم سرونگ ٹیکنالوجی میں ایک نمایاں چھلانگ کی نمائندگی کرتا ہے۔ آئیے اس کی اہم خصوصیات اور اختراعات کو دریافت کریں:
پیجڈ توجہ
vLLM کے مرکز میں PagedAttention ہے، آپریٹنگ سسٹمز میں ورچوئل میموری مینجمنٹ سے متاثر ایک نیا توجہ کا الگورتھم۔ یہاں یہ ہے کہ یہ کیسے کام کرتا ہے:
- کلیدی قدر (KV) کیشے کی تقسیم: پورے KV کیشے کو مستقل طور پر میموری میں ذخیرہ کرنے کے بجائے، PagedAttention اسے مقررہ سائز کے بلاکس میں تقسیم کرتا ہے۔
- غیر متصل ذخیرہ: ان بلاکس کو غیر متوازی طور پر میموری میں ذخیرہ کیا جا سکتا ہے، جس سے میموری کے زیادہ لچکدار انتظام کی اجازت دی جا سکتی ہے۔
- آن ڈیمانڈ ایلوکیشن: بلاکس صرف ضرورت پڑنے پر مختص کیے جاتے ہیں، یادداشت کے ضیاع کو کم کرتے ہیں۔
- موثر شیئرنگ: متعدد ترتیبیں بلاکس کا اشتراک کر سکتی ہیں، متوازی نمونے لینے اور بیم کی تلاش جیسی تکنیکوں کے لیے اصلاح کو فعال کرتی ہیں۔
مثال:
“۔
روایتی KV کیشے:
[ٹوکن 1 KV][ٹوکن 2 KV][ٹوکن 3 KV]…[ٹوکن N KV]
(مسلسل میموری مختص)
PagedAttention KV Cache:
[بلاک 1] -> جسمانی پتہ A
[بلاک 2] -> جسمانی پتہ C
[بلاک 3] -> جسمانی پتہ B
...
(غیر متصل میموری مختص)
“۔
یہ نقطہ نظر میموری کے ٹکڑے کو نمایاں طور پر کم کرتا ہے اور GPU میموری کے زیادہ موثر استعمال کی اجازت دیتا ہے۔
مسلسل بیچنگ
vLLM مسلسل بیچنگ کو لاگو کرتا ہے، جو درخواستوں کے آتے ہی متحرک طور پر کارروائی کرتا ہے، بجائے اس کے کہ مقررہ سائز کے بیچز بنانے کا انتظار کریں۔ یہ کم تاخیر اور اعلی تھرو پٹ کی طرف جاتا ہے۔
: مثال کے طور پر
آنے والی درخواستوں کے سلسلے کا تصور کریں:
“۔
وقت 0ms: درخواست A پہنچ جاتی ہے۔
وقت 10ms: درخواست A پر کارروائی شروع کریں۔
وقت 15ms: درخواست B پہنچ جاتی ہے۔
وقت 20ms: درخواست B پر کارروائی شروع کریں (A کے متوازی میں)
وقت 25ms: درخواست C پہنچ جاتی ہے۔
...
“۔
مسلسل بیچنگ کے ساتھ، vLLM ہر درخواست کو پہلے سے طے شدہ بیچوں میں گروپ کرنے کا انتظار کرنے کے بجائے فوری طور پر کارروائی شروع کر سکتا ہے۔
موثر متوازی سیمپلنگ
ایسی ایپلی کیشنز کے لیے جن کے لیے فی پرامپٹ متعدد آؤٹ پٹ نمونوں کی ضرورت ہوتی ہے (مثال کے طور پر تخلیقی تحریری معاون)، vLLM کی میموری شیئرنگ کی صلاحیتیں چمکتی ہیں۔ یہ مشترکہ سابقے کے لیے KV کیشے کو دوبارہ استعمال کرتے ہوئے متعدد آؤٹ پٹ پیدا کر سکتا ہے۔
vLLM کا استعمال کرتے ہوئے مثال کوڈ:
from vllm import LLM, SamplingParams llm = LLM(model="meta-llama/Llama-2-13b-hf") prompts = ["The future of AI is"] # Generate 3 samples per prompt sampling_params = SamplingParams(n=3, temperature=0.8, max_tokens=100) outputs = llm.generate(prompts, sampling_params) for output in outputs: print(f"Prompt: {output.prompt}") for i, out in enumerate(output.outputs): print(f"Sample {i + 1}: {out.text}")
یہ کوڈ vLLM کی اصلاح کا فائدہ اٹھاتے ہوئے، دیے گئے پرامپٹ کے لیے مؤثر طریقے سے متعدد نمونے تیار کرتا ہے۔
بینچ مارکنگ vLLM کارکردگی
vLLM کے اثرات کی صحیح معنوں میں تعریف کرنے کے لیے، آئیے کارکردگی کے کچھ موازنہ دیکھیں:
تھرو پٹ موازنہ
فراہم کردہ معلومات کی بنیاد پر، vLLM نمایاں طور پر دیگر پیش کرنے والے حلوں سے بہتر کارکردگی کا مظاہرہ کرتا ہے:
- Hugging Face Transformers کے مقابلے میں 24x زیادہ تھرو پٹ تک
- ہگنگ فیس ٹیکسٹ جنریشن انفرنس (TGI) سے 2.2x سے 3.5x زیادہ تھرو پٹ
مثال:
“۔
تھرو پٹ (ٹوکن/سیکنڈ)
|
| ****
| ****
| ****
| ********
| ************
| ************
|————————
HF TGI vLLM
“۔
یادداشت کی کارکردگی
وی ایل ایل ایم کے پیجڈ توجہ کے نتیجے میں میموری کا قریب ترین استعمال ہوتا ہے:
- روایتی نظاموں میں 4-60% کے مقابلے میں صرف 80% میموری کا ضیاع
- یہ کارکردگی ایک ہی ہارڈ ویئر کے ساتھ بڑے ماڈلز پیش کرنے یا مزید ہم آہنگی کی درخواستوں کو سنبھالنے کی اجازت دیتی ہے۔
vLLM کے ساتھ شروع کرنا
اب جب کہ ہم نے vLLM کے فوائد کو دریافت کر لیا ہے، آئیے اسے ترتیب دینے اور اسے اپنے پروجیکٹس میں استعمال کرنے کے عمل سے گزرتے ہیں۔
6.1 تنصیب
پائپ کا استعمال کرتے ہوئے vLLM انسٹال کرنا سیدھا ہے:
!pip install vllm
6.2 آف لائن انفرنس کے لیے بنیادی استعمال
آف لائن ٹیکسٹ جنریشن کے لیے vLLM استعمال کرنے کی ایک سادہ سی مثال یہ ہے:
from vllm import LLM, SamplingParams # Initialize the model llm = LLM(model="meta-llama/Llama-2-13b-hf") # Prepare prompts prompts = [ "Write a short poem about artificial intelligence:", "Explain quantum computing in simple terms:" ] # Set sampling parameters sampling_params = SamplingParams(temperature=0.8, max_tokens=100) # Generate responses outputs = llm.generate(prompts, sampling_params) # Print the results for output in outputs: print(f"Prompt: {output.prompt}") print(f"Generated text: {output.outputs[0].text}\n")
یہ اسکرپٹ یہ ظاہر کرتا ہے کہ ماڈل کو کیسے لوڈ کیا جائے، نمونے لینے کے پیرامیٹرز کیسے مرتب کیے جائیں، اور متعدد اشارے کے لیے متن کیسے بنایا جائے۔
6.3 vLLM سرور ترتیب دینا
آن لائن سرونگ کے لیے، vLLM ایک OpenAI سے مطابقت رکھنے والا API سرور فراہم کرتا ہے۔ اسے ترتیب دینے کا طریقہ یہاں ہے:
1. سرور شروع کریں:
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-2-13b-hf
2. curl کا استعمال کرتے ہوئے سرور سے استفسار کریں:
curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "meta-llama/Llama-2-13b-hf", "prompt": "The benefits of artificial intelligence include:", "max_tokens": 100, "temperature": 0.7 }'
یہ سیٹ اپ آپ کو اپنے LLM کو OpenAI کے API کے ساتھ مطابقت رکھنے والے انٹرفیس کے ساتھ پیش کرنے کی اجازت دیتا ہے، جس سے موجودہ ایپلی کیشنز میں ضم کرنا آسان ہو جاتا ہے۔
vLLM پر اعلی درجے کے موضوعات
جب کہ vLLM LLM سرونگ میں نمایاں بہتری پیش کرتا ہے، اس کے لیے اضافی غور و فکر اور جدید موضوعات ہیں:
7.1 ماڈل کوانٹائزیشن
اس سے بھی زیادہ موثر سرونگ کے لیے، خاص طور پر محدود میموری والے ہارڈ ویئر پر، کوانٹائزیشن تکنیک کا استعمال کیا جا سکتا ہے۔ اگرچہ vLLM خود فی الحال کوانٹائزیشن کی حمایت نہیں کرتا ہے، اسے کوانٹائزڈ ماڈلز کے ساتھ مل کر استعمال کیا جا سکتا ہے:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch # Load a quantized model model_name = "meta-llama/Llama-2-13b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", load_in_8bit=True) tokenizer = AutoTokenizer.from_pretrained(model_name) # Use the quantized model with vLLM from vllm import LLM llm = LLM(model=model, tokenizer=tokenizer)
7.2 تقسیم شدہ تخمینہ
انتہائی بڑے ماڈلز یا ہائی ٹریفک ایپلی کیشنز کے لیے، متعدد GPUs یا مشینوں میں تقسیم شدہ تخمینہ ضروری ہو سکتا ہے۔ اگرچہ vLLM مقامی طور پر اس کی حمایت نہیں کرتا ہے، لیکن اسے رے جیسے فریم ورک کا استعمال کرتے ہوئے تقسیم شدہ نظاموں میں ضم کیا جا سکتا ہے:
import ray from vllm import LLM @ray.remote(num_gpus=1) class DistributedLLM: def __init__(self, model_name): self.llm = LLM(model=model_name) def generate(self, prompt, params): return self.llm.generate(prompt, params) # Initialize distributed LLMs llm1 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf") llm2 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf") # Use them in parallel result1 = llm1.generate.remote("Prompt 1", sampling_params) result2 = llm2.generate.remote("Prompt 2", sampling_params) # Retrieve results print(ray.get([result1, result2]))
7.3 نگرانی اور مشاہدہ
پیداوار میں ایل ایل ایم کی خدمت کرتے وقت، نگرانی بہت ضروری ہے۔ اگرچہ vLLM بلٹ ان مانیٹرنگ فراہم نہیں کرتا ہے، آپ اسے پرومیتھیس اور گرافانا جیسے ٹولز کے ساتھ ضم کر سکتے ہیں:
from prometheus_client import start_http_server, Summary from vllm import LLM # Define metrics REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request') # Initialize vLLM llm = LLM(model="meta-llama/Llama-2-13b-hf") # Expose metrics start_http_server(8000) # Use the model with monitoring @REQUEST_TIME.time() def process_request(prompt): return llm.generate(prompt) # Your serving loop here
یہ سیٹ اپ آپ کو میٹرکس کو ٹریک کرنے کی اجازت دیتا ہے جیسے درخواست پر کارروائی کا وقت، جسے گرافانا ڈیش بورڈز میں دیکھا جا سکتا ہے۔
نتیجہ
بڑی زبان کے ماڈلز کو مؤثر طریقے سے پیش کرنا AI کے دور میں ایک پیچیدہ لیکن اہم کام ہے۔ vLLM، اپنے جدید PagedAttention الگورتھم اور بہترین نفاذ کے ساتھ، LLM کی تعیناتی کو مزید قابل رسائی اور لاگت سے موثر بنانے میں ایک اہم قدم کی نمائندگی کرتا ہے۔
ڈرامائی طور پر تھرو پٹ کو بہتر بنا کر، میموری کے ضیاع کو کم کرکے، اور زیادہ لچکدار سرونگ آپشنز کو فعال کرکے، vLLM طاقتور زبان کے ماڈلز کو ایپلی کیشنز کی ایک وسیع رینج میں ضم کرنے کے لیے نئے امکانات کھولتا ہے۔ چاہے آپ چیٹ بوٹ، مواد تیار کرنے کا نظام، یا NLP سے چلنے والی کوئی دوسری ایپلیکیشن بنا رہے ہوں، vLLM جیسے ٹولز کو سمجھنا اور فائدہ اٹھانا کامیابی کی کلید ہوگی۔