𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗤𝘂𝗮𝗻𝘁𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗳𝗼𝗿 𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀
2 GB RAM ਵਾਲੇ Android ਡਿਵਾਈਸ 'ਤੇ Llama 3.2 3B ਚਲਾਉਣਾ ਮੁਸ਼ਕਲ ਹੈ। ਜ਼ਿਆਦਾਤਰ ਡਿਵੈਲਪਰ ਮਾਡਲ ਵੇਟਸ (model weights) 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰਦੇ ਹਨ। ਇਹ ਇੱਕ ਗਲਤੀ ਹੈ। ਅਸਲ ਮੈਮੋਰੀ ਖਤਮ ਕਰਨ ਵਾਲੀ ਚੀਜ਼ KV cache ਹੈ।
ਜਿਵੇਂ-ਜਿਵੇਂ ਤੁਸੀਂ ਚੈਟ ਕਰਦੇ ਹੋ, KV cache ਵਧਦਾ ਜਾਂਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਸਟੈਂਡਰਡ FP16 precision ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ cache ਸੈਂਕੜੇ ਮੈਗਾਬਾਈਟ ਖਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਕਾਰਨ ਤੁਹਾਡੀ ਐਪ ਕੁਝ ਹੀ turns ਤੋਂ ਬਾਅਦ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦੀ ਹੈ।
ਤੁਸੀਂ ਇਹਨਾਂ ਤਿੰਨ ਖਾਸ ਕਦਮਾਂ ਨਾਲ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ।
- 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 ਇੰਨੀ ਤੇਜ਼ ਹੈ ਕਿ ਇਹ ਡੇਟਾ ਨੂੰ ਬਿਨਾਂ ਕਿਸੇ ਦੇਰੀ (lag) ਦੇ ਵਾਪਸ ਮੈਮੋਰੀ ਵਿੱਚ ਲਿਆ ਸਕਦੀ ਹੈ।
ਨਤੀਜੇ ਕਾਫ਼ੀ ਮਹੱਤਵਪੂਰਨ ਹਨ। Snapdragon 8 Gen 3 'ਤੇ:
- Peak memory 2 GB ਦੀ ਸੀਮਾ ਤੋਂ ਹੇਠਾਂ ਆ ਜਾਂਦੀ ਹੈ।
- ਵੱਧ ਤੋਂ ਵੱਧ conversation turns 4 ਤੋਂ ਵਧ ਕੇ 12 ਤੋਂ ਵੀ ਉੱਪਰ ਚਲੇ ਜਾਂਦੇ ਹਨ।
- Token ਦੀ ਰਫ਼ਤਾਰ ਵਧ ਜਾਂਦੀ ਹੈ ਕਿਉਂਕਿ ਛੋਟੇ caches ਮੈਮੋਰੀ ਬੈਂਡਵਿਡਥ ਦੀ ਬਿਹਤਰ ਵਰਤੋਂ ਕਰਦੇ ਹਨ।
- ਮਾਡਲ ਦੀ ਕੁਆਲਿਟੀ ਲਗਭਗ ਉਹੀ ਰਹਿੰਦੀ ਹੈ।
ਇਹਨਾਂ ਗਲਤੀਆਂ ਤੋਂ ਬਚੋ:
- Keys ਅਤੇ values ਨੂੰ ਇੱਕੋ ਪੱਧਰ 'ਤੇ quantize ਨਾ ਕਰੋ। ਤੁਸੀਂ ਕੁਆਲਿਟੀ ਗੁਆ ਦੇਵੋਗੇ।
- Thermal throttling ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਨਾ ਕਰੋ। ਲਗਾਤਾਰ inference ਨਾਲ ਡਿਵਾਈਸ ਗਰਮ ਹੋ ਜਾਂਦਾ ਹੈ। ਪਰਫਾਰਮੈਂਸ ਨੂੰ ਸੰਭਾਲਣ ਲਈ Android Thermal HAL ਦੀ ਜਾਂਚ ਕਰੋ।
- Cache lifecycle ਨੂੰ ਨਾ ਭੁੱਲੋ। ਮੈਮੋਰੀ ਲੀਕ (memory leaks) ਤੋਂ ਬਚਣ ਲਈ ਹਮੇਸ਼ਾ mapped buffers ਨੂੰ ਇੱਕ ਸਹੀ scope ਨਾਲ ਜੋੜੋ।
ਆਪਣੀਆਂ features ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣਾ ਮੈਮੋਰੀ ਬਜਟ ਤਿਆਰ ਕਰੋ।
ਸਰੋਤ: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf