فون پر لارج لینگویج ماڈلز (LLMs) چلانا اب محض ایک تحقیقی تجربہ نہیں رہا، بلکہ یہ ایک حقیقت بن چکا ہے۔ تاہم، جیسے ہی آپ ایک تجرباتی ڈیمو سے نکل کر ایک اصل پروڈکٹ کی طرف بڑھتے ہیں، لیٹنسی (latency) دوبارہ سر اٹھاتی ہے۔ آپ نے ماڈل کو چھوٹا کیا، ویٹس (weights) کو کوانٹائز (quantize) کیا، لیکن پھر بھی پریفِل (prefill) مرحلہ سست رہتا ہے۔ ٹوکنز رک جاتے ہیں۔ UI جم جاتا ہے۔ اور الزام شاذ و نادر ہی وہاں لگتا ہے جہاں اسے ہونا چاہیے۔
اینڈرائیڈ ڈیوائسز پر، LLM prefill کے دوران کمپیوٹ (compute) کبھی بھی رکاوٹ (bottleneck) نہیں ہوتا۔ بلکہ میموری بینڈوتھ (memory bandwidth) اصل مسئلہ ہوتی ہے۔ جدید فلیگ شپ SoCs طاقتور GPU اور NPU کورز کے ساتھ آتے ہیں جو میموری سب سسٹم کی فراہم کردہ رفتار سے کہیں زیادہ تیزی سے حساب کتاب (arithmetic) کر سکتے ہیں۔ جب آپ ایک سادہ (naive) attention implementation کا پروفائل کرتے ہیں، تو execution units مکمل طور پر استعمال نہیں ہو رہے ہوتے۔ وہ انتظار کر رہے ہوتے ہیں۔ DRAM کا انتظار۔
آپ کا کوانٹائزڈ ماڈل اب بھی سست کیوں محسوس ہوتا ہے
آن-ڈیوائس انفرنس (on-device inference) کے لیے کوانٹائزیشن اب پہلا بنیادی قدم بن چکا ہے۔ ویٹس کو FP16 سے INT8 میں تبدیل کرنے سے ماڈل کا سائز آدھا ہو جاتا ہے اور اسٹوریج کم ہو جاتی ہے۔ یہ مدد تو کرتا ہے، لیکن یہ attention layer کی لیٹنسی کو ٹھیک نہیں کرتا۔ وجہ سادہ ہے: کوانٹائزیشن اس ڈیٹا کی مقدار کو کم کرتی ہے جسے آپ اسٹور کرتے ہیں، لیکن یہ میموری ٹرانزیکشنز (memory transactions) کی تعداد کو کم نہیں کرتی جو attention mechanism انجام دیتا ہے۔
ایک معیاری multi-head attention layer، جسے روایتی طریقے سے نافذ کیا گیا ہو، ہر لیئر کے لیے DRAM تک تین مکمل چکر لگاتی ہے۔ Query، Key، اور Value میٹرکس کو مین میموری سے پڑھا جاتا ہے، اسکورز کا حساب لگایا جاتا ہے، اور درمیانی نتائج
