প্রিফিক্স ক্যাশিং এমন একটি ফিচার যা একটি শেয়ার করা এবং পুনরাবৃত্ত প্রম্পট প্রিফিক্স অংশ প্রসেস করার মধ্যবর্তী LLM স্টেট সংরক্ষণ ও পুনঃব্যবহারের মাধ্যমে ইনফারেন্স টাইম কমিয়ে দেয়। প্রিফিক্স ক্যাশিং চালু করতে, আপনাকে কেবল আপনার API রিকোয়েস্টে স্ট্যাটিক প্রিফিক্সকে ডাইনামিক সাফিক্স থেকে আলাদা করতে হবে।
প্রিফিক্স ক্যাশিং বর্তমানে শুধুমাত্র টেক্সট-ভিত্তিক ইনপুট সমর্থন করে, তাই আপনি যদি আপনার প্রম্পটে কোনো ছবি দেন, তাহলে এই ফিচারটি ব্যবহার করা উচিত নয়।
প্রিফিক্স ক্যাশিং বাস্তবায়নের দুটি পদ্ধতি রয়েছে: অন্তর্নিহিত বা সুস্পষ্ট:
- ইমপ্লিসিট প্রিফিক্স ক্যাশিং একটি হালকা পদ্ধতি, যেখানে অ্যাপ্লিকেশনটিকে শুধুমাত্র প্রম্পটের একটি শেয়ার্ড অংশ সংজ্ঞায়িত করতে হয়।
- এক্সপ্লিসিট প্রিফিক্স ক্যাশিং অ্যাপ্লিকেশনগুলোকে ক্যাশের উপর আরও বেশি নিয়ন্ত্রণ দেয়, যার মধ্যে ক্যাশ তৈরি, কোয়েরি এবং মুছে ফেলা অন্তর্ভুক্ত।
অন্তর্নিহিতভাবে প্রিফিক্স ক্যাশিং ব্যবহার করুন
প্রিফিক্স ক্যাশিং সক্রিয় করতে, প্রম্পটের শেয়ার করা অংশটি promptPrefix ফিল্ডে যোগ করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটগুলিতে দেখানো হয়েছে:
কোটলিন
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
val result = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
promptPrefix = PromptPrefix(promptPrefix)
}
)
জাভা
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setPromptPrefix(new PromptPrefix(promptPrefix))
.build())
.get();
পূর্ববর্তী কোড অংশে, dynamicSuffix কে মূল কন্টেন্ট হিসেবে পাস করা হয়েছে এবং promptPrefix আলাদাভাবে প্রদান করা হয়েছে।
আনুমানিক কর্মক্ষমতা বৃদ্ধি
প্রিফিক্স ক্যাশিং ছাড়া | প্রিফিক্স ক্যাশে-হিট সহ (প্রথমবার প্রিফিক্স ব্যবহার করার সময় প্রিফিক্স ক্যাশে মিস হতে পারে) | |
৩০০-টোকেনের নির্দিষ্ট প্রিফিক্স এবং ৫০-টোকেনের ডাইনামিক সাফিক্স প্রম্পট সহ পিক্সেল ৯ | ০.৮২ সেকেন্ড | ০.৪৫ সেকেন্ড |
১,০০০ টোকেনের একটি নির্দিষ্ট প্রিফিক্স এবং ১০০ টোকেনের একটি ডাইনামিক সাফিক্স প্রম্পট সহ পিক্সেল ৯। | ২.১১ সেকেন্ড | ০.৫ সেকেন্ড |
সংরক্ষণের বিবেচ্য বিষয়
ইমপ্লিসিট প্রিফিক্স ক্যাশিং-এর ক্ষেত্রে, ক্যাশ ফাইলগুলো ক্লায়েন্ট অ্যাপ্লিকেশনের নিজস্ব স্টোরেজে সংরক্ষিত হয়, যা আপনার অ্যাপের স্টোরেজ ব্যবহার বাড়িয়ে দেয়। এনক্রিপ্টেড ক্যাশ ফাইল এবং সেগুলোর সাথে সম্পর্কিত মেটাডেটা, যার মধ্যে মূল প্রিফিক্স টেক্সটও অন্তর্ভুক্ত, সংরক্ষণ করা হয়। স্টোরেজ সংক্রান্ত নিম্নলিখিত বিষয়গুলো মনে রাখবেন:
- ক্যাশের সংখ্যা একটি LRU (Least Recently Used) পদ্ধতির মাধ্যমে পরিচালিত হয়। মোট ক্যাশের সর্বোচ্চ পরিমাণ অতিক্রম করলে, সবচেয়ে কম ব্যবহৃত ক্যাশগুলো স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।
- প্রম্পট ক্যাশের আকার প্রিফিক্সের দৈর্ঘ্যের উপর নির্ভর করে।
প্রিফিক্স ক্যাশিং থেকে তৈরি সমস্ত ক্যাশ মুছে ফেলতে,
generativeMode.clearImplicitCaches()মেথডটি ব্যবহার করুন।
সুস্পষ্ট ক্যাশে ব্যবস্থাপনা ব্যবহার করুন
প্রম্পট এপিআই-তে সুস্পষ্ট ক্যাশ ম্যানেজমেন্ট মেথড অন্তর্ভুক্ত রয়েছে, যা ডেভেলপারদের ক্যাশ কীভাবে তৈরি, অনুসন্ধান, ব্যবহার এবং অপসারণ করা হবে তার উপর আরও সুনির্দিষ্ট নিয়ন্ত্রণ দেয়। এই ম্যানুয়াল অপারেশনগুলো সিস্টেমের স্বয়ংক্রিয় ক্যাশ হ্যান্ডলিং থেকে স্বাধীনভাবে চলে।
এই উদাহরণটি সুস্পষ্ট ক্যাশে ব্যবস্থাপনা শুরু করার এবং ইনফারেন্স সম্পাদন করার পদ্ধতি ব্যাখ্যা করে:
কোটলিন
val cacheName = "my_cache"
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
// Create a cache
val cacheRequest = createCachedContextRequest(cacheName, PromptPrefix(promptPrefix))
val cache = generativeModel.caches.create(cacheRequest)
// Run inference with the cache
val response = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
cachedContextName = cache.name
}
)
জাভা
String cacheName = "my_cache";
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
// Create a cache
CachedContext cache = cachesFutures.create(
new CreateCachedContextRequest.Builder(cacheName, new PromptPrefix(promptPrefix))
.build())
.get();
// Run inference with the cache
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setCachedContextName(cache.getName())
.build())
.get();
এই উদাহরণটি দেখায় কিভাবে generativeModel.caches ব্যবহার করে সুস্পষ্টভাবে পরিচালিত ক্যাশে কোয়েরি, পুনরুদ্ধার এবং মুছে ফেলা যায়:
কোটলিন
val cacheName = "my_cache"
// Query pre-created caches
for (cache in generativeModel.caches.list()) {
// Do something with cache
}
// Get specific cache
val cache = generativeModel.caches.get(cacheName)
// Delete a pre-created cache
generativeModel.caches.delete(cacheName)
জাভা
String cacheName = "my_cache";
// Query pre-created caches
for (PrefixCache cache : cachesFutures.list().get()) {
// Do something with cache
}
// Get specific cache
PrefixCache cache = cachesFutures.get(cacheName).get();
// Delete a pre-created cache
cachesFutures.delete(cacheName);