LLM ইনফারেন্স API আপনাকে অ্যান্ড্রয়েড অ্যাপ্লিকেশনের জন্য সম্পূর্ণরূপে ডিভাইসে বৃহৎ ভাষা মডেল (LLM) চালাতে দেয়, যা আপনি বিস্তৃত কাজ সম্পাদন করতে ব্যবহার করতে পারেন, যেমন টেক্সট তৈরি করা, প্রাকৃতিক ভাষা আকারে তথ্য পুনরুদ্ধার করা এবং নথির সারসংক্ষেপ করা। এই কাজটি একাধিক টেক্সট-টু-টেক্সট বৃহৎ ভাষা মডেলের জন্য অন্তর্নির্মিত সমর্থন প্রদান করে, যাতে আপনি আপনার অ্যান্ড্রয়েড অ্যাপগুলিতে সর্বশেষ অন-ডিভাইস জেনারেটিভ AI মডেল প্রয়োগ করতে পারেন।
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে দ্রুত LLM ইনফারেন্স API যোগ করতে, Quickstart অনুসরণ করুন। LLM ইনফারেন্স API চালানোর জন্য একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনের মৌলিক উদাহরণের জন্য, নমুনা অ্যাপ্লিকেশনটি দেখুন। LLM ইনফারেন্স API কীভাবে কাজ করে সে সম্পর্কে আরও গভীরভাবে বোঝার জন্য, কনফিগারেশন বিকল্পগুলি , মডেল রূপান্তর এবং LoRA টিউনিং বিভাগগুলি দেখুন।
আপনি মিডিয়াপাইপ স্টুডিও ডেমো ব্যবহার করে এই কাজটি বাস্তবে দেখতে পাবেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।
দ্রুত শুরু
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে LLM ইনফারেন্স API যোগ করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন। LLM ইনফারেন্স API উচ্চমানের অ্যান্ড্রয়েড ডিভাইসের জন্য অপ্টিমাইজ করা হয়েছে, যেমন Pixel 8 এবং Samsung S23 বা তার পরবর্তী সংস্করণ, এবং নির্ভরযোগ্যভাবে ডিভাইস এমুলেটর সমর্থন করে না।
নির্ভরতা যোগ করুন
LLM Inference API com.google.mediapipe:tasks-genai লাইব্রেরি ব্যবহার করে। আপনার অ্যান্ড্রয়েড অ্যাপের build.gradle ফাইলে এই নির্ভরতা যোগ করুন:
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.27'
}
একটি মডেল ডাউনলোড করুন
Hugging Face থেকে ৪-বিট কোয়ান্টাইজড ফরম্যাটে Gemma-3 1B ডাউনলোড করুন। উপলব্ধ মডেলগুলি সম্পর্কে আরও তথ্যের জন্য, মডেল ডকুমেন্টেশন দেখুন।
output_path ফোল্ডারের কন্টেন্ট অ্যান্ড্রয়েড ডিভাইসে পুশ করুন।
$ adb shell rm -r /data/local/tmp/llm/ # Remove any previously loaded models
$ adb shell mkdir -p /data/local/tmp/llm/
$ adb push output_path /data/local/tmp/llm/model_version.task
টাস্কটি শুরু করুন
মৌলিক কনফিগারেশন বিকল্পগুলি দিয়ে কাজটি শুরু করুন:
// Set the configuration options for the LLM Inference task
val taskOptions = LlmInferenceOptions.builder()
.setModelPath("/data/local/tmp/llm/model_version.task")
.setMaxTopK(64)
.build()
// Create an instance of the LLM Inference task
val llmInference = LlmInference.createFromOptions(context, taskOptions)
টাস্কটি চালান
একটি টেক্সট রেসপন্স তৈরি করতে generateResponse() পদ্ধতি ব্যবহার করুন। এটি একটি একক জেনারেট করা রেসপন্স তৈরি করে।
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
প্রতিক্রিয়া স্ট্রিম করতে, generateResponseAsync() পদ্ধতিটি ব্যবহার করুন।
val options = LlmInference.LlmInferenceOptions.builder()
...
.setResultListener { partialResult, done ->
logger.atInfo().log("partial result: $partialResult")
}
.build()
llmInference.generateResponseAsync(inputPrompt)
নমুনা আবেদন
LLM ইনফারেন্স API গুলি কার্যকরভাবে দেখতে এবং ডিভাইসে জেনারেটিভ AI ক্ষমতার বিস্তৃত পরিসর অন্বেষণ করতে, Google AI Edge Gallery অ্যাপটি দেখুন।
গুগল এআই এজ গ্যালারি একটি ওপেন-সোর্স অ্যান্ড্রয়েড অ্যাপ্লিকেশন যা ডেভেলপারদের জন্য একটি ইন্টারেক্টিভ খেলার মাঠ হিসেবে কাজ করে। এটি প্রদর্শন করে:
- বিভিন্ন কাজের জন্য LLM ইনফারেন্স API ব্যবহারের ব্যবহারিক উদাহরণ, যার মধ্যে রয়েছে:
- ছবি জিজ্ঞাসা করুন: একটি ছবি আপলোড করুন এবং এটি সম্পর্কে প্রশ্ন জিজ্ঞাসা করুন। বর্ণনা পান, সমস্যা সমাধান করুন, অথবা বস্তু সনাক্ত করুন।
- প্রম্পট ল্যাব: একক-টার্ন LLM ব্যবহারের ক্ষেত্রে অন্বেষণ করতে সারসংক্ষেপ করুন, পুনর্লিখন করুন, কোড তৈরি করুন, অথবা ফ্রিফর্ম প্রম্পট ব্যবহার করুন।
- এআই চ্যাট: বহু-পালা কথোপকথনে জড়িত হন।
- Hugging Face LiterRT কমিউনিটি এবং অফিসিয়াল গুগল রিলিজ (যেমন Gemma 3N) থেকে LiterRT-অপ্টিমাইজ করা বিভিন্ন মডেল আবিষ্কার, ডাউনলোড এবং পরীক্ষা করার ক্ষমতা।
- বিভিন্ন মডেলের জন্য রিয়েল-টাইম অন-ডিভাইস পারফরম্যান্স বেঞ্চমার্ক (টাইম টু ফার্স্ট টোকেন, ডিকোড স্পিড ইত্যাদি)।
- আপনার নিজস্ব কাস্টম
.litertlmবা.taskমডেলগুলি কীভাবে আমদানি এবং পরীক্ষা করবেন।
এই অ্যাপটি LLM ইনফারেন্স API এর ব্যবহারিক বাস্তবায়ন এবং ডিভাইসে জেনারেটিভ AI এর সম্ভাবনা বোঝার জন্য একটি উৎস। সোর্স কোডটি অন্বেষণ করুন এবং Google AI Edge Gallery GitHub সংগ্রহস্থল থেকে অ্যাপটি ডাউনলোড করুন।
কনফিগারেশন বিকল্পগুলি
একটি অ্যান্ড্রয়েড অ্যাপ সেট আপ করতে নিম্নলিখিত কনফিগারেশন বিকল্পগুলি ব্যবহার করুন:
| বিকল্পের নাম | বিবরণ | মূল্য পরিসীমা | ডিফল্ট মান |
|---|---|---|---|
modelPath | প্রকল্প ডিরেক্টরির মধ্যে মডেলটি যেখানে সংরক্ষণ করা হয় তার পথ। | পথ | নিষিদ্ধ |
maxTokens | মডেলটি সর্বোচ্চ কত সংখ্যক টোকেন (ইনপুট টোকেন + আউটপুট টোকেন) পরিচালনা করে। | পূর্ণসংখ্যা | ৫১২ |
topK | প্রজন্মের প্রতিটি ধাপে মডেলটি কত টোকেন বিবেচনা করে। ভবিষ্যদ্বাণীগুলিকে শীর্ষ k সর্বাধিক সম্ভাব্য টোকেনগুলিতে সীমাবদ্ধ করে। | পূর্ণসংখ্যা | ৪০ |
temperature | প্রজন্মের সময় যে পরিমাণ এলোমেলোতা প্রবর্তিত হয়। উচ্চ তাপমাত্রার ফলে উৎপন্ন লেখায় আরও সৃজনশীলতা দেখা দেয়, অন্যদিকে কম তাপমাত্রার ফলে আরও অনুমানযোগ্য প্রজন্ম তৈরি হয়। | ভাসা | ০.৮ |
randomSeed | টেক্সট তৈরির সময় ব্যবহৃত এলোমেলো বীজ। | পূর্ণসংখ্যা | 0 |
loraPath | ডিভাইসে স্থানীয়ভাবে LoRA মডেলের পরম পথ। দ্রষ্টব্য: এটি শুধুমাত্র GPU মডেলের সাথে সামঞ্জস্যপূর্ণ। | পথ | নিষিদ্ধ |
resultListener | ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল গ্রহণের জন্য সেট করে। শুধুমাত্র অ্যাসিঙ্ক জেনারেশন পদ্ধতি ব্যবহার করার সময় প্রযোজ্য। | নিষিদ্ধ | নিষিদ্ধ |
errorListener | একটি ঐচ্ছিক ত্রুটি শ্রোতা সেট করে। | নিষিদ্ধ | নিষিদ্ধ |
মাল্টিমোডাল প্রম্পটিং
LLM ইনফারেন্স API অ্যান্ড্রয়েড API গুলি মাল্টিমোডাল প্রম্পটিং সমর্থন করে এমন মডেলগুলির সাথে যা টেক্সট, ইমেজ এবং অডিও ইনপুট গ্রহণ করে। মাল্টিমোডালিটি সক্ষম হলে, ব্যবহারকারীরা তাদের প্রম্পটে ছবি এবং টেক্সট অথবা অডিও এবং টেক্সটের সংমিশ্রণ অন্তর্ভুক্ত করতে পারেন। LLM তারপর একটি টেক্সট প্রতিক্রিয়া প্রদান করে।
শুরু করতে, Gemma 3n এর একটি MediaPipe-সামঞ্জস্যপূর্ণ ভেরিয়েন্ট ব্যবহার করুন:
- জেমা-৩এন ই২বি : জেমা-৩এন পরিবারের একটি কার্যকর ২বি মডেল।
- জেমা-৩এন ই৪বি : জেমা-৩এন পরিবারের একটি কার্যকর ৪বি মডেল।
আরও তথ্যের জন্য, Gemma-3n ডকুমেন্টেশন দেখুন।
LLM ইনফারেন্স API-এর জন্য ছবি বা অডিও ইনপুট সক্ষম করতে নীচের ধাপগুলি অনুসরণ করুন।
ছবি ইনপুট
একটি প্রম্পটের মধ্যে ছবি প্রদান করতে, ইনপুট ছবি বা ফ্রেমগুলিকে LLM ইনফারেন্স API-তে পাস করার আগে একটি com.google.mediapipe.framework.image.MPImage অবজেক্টে রূপান্তর করুন:
import com.google.mediapipe.framework.image.BitmapImageBuilder
import com.google.mediapipe.framework.image.MPImage
// Convert the input Bitmap object to an MPImage object to run inference
val mpImage = BitmapImageBuilder(image).build()
LLM Inference API-এর জন্য ভিশন সাপোর্ট সক্ষম করতে, গ্রাফ বিকল্পগুলির মধ্যে EnableVisionModality কনফিগারেশন বিকল্পটিকে true সেট করুন:
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
প্রতি সেশনে সর্বোচ্চ ১০টি ছবি সেট করুন।
LlmInferenceOptions options = LlmInferenceOptions.builder()
...
.setMaxNumImages(10)
.build();
ভিশন এবং টেক্সট ইনপুট পরিচালনা করার জন্য সেট আপ করা LLM ইনফারেন্স API-এর একটি উদাহরণ বাস্তবায়ন নিচে দেওয়া হল:
MPImage image = getImageFromAsset(BURGER_IMAGE);
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
.setTopK(10)
.setTemperature(0.4f)
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
try (LlmInference llmInference =
LlmInference.createFromOptions(ApplicationProvider.getApplicationContext(), options);
LlmInferenceSession session =
LlmInferenceSession.createFromOptions(llmInference, sessionOptions)) {
session.addQueryChunk("Describe the objects in the image.");
session.addImage(image);
String result = session.generateResponse();
}
অডিও ইনপুট
LlmInferenceOptions-এ অডিও সাপোর্ট সক্ষম করুন
val inferenceOptions = LlmInference.LlmInferenceOptions.builder()
...
.setAudioModelOptions(AudioModelOptions.builder().build())
.build()
sessionOptions-এ অডিও সাপোর্ট সক্ষম করুন
val sessionOptions = LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableAudioModality(true).build())
.build()
অনুমানের সময় অডিও ডেটা পাঠান। দ্রষ্টব্য: অডিও অবশ্যই .wav হিসেবে মনো চ্যানেল ফর্ম্যাট করা উচিত।
val audioData: ByteArray = ...
inferenceEngine.llmInferenceSession.addAudio(audioData)
অডিও এবং টেক্সট ইনপুট পরিচালনা করার জন্য সেট আপ করা LLM ইনফারেন্স API-এর একটি উদাহরণ নিচে দেওয়া হল:
val audioData: ByteArray = ...
val inferenceOptions = LlmInference.LlmInferenceOptions.builder()
...
.setAudioModelOptions(AudioModelOptions.builder().build())
.build()
val sessionOptions = LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableAudioModality(true).build())
.build()
LlmInference.createFromOptions(context, inferenceOptions).use { llmInference ->
LlmInferenceSession.createFromOptions(llmInference, sessionOptions).use { session ->
session.addQueryChunk("Transcribe the following speech segment:")
session.addAudio(audioData)
val result = session.generateResponse()
}
}
LoRA কাস্টমাইজেশন
LLM ইনফারেন্স API PEFT (প্যারামিটার-এফিশিয়েন্ট ফাইন-টিউনিং) লাইব্রেরি ব্যবহার করে LoRA (লো-র্যাঙ্ক অ্যাডাপ্টেশন) টিউনিং সমর্থন করে। LoRA টিউনিং একটি সাশ্রয়ী প্রশিক্ষণ প্রক্রিয়ার মাধ্যমে LLM-এর আচরণকে কাস্টমাইজ করে, পুরো মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়ার পরিবর্তে নতুন প্রশিক্ষণ ডেটার উপর ভিত্তি করে প্রশিক্ষণযোগ্য ওজনের একটি ছোট সেট তৈরি করে।
LLM ইনফারেন্স API Gemma-2 2B , Gemma 2B এবং Phi-2 মডেলের মনোযোগ স্তরগুলিতে LoRA ওজন যোগ করার সুবিধা প্রদান করে। safetensors ফর্ম্যাটে মডেলটি ডাউনলোড করুন।
LoRA ওয়েট তৈরি করার জন্য বেস মডেলটি অবশ্যই safetensors ফর্ম্যাটে থাকতে হবে। LoRA প্রশিক্ষণের পরে, আপনি মিডিয়াপাইপে চালানোর জন্য মডেলগুলিকে FlatBuffers ফর্ম্যাটে রূপান্তর করতে পারেন।
LoRA ওজন প্রস্তুত করুন
আপনার নিজস্ব ডেটাসেটে একটি সূক্ষ্ম-সুরযুক্ত LoRA মডেল প্রশিক্ষণের জন্য PEFT এর LoRA পদ্ধতি নির্দেশিকা ব্যবহার করুন।
LLM ইনফারেন্স API শুধুমাত্র মনোযোগ স্তরগুলিতে LoRA সমর্থন করে, তাই LoraConfig এ শুধুমাত্র মনোযোগ স্তরগুলি নির্দিষ্ট করুন:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
প্রস্তুত ডেটাসেটের উপর প্রশিক্ষণ এবং মডেল সংরক্ষণের পর, সূক্ষ্মভাবে সুরক্ষিত LoRA মডেলের ওজন adapter_model.safetensors এ পাওয়া যায়। safetensors ফাইলটি হল মডেল রূপান্তরের সময় ব্যবহৃত LoRA চেকপয়েন্ট।
মডেল রূপান্তর
মডেলের ওজনগুলিকে Flatbuffer ফর্ম্যাটে রূপান্তর করতে MediaPipe Python প্যাকেজ ব্যবহার করুন। ConversionConfig অতিরিক্ত LoRA বিকল্পগুলির সাথে বেস মডেল বিকল্পগুলি নির্দিষ্ট করে।
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_FILE,
)
converter.convert_checkpoint(config)
কনভার্টারটি দুটি ফ্ল্যাটবাফার ফাইল তৈরি করবে, একটি বেস মডেলের জন্য এবং অন্যটি LoRA মডেলের জন্য।
LoRA মডেলের অনুমান
অ্যান্ড্রয়েড ইনিশিয়ালাইজেশনের সময় স্ট্যাটিক LoRA সমর্থন করে। LoRA মডেল লোড করতে, LoRA মডেল পাথের পাশাপাশি বেস LLM উল্লেখ করুন।
// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath(BASE_MODEL_PATH)
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath(LORA_MODEL_PATH)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
LoRA দিয়ে LLM ইনফারেন্স চালানোর জন্য, বেস মডেলের মতো একই generateResponse() বা generateResponseAsync() পদ্ধতি ব্যবহার করুন।