𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗤𝘂𝗮𝗻𝘁𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗳𝗼𝗿 𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀
2 GB RAM والے اینڈرائیڈ ڈیوائس پر Llama 3.2 3B چلانا مشکل ہے۔ زیادہ تر ڈویلپرز ماڈل کے weights پر توجہ دیتے ہیں۔ یہ ایک غلطی ہے۔ اصل میموری کا قاتل KV cache ہے۔
جیسے جیسے آپ چیٹ کرتے ہیں، KV cache بڑھتا جاتا ہے۔ اگر آپ معیاری FP16 precision استعمال کرتے ہیں، تو کیش (cache) سینکڑوں میگا بائٹس لے لیتا ہے۔ اس کی وجہ سے آپ کی ایپ صرف چند مراحل (turns) کے بعد کریش ہو جاتی ہے۔
آپ اسے تین مخصوص اقدامات کے ذریعے ٹھیک کر سکتے ہیں۔
- Mixed-Precision Quantization کا استعمال کریں Keys اور values کو ایک جیسی precision کی ضرورت نہیں ہوتی۔ Key caches کم precision کو بہتر طریقے سے سنبھال لیتے ہیں، جبکہ value caches ایسا نہیں کر پاتے۔
- Keys کے لیے INT4 استعمال کریں۔
- Values کے لیے INT8 استعمال کریں۔
یہ طریقہ آپ کے کیش کے سائز کو 62% تک کم کر دیتا ہے۔ 2048 token context کے لیے، یہ 224 MB سے کم ہو کر 84 MB رہ جاتا ہے۔ یہ ماڈل کے weights کو تبدیل کیے بغیر ممکن ہوتا ہے۔
Sliding Window Eviction نافذ کریں آپ ہر token کو ایکٹیو میموری میں نہیں رکھ سکتے۔ صرف تازہ ترین 1536 tokens کو رکھنے کے لیے sliding window کا استعمال کریں۔ سسٹم پرامپٹ (system prompt) کو برقرار رکھنے کے لیے پہلے 64 tokens کو anchors کے طور پر رکھیں۔
Flash Spilling کا استعمال کریں جب tokens sliding window سے باہر نکل جائیں، تو انہیں flash storage میں منتقل کر دیں۔ اینڈرائیڈ پر memory-mapped files استعمال کریں۔ جدید UFS 4.0 اسٹوریج اتنا تیز ہے کہ یہ ڈیٹا کو بغیر کسی تاخیر (lag) کے دوبارہ میموری میں لوڈ کر سکتا ہے۔
نتائج انتہائی اہم ہیں۔ Snapdragon 8 Gen 3 پر:
- Peak memory 2 GB کی حد سے نیچے آ جاتی ہے۔
- گفتگو کے زیادہ سے زیادہ مراحل 4 سے بڑھ کر 12 سے زیادہ ہو جاتے ہیں۔
- Token کی رفتار بڑھ جاتی ہے کیونکہ چھوٹے کیشز میموری بینڈوتھ (memory bandwidth) کا بہتر استعمال کرتے ہیں۔
- ماڈل کا معیار تقریباً ویسا ہی رہتا ہے۔
ان غلطیوں سے بچیں:
- Keys اور values کو ایک ہی سطح پر quantize نہ کریں۔ اس سے معیار متاثر ہوگا۔
- Thermal throttling کو نظر انداز نہ کریں۔ مسلسل inference سے ڈیوائس گرم ہو جاتی ہے۔ کارکردگی کو سنبھالنے کے لیے Android Thermal HAL چیک کریں۔
- Cache lifecycle کو نہ بھولیں۔ میموری لیک (memory leaks) سے بچنے کے لیے ہمیشہ mapped buffers کو ایک مناسب scope سے جوڑیں۔
فیچرز بنانے سے پہلے اپنا میموری بجٹ تیار کریں۔
Source: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf