𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗤𝘂𝗮𝗻𝘁𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗳𝗼𝗿 𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀

2 GB RAM والے اینڈرائیڈ ڈیوائس پر Llama 3.2 3B چلانا مشکل ہے۔ زیادہ تر ڈویلپرز ماڈل کے weights پر توجہ دیتے ہیں۔ یہ ایک غلطی ہے۔ اصل میموری کا قاتل KV cache ہے۔

جیسے جیسے آپ چیٹ کرتے ہیں، KV cache بڑھتا جاتا ہے۔ اگر آپ معیاری FP16 precision استعمال کرتے ہیں، تو کیش (cache) سینکڑوں میگا بائٹس لے لیتا ہے۔ اس کی وجہ سے آپ کی ایپ صرف چند مراحل (turns) کے بعد کریش ہو جاتی ہے۔

آپ اسے تین مخصوص اقدامات کے ذریعے ٹھیک کر سکتے ہیں۔

  1. Mixed-Precision Quantization کا استعمال کریں Keys اور values کو ایک جیسی precision کی ضرورت نہیں ہوتی۔ Key caches کم precision کو بہتر طریقے سے سنبھال لیتے ہیں، جبکہ value caches ایسا نہیں کر پاتے۔

یہ طریقہ آپ کے کیش کے سائز کو 62% تک کم کر دیتا ہے۔ 2048 token context کے لیے، یہ 224 MB سے کم ہو کر 84 MB رہ جاتا ہے۔ یہ ماڈل کے weights کو تبدیل کیے بغیر ممکن ہوتا ہے۔

  1. Sliding Window Eviction نافذ کریں آپ ہر token کو ایکٹیو میموری میں نہیں رکھ سکتے۔ صرف تازہ ترین 1536 tokens کو رکھنے کے لیے sliding window کا استعمال کریں۔ سسٹم پرامپٹ (system prompt) کو برقرار رکھنے کے لیے پہلے 64 tokens کو anchors کے طور پر رکھیں۔

  2. Flash Spilling کا استعمال کریں جب tokens sliding window سے باہر نکل جائیں، تو انہیں flash storage میں منتقل کر دیں۔ اینڈرائیڈ پر memory-mapped files استعمال کریں۔ جدید UFS 4.0 اسٹوریج اتنا تیز ہے کہ یہ ڈیٹا کو بغیر کسی تاخیر (lag) کے دوبارہ میموری میں لوڈ کر سکتا ہے۔

نتائج انتہائی اہم ہیں۔ Snapdragon 8 Gen 3 پر:

ان غلطیوں سے بچیں:

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

Source: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf