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

2 GB RAM ਵਾਲੇ Android ਡਿਵਾਈਸ 'ਤੇ Llama 3.2 3B ਚਲਾਉਣਾ ਮੁਸ਼ਕਲ ਹੈ। ਜ਼ਿਆਦਾਤਰ ਡਿਵੈਲਪਰ ਮਾਡਲ ਵੇਟਸ (model weights) 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰਦੇ ਹਨ। ਇਹ ਇੱਕ ਗਲਤੀ ਹੈ। ਅਸਲ ਮੈਮੋਰੀ ਖਤਮ ਕਰਨ ਵਾਲੀ ਚੀਜ਼ KV cache ਹੈ।

ਜਿਵੇਂ-ਜਿਵੇਂ ਤੁਸੀਂ ਚੈਟ ਕਰਦੇ ਹੋ, KV cache ਵਧਦਾ ਜਾਂਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਸਟੈਂਡਰਡ FP16 precision ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ cache ਸੈਂਕੜੇ ਮੈਗਾਬਾਈਟ ਖਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਕਾਰਨ ਤੁਹਾਡੀ ਐਪ ਕੁਝ ਹੀ turns ਤੋਂ ਬਾਅਦ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦੀ ਹੈ।

ਤੁਸੀਂ ਇਹਨਾਂ ਤਿੰਨ ਖਾਸ ਕਦਮਾਂ ਨਾਲ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ।

  1. Mixed-Precision Quantization ਦੀ ਵਰਤੋਂ ਕਰੋ Keys ਅਤੇ values ਨੂੰ ਇੱਕੋ ਜਿਹੀ precision ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। Key caches ਘੱਟ precision ਨੂੰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸੰਭਾਲ ਲੈਂਦੇ ਹਨ। Value caches ਨਹੀਂ।

ਇਹ ਤਰੀਕਾ ਤੁਹਾਡੇ cache ਦੇ ਆਕਾਰ ਨੂੰ 62% ਤੱਕ ਘਟਾ ਦਿੰਦਾ ਹੈ। 2048 token context ਲਈ, ਇਹ 224 MB ਤੋਂ ਘਟ ਕੇ 84 MB ਰਹਿ ਜਾਂਦਾ ਹੈ। ਇਹ ਮਾਡਲ ਵੇਟਸ ਨੂੰ ਬਦਲੇ ਬਿਨਾਂ ਹੁੰਦਾ ਹੈ।

  1. Sliding Window Eviction ਲਾਗੂ ਕਰੋ ਤੁਸੀਂ ਹਰ token ਨੂੰ active memory ਵਿੱਚ ਨਹੀਂ ਰੱਖ ਸਕਦੇ। ਸਿਰਫ਼ ਸਭ ਤੋਂ ਨਵੇਂ 1536 tokens ਨੂੰ ਰੱਖਣ ਲਈ sliding window ਦੀ ਵਰਤੋਂ ਕਰੋ। System prompt ਨੂੰ ਬਚਾਉਣ ਲਈ ਪਹਿਲੇ 64 tokens ਨੂੰ anchors ਵਜੋਂ ਰੱਖੋ।

  2. Flash Spilling ਦੀ ਵਰਤੋਂ ਕਰੋ ਜਦੋਂ tokens sliding window ਤੋਂ ਬਾਹਰ ਨਿਕਲਦੇ ਹਨ, ਤਾਂ ਉਹਨਾਂ ਨੂੰ flash storage ਵਿੱਚ ਭੇਜ ਦਿਓ। Android 'ਤੇ memory-mapped files ਦੀ ਵਰਤੋਂ ਕਰੋ। ਆਧੁਨਿਕ UFS 4.0 storage ਇੰਨੀ ਤੇਜ਼ ਹੈ ਕਿ ਇਹ ਡੇਟਾ ਨੂੰ ਬਿਨਾਂ ਕਿਸੇ ਦੇਰੀ (lag) ਦੇ ਵਾਪਸ ਮੈਮੋਰੀ ਵਿੱਚ ਲਿਆ ਸਕਦੀ ਹੈ।

ਨਤੀਜੇ ਕਾਫ਼ੀ ਮਹੱਤਵਪੂਰਨ ਹਨ। Snapdragon 8 Gen 3 'ਤੇ:

ਇਹਨਾਂ ਗਲਤੀਆਂ ਤੋਂ ਬਚੋ:

ਆਪਣੀਆਂ features ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣਾ ਮੈਮੋਰੀ ਬਜਟ ਤਿਆਰ ਕਰੋ।

ਸਰੋਤ: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf