AI ایجنٹس کے لیے LLM تخمینہ کو بڑھانے کے لیے vLLM کا استعمال کیسے کریں۔

اس ٹیوٹوریل میں، ہم دکھائیں گے کہ AI ایجنٹس کے لیے LLM تخمینہ کو بڑھانے کے لیے vLLM کا استعمال کیسے کریں۔ ہم آپ کو اس بارے میں بصیرت پیدا کرنے میں مدد کریں گے کہ LLM کا اندازہ کیسے کام کرتا ہے، یہ دریافت کریں گے کہ ایجنٹ کے کام کے بوجھ سے GPU شیڈولنگ اور میموری پریشر کیوں پیدا ہوتا ہے، اور جانچیں گے کہ کس طرح vLLM کو تھرو پٹ کو بہتر بنانے کے لیے ڈیزائن کیا جا سکتا ہے۔

اس کے بعد آپ ایک مقامی vLLM سرور چلاتے ہیں اور OpenAI-compatible API کے ذریعے سرور سے جڑنے کے لیے AI ایجنٹ کا استعمال کرتے ہیں۔

انڈیکس

پس منظر

سادہ AI ایجنٹ عام طور پر ایک صارف، ایک درخواست، اور ایک ماڈل کے جواب کے ساتھ اچھی طرح کام کرتے ہیں۔ تاہم، پیداواری ماحول بہت مختلف ہے۔

تصور کریں کہ سینکڑوں صارفین بیک وقت پیغامات بھیج رہے ہیں۔ اور صارف کی درخواست آسانی سے 10 سے 30 انفرادی LLM کالوں میں بدل سکتی ہے تاکہ منصوبہ بندی کرنے، ٹولز کو منتخب کرنے، خلاصہ کرنے، دوبارہ کوشش کرنے اور حتمی جواب پیدا کرنے کے لیے۔ اسے دسیوں یا سیکڑوں صارفین سے ضرب دیں اور انفرنس لیئر تیزی سے رکاوٹ بن جاتی ہے۔

شرطیں

اس ٹیوٹوریل پر عمل کرنے کے لیے، آپ کو بنیادی Python اور ٹرمینل کمانڈز سے واقف ہونا چاہیے۔ آپ کے پاس Python، ایک پیکیج مینیجر بھی ہونا چاہیے جیسے: pip یا uvکوڈ ایڈیٹر اب انسٹال ہو گیا ہے۔

LLM پرامپٹس اور API کلائنٹس سے کچھ واقفیت مددگار ہے، لیکن AI ایجنٹس، vLLM، یا inference optimization کے ساتھ کسی پیشگی تجربے کی ضرورت نہیں ہے۔ AI ایجنٹوں کے بارے میں مزید جاننے کے لیے، یہ مضمون پڑھیں۔

یہ ٹیوٹوریل vLLM-Metal کا استعمال کرتا ہے، لہذا مثالیں مقامی طور پر Apple Silicon پر چل سکتی ہیں۔ یہ ٹیوٹوریل macOS، Windows اور Linux پر کام کرتا ہے۔ میں 32GB RAM کے ساتھ MacBook Pro استعمال کر رہا ہوں اور کوئی بیرونی GPU نہیں، لیکن چھوٹے پہلے سے تربیت یافتہ ماڈلز کا استعمال مجھے زیادہ محدود ہارڈ ویئر پر بھی ورک فلو چلانے کی اجازت دیتا ہے۔

ایل ایل ایم ریزننگ کیا ہے؟

انفرنس ایک تربیت یافتہ ماڈل کا استعمال کرتے ہوئے ان پٹ سے آؤٹ پٹ پیدا کرنے کا عمل ہے۔ بڑے لینگویج ماڈلز کے لیے، اس کا مطلب ہے پرامپٹس پر کارروائی کرنا اور ایک وقت میں آؤٹ پٹ ایک ٹوکن کی پیش گوئی کرنا۔

اندازہ تربیت سے مختلف ہے۔ تربیت کے دوران، ماڈل وزن کو ایڈجسٹ کرکے سیکھتا ہے۔ تخمینہ کے دوران، وہ وزن مقرر رہتے ہیں اور ماڈل وہی استعمال کرتا ہے جو اس نے جواب پیدا کرنے کے لیے پہلے ہی سیکھا ہے۔

یہاں تک کہ اگر ماڈل مزید نہیں سیکھ رہا ہے، تب بھی اندازہ مہنگا ہو سکتا ہے۔ بڑے ماڈلز کو زیادہ میموری اور کمپیوٹیشن کی ضرورت ہوتی ہے، طویل پرامپٹس کو پروسیس کرنے کے لیے مزید کام کی ضرورت ہوتی ہے، اور طویل جوابات کے لیے مزید جنریشن اقدامات کی ضرورت ہوتی ہے۔ اگر بہت سے صارفین بیک وقت درخواستیں جمع کراتے ہیں، تو انفرنس لیئر تیزی سے کارکردگی میں رکاوٹ بن سکتی ہے۔

LLM Inference کس طرح CPU اور GPU کا استعمال کرتا ہے۔

ایک ماڈل سرونگ سسٹم کی دو وسیع ذمہ داریاں ہیں: کوآرڈینیشن کی درخواست اور ماڈل پر عمل درآمد۔

میزبان سائیڈ پر، سرونگ سسٹم درخواستوں کو قبول کرتا ہے، پرامپٹس کو ٹوکنائز کرتا ہے، درخواست کی حیثیت کو ٹریک کرتا ہے، اور یہ تعین کرتا ہے کہ کون سی درخواستوں کو ہر عمل میں شامل کرنا ہے۔ ایکسلریٹر کی طرف، عام طور پر ایک GPU، ماڈل پرامپٹ پر کارروائی کرتا ہے اور ٹوکن پیدا کرنے کے لیے ضروری ٹینسر آپریشن کرتا ہے۔

LLM استدلال دو بنیادی مراحل پر مشتمل ہے: پری فل اور کھولنا.

پری پاپولیشن کے دوران، ماڈل ان پٹ پرامپٹ سے تمام ٹوکن پر کارروائی کرتا ہے۔ آبادی کی تعداد کمپیوٹیشنل طور پر بہت زیادہ ہوتی ہے کیونکہ بہت سے پرامپٹ ٹوکنز کو متوازی طور پر پروسیس کیا جا سکتا ہے۔ اس لیے، بات چیت کی سرگزشت، بازیافت شدہ دستاویزات، یا ٹول ہدایات پر مشتمل طویل اشارے پہلے آؤٹ پٹ ٹوکن کے ظاہر ہونے سے پہلے وقت بڑھا سکتے ہیں۔

ضابطہ کشائی کے دوران، ماڈل ایک وقت میں ایک ٹوکن آؤٹ پٹ تیار کرتا ہے۔ ہر نیا ٹوکن پچھلے ٹوکن پر منحصر ہوتا ہے، لہذا یہ ڈی کوڈنگ مرحلے کے دوران ترتیب وار تیار ہوتا ہے۔ لہذا، طویل جوابات کے لیے ماڈل پر عمل درآمد کے بہت سے الگ الگ مراحل کی ضرورت ہوتی ہے۔

سیدھے الفاظ میں:

  • طویل ان پٹس کے نتیجے میں پہلے سے بھرنے کے اخراجات زیادہ ہوتے ہیں۔

  • لمبے آؤٹ پٹ کو ڈی کوڈ کرنے میں زیادہ لاگت آتی ہے۔

  • مزید ایک ساتھ درخواستیں شیڈولنگ اور میموری پریشر دونوں میں اضافہ کرتی ہیں۔

GPUs کمپیوٹ کی صلاحیت اور میموری دونوں کے ذریعہ محدود ہیں۔ اس میں ماڈل وزن، عارضی عمل درآمد کے ڈیٹا، اور فعال درخواستوں سے متعلق حالت ہونی چاہیے۔

درخواست کی حیثیت کے سب سے اہم حصوں میں سے ایک ہے کے وی کیشے. توجہ کے دوران، ماڈل پہلے پروسیس شدہ ٹوکنز کے لیے کلیدی اور قدر کی نمائندگی کرتا ہے۔ ان نمائندگیوں کو محفوظ کرنے سے ماڈل کو ان کو دوبارہ استعمال کرنے کی اجازت ملتی ہے جبکہ بعد میں آنے والے ٹوکنز تیار کرتے ہوئے ہر ضابطہ کشائی کے مرحلے پر پوری ترتیب کا دوبارہ حساب لگانے کے بجائے۔

KV کیچنگ خود بخود نسل کو عملی بناتی ہے، لیکن یہ میموری کو بھی استعمال کرتی ہے۔ جیسے جیسے پرامپٹس اور جوابات کی تعداد میں اضافہ ہوتا ہے، ہر ایک فعال درخواست کے لیے مزید KV کیش اسپیس کی ضرورت ہوتی ہے۔ اس کا مطلب یہ ہے کہ دستیاب KV کیش میموری براہ راست ان درخواستوں کی تعداد کو متاثر کر سکتی ہے جس پر سرور بیک وقت کارروائی کر سکتا ہے۔

AI ایجنٹ کے کام کے بوجھ کو سنبھالنا کیوں مشکل ہے۔

AI ایجنٹس ان تخمینے کے مسائل کو بڑھا دیتے ہیں کیونکہ ایک صارف کی درخواست کئی ماڈل کالز کو متحرک کر سکتی ہے۔

ایجنٹ اپنے اگلے کاموں کی منصوبہ بندی کرنے، ٹولز کو منتخب کرنے، ٹول کے نتائج کی تشریح کرنے، بازیافت کی گئی معلومات کا خلاصہ کرنے، غلطیوں سے بازیافت کرنے، اس بات کا تعین کرنے کے لیے کہ آیا مزید کارروائی کی ضرورت ہے، یا حتمی ردعمل پیدا کرنے کے لیے ماڈل سے درخواست کر سکتے ہیں۔

ایک صارف کے تعامل کے نتیجے میں 10، 20، یا اس سے زیادہ استدلال کی درخواستیں ہو سکتی ہیں۔ درجنوں یا سینکڑوں فعال صارفین کے ساتھ، ماڈل کالز کی تعداد تیزی سے بڑھ سکتی ہے۔

ایجنٹ کی درخواستیں بھی ناہموار ہیں۔ ایک درخواست میں ایک مختصر سوال شامل ہوسکتا ہے، جب کہ دوسری درخواست میں طویل سسٹم پرامپٹس، گفتگو کی سرگزشت، تلاش شدہ دستاویزات، اور متعدد ٹول کے نتائج شامل ہوسکتے ہیں۔ پیدا ہونے والے ردعمل کی لمبائی بھی بہت مختلف ہو سکتی ہے۔

یہ ایک متحرک کام کا بوجھ پیدا کرتا ہے جہاں درخواستیں مختلف اوقات میں آتی ہیں، مختلف مقدار میں میموری استعمال کرتی ہیں، اور مختلف اوقات میں مکمل ہوتی ہیں۔ ان درخواستوں کو مؤثر طریقے سے ہینڈل کرنے کے لیے ماڈل کو GPU پر لوڈ کرنے سے زیادہ کی ضرورت ہوتی ہے۔ سروس لیئر کو کام کا مستقل شیڈول کرنا، میموری کا نظم کرنا، اور مختصر درخواستوں کو طویل درخواستوں سے غیر ضروری طور پر تاخیر سے روکنا چاہیے۔

کس طرح vLLM ایجنٹ کے کام کا بوجھ فراہم کرتا ہے۔

vLLM ایک اوپن سورس انفرنس رن ٹائم اور سروس انجن ہے جو بڑے پیمانے پر لینگویج ماڈلز کے لیے ڈیزائن کیا گیا ہے۔ یہ ماڈل پر عمل درآمد، درخواست کے شیڈولنگ، بیچنگ، اور KV کیش میموری کا انتظام کرتا ہے جبکہ ایک OpenAI- موافق API کو سامنے لاتا ہے۔

ماڈل کو براہ راست اپنی درخواست کے اندر لوڈ کرنے اور اس طرح کے طریقہ کار کو کال کرنے کے بجائے: model.generate()ایپلیکیشن vLLM سرور کو HTTP درخواست بھیجتی ہے۔ یہ درخواست یا ایجنٹ منطق کو اس کے نیچے موجود انفراسٹرکچر سے الگ کرتا ہے۔

جب متعدد درخواستیں فعال ہوتی ہیں، vLLM الگ تھلگ ماڈل لوپ کے ذریعے ہر درخواست پر کارروائی کرنے کے بجائے درخواستوں کو ایک ساتھ شیڈول کرتا ہے۔ یہ سروس لیئر کو دستیاب ایکسلریٹر کو زیادہ موثر طریقے سے استعمال کرنے کی اجازت دیتا ہے۔

متعدد vLLM خصوصیات خاص طور پر ایجنٹ کے کام کے بوجھ سے متعلق ہیں۔

  • مسلسل بیچ پروسیسنگ جیسے ہی درخواستیں آتی ہیں اور مکمل ہوتی ہیں، ہم فعال بیچ کو اپ ڈیٹ کرتے ہیں۔ جب ایک درخواست مکمل ہو جاتی ہے، تو دوسری درخواست اصل بیچ میں تمام درخواستوں کے مکمل ہونے کا انتظار کیے بغیر بعد میں عمل درآمد کے مرحلے میں اپنی جگہ لے سکتی ہے۔

  • پیجڈ توجہ ہر ایک درخواست کو ایک بڑے متصل علاقے پر قبضہ کرنے کی ضرورت کے بجائے، ہم KV کیش میموری کو مقررہ سائز کے بلاکس میں منظم کرتے ہیں۔ یہ میموری کے ٹکڑے کو کم کرتا ہے اور آزاد کیش بلاکس کو دوبارہ استعمال کرنا آسان بناتا ہے۔

  • خودکار سابقہ ​​کیشنگ مماثل پرامپٹ سابقہ ​​کے ساتھ درخواستوں کی اجازت موجودہ KV کیش بلاکس کے دوبارہ استعمال کی اجازت دیتی ہے۔ یہ اس وقت مفید ہو سکتا ہے جب ایجنٹ کی درخواستیں ایک ہی سسٹم پرامپٹ، ٹول ڈیفینیشن، بات چیت کی سرگزشت، یا بازیافت شدہ دستاویز کا اشتراک کریں۔

  • OpenAI ہم آہنگ API موجودہ ایپلیکیشنز اور ایجنٹ فریم ورک کو نسبتاً معمولی کنفیگریشن تبدیلیوں کے ساتھ vLLM سے منسلک کیا جا سکتا ہے۔

سادہ KV کیشنگ جدید خودکار اندازے کا ایک معیاری حصہ ہے۔ vLLM کا فائدہ اس طریقے سے حاصل ہوتا ہے جس طرح سے یہ درخواستوں کو شیڈول کرتا ہے، ان کا انتظام کرتا ہے، مختص کرتا ہے، اور KV کیش میموری کو بیک وقت کام کے بوجھ میں دوبارہ استعمال کرتا ہے۔

پریفکس کیشنگ دہرائے جانے والے کام کو کم کرتی ہے، خاص طور پر آبادی سے پہلے کے مرحلے میں۔ یہ نئے آؤٹ پٹ ٹوکنز کی تخلیق کو تیز نہیں کرتا ہے، لہذا جب درخواستیں طویل سابقے کا اشتراک کرتی ہیں تو سب سے زیادہ فائدہ ہوتا ہے۔

یہ اصلاحیں vLLM کو کارآمد بناتی ہیں کیونکہ ایجنٹ ایپلی کیشنز سنگل یوزر پروٹو ٹائپس سے آگے بڑھ جاتی ہیں اور ہم آہنگی، غیر یکساں، اور میموری کے لحاظ سے کام کے بوجھ کو سنبھالنا شروع کر دیتی ہیں۔

حوصلہ افزائی اور فن تعمیر

جب AI ایجنٹس ایک ساتھ ٹریفک پر کارروائی شروع کرتے ہیں، تو ماڈل کا اندازہ کارکردگی کی بڑی رکاوٹوں میں سے ایک بن سکتا ہے۔ ایجنٹ اپنا زیادہ تر وقت ماڈل کے اشارے پر کارروائی کرنے اور ٹوکن تیار کرنے کے انتظار میں گزار سکتا ہے۔

ایجنٹ کی منطق کو دوبارہ لکھنے کے بجائے، آپ اس کے نیچے موجود ماڈل پیش کرنے والی پرت کو بہتر بنا سکتے ہیں۔ یہ وہ جگہ ہے جہاں vLLM فٹ بیٹھتا ہے۔ یہ ایک OpenAI- مطابقت پذیر انفرنس سرور فراہم کرتا ہے جو کہ مستقل بیچنگ اور KV کیش مینجمنٹ جیسی خصوصیات کے ساتھ ہم آہنگی کی درخواستوں کو مؤثر طریقے سے ہینڈل کرنے کے لیے ڈیزائن کیا گیا ہے۔

درخواست کا بہاؤ مندرجہ ذیل ہے:

User sends prompt
          ↓
Agent sends an OpenAI-compatible request
          ↓
vLLM receives request and schedules the request
          ↓
Prompt enters continuous batch
          ↓
Prefill processes the prompt and populates the KV cache
          ↓
Decode generates tokens while reusing the KV cache
          ↓
vLLM returns the generated response
          ↓
Agent receives final text

جب متعدد درخواستیں بیک وقت پہنچتی ہیں، vLLM مطابقت پذیر کاموں کو ایک مسلسل بدلتے ہوئے بیچ میں جوڑ سکتا ہے۔ پچھلی درخواستیں مکمل ہونے کے بعد نئی درخواستیں داخل کی جا سکتی ہیں، جس سے ہارڈ ویئر کے استعمال اور مجموعی طور پر تھرو پٹ کو بہتر بنانے میں مدد ملتی ہے۔

مرحلہ 1: vLLM انسٹال کریں۔

معیاری vLLM انسٹالیشن بنیادی طور پر NVIDIA GPUs جیسے معاون ایکسلریٹر والے لینکس سسٹمز کے لیے ڈیزائن کی گئی ہے۔ Apple Silicon Macs پر، vLLM-Metal دستیاب ہے، ایک کمیونٹی کی دیکھ بھال کرنے والا vLLM ہارڈویئر پلگ ان جو MLX اور Apple کا Metal فریم ورک استعمال کرتا ہے۔

$ curl -fsSL https://raw.githubusercontent.com/vllm-project/vllm-metal/main/install.sh | bash

$ source ~/.venv-vllm-metal/bin/activate

$ pip install openai

آفیشل دستاویزات پلیٹ فارم اور ماحول سے متعلق مخصوص انسٹالیشن نوٹس فراہم کرتی ہیں، خاص طور پر GPU اور CUDA سیٹنگز کے لیے (مزید تفصیلات کے لیے دستاویزات یہاں دیکھیں)۔

مرحلہ 2: vLLM سرور شروع کریں۔

اب آئیے ماڈل کا استعمال کرتے ہوئے ایک OpenAI سے مطابقت رکھنے والا سرور شروع کریں۔

vllm serve mlx-community/Qwen2.5-0.5B-Instruct-4bit --host 127.0.0.1 --port 8000

کہ vllm serve کمانڈ ماڈل کا اندازہ لگانے کے لیے مقامی اوپن اے آئی سے مطابقت رکھنے والا API سرور شروع کرتی ہے۔

شروع ہونے پر vLLM سرور درج ذیل آؤٹ پٹ دکھاتا ہے:

...
(APIServer pid=35422) INFO 08-13 22:17:00 [launcher.py:99] API server: waiting for HTTP server to start
(APIServer pid=35422) INFO:     Started server process [35422]
(APIServer pid=35422) INFO:     Waiting for application startup.
(APIServer pid=35422) INFO:     Application startup complete.
(APIServer pid=35422) INFO 08-13 22:17:01 [launcher.py:105] API server: HTTP server started

ایک بار شروع ہونے کے بعد، سرور مقامی اختتامی پوائنٹس پر سنتا ہے، عام طور پر:

http://localhost:8000/v1

آپ تصدیق کر سکتے ہیں کہ سرور چل رہا ہے اور سرور پر ظاہر ہونے والے ماڈل کے نام کا معائنہ کر سکتے ہیں۔

$ curl http://localhost:8000/v1/models

{"object":"list","data":[{"id":"mlx-community/Qwen2.5-0.5B-Instruct-4bit","object":"model","created":1786685135,"owned_by":"vllm","root":"mlx-community/Qwen2.5-0.5B-Instruct-4bit","parent":null,"max_model_len":32768,"permission":[{"id":"modelperm-b05a3fc5dd824296","object":"model_permission","created":1786685135,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}%                               

مرحلہ 3: AI ایجنٹ کو vLLM سے جوڑیں۔

اب ایجنٹ کو vLLM سرور سے مربوط کریں۔ vLLM OpenAI کے ساتھ مطابقت رکھتا ہے، لہذا آپ OpenAI Python کلائنٹ کو اپنے مقامی سرور کی طرف اشارہ کرنے کے لیے استعمال کر سکتے ہیں۔ درج ذیل فائل کو محفوظ کریں: vllm_agent.py:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="NA",
)

def ask_model(user_input: str) -> str:
    response = client.chat.completions.create(
        model="mlx-community/Qwen2.5-0.5B-Instruct-4bit",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": user_input},
        ],
        temperature=0,
    )

    return response.choices[0].message.content


print(ask_model("Why are automated tests useful?"))

اصل OpenAI API کلید کی یہاں ضرورت نہیں ہے کیونکہ درخواست مقامی vLLM سرور کو جاتی ہے نہ کہ OpenAI API کو۔

مرحلہ 4: ایجنٹ کو چلائیں۔

ایجنٹ کو ایک نئے ٹرمینل میں چلائیں۔ یقینی بنائیں کہ vLLM سرور چل رہا ہے۔

$ python vllm_agent.py

ایجنٹ تشخیص کے لیے vLLM کو ایک درخواست بھیجتا ہے۔ vLLM تخمینہ چلانے اور ردعمل پیدا کرنے کے لیے ماڈلز کا استعمال کرتا ہے۔

نمونہ آؤٹ پٹ

vLLM سرور لاگ دکھاتا ہے:

(APIServer pid=35422) INFO:     127.0.0.1:59866 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=35422) INFO 08-13 22:36:11 [loggers.py:310] Engine 000: Avg prompt throughput: 2.5 tokens/s, Avg generation throughput: 20.4 tokens/s, Running: 0 reqs, Waiting: 0 reqs, GPU KV cache usage: 0.0%, Prefix cache hit rate: 33.7%

33.7% کی پریفکس ٹو کیشے ہٹ ریٹ سے پتہ چلتا ہے کہ 33.7% اہل پرامپٹ ٹو پریفکس ٹوکنز vLLM کے کیشے میں پائے گئے اور دوبارہ گنتی کے بجائے دوبارہ استعمال کیے گئے۔ یہ فالتو کمپیوٹیشن کو کم کرکے اور پروسیسنگ کے وقت کی بچت کرکے vLLM کی کارکردگی کے ایک اہم فوائد کو ظاہر کرتا ہے۔

ایجنٹ کے نتائج:

Automated tests are useful for several reasons:

1. Efficiency: Automated tests can be run quickly and efficiently, allowing developers to focus on other aspects of the codebase.

...

Overall, automated tests are a valuable tool for ensuring that code is well-written and that it is tested thoroughly. They can help ensure that the code is well-written and that it is tested thoroughly, which can help ensure that the code is well-written and that it is tested thoroughly.
The main benefit is not just that the response works. The real benefit is that the same agent can now sit on top of a serving layer built for higher concurrency and better GPU utilization.

KV کیشنگ، پیجڈ اٹینشن، لگاتار پلیسمنٹ، اور پریفکس کیشنگ کیوں اہم ہیں۔

ان خصوصیات کو چند آسان حسابات سے زیادہ آسانی سے سمجھا جا سکتا ہے۔

کے وی کیشے

ٹرانسفارمر ماڈل کے اندر، توجہ کا طریقہ کار اندرونی نمائندگی پیدا کرتا ہے جسے سوالات، چابیاں اور اقدار کہتے ہیں۔

تعمیر کے دوران، ماڈل کو پچھلے ٹوکن کی کلیدی اور قدر کی معلومات کی ضرورت ہوتی ہے تاکہ وہ پچھلے ٹوکن پر توجہ دے سکے۔ ہر بار شروع سے اس معلومات کو دوبارہ شمار کرنے کے بجائے، ماڈل اس معلومات کو میموری میں محفوظ کرتا ہے۔ ذخیرہ شدہ حالت کو KV کیشے کہا جاتا ہے۔

KV کیشے کا استعمال بہت تیز تخلیق کی اجازت دیتا ہے، لیکن GPU میموری کا استعمال بھی کرتا ہے۔ درخواست میں جتنے زیادہ ٹوکن ہوں گے، اتنی ہی زیادہ KV کیش میموری کی ضرورت ہوگی۔ یہ ایک وجہ ہے کہ لمبے اشارے، طویل مکالموں اور بازیافت شدہ سیاق و سباق کی وجہ سے تخمینہ لاگت بہت زیادہ ہو سکتی ہے۔

فی ٹوکن KV کیش میموری کا ایک تخمینہ ہے:

2 × number of layers × number of KV heads × head dimension × bytes per value

32 تہوں، 8KV ہیڈ، ہیڈ ڈائمینشن 128، اور FP16 درستگی والے ماڈل کے لیے، KV کیش تقریباً 128KB فی ٹوکن ہے۔ مختلف ماڈلز میں مختلف KV کیشے سائز ہوتے ہیں، لیکن عمومی رجحان ایک جیسا ہے۔ طویل سیاق و سباق زیادہ GPU میموری استعمال کرتے ہیں۔

پیجڈ توجہ

PagedAttention KV کیشے کے لیے vLLM کا میموری مینجمنٹ اپروچ ہے۔ GPU میموری کے ایک متصل علاقے پر قبضہ کرنے کے لیے ہر ترتیب کے لیے KV کیشے کی ضرورت کے بجائے، PagedAttention اسے آزادانہ طور پر مختص کرتا ہے اور اسے چھوٹے، مقررہ سائز کے بلاکس میں محفوظ کرتا ہے جنہیں دوبارہ استعمال کیا جا سکتا ہے۔

یہ مددگار کیوں ہے؟ ایک سادہ نظام میں، غیر متوقع طوالت کے سلسلے کے لیے بڑے ملحقہ علاقوں کو محفوظ رکھنے سے ٹکڑے ٹکڑے ہونے کی وجہ سے میموری ضائع ہو سکتی ہے۔ PagedAttention KV کیشے کو مقررہ سائز کے بلاکس میں تقسیم کرتا ہے جو درخواست پر مختص کیے جاتے ہیں اور جسمانی طور پر متصل ہونے کی ضرورت نہیں ہے۔ ایک بار درخواست مکمل ہونے کے بعد، بلاک مفت پول میں واپس آ جاتا ہے اور دوسری درخواستوں میں دوبارہ استعمال کیا جا سکتا ہے۔ یہ میموری کے استعمال کو بہتر بناتا ہے اور سرور کو بیک وقت زیادہ فعال ترتیبوں پر کارروائی کرنے کی اجازت دیتا ہے۔

مسلسل بیچ

روایتی بیچ پروسیسنگ عام طور پر مقررہ راؤنڈ میں چلتی ہے۔ سرور درخواستوں کا ایک گروپ جمع کرتا ہے، اس بیچ کے لیے ضابطہ کشائی کے مرحلے کو انجام دیتا ہے، اور بیچ سائیکل مکمل ہونے تک اسی گروپ کے لیے ڈی کوڈنگ جاری رکھتا ہے۔ اس کا مطلب ہے کہ ایکٹیو ریکوسٹ سیٹ زیادہ تر فکس رہتا ہے جب کہ بیچ پر کارروائی ہوتی ہے۔

یہ LLM خدمات کے لیے اچھی طرح سے کام نہیں کرتا کیونکہ درخواستیں ایک ساتھ مکمل نہیں ہوتی ہیں۔ مختصر درخواستیں جلد مکمل ہو سکتی ہیں، لیکن ان کے سلاٹس غیر استعمال شدہ رہ سکتے ہیں جب کہ طویل درخواستوں کو ڈی کوڈ کیا جانا جاری ہے۔

مسلسل بیچنگ سرور کو کھلی جگہوں کو فوری طور پر بھرنے کی اجازت دیتی ہے۔ نئی درخواستیں جگہ کے دستیاب ہوتے ہی اگلے ضابطہ کشائی کے مرحلے میں حصہ لے سکتی ہیں، بجائے کہ پورے بیچ کے مکمل ہونے کا انتظار کریں۔

مثال کے طور پر:

  • درخواست A کے لیے 100 آؤٹ پٹ ٹوکنز درکار ہیں۔

  • درخواست B کے لیے 20 آؤٹ پٹ ٹوکنز درکار ہیں۔

  • درخواست C پہنچ جاتی ہے جب A چل رہا ہو۔

فکسڈ بیچنگ کے ساتھ، B جلد ختم ہو سکتا ہے، لیکن C کو موجودہ بیچ سائیکل کے اختتام تک انتظار کرنا پڑ سکتا ہے۔ مسلسل بیچ پروسیسنگ B کو ایک سلاٹ اور C کو اگلے ضابطہ کشائی کے مرحلے میں حصہ لینے کی اجازت دیتی ہے۔ یہ GPU کو مصروف رکھتا ہے اور بوجھ کے تحت تھرو پٹ کو بہتر بناتا ہے۔

سابقہ ​​کیشنگ

ایجنٹ اکثر وہی لمبے سسٹم پرامپٹس، ٹول ہدایات، یا ورک فلو کے سابقے دوبارہ استعمال کرتے ہیں۔ پریفکس کیشنگ vLLM کو مشترکہ پرامپٹ سابقے کے لیے KV کیش کو ہر بار دوبارہ گنتی کرنے کی بجائے دوبارہ استعمال کرنے کی اجازت دیتی ہے۔ دستاویزات اسے خودکار سابقہ ​​کیشنگ کے طور پر بیان کرتی ہیں۔

سادہ مثال:

پریفکس کیشنگ کے بغیر، ان 800 ٹوکن پریفکس پر 50 بار کارروائی کی جائے گی۔

800 × 50 = 40,000 prefix tokens processed

پریفکس کیشنگ آپ کو ان مشترکہ سابقوں کی ایک بار گنتی کرنے اور انہیں دوبارہ استعمال کرنے کی اجازت دیتی ہے، جس سے دہرائے جانے والے کام کو کافی حد تک کم کیا جاتا ہے۔

مجھے vLLM کب استعمال کرنا چاہیے؟

vLLM اس کے لیے موزوں ہے:

  • خود میزبان کھلی زبان کا ماڈل

  • متعدد ساتھی صارفین کی خدمت کرنا

  • اعلی تخمینہ تھرو پٹ کی ضرورت ہے۔

  • ایسے ایجنٹ، چیٹ بوٹس، یا RAG سسٹم چلائیں جو اکثر ماڈل کالز کرتے ہیں۔

  • اپنے انفرنس انفراسٹرکچر کے لیے ایک OpenAI- موافق API چاہتے ہیں۔

کم ٹریفک والے چھوٹے، واحد صارف پروٹو ٹائپس کے لیے، ایک آسان مقامی ماڈل رنر کافی ہو سکتا ہے۔ اگر انفرنس تھرو پٹ، کنکرنسی، یا کے وی کیش میموری میں رکاوٹیں ہیں، تو vLLM اور بھی قیمتی ہو جاتا ہے۔

نتیجہ

اس ٹیوٹوریل میں، ہم نے دریافت کیا کہ کس طرح vLLM AI ایپلی کیشنز کے پیچھے سروس لیئر کو بہتر بنا سکتا ہے۔ میں نے ایک مقامی vLLM سرور شروع کیا اور ایک OpenAI مطابقت پذیر Python کلائنٹ کا استعمال کرتے ہوئے منسلک ہوا۔

vLLM کو مستقل بیچنگ، PagedAttention، اور prefix caching کے ذریعے ہم آہنگی کا اندازہ بہتر بنانے کے لیے ڈیزائن کیا گیا ہے۔ مقامی مثال انضمام کو ظاہر کرتی ہے، لیکن ایک مخصوص سسٹم کے لیے حقیقی تھرو پٹ اور تاخیر سے ہونے والی بہتری کی پیمائش کرنے کے لیے ایک ساتھ لوڈ ٹیسٹنگ کی ضرورت ہے۔

یہاں سے آپ مختلف ماڈلز آزما سکتے ہیں، لوڈ ٹیسٹ شامل کر سکتے ہیں، یا موجودہ LangChain یا کسٹم ایجنٹ کو اسی vLLM اینڈ پوائنٹ سے جوڑ سکتے ہیں۔ مبارک ہو ٹنکرنگ!

اگر آپ کو یہ سبق پسند آیا ہے، تو آپ میرے بلاگ پر میری مزید تحریریں (حالیہ پوسٹس میں سسٹمز ڈیزائن پیپرز سیریز شامل ہیں)، میری ذاتی ویب سائٹ پر میرا کام، اور LinkedIn پر اپ ڈیٹس حاصل کر سکتے ہیں۔

Scroll to Top