প্রিফিক্স ক্যাশিং হল এমন একটি ফিচার যা শেয়ার করা ও বারবার ব্যবহার করা প্রম্পট প্রিফিক্স অংশ প্রসেস করার ইন্টারমিডিয়েট LLM স্টেট স্টোর ও আবার ব্যবহার করার মাধ্যমে ইনফারেন্সের সময় কমায়। প্রিফিক্স ক্যাশিং চালু করতে, আপনাকে শুধু API অনুরোধে ডায়নামিক সাফিক্স থেকে স্ট্যাটিক প্রিফিক্স আলাদা করতে হবে।
প্রিফিক্স ক্যাশিং বর্তমানে শুধুমাত্র টেক্সট-ইনপুট সাপোর্ট করে, তাই আপনি যদি প্রম্পটে কোনও ছবি প্রদান করেন, তাহলে এই ফিচার ব্যবহার করা উচিত নয়।
প্রিফিক্স ক্যাশিং প্রয়োগ করার দুটি পদ্ধতি আছে: ইমপ্লিসিট বা এক্সপ্লিসিট:
- ইমপ্লিসিট (অটোমেটিক) প্রিফিক্স ক্যাশিং হল একটি লাইটওয়েট পদ্ধতি যেখানে অ্যাপ্লিকেশনকে শুধু প্রম্পটের শেয়ার করা অংশটি সংজ্ঞায়িত করতে হয়।
- এক্সপ্লিসিট (ম্যানুয়াল) প্রিফিক্স ক্যাশিং অ্যাপ্লিকেশনকে ক্যাশ তৈরি, কোয়েরি করা ও মুছে ফেলা সহ ক্যাশের উপর আরও বেশি নিয়ন্ত্রণ প্রদান করে।
প্রিফিক্স ক্যাশিং অন্তর্নিহিতভাবে ব্যবহার করুন
প্রিফিক্স ক্যাশিং চালু করতে, প্রম্পটের শেয়ার করা অংশটি
promptPrefix ফিল্ডে যোগ করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
Kotlin
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
val result = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
promptPrefix = PromptPrefix(promptPrefix)
}
)
Java
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 আলাদাভাবে প্রদান করা হয়েছে।
আনুমানিক পারফর্ম্যান্সের উন্নতি
প্রিফিক্স ক্যাশিং ছাড়া |
প্রিফিক্স ক্যাশে-হিট সহ (প্রথমবার প্রিফিক্স ব্যবহার করার সময় প্রিফিক্স ক্যাশে-মিস হতে পারে) |
|
৩০০-টোকেন ফিক্সড প্রিফিক্স ও ৫০-টোকেন ডায়নামিক সাফিক্স সহ Pixel 9 প্রম্পট |
০.৮২ সেকেন্ড |
০.৪৫ সেকেন্ড |
১,০০০-টোকেন ফিক্সড প্রিফিক্স ও ১০০-টোকেন ডায়নামিক সাফিক্স প্রম্পট সহ Pixel 9 |
২.১১ সেকেন্ড |
০.৫ সেকেন্ড |
স্টোরেজ সংক্রান্ত বিবেচনা
ইমপ্লিসিট প্রিফিক্স ক্যাশিংয়ের মাধ্যমে, ক্যাশে ফাইল ক্লায়েন্ট অ্যাপ্লিকেশনের ব্যক্তিগত স্টোরেজে সেভ করা হয়, যা আপনার অ্যাপের স্টোরেজ ব্যবহার বাড়িয়ে দেয়। এনক্রিপ্ট করা ক্যাশে ফাইল এবং আসল প্রিফিক্স টেক্সট সহ সংশ্লিষ্ট মেটাডেটা স্টোর করা হয়। স্টোরেজ সম্পর্কিত নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
- ক্যাশের সংখ্যা LRU (সম্প্রতি সবচেয়ে কম ব্যবহৃত) মেকানিজম দ্বারা ম্যানেজ করা হয়। সর্বাধিক মোট ক্যাশের পরিমাণ পেরিয়ে গেলে সবচেয়ে কম ব্যবহৃত ক্যাশ অটোমেটিক মুছে যায়।
- প্রম্পট ক্যাশের সাইজ প্রিফিক্সের দৈর্ঘ্যের উপর নির্ভর করে।
প্রিফিক্স ক্যাশিং থেকে তৈরি হওয়া সব ক্যাশে মুছে দিতে,
generativeMode.clearImplicitCaches()পদ্ধতি ব্যবহার করুন।
স্পষ্ট ক্যাশে ম্যানেজমেন্ট ব্যবহার করুন
সরাসরি মডেল অ্যাক্সেসে ক্যাশে ম্যানেজমেন্টের স্পষ্ট পদ্ধতি অন্তর্ভুক্ত থাকে, যাতে ডেভেলপাররা ক্যাশে তৈরি, সার্চ, ব্যবহার এবং সরানোর উপর আরও সুনির্দিষ্ট নিয়ন্ত্রণ পান। এইসব ম্যানুয়াল অপারেশন সিস্টেমের অটোমেটেড ক্যাশে হ্যান্ডলিংয়ের থেকে স্বাধীনভাবে চলে।
এই উদাহরণে দেখানো হয়েছে কীভাবে এক্সপ্লিসিট ক্যাশে ম্যানেজমেন্ট শুরু করতে হয় এবং ইনফারেন্স পারফর্ম করতে হয়:
Kotlin
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
}
)
Java
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 ব্যবহার করে স্পষ্টভাবে ম্যানেজ করা ক্যাশে কোয়েরি,
উদ্ধার ও মুছে ফেলা যায়:
Kotlin
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)
Java
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);