অন-ডিভাইস LLM-এর জন্য KV ক্যাশ কোয়ান্টাইজেশন
২ জিবি র্যাম (RAM) বিশিষ্ট একটি অ্যান্ড্রয়েড ডিভাইসে Llama 3.2 3B চালানো বেশ কঠিন। বেশিরভাগ ডেভেলপার মডেল ওয়েইট (model weights)-এর দিকে মনোযোগ দেন। এটি একটি ভুল। আসল মেমরি দখলকারী হলো KV ক্যাশ।
চ্যাট করার সাথে সাথে KV ক্যাশ বাড়তে থাকে। আপনি যদি স্ট্যান্ডার্ড FP16 প্রিসিশন ব্যবহার করেন, তবে ক্যাশটি শত শত মেগাবাইট দখল করে নেয়। এর ফলে মাত্র কয়েকবার চ্যাট করার পরেই আপনার অ্যাপ ক্র্যাশ করতে পারে।
আপনি তিনটি নির্দিষ্ট পদক্ষেপের মাধ্যমে এটি সমাধান করতে পারেন।
১. মিক্সড-প্রিসিশন কোয়ান্টাইজেশন (Mixed-Precision Quantization) ব্যবহার করুন কী (Key) এবং ভ্যালু (Value)-এর জন্য একই প্রিসিশনের প্রয়োজন নেই। কী ক্যাশ কম প্রিসিশন ভালোভাবে সামলাতে পারে। ভ্যালু ক্যাশ পারে না।
- কী-এর জন্য INT4 ব্যবহার করুন।
- ভ্যালু-এর জন্য INT8 ব্যবহার করুন।
এই পদ্ধতিটি আপনার ক্যাশ সাইজ ৬২% কমিয়ে দেয়। ২০৪৮ টোকেন কনটেক্সটের জন্য, এটি ২২৪ এমবি থেকে কমে ৮৪ এমবি-তে নেমে আসে। এটি মডেল ওয়েইট পরিবর্তন না করেই সম্ভব।
২. স্লাইডিং উইন্ডো ইভিকশন (Sliding Window Eviction) প্রয়োগ করুন আপনি প্রতিটি টোকেন অ্যাক্টিভ মেমরিতে রাখতে পারবেন না। শুধুমাত্র সাম্প্রতিক ১৫৩৬টি টোকেন রাখার জন্য একটি স্লাইডিং উইন্ডো ব্যবহার করুন। সিস্টেম প্রম্পট বজায় রাখার জন্য প্রথম ৬৪টি টোকেনকে অ্যাঙ্কর (anchor) হিসেবে রাখুন।
৩. ফ্ল্যাশ স্পিলিং (Flash Spilling) ব্যবহার করুন যখন টোকেনগুলো স্লাইডিং উইন্ডো থেকে বেরিয়ে যায়, তখন সেগুলোকে ফ্ল্যাশ স্টোরেজে সরিয়ে নিন। অ্যান্ড্রয়েডে মেমরি-ম্যাপড ফাইল (memory-mapped files) ব্যবহার করুন। আধুনিক UFS 4.0 স্টোরেজ কোনো ল্যাগ ছাড়াই এই ডেটা পুনরায় মেমরিতে ফিরিয়ে আনার জন্য যথেষ্ট দ্রুত।
ফলাফলগুলো উল্লেখযোগ্য। একটি Snapdragon 8 Gen 3-এ:
- পিক মেমরি (Peak memory) ২ জিবি সীমার নিচে নেমে আসে।
- সর্বোচ্চ কথোপকথনের ধাপ (conversation turns) ৪ থেকে বেড়ে ১২-এর বেশি হয়।
- টোকেন স্পিড বৃদ্ধি পায় কারণ ছোট ক্যাশ মেমরি ব্যান্ডউইথ আরও কার্যকরভাবে ব্যবহার করতে পারে।
- মডেলের গুণমান প্রায় একই থাকে।
এই ভুলগুলো এড়িয়ে চলুন:
- কী এবং ভ্যালুকে একই লেভেলে কোয়ান্টাইজ করবেন না। এতে গুণমান কমে যাবে।
- থার্মাল থ্রটলিং (thermal throttling) উপেক্ষা করবেন না। দীর্ঘক্ষণ ইনফারেন্স (inference) চললে ডিভাইস গরম হয়ে যায়। পারফরম্যান্স ম্যানেজ করতে Android Thermal HAL চেক করুন।
- ক্যাশ লাইফসাইকেল ভুলে যাবেন না। মেমরি লিক এড়াতে সবসময় ম্যাপড বাফারগুলোকে (mapped buffers) একটি সঠিক স্কোপের (scope) সাথে যুক্ত করুন।
ফিচার তৈরির আগে আপনার মেমরি বাজেট তৈরি করুন।
উৎস: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf