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

2 GB RAM वाले Android डिवाइस पर Llama 3.2 3B चलाना कठिन है। अधिकांश डेवलपर्स मॉडल वेट्स (model weights) पर ध्यान केंद्रित करते हैं। यह एक गलती है। असली मेमोरी खपत करने वाला कारक KV cache है।

जैसे-जैसे आप चैट करते हैं, KV cache बढ़ता जाता है। यदि आप मानक FP16 precision का उपयोग करते हैं, तो cache सैकड़ों मेगाबाइट ले लेता है। इसके कारण कुछ ही टर्न के बाद आपका ऐप क्रैश हो जाता है।

आप इसे तीन विशिष्ट चरणों के साथ ठीक कर सकते हैं।

  1. Use Mixed-Precision Quantization Keys और values को एक ही precision की आवश्यकता नहीं होती है। Key caches कम precision को अच्छी तरह संभाल लेते हैं, लेकिन Value caches नहीं।

यह दृष्टिकोण आपके cache के आकार को 62% तक कम कर देता है। 2048 token context के लिए, यह 224 MB से घटकर 84 MB रह जाता है। यह मॉडल वेट्स को बदले बिना संभव होता है।

  1. Implement Sliding Window Eviction आप हर token को एक्टिव मेमोरी में नहीं रख सकते। केवल सबसे हाल के 1536 tokens को रखने के लिए sliding window का उपयोग करें। सिस्टम प्रॉम्प्ट (system prompt) को सुरक्षित रखने के लिए पहले 64 tokens को anchors के रूप में रखें।

  2. Use Flash Spilling जब tokens sliding window से बाहर निकलें, तो उन्हें flash storage में ले जाएँ। Android पर memory-mapped files का उपयोग करें। आधुनिक UFS 4.0 स्टोरेज इतना तेज़ है कि यह बिना किसी लैग के इस डेटा को वापस मेमोरी में पेज कर सकता है।

परिणाम महत्वपूर्ण हैं। Snapdragon 8 Gen 3 पर:

इन गलतियों से बचें:

अपनी फीचर्स बनाने से पहले अपना मेमोरी बजट तैयार करें।

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