𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗤𝘂𝗮𝗻𝘁𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗳𝗼𝗿 𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀
2 GB RAM கொண்ட ஒரு Android சாதனத்தில் Llama 3.2 3B-ஐ இயக்குவது கடினம். பெரும்பாலான டெவலப்பர்கள் மாடல் வெயிட்டுகளில் (model weights) மட்டுமே கவனம் செலுத்துகிறார்கள். இது ஒரு தவறு. நினைவகத்தை (memory) உண்மையில் அதிகம் பயன்படுத்துவது KV cache தான்.
நீங்கள் உரையாடத் தொடரத் தொடர KV cache வளரும். நீங்கள் நிலையான FP16 precision-ஐப் பயன்படுத்தினால், cache நூற்றுக்கணக்கான மெகாபைட்களை எடுத்துக்கொள்ளும். இது சில உரையாடல்களுக்குப் பிறகு உங்கள் ஆப் (app) செயலிழக்க (crash) காரணமாகிறது.
இதை மூன்று குறிப்பிட்ட படிகள் மூலம் சரிசெய்யலாம்.
- Mixed-Precision Quantization-ஐப் பயன்படுத்தவும் Keys மற்றும் values ஆகியவற்றுக்கு ஒரே மாதிரியான precision தேவையில்லை. Key caches குறைந்த precision-ஐ நன்றாகக் கையாளும். ஆனால் Value caches அவ்வாறு செய்யாது.
- Keys-களுக்கு INT4 பயன்படுத்தவும்.
- Values-களுக்கு INT8 பயன்படுத்தவும்.
இந்த அணுகுமுறை உங்கள் cache அளவை 62% குறைக்கிறது. 2048 token context-க்கு, நீங்கள் 224 MB-லிருந்து 84 MB-ஆகக் குறைக்கலாம். இது மாடல் வெயிட்டுகளை மாற்றாமலேயே சாத்தியமாகும்.
Sliding Window Eviction-ஐச் செயல்படுத்தவும் ஒவ்வொரு token-ஐயும் active memory-யில் வைத்திருக்க முடியாது. சமீபத்திய 1536 tokens-களை மட்டும் வைத்திருக்க ஒரு sliding window-ஐப் பயன்படுத்தவும். System prompt-ஐப் பாதுகாக்க முதல் 64 tokens-களை anchors ஆக வைத்திருக்கவும்.
Flash Spilling-ஐப் பயன்படுத்தவும் Tokens sliding window-லிருந்து வெளியேறும்போது, அவற்றை flash storage-க்கு மாற்றவும். Android-இல் memory-mapped files-களைப் பயன்படுத்தவும். நவீன UFS 4.0 storage, இந்தத் தரவை எந்தத் தாமதமும் இன்றி மீண்டும் memory-க்கு கொண்டு வர போதுமான வேகத்தைக் கொண்டுள்ளது.
இதன் முடிவுகள் குறிப்பிடத்தக்கவை. Snapdragon 8 Gen 3-இல்:
- உச்சகட்ட நினைவகம் (Peak memory) 2 GB வரம்பிற்கு கீழே குறைகிறது.
- அதிகபட்ச உரையாடல் சுற்றுகள் (Max conversation turns) 4-லிருந்து 12-க்கும் அதிகமாக உயர்கின்றன.
- சிறிய cache-கள் memory bandwidth-ஐச் சிறப்பாகப் பயன்படுத்துவதால், token வேகம் அதிகரிக்கிறது.
- மாடலின் தரம் கிட்டத்தட்ட மாறாமல் அப்படியே இருக்கும்.
இந்தத் தவறுகளைத் தவிர்க்கவும்:
- Keys மற்றும் values இரண்டையும் ஒரே மட்டத்தில் quantize செய்யாதீர்கள். இதனால் தரத்தில் சரிவு ஏற்படும்.
- Thermal throttling-ஐப் புறக்கணிக்காதீர்கள். தொடர்ச்சியான inference வெப்பத்தை உண்டாக்கும். செயல்திறனை நிர்வகிக்க Android Thermal HAL-ஐச் சரிபார்க்கவும்.
- Cache lifecycle-ஐ மறக்காதீர்கள். Memory leaks-ஐத் தவிர்க்க, எப்போதும் mapped buffers-களைச் சரியான scope-உடன் இணைக்கவும்.
உங்கள் அம்சங்களை (features) உருவாக்குவதற்கு முன்பே, உங்கள் நினைவக வரவுசெலவுத் திட்டத்தை (memory budget) உருவாக்கிவிடுங்கள்.
ஆதாரம்: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf