Kubernetes میں AI inference لیٹنسی کی تشخیص اور اسے ٹھیک کرنے کا طریقہ

جمعرات کو تقریباً 2:15 بجے ہیں۔ آپ کی ٹیم نے دو ہفتے قبل ایک داخلی معاون تعینات کیا تھا۔ ڈیمو اتنا اچھا چلا کہ خزانچی نے پوچھا کہ کیا وہ معاہدہ پڑھ سکتا ہے۔ افواہ پھیل گئی۔ آج، پہلی بار، سب اسے ایک ہی وقت میں استعمال کر رہے ہیں۔

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

تو میں ڈیش بورڈ کھولتا ہوں۔

آپ کا نوڈ تیار ہے۔ پھلی چل رہی ہے۔ CPU 20% پر ہے۔ کوئی دوبارہ شروع نہیں، کوئی CrashLoopBackOff، کوئی انتباہ نہیں۔ Kubernetes کی طرف سے فراہم کردہ تمام سگنل اس بات کی نشاندہی کرتے ہیں کہ نظام صحت مند ہے۔

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

یہ اس ٹکڑے کی ناکامی کے بارے میں ہے. یہ بجلی کی بندش نہیں ہے۔ یہ ایک پرسکون پروڈکٹ ہے، سب کچھ تکنیکی طور پر ترتیب میں ہے اور پروڈکٹ ابھی تک دستیاب نہیں ہے۔

انڈیکس

آپ کی پہلی جبلت غلط ہے۔

اس وقت، آپ کی جبلت ماڈل پر شک کرنا ہے۔ غلط ورژن، غلط کوانٹائزیشن، سیاق و سباق بہت طویل، یا کسی نے سسٹم پرامپٹ کو تبدیل کر دیا۔

شاید ہی کوئی ماڈل۔

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

جب لوگ کہتے ہیں کہ ان کا ماڈل سست ہے، تو عام طور پر ان کا ماڈل ٹھیک ہوتا ہے۔ انتظار کہیں اور ہے۔

آپ اکیلے نہیں ہیں

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

پیداواری ماحول میں AI چلانے والے 200 پریکٹیشنرز کے سروے کے مطابق، تقریباً نصف (49.5%) نے چوٹی کے بوجھ پر تاخیر کو ان کا واحد مشکل ترین چیلنج قرار دیا۔ یہ درستگی کے بارے میں نہیں ہے۔ یہ کوئی فریب نہیں ہے۔ یہ فی ٹوکن لاگت نہیں ہے۔ تاخیر عین اس وقت ہوتی ہے جب لوگ اس خصوصیت کو استعمال کرنے کی کوشش کرتے ہیں۔

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

اسی مطالعہ میں ان تنظیموں کا حوالہ دیا گیا ہے جنہیں 99.9% دستیابی کے ساتھ 250ms سے کم رسپانس ٹائم کی ضرورت ہوتی ہے۔ براہ کرم غور سے پڑھیں، کیونکہ اسے لفظی طور پر لینا ناممکن ہے۔ کوئی معنی خیز LLM جواب ایک سیکنڈ کے 1/4 کے اندر مکمل نہیں ہوتا ہے۔ اس کا مطلب پہلے ٹوکن کا وقت ہونا چاہئے (جواب کا پہلا لفظ ظاہر ہونے تک کا وقت)، جو بہرحال اپنے آپ کو پکڑنے کے لئے صحیح چیز ہے۔ ایک بار ٹوکن پڑھنے کے قابل شرح پر بہہ جانے کے بعد، لوگ گننا بند کر دیتے ہیں۔ پہلی خاموشی سے پہلے کی خاموشی انہیں کھو دیتی ہے۔

جو آپ کو تعینات کرتے وقت کسی نے نہیں بتایا

یہاں وہ حصہ ہے جو ہر چیز کی وضاحت کرتا ہے:

ایک عام ویب درخواست مختصر، چھوٹی اور آخری درخواست کے برابر لاگت آتی ہے۔ Kubernetes شیڈولنگ یہ فرض کرتی ہے۔ سروس لوڈ بیلنسنگ یہ فرض کرتی ہے۔ افقی پوڈ آٹو اسکیلنگ یہ فرض کرتی ہے۔ سننے والے کنٹرولر پر ڈیفالٹ ٹائم آؤٹ یہ فرض کرتا ہے۔ اس قیاس کو کسی نے نہیں لکھا۔ کیونکہ 15 سال تک یہ صرف سچ تھا۔

ایل ایل ایم کی درخواست اسے تین جگہوں پر روکتی ہے۔

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

لہذا درخواست مختصر نہیں ہے اور 1 منٹ تک چل سکتی ہے۔ لاگت یکساں نہیں ہے، کیونکہ پیسٹ کیے گئے دستاویز پرامپٹ کی قیمت ایک لائن کے پیغام سے 50 گنا زیادہ ہو سکتی ہے۔ اور واقعی قلیل وسیلہ GPU میموری ہے، جو کہ واحد وراثت والے ڈیش بورڈ میں ظاہر نہیں ہوتا ہے۔

تو مانیٹر نے کہا کہ سب ٹھیک ہے۔ آپ غلط مشین سے پیمائش کر رہے تھے۔

گیارہ سیکنڈ کہاں گئے؟

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

مرحلہ 1، روٹنگ: لوڈ بیلنسر اندازہ لگا رہا ہے۔

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

دیرپا روابط صورتحال کو مزید خراب کر دیتے ہیں۔ HTTP/2 یا Keepalive کے ساتھ، کلائنٹ ایک کنکشن کھولتا ہے اور سب کچھ نیچے بھیج دیتا ہے، اور Kubernetes سروس اسے فی کنکشن کی بنیاد پر بیلنس کرتی ہے نہ کہ فی درخواست کی بنیاد پر۔ تمام ٹریفک ایک ہی بیک اینڈ پر بند رہتی ہے۔

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

مرحلہ 2، قطار: کچھ بھی مدد نہیں کرتا۔

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

دوسرا مسئلہ پہلے کے اوپر ڈھیر ہے۔ عام طور پر سگنل غلط ہوتا ہے۔ CPU بیکار ہے جبکہ GPU کام کر رہا ہے، لہذا CPU آپ کو یہاں کچھ نہیں بتاتا ہے۔ GPU کے استعمال میں بمشکل بہتری آئی ہے۔ نمونے کی مدت کے دوران، دانا چل رہا تھا اور سرور ایک درخواست پیش کر رہا تھا اور چھ درخواستیں پیش کرنے والے سرور نے 100% پڑھنے کی اطلاع دی۔ آپ نہیں جانتے کہ کوئی انتظار کر رہا ہے یا نہیں۔

قطار کی گہرائی ممکن ہے۔ vLLM پہلے سے چلنے والی اور انتظار کی درخواستوں کی تعداد کو Prometheus میٹرکس کے طور پر دکھاتا ہے۔ اس پر توسیع:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: llm-server
spec:
  scaleTargetRef:
    name: llm-server
  minReplicaCount: 2
  maxReplicaCount: 8
  cooldownPeriod: 600
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus.monitoring:9090
        query: sum(vllm:num_requests_waiting{app="llm-server"})
        threshold: "5"

میٹرک کا نام vLLM ورژن کے خلاف چیک کریں۔ کئی ریلیز میں نام بدل گیا ہے اور کوئی غلطی نہیں ہوئی ہے۔

جان بوجھ کر وہاں دو قدریں ہیں۔ کم از کم قیمت 2 ہے۔ کیونکہ کولڈ سٹارٹ کا مطلب ہے کہ آپ اس کے 0 پر بیٹھنے اور سروس کرنے کی توقع نہیں کر سکتے۔ 10 منٹ کا کولڈاؤن اس لیے ہے کہ جوش و خروش کے ساتھ پیچھے ہٹنے کا مطلب ہے دوبارہ ٹھنڈے آغاز کے لیے ادائیگی کرنا۔

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

مرحلہ 3، پری فل: آپ کے پاس GPU ہے، لیکن یہ بیکار ہے۔

Kubernetes CPUs کو ملیکور یونٹس اور مجموعی طور پر GPUs میں تقسیم کرتا ہے۔ فورڈ ایک کارڈ مانگتا ہے اور پورا کارڈ لے لیتا ہے، چاہے اسے 10% کارڈ کی ضرورت ہو یا تمام۔

فضلہ ایک واضح مسئلہ ہے۔ بکھرنا وہ ہے جو جمعرات کو برباد کرتا ہے۔ 16-bit 70B ماڈل کے لیے تقریباً 140 GB وزن کی ضرورت ہوتی ہے، لہذا نقل کے لیے ایک سے زیادہ GPUs فی نوڈ کی ضرورت ہوتی ہے۔ آپ 6 مفت GPUs کو 4 نوڈس میں 2-2-1-1 تقسیم کر سکتے ہیں اور نقلیں غیر معینہ مدت تک زیر التواء رہیں گی۔ کاغذ میں موجود صلاحیت کو کسی چیز کے لیے استعمال نہیں کیا جا سکتا اور نہ ہی کوئی انتباہ ہے کیونکہ کچھ بھی نہیں ٹوٹا ہے۔

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

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

مرحلہ 4، ڈی کوڈ: Ingress لوگوں کو روک رہی ہے۔

بہت سے لوگوں کو 60 سیکنڈ پڑھنے کا ٹائم آؤٹ اور رسپانس بفرنگ فعال ہونے کے ساتھ کنٹرولرز جہاز موصول ہوتے ہیں۔

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

کام کے بوجھ کے لیے لکھی گئی دو کنفیگریشن لائنیں جو اب موجود نہیں ہیں۔

اور ان چاروں کے نیچے ٹریفک جام اور مسائل کا کوئی نام و نشان تک نہیں۔

اندرونی AI ٹولز کو مستقل ٹریفک نہیں ملتی ہے۔ اچانک اضافہ ہوتا ہے۔ جب ہر کوئی صبح 9 بجے کام شروع کرتا ہے، آل کمپنی میٹنگ کے ایک گھنٹہ بعد، یا جب کوئی کسی مصروف سلیک چینل میں لنک شیئر کرتا ہے اور کہتا ہے کہ یہ واقعی بہت اچھا ہے۔ نقل کی ایک مقررہ تعداد ان میں سے بالکل ایک پر کارروائی کرے گی۔ زیادہ تر ٹیمیں اسے ایک پُرسکون ہفتے کے دوران ایک بار ترتیب دیتی ہیں اور کبھی بھی اس پر دوبارہ نظر نہیں آتیں، اسی دن اسے برباد اور ٹوٹ پھوٹ کے چھوڑ دیتی ہیں۔

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

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

مسئلہ تینوں ٹیموں کے درمیان خلا میں ہے، جن میں سے سبھی سچ بول رہے ہیں، اور انتظار کی روٹا، جس میں کوئی انتباہ نہیں بنایا گیا اور نہ ہی کوئی ڈیش بورڈ پوائنٹس۔

اس دوران، پلیٹ فارم ساکن نہیں ہوا۔

اس کہانی کا حوصلہ افزا حصہ یہ ہے کہ مذکورہ مسئلہ معلوم ہے اور اس کا حل جاری کیا گیا ہے۔

متحرک وسائل کی تقسیم بنیادی Kubernetes API میں ایکسلریٹر ہارڈویئر کی درخواستیں لاتی ہے، جس سے شیڈیولر کو مبہم یونٹوں کو کمپیوٹنگ کرنے کے بجائے آلات کے بارے میں استدلال کرنے کی اجازت ملتی ہے۔ Kueue CPU اور میموری کے ساتھ ٹاسک کیو اور کثیر کرایہ دار GPU کوٹہ شامل کرتا ہے۔ یہ تحقیقی کوششوں کو ختم کرنے سے روکنے کا ایک طریقہ ہے جن پر آپ کے صارفین انحصار کرتے ہیں۔ گیٹ وے API انفرنس ایکسٹینشن اور llm-d ماڈل سے آگاہ روٹنگ کا اضافہ کرتے ہیں: درخواست کی اہمیت، لائیو ماڈل میٹرکس کا متحرک توازن، اور کیش اسٹیٹ بیداری۔ آخری مرحلہ 1 میں قیاس آرائی پر مبنی لوڈ بیلنس کا براہ راست جواب ہے۔

شائع شدہ بینچ مارک اسکیل دکھاتے ہیں۔ Kueue ملٹی اسٹیج ورک لوڈ ٹرانزینٹس کو 15% تک کم کرتا ہے، ڈائنامک ایکسلریٹر سلائسنگ ٹاسک کی تکمیل کے اوسط وقت کو 36% تک کم کرتی ہے، اور Gateway API اور llm-d بھاری بوجھ کے تحت پہلے ٹوکن کے لیے ٹیل ٹائم کو 90% تک بہتر بناتا ہے۔

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

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

یہ یہاں پہلی جگہ کیسے پہنچا؟

یہ ایک مختصر چکر لگانے کے قابل ہے کیونکہ یہ بتاتا ہے کہ ٹولنگ دیر سے کیوں پہنچی۔

جب جنریٹیو AI انٹرپرائز پلاننگ دستاویزات میں داخل ہوا، تو یقین تھا کہ Kubernetes اسے برقرار نہیں رکھ سکے گا۔ کنٹینر آرکیسٹریشن CPU اور میموری کے چھوٹے بدلنے کے قابل یونٹس، سستے دوبارہ شروع ہونے، اور قابل تبادلہ نقل کے لیے بنایا گیا ہے۔ AI کو بڑی ریاستوں کو لے جانے کے لیے خصوصی محفوظ سلکان کی ضرورت ہوتی ہے جنہیں تعینات کرنے میں منٹ لگے۔ خاص مقصد کے پلیٹ فارم ابھرے ہیں۔

یہ کبھی نہیں پہنچا۔ AI مائیکرو سروسز اسٹیک میں داخل ہوا اور Kubernetes نے اسے جذب کر لیا۔

سروے کے اعداد و شمار بتاتے ہیں کہ کیوں۔ نصف سے زیادہ کمپنیاں کبھی بھی اپنے ماڈلز کی تربیت نہیں کرتی ہیں، اور صرف 7% کسی بھی دن اپنے ماڈلز کو تعینات کرتی ہیں۔ دریں اثنا، 82% کنٹینر استعمال کرنے والے Kubernetes کو پیداوار میں چلا رہے ہیں، اور جنریٹیو AI کی میزبانی کرنے والی 66% تنظیموں کے پاس پہلے سے ہی Kubernetes بطور سروس موجود ہے۔ ہم نے کام کے بوجھ کے لیے ڈیزائن کرنے میں برسوں گزارے ہیں جس کی صنعت میں تقریباً کسی نے بھی کوشش نہیں کی، جب کہ باقی سب نے خاموشی سے وزن ڈاؤن لوڈ کیا ہے اور انہیں اختتامی نقطوں کے پیچھے رکھ دیا ہے۔

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

لائٹس جانے کے بعد کیا کرنا ہے؟

آپریشنز سے لے کر وشوسنییتا تک کا راستہ پانچ عناصر پر ابلتا ہے: صلاحیت، کارکردگی، تعیناتی، لچک، اور ملکیت۔

حجم

اگر ایک درخواست 50 ٹوکن ہے اور اگلی درخواست 8,000 ہے، تو فی سیکنڈ کی درخواستیں بے معنی ہیں۔ ٹوکن فی سیکنڈ کے لیے منصوبہ بنائیں اور پرامپٹس اور تکمیل کو الگ سے ٹریک کریں۔ اس کی وجہ یہ ہے کہ یہ نظام کے مختلف حصوں پر دباؤ ڈالتا ہے۔ پرامپٹ ٹوکن پہلے سے آبادی کے دوران ایک کمپیوٹ برسٹ ہے۔ تکمیلی ٹوکن ایسے ڈرپس ہیں جو ڈی کوڈنگ کے دوران برقرار رہتے ہیں، جواب کی زندگی بھر کے لیے GPU میموری رکھتے ہیں۔

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

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

کارکردگی

دو نمبر سب سے اہم ہیں۔ ٹائم ٹو فرسٹ ٹوکن (TTFT) وہ وقت ہے جو صارف پرامپٹ بھیجنے اور جواب کا پہلا لفظ دیکھنے کے درمیان انتظار کرتا ہے۔ یہ اس بات کا تعین کرتا ہے کہ لوگ آپ کے پروڈکٹ پر بھروسہ کرتے ہیں یا نہیں۔ انٹر ٹوکن لیٹینسی، اس کے بعد ہر لفظ کے درمیان کی جگہ، اس بات کا تعین کرتی ہے کہ آیا جواب پڑھنے میں ہموار محسوس ہوتا ہے۔

یہ p95 اور p99 دونوں پر ٹریک کرتا ہے، اوسط نہیں۔ یہ صد فیصد ہے۔ p95 وہ وقت ہوتا ہے جب 95% درخواستیں آتی ہیں، لہذا یہ ظاہر کرتا ہے کہ 20 میں سے 1 صارفین کو کس چیز کا سب سے سست سامنا ہے۔ p99 100 میں سے سب سے سست 1 لوگوں کے لیے ایسا ہی کرتا ہے۔ اوسط صحت مند لگ سکتا ہے، لیکن وہ صارفین بہت لمبا انتظار کرتے ہیں اور ہار مان لیتے ہیں۔

اگلا، اپنے سروس کے درجے کو ایڈجسٹ کریں۔ سافٹ ویئر جو ماڈل لوڈ کرتا ہے اور درخواستوں پر کارروائی کرتا ہے، جیسے vLLM۔ یہ وہ جگہ ہے جہاں آپ کم سے کم محنت اور لاگت کے ساتھ زیادہ سے زیادہ بہتری حاصل کر سکتے ہیں۔ لگاتار بیچنگ ابتدائی درخواست کے بیچ کے بھرنے کا انتظار کیے بغیر GPU کو مصروف رکھتی ہے۔ اگر کوالٹی ٹریڈ آف اجازت دیتی ہے تو کوانٹائزیشن میموری فوٹ پرنٹ کو تقریباً نصف کر دیتی ہے، اور آزاد شدہ میموری سمورتی درخواستیں بن جاتی ہیں۔ زیادہ سے زیادہ سیاق و سباق کی لمبائی کو آپ کے پروڈکٹ کے لیے درکار لمبائی پر سیٹ کریں، نہ کہ آپ کے ماڈل کی طرف سے تعاون یافتہ لمبائی۔ اگر آپ کا ماڈل 128K ہینڈل کرتا ہے اور سب سے طویل حقیقی پرامپٹ 6K ہے، تو آپ KV کیشے کو ایسے منظرناموں کے لیے محفوظ کر رہے ہیں جو ایسا نہیں ہوگا۔ کنفیگریشن کی ایک لائن مؤثر کنکرنسی کو نمایاں طور پر بڑھا سکتی ہے۔

جگہ کا تعین

ہم GPU نوڈس کو آلودہ کرتے ہیں تاکہ باقاعدہ کام کا بوجھ ان تک نہ پہنچ سکے، اور وہاں صرف مماثل داخلے کے نظام الاوقات کے ساتھ inference pods رکھیں۔ لاگنگ سائڈکار اس وجہ سے نہیں ہونا چاہئے کہ آپ ماڈل کی نقلیں تعینات نہیں کرسکتے ہیں۔

وزن کو ایک دوسرے کے قریب رکھیں۔ نوڈ-لوکل NVMe یا زون-لوکل کیش 40GB نیٹ ورک پول کو تیز رفتار لوکل ریڈز میں تبدیل کرتا ہے، جس کا براہ راست اثر کولڈ سٹارٹس، آٹو سکیلنگ میں تاخیر، اور چوٹی گھنٹے کی تاخیر پر پڑتا ہے جس کا تجربہ ہم نے جمعرات کی سہ پہر کو کیا۔ یہ فہرست میں سب سے زیادہ مؤثر اور کم سے کم پرکشش حل ہے۔

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

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

لچک

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

ایک PodDisruptionBudget سیٹ کریں تاکہ ریگولر نوڈ اپ گریڈ کو آپ کے آدھے replicas کو ایک ساتھ ہٹانے سے روکا جا سکے۔

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

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

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

ملکیت

نمبروں پر اتفاق کریں اور انہیں لکھیں: پہلے ٹوکن کا وقت، ٹوکن کے درمیان انتظار کا وقت، غلطی کی شرح، قطار کا وقت۔ کلسٹر اور ماڈل میٹرکس کو ایک ڈیش بورڈ میں رکھیں جو انہیں ساتھ ساتھ دکھاتا ہے اور دونوں ٹیموں کو حقیقت کے الگ الگ ورژن برقرار رکھنے کے بجائے ایک ہی لنک کو کھولنے کے لیے کہا جاتا ہے۔

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

4 چیزوں کی نگرانی ابھی تک آپ کو نہیں بتاتی ہے۔

تاخیر، ٹریفک، غلطیاں، اور سنترپتی اب بھی ضروری ہیں لیکن اب کافی نہیں ہیں۔ بورڈ میں چار اور ہیں۔

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

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

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

ابھی تک حل نہیں ہوا

بورڈز آپس میں مل گئے ہیں اور رفتار اس کا ثبوت ہے۔ Kubernetes AI کنفارمنس پروگرام 2025 کے آخر میں 18 پلیٹ فارمز کے ساتھ شروع ہوا۔ تقریباً چار مہینوں میں، ہم 31 ہو گئے ہیں اور بڑے ہائپر سکیلرز، انٹرپرائز اور پرائیویٹ کلاؤڈ ڈسٹری بیوشنز، GPU نیو کلاؤڈز، اور ایج نیٹ ورکس پر پھیلے ہوئے ایجنٹ ورک بوجھ کو بڑھا دیا ہے۔ کمپنی، جو شاذ و نادر ہی کسی چیز پر راضی ہوتی ہے، اس سے اتفاق کرتی ہے۔

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

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

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

پیر کی صبح

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

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

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

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

جمعرات کو واپس

ڈیش بورڈ نے کبھی جھوٹ نہیں بولا۔ میں ایک مختلف سوال کا جواب دے رہا تھا۔

یہ آپ کو بتاتا ہے کہ کنٹینر زندہ ہے یا نہیں۔ آپ نہیں جانتے کہ کیا درخواست غلط راستے والے بیچ کے پیچھے انتظار کر رہی ہے، اگر کوئی نئی نقل 4 منٹ میں نہیں آئی ہے، اگر 6 GPUs دستیاب ہیں اور دستیاب نہیں ہیں، یا اگر اندراج ٹوکن بفرنگ کر رہا ہے جس کو سٹریمنگ ہونا چاہیے تھا۔ معیاری ٹول کٹ میں اس کے بارے میں کچھ نہیں ہے۔

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

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

مجھے امید ہے کہ آپ نے اس سے لطف اٹھایا اور کچھ نیا سیکھا۔ میں LinkedIn پر تجاویز اور بات چیت کے لیے ہمیشہ کھلا ہوں۔ براہ کرم ہم سے براہ راست پیغام کے ذریعے رابطہ کریں۔

اگر آپ کو میری تحریر پسند آئی ہے اور آپ مجھے متحرک رکھنا چاہتے ہیں، تو براہ کرم GitHub پر ایک ستارہ چھوڑنے اور LinkedIn پر متعلقہ مہارتوں کے لیے مجھے تجویز کرنے پر غور کریں۔

اگلی بار تک، خوش کی تلاش!

اوپر تک سکرول کریں۔