𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗮𝗻𝗱 𝗣𝗮𝗴𝗲𝗱𝗔𝘁𝘁𝗲𝗻𝘁𝗶𝗼𝗻: 𝗪𝗵𝘆 𝗬𝗼𝘂𝗿 𝗟𝗟𝗠 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗹𝗼𝘄𝘀 𝗗𝗼𝘄𝗻

آپ کا LLM سرور سست چل رہا ہے۔

آپ نے چار A100 GPUs پر ایک 70B ماڈل ڈیپلائے کیا ہے۔ صبح 8 بجے تک سب کچھ ٹھیک نظر آتا ہے۔ دوپہر کے کھانے تک، latency دوگنی ہو جاتی ہے۔ آپ اپنی میموری چیک کرتے ہیں۔ اس کا زیادہ تر حصہ "tensor buffers" نے لے لیا ہے۔ یہ درحقیقت پرانی گفتگو کے کیش شدہ (cached) اسٹیٹس ہیں۔

یہ KV cache کا مسئلہ ہے۔ یہ پروڈکشن LLM سرونگ میں سب سے بڑی رکاوٹ (bottleneck) ہے۔

KV cache کیا ہے؟

ہر transformer ماڈل ایک ایک کر کے tokens تیار کرتا ہے۔ ایک نیا ٹوکن بنانے کے لیے، ماڈل کو تمام پچھلے ٹوکنز کے Key اور Value tensors کی ضرورت ہوتی ہے۔ ہر بار انہیں دوبارہ کیلکولیٹ کرنا بہت سست عمل ہے۔ اس کے بجائے، انجن انہیں اسٹور کر لیتا ہے۔ یہی اسٹوریج KV cache کہلاتا ہے۔

میموری کا مسئلہ:

Llama 3.1 70B ماڈل کے لیے، ایک 4096-token سیکوئنس کو تقریباً 1.3 GB میموری کی ضرورت ہوتی ہے۔

اگر ایک ہی وقت میں 256 صارفین ہوں، تو آپ کو 336 GB میموری کی ضرورت ہوگی۔ یہ چار A100 GPUs کی گنجائش سے زیادہ ہے۔ KV cache اتنی تیزی سے بڑھتا ہے کہ یہ اکثر ماڈل کے اپنے weights سے بھی زیادہ میموری استعمال کر لیتا ہے۔

روایتی میموری مینجمنٹ کیوں ناکام ہو جاتی ہے:

  • Internal fragmentation: آپ 4096 tokens کے لیے جگہ مختص کرتے ہیں لیکن صرف 300 استعمال کرتے ہیں۔ آپ اس جگہ کا 93% ضائع کر دیتے ہیں۔
  • No sharing: ایک ہی system prompt استعمال کرنے والے دو صارفین، اس پرامپٹ کی اپنی اپنی الگ کاپی اسٹور کرتے ہیں۔
  • All-or-nothing eviction: جب میموری ختم ہو جاتی ہے، تو آپ کو پورا سیکوئنس CPU پر منتقل کرنا پڑتا ہے۔ اس سے GPU رک جاتا ہے۔

PagedAttention اسے کیسے ٹھیک کرتا ہے:

PagedAttention ایک آپریٹنگ سسٹم کی طرح کام کرتا ہے۔ یہ KV cache کو چھوٹے، مقررہ سائز کے بلاکس میں تقسیم کر دیتا ہے جنہیں pages کہا جاتا ہے۔

یہ تین اہم مسائل حل کرتا ہے:

  • On-demand allocation: ایک سیکوئنس صرف تب ہی pages لیتا ہے جب وہ بڑھتا ہے۔ آپ غیر استعمال شدہ گنجائش پر میموری ضائع نہیں کرتے۔
  • Shared prefix support: متعدد صارفین ایک ہی مشترکہ system prompt کے لیے ایک ہی فزیکل pages شیئر کر سکتے ہیں۔ یہ میموری کی بھاری مقدار بچانے کے لیے "copy-on-write" لاجک کا استعمال کرتا ہے۔
  • Fine-grained eviction: جب میموری بھر جاتی ہے، تو سسٹم بڑے سیکوئنسز کے بجائے چھوٹے pages کو CPU پر منتقل کر دیتا ہے۔

نتیجہ:

PagedAttention (vLLM کے اندر موجود ٹیکنالوجی) کا استعمال روایتی طریقوں کے مقابلے میں throughput کو 2x سے 4x تک بڑھا سکتا ہے۔

اسے کب استعمال کریں:

  • High concurrency۔
  • مختلف لمبائی کے سیکوئنسز۔
  • وہ prompts جن کا آغاز ایک جیسا ہو۔

اسے کب چھوڑ دیں:

  • Single-user local inference۔
  • بہت چھوٹے ماڈلز۔
  • ایسے ٹاسک جہاں ہر سیکوئنس کی لمبائی بالکل ایک جیسی ہو۔

ماخذ: https://dev.to/tech_nuggets/kv-cache-and-pagedattention-what-they-do-and-why-they-matter-jce

اختیاری سیکھنے کی کمیونٹی: https://t.me/GyaanSetuAi