KV-cache-quantisatie voor on-device LLM's

Het draaien van Llama 3.2 3B op een Android-toestel met 2 GB RAM is lastig. De meeste ontwikkelaars richten zich op modelgewichten. Dit is een fout. De echte geheugenvreter is de KV-cache.

De KV-cache groeit naarmate je chat. Als je standaard FP16-precisie gebruikt, verbruikt de cache honderden megabytes. Dit zorgt ervoor dat je app na slechts enkele beurten crasht.

Je kunt dit oplossen met drie specifieke stappen.

  1. Gebruik mixed-precision quantisatie Keys en values hebben niet dezelfde precisie nodig. Key-caches gaan goed om met lage precisie. Value-caches niet.

Deze aanpak verkleint je cachegrootte met 62%. Voor een context van 2048 tokens daal je van 224 MB naar 84 MB. Dit gebeurt zonder de modelgewichten te wijzigen.

  1. Implementeer sliding window eviction Je kunt niet elk token in het actieve geheugen houden. Gebruik een sliding window om alleen de meest recente 1536 tokens te bewaren. Houd de eerste 64 tokens aan als ankers om de system prompt te behouden.

  2. Gebruik flash spilling Wanneer tokens het sliding window verlaten, verplaats ze dan naar flash-opslag. Gebruik memory-mapped files op Android. Moderne UFS 4.0-opslag is snel genoeg om deze gegevens zonder vertraging terug in het geheugen te laden.

De resultaten zijn aanzienlijk. Op een Snapdragon 8 Gen 3:

Vermijd deze fouten:

Stel je geheugenbudget vast voordat je je functies bouwt.

Bron: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf