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

2 GB RAM ಹೊಂದಿರುವ ಆಂಡ್ರಾಯ್ಡ್ ಸಾಧನದಲ್ಲಿ Llama 3.2 3B ಅನ್ನು ರನ್ ಮಾಡುವುದು ಕಷ್ಟಕರ. ಹೆಚ್ಚಿನ ડેವಲಪರ್‌ಗಳು ಮಾಡೆಲ್ ವೇಯ್ಟ್‌ಗಳ (model weights) ಮೇಲೆ ಗಮನ ಹರಿಸುತ್ತಾರೆ. ಇದು ತಪ್ಪು. ನಿಜವಾದ ಮೆಮೊರಿ ಬಳಕೆದಾರ (memory killer) ಎಂದರೆ KV cache.

ನೀವು ಚಾಟ್ ಮಾಡುವಂತೆ KV cache ಬೆಳೆಯುತ್ತಾ ಹೋಗುತ್ತದೆ. ನೀವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ FP16 ಪ್ರಿಸಿಸನ್ (precision) ಬಳಸಿದರೆ, ಕ್ಯಾಶ್ ನೂರಾರು ಮೆಗಾಬೈಟ್‌ಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ. ಇದರಿಂದ ಕೇವಲ ಕೆಲವು ಸಂಭಾಷಣೆಗಳ ನಂತರವೇ ನಿಮ್ಮ ಆ್ಯಪ್ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ.

ಇದನ್ನು ನೀವು ಮೂರು ನಿರ್ದಿಷ್ಟ ಹಂತಗಳ ಮೂಲಕ ಸರಿಪಡಿಸಬಹುದು.

  1. Mixed-Precision Quantization ಬಳಸಿ Keys ಮತ್ತು values ಎರಡಕ್ಕೂ ಒಂದೇ ರೀತಿಯ ಪ್ರಿಸಿಸನ್ ಅಗತ್ಯವಿಲ್ಲ. Key caches ಕಡಿಮೆ ಪ್ರಿಸಿಸನ್ ಅನ್ನು ಚೆನ್ನಾಗಿ ನಿಭಾಯಿಸುತ್ತವೆ. ಆದರೆ Value caches ಹಾಗಲ್ಲ.

ಈ ವಿಧಾನವು ನಿಮ್ಮ ಕ್ಯಾಶ್ ಗಾತ್ರವನ್ನು 62% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. 2048 ಟೋಕನ್ ಕಾಂಟೆಕ್ಸ್ಟ್‌ಗಾಗಿ (context), ಇದು 224 MB ನಿಂದ 84 MB ಗೆ ಇಳಿಯುತ್ತದೆ. ಮಾಡೆಲ್ ವೇಯ್ಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸದೆಯೇ ಇದು ಸಾಧ್ಯವಾಗುತ್ತದೆ.

  1. Sliding Window Eviction ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ ನೀವು ಪ್ರತಿಯೊಂದು ಟೋಕನ್ ಅನ್ನು ಆಕ್ಟಿವ್ ಮೆಮೊರಿಯಲ್ಲಿ ಇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಕೇವಲ ಇತ್ತೀಚಿನ 1536 ಟೋಕನ್‌ಗಳನ್ನು ಮಾತ್ರ ಇರಿಸಲು sliding window ಬಳಸಿ. ಸಿಸ್ಟಮ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಮೊದಲ 64 ಟೋಕನ್‌ಗಳನ್ನು ಆಂಕರ್‌ಗಳಾಗಿ (anchors) ಇರಿಸಿ.

  2. Flash Spilling ಬಳಸಿ ಟೋಕನ್‌ಗಳು sliding window ನಿಂದ ಹೊರಬಂದಾಗ, ಅವುಗಳನ್ನು ಫ್ಲ್ಯಾಶ್ ಸ್ಟೋರೇಜ್‌ಗೆ ವರ್ಗಾಯಿಸಿ. ಆಂಡ್ರಾಯ್ಡ್‌ನಲ್ಲಿ memory-mapped ಫೈಲ್‌ಗಳನ್ನು ಬಳಸಿ. ಆಧುನಿಕ UFS 4.0 ಸ್ಟೋರೇಜ್ ಯಾವುದೇ ವಿಳಂಬವಿಲ್ಲದೆ ಈ ಡೇಟಾವನ್ನು ಮತ್ತೆ ಮೆಮೊರಿಗೆ ತರಲು ಸಾಕಷ್ಟು ವೇಗವಾಗಿದೆ.

ಇದರ ಫಲಿತಾಂಶಗಳು ಗಮನಾರ್ಹವಾಗಿವೆ. Snapdragon 8 Gen 3 ಸಾಧನದಲ್ಲಿ:

ಈ ತಪ್ಪುಗಳನ್ನು ತಪ್ಪಿಸಿ:

ನಿಮ್ಮ ಫೀಚರ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮೊದಲು ಮೆಮೊರಿ ಬಜೆಟ್ ಅನ್ನು ನಿರ್ಮಿಸಿಕೊಳ್ಳಿ.

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