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

2 GB RAM ધરાવતા Android ડિવાઇસ પર Llama 3.2 3B ચલાવવું મુશ્કેલ છે. મોટાભાગના ડેવલપર્સ મોડેલ વેટ્સ (model weights) પર ધ્યાન કેન્દ્રિત કરે છે. આ એક ભૂલ છે. વાસ્તવિક મેમરી ખાઈ જનારું પરિબળ KV cache છે.

જેમ તમે ચેટ કરો છો તેમ KV cache વધતું જાય છે. જો તમે સ્ટાન્ડર્ડ FP16 precision નો ઉપયોગ કરો છો, તો cache સેંકડો મેગાબાઈટ્સ રોકી લે છે. આના કારણે માત્ર થોડા જ ટર્ન પછી તમારું એપ ક્રેશ થઈ જાય છે.

તમે આ ત્રણ ચોક્કસ સ્ટેપ્સ દ્વારા આ સમસ્યા ઠીક કરી શકો છો.

  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 ને એક્ટિવ મેમરીમાં રાખી શકતા નથી. માત્ર તાજેતરના 1536 tokens રાખવા માટે sliding window નો ઉપયોગ કરો. સિસ્ટમ પ્રોમ્પ્ટને જાળવી રાખવા માટે પ્રથમ 64 tokens ને anchors તરીકે રાખો.

  2. 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