𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗤𝘂𝗮𝗻𝘁𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗳𝗼𝗿 𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀
2 GB RAM ಹೊಂದಿರುವ ಆಂಡ್ರಾಯ್ಡ್ ಸಾಧನದಲ್ಲಿ Llama 3.2 3B ಅನ್ನು ರನ್ ಮಾಡುವುದು ಕಷ್ಟಕರ. ಹೆಚ್ಚಿನ ડેವಲಪರ್ಗಳು ಮಾಡೆಲ್ ವೇಯ್ಟ್ಗಳ (model weights) ಮೇಲೆ ಗಮನ ಹರಿಸುತ್ತಾರೆ. ಇದು ತಪ್ಪು. ನಿಜವಾದ ಮೆಮೊರಿ ಬಳಕೆದಾರ (memory killer) ಎಂದರೆ KV cache.
ನೀವು ಚಾಟ್ ಮಾಡುವಂತೆ KV cache ಬೆಳೆಯುತ್ತಾ ಹೋಗುತ್ತದೆ. ನೀವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ FP16 ಪ್ರಿಸಿಸನ್ (precision) ಬಳಸಿದರೆ, ಕ್ಯಾಶ್ ನೂರಾರು ಮೆಗಾಬೈಟ್ಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ. ಇದರಿಂದ ಕೇವಲ ಕೆಲವು ಸಂಭಾಷಣೆಗಳ ನಂತರವೇ ನಿಮ್ಮ ಆ್ಯಪ್ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ.
ಇದನ್ನು ನೀವು ಮೂರು ನಿರ್ದಿಷ್ಟ ಹಂತಗಳ ಮೂಲಕ ಸರಿಪಡಿಸಬಹುದು.
- Mixed-Precision Quantization ಬಳಸಿ Keys ಮತ್ತು values ಎರಡಕ್ಕೂ ಒಂದೇ ರೀತಿಯ ಪ್ರಿಸಿಸನ್ ಅಗತ್ಯವಿಲ್ಲ. Key caches ಕಡಿಮೆ ಪ್ರಿಸಿಸನ್ ಅನ್ನು ಚೆನ್ನಾಗಿ ನಿಭಾಯಿಸುತ್ತವೆ. ಆದರೆ Value caches ಹಾಗಲ್ಲ.
- Keys ಗಾಗಿ INT4 ಬಳಸಿ.
- Values ಗಾಗಿ INT8 ಬಳಸಿ.
ಈ ವಿಧಾನವು ನಿಮ್ಮ ಕ್ಯಾಶ್ ಗಾತ್ರವನ್ನು 62% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. 2048 ಟೋಕನ್ ಕಾಂಟೆಕ್ಸ್ಟ್ಗಾಗಿ (context), ಇದು 224 MB ನಿಂದ 84 MB ಗೆ ಇಳಿಯುತ್ತದೆ. ಮಾಡೆಲ್ ವೇಯ್ಟ್ಗಳನ್ನು ಬದಲಾಯಿಸದೆಯೇ ಇದು ಸಾಧ್ಯವಾಗುತ್ತದೆ.
Sliding Window Eviction ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ ನೀವು ಪ್ರತಿಯೊಂದು ಟೋಕನ್ ಅನ್ನು ಆಕ್ಟಿವ್ ಮೆಮೊರಿಯಲ್ಲಿ ಇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಕೇವಲ ಇತ್ತೀಚಿನ 1536 ಟೋಕನ್ಗಳನ್ನು ಮಾತ್ರ ಇರಿಸಲು sliding window ಬಳಸಿ. ಸಿಸ್ಟಮ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಮೊದಲ 64 ಟೋಕನ್ಗಳನ್ನು ಆಂಕರ್ಗಳಾಗಿ (anchors) ಇರಿಸಿ.
Flash Spilling ಬಳಸಿ ಟೋಕನ್ಗಳು sliding window ನಿಂದ ಹೊರಬಂದಾಗ, ಅವುಗಳನ್ನು ಫ್ಲ್ಯಾಶ್ ಸ್ಟೋರೇಜ್ಗೆ ವರ್ಗಾಯಿಸಿ. ಆಂಡ್ರಾಯ್ಡ್ನಲ್ಲಿ memory-mapped ಫೈಲ್ಗಳನ್ನು ಬಳಸಿ. ಆಧುನಿಕ UFS 4.0 ಸ್ಟೋರೇಜ್ ಯಾವುದೇ ವಿಳಂಬವಿಲ್ಲದೆ ಈ ಡೇಟಾವನ್ನು ಮತ್ತೆ ಮೆಮೊರಿಗೆ ತರಲು ಸಾಕಷ್ಟು ವೇಗವಾಗಿದೆ.
ಇದರ ಫಲಿತಾಂಶಗಳು ಗಮನಾರ್ಹವಾಗಿವೆ. Snapdragon 8 Gen 3 ಸಾಧನದಲ್ಲಿ:
- ಪೀಕ್ ಮೆಮೊರಿ (Peak memory) 2 GB ಮಿತಿಗಿಂತ ಕಡಿಮೆ ಇರುತ್ತದೆ.
- ಗರಿಷ್ಠ ಸಂಭಾಷಣೆಯ ಹಂತಗಳು 4 ರಿಂದ 12 ಕ್ಕೂ ಹೆಚ್ಚು ಹೆಚ್ಚಾಗುತ್ತವೆ.
- ಕ್ಯಾಶ್ ಗಾತ್ರ ಚಿಕ್ಕದಾಗಿದ್ದರಿಂದ ಮೆಮೊರಿ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಉತ್ತಮವಾಗಿ ಬಳಕೆಯಾಗುತ್ತದೆ ಮತ್ತು ಟೋಕನ್ ವೇಗ ಹೆಚ್ಚಾಗುತ್ತದೆ.
- ಮಾಡೆಲ್ ಗುಣಮಟ್ಟವು ಬಹುತೇಕ ಮೊದಲಿನಂತೆಯೇ ಇರುತ್ತದೆ.
ಈ ತಪ್ಪುಗಳನ್ನು ತಪ್ಪಿಸಿ:
- Keys ಮತ್ತು values ಎರಡನ್ನೂ ಒಂದೇ ಮಟ್ಟಕ್ಕೆ ಕ್ವಾಂಟೈಸ್ (quantize) ಮಾಡಬೇಡಿ. ಇದರಿಂದ ಗುಣಮಟ್ಟ ಕಡಿಮೆಯಾಗುತ್ತದೆ.
- Thermal throttling ಅನ್ನು ನಿರ್ಲಕ್ಷಿಸಬೇಡಿ. ನಿರಂತರ ಇನ್ಫರೆನ್ಸ್ (inference) ಮಾಡುವುದರಿಂದ ಸಾಧನವು ಬಿಸಿಯಾಗಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ನಿರ್ವಹಿಸಲು Android Thermal HAL ಅನ್ನು ಪರಿಶೀಲಿಸಿ.
- ಕ್ಯಾಶ್ ಲೈಫ್ಸೈಕಲ್ ಅನ್ನು ಮರೆಯಬೇಡಿ. ಮೆಮೊರಿ ಲೀಕ್ಗಳನ್ನು (memory leaks) ತಪ್ಪಿಸಲು ಯಾವಾಗಲೂ mapped buffers ಅನ್ನು ಸರಿಯಾದ ಸ್ಕೋಪ್ಗೆ (scope) ಜೋಡಿಸಿ.
ನಿಮ್ಮ ಫೀಚರ್ಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮೊದಲು ಮೆಮೊರಿ ಬಜೆಟ್ ಅನ್ನು ನಿರ್ಮಿಸಿಕೊಳ್ಳಿ.
ಮೂಲ: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf