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

२ GB RAM असलेल्या Android डिव्हाइसवर Llama 3.2 3B चालवणे कठीण आहे. बहुतेक डेव्हलपर्स मॉडेल वेट्सवर (model weights) लक्ष केंद्रित करतात. ही एक चूक आहे. मेमरी संपवणारा खरा मुख्य घटक KV cache आहे.

तुम्ही चॅट करत असताना KV cache वाढत जाते. जर तुम्ही स्टँडर्ड FP16 precision वापरले, तर cache शेकडो मेगाबाइट्स जागा व्यापते. यामुळे केवळ काही संवादानंतरच तुमचे ॲप क्रॅश होऊ शकते.

तुम्ही खालील तीन विशिष्ट पायऱ्या वापरून हे सुधारू शकता.

१. Mixed-Precision Quantization वापरा Keys आणि values साठी एकाच प्रकारच्या precision ची गरज नसते. Key caches कमी precision चांगल्या प्रकारे हाताळू शकतात, परंतु Value caches तसे करू शकत नाहीत.

या पद्धतीमुळे तुमच्या cache चा आकार ६२% ने कमी होतो. २०४८ टोकन कॉन्टेक्स्टसाठी, तुमचा वापर २२४ MB वरून थेट ८४ MB पर्यंत खाली येतो. हे मॉडेल वेट्स न बदलता शक्य होते.

२. Sliding Window Eviction लागू करा तुम्ही प्रत्येक टोकन ॲक्टिव्ह मेमरीमध्ये ठेवू शकत नाही. फक्त सर्वात अलीकडील १५३६ टोकन्स ठेवण्यासाठी sliding window चा वापर करा. सिस्टम प्रॉम्प्ट (system prompt) सुरक्षित ठेवण्यासाठी पहिले ६४ टोकन्स 'anchors' म्हणून ठेवा.

३. Flash Spilling वापरा जेव्हा टोकन्स sliding window च्या बाहेर जातात, तेव्हा त्यांना flash storage मध्ये हलवा. Android वर memory-mapped files वापरा. आधुनिक UFS 4.0 स्टोरेज इतके वेगवान आहे की कोणताही लॅग (lag) न येता हा डेटा पुन्हा मेमरीमध्ये पेज करता येतो.

याचे परिणाम लक्षणीय आहेत. Snapdragon 8 Gen 3 वर:

या चुका टाळा:

फीचर्स तयार करण्यापूर्वी तुमचे मेमरी बजेट तयार करा.

स्त्रोत: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf