LLM ইনফারেন্স API আপনাকে Android অ্যাপ্লিকেশনগুলির জন্য সম্পূর্ণরূপে ডিভাইসে বড় ভাষা মডেলগুলি (LLMs) চালাতে দেয়, যা আপনি পাঠ্য তৈরি করা, প্রাকৃতিক ভাষা আকারে তথ্য পুনরুদ্ধার করা এবং নথির সংক্ষিপ্তসারের মতো বিস্তৃত কাজ সম্পাদন করতে ব্যবহার করতে পারেন। টাস্কটি একাধিক টেক্সট-টু-টেক্সট বড় ভাষার মডেলের জন্য অন্তর্নির্মিত সমর্থন প্রদান করে, যাতে আপনি আপনার অ্যান্ড্রয়েড অ্যাপগুলিতে সর্বশেষ অন-ডিভাইস জেনারেটিভ এআই মডেলগুলি প্রয়োগ করতে পারেন।
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে দ্রুত LLM ইনফারেন্স API যোগ করতে, Quickstart অনুসরণ করুন। LLM ইনফারেন্স API চালিত একটি Android অ্যাপ্লিকেশনের একটি মৌলিক উদাহরণের জন্য, নমুনা অ্যাপ্লিকেশনটি দেখুন। LLM ইনফারেন্স API কীভাবে কাজ করে তার আরও গভীরভাবে বোঝার জন্য, কনফিগারেশন বিকল্পগুলি , মডেল রূপান্তর এবং LoRA টিউনিং বিভাগগুলি পড়ুন৷
আপনি MediaPipe স্টুডিও ডেমোর সাহায্যে এই কাজটি দেখতে পারেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।
কুইকস্টার্ট
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে LLM ইনফারেন্স API যোগ করতে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন৷ LLM ইনফারেন্স API হাই-এন্ড অ্যান্ড্রয়েড ডিভাইসগুলির জন্য অপ্টিমাইজ করা হয়েছে, যেমন Pixel 8 এবং Samsung S23 বা তার পরে, এবং এটি নির্ভরযোগ্যভাবে ডিভাইস এমুলেটরকে সমর্থন করে না।
নির্ভরতা যোগ করুন
LLM ইনফারেন্স API com.google.mediapipe:tasks-genai
লাইব্রেরি ব্যবহার করে। আপনার Android অ্যাপের build.gradle
ফাইলে এই নির্ভরতা যোগ করুন:
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.24'
}
একটি মডেল ডাউনলোড করুন
হাগিং ফেস থেকে 4-বিট কোয়ান্টাইজড ফরম্যাটে 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
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 অ্যাপটি দেখুন৷
গুগল এআই এজ গ্যালারি একটি ওপেন সোর্স অ্যান্ড্রয়েড অ্যাপ্লিকেশন যা ডেভেলপারদের জন্য একটি ইন্টারেক্টিভ খেলার মাঠ হিসেবে কাজ করে। এটি প্রদর্শন করে:
- বিভিন্ন কাজের জন্য এলএলএম ইনফারেন্স API ব্যবহার করার ব্যবহারিক উদাহরণ, যার মধ্যে রয়েছে:
- ছবি জিজ্ঞাসা করুন: একটি ছবি আপলোড করুন এবং এটি সম্পর্কে প্রশ্ন জিজ্ঞাসা করুন। বর্ণনা পান, সমস্যার সমাধান করুন বা বস্তু শনাক্ত করুন।
- প্রম্পট ল্যাব: একক-টার্ন এলএলএম ব্যবহারের ক্ষেত্রে অন্বেষণ করতে সংক্ষিপ্তকরণ, পুনঃলিখন, কোড তৈরি, বা ফ্রিফর্ম প্রম্পট ব্যবহার করুন।
- এআই চ্যাট: বহুমুখী কথোপকথনে নিযুক্ত হন।
- Hugging Face LiteRT কমিউনিটি এবং অফিসিয়াল গুগল রিলিজ (যেমন Gemma 3N) থেকে LiteRT-অপ্টিমাইজ করা বিভিন্ন মডেলের আবিষ্কার, ডাউনলোড এবং পরীক্ষা করার ক্ষমতা।
- বিভিন্ন মডেলের জন্য রিয়েল-টাইম অন-ডিভাইস পারফরম্যান্স বেঞ্চমার্ক (টাইম টু ফার্স্ট টোকেন, ডিকোড স্পিড ইত্যাদি)।
- কীভাবে আপনার নিজস্ব কাস্টম
.task
মডেলগুলি আমদানি এবং পরীক্ষা করবেন৷
এই অ্যাপটি LLM ইনফারেন্স API এর ব্যবহারিক বাস্তবায়ন এবং ডিভাইসে জেনারেটিভ এআই এর সম্ভাব্যতা বোঝার একটি সম্পদ। সোর্স কোডটি অন্বেষণ করুন এবং Google AI এজ গ্যালারি GitHub সংগ্রহস্থল থেকে অ্যাপটি ডাউনলোড করুন।
কনফিগারেশন বিকল্প
একটি Android অ্যাপ সেট আপ করতে নিম্নলিখিত কনফিগারেশন বিকল্পগুলি ব্যবহার করুন:
বিকল্পের নাম | বর্ণনা | মান পরিসীমা | ডিফল্ট মান |
---|---|---|---|
modelPath | প্রজেক্ট ডিরেক্টরির মধ্যে মডেলটি যেখানে সংরক্ষণ করা হয় তার পথ। | PATH | N/A |
maxTokens | মডেলটি পরিচালনা করে সর্বাধিক সংখ্যক টোকেন (ইনপুট টোকেন + আউটপুট টোকেন)। | পূর্ণসংখ্যা | 512 |
topK | প্রজন্মের প্রতিটি ধাপে মডেলটি বিবেচনা করে টোকেনের সংখ্যা। পূর্বাভাসগুলিকে শীর্ষ k সর্বাধিক সম্ভাব্য টোকেনে সীমাবদ্ধ করে৷ | পূর্ণসংখ্যা | 40 |
temperature | প্রজন্মের সময় যে পরিমাণ এলোমেলোভাবে প্রবর্তিত হয়। একটি উচ্চ তাপমাত্রার ফলে উত্পন্ন পাঠে আরও সৃজনশীলতা আসে, যখন নিম্ন তাপমাত্রা আরও অনুমানযোগ্য প্রজন্ম তৈরি করে। | ভাসা | 0.8 |
randomSeed | টেক্সট তৈরির সময় ব্যবহৃত এলোমেলো বীজ। | পূর্ণসংখ্যা | 0 |
loraPath | ডিভাইসে স্থানীয়ভাবে LoRA মডেলের পরম পথ। দ্রষ্টব্য: এটি শুধুমাত্র GPU মডেলের সাথে সামঞ্জস্যপূর্ণ। | PATH | N/A |
resultListener | ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে সেট করে। অ্যাসিঙ্ক জেনারেশন পদ্ধতি ব্যবহার করার সময় শুধুমাত্র প্রযোজ্য। | N/A | N/A |
errorListener | একটি ঐচ্ছিক ত্রুটি শ্রোতা সেট করে। | N/A | N/A |
মাল্টিমোডাল প্রম্পটিং
এলএলএম ইনফারেন্স এপিআই অ্যান্ড্রয়েড এপিআই টেক্সট এবং ইমেজ ইনপুট গ্রহণ করে এমন মডেলের সাথে মাল্টিমডাল প্রম্পটিং সমর্থন করে। মাল্টিমোডালিটি সক্ষম হলে, ব্যবহারকারীরা তাদের প্রম্পটে ছবি এবং পাঠ্যের সংমিশ্রণ অন্তর্ভুক্ত করতে পারে এবং এলএলএম একটি পাঠ্য প্রতিক্রিয়া প্রদান করে।
শুরু করতে, Gemma 3n- এর একটি MediaPipe-সামঞ্জস্যপূর্ণ বৈকল্পিক ব্যবহার করুন:
- Gemma-3n E2B : Gemma-3n পরিবারের একটি 2B মডেল।
- Gemma-3n E4B : Gemma-3n পরিবারের একটি 4B মডেল।
আরও তথ্যের জন্য, Gemma-3n ডকুমেন্টেশন দেখুন।
একটি প্রম্পটের মধ্যে ছবিগুলি প্রদান করতে, 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 ইনফারেন্স API-এর জন্য দৃষ্টি সমর্থন সক্ষম করতে, EnableVisionModality
কনফিগারেশন বিকল্পটিকে গ্রাফ বিকল্পগুলির মধ্যে true
হিসাবে সেট করুন:
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
Gemma-3n প্রতি সেশনে সর্বাধিক একটি ছবি গ্রহণ করে, তাই MaxNumImages
1-এ সেট করুন।
LlmInferenceOptions options = LlmInferenceOptions.builder()
...
.setMaxNumImages(1)
.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();
}
LoRA কাস্টমাইজেশন
LLM ইনফারেন্স API PEFT (প্যারামিটার-দক্ষ ফাইন-টিউনিং) লাইব্রেরি ব্যবহার করে LoRA (নিম্ন-র্যাঙ্ক অ্যাডাপ্টেশন) টিউনিং সমর্থন করে। LoRA টিউনিং একটি খরচ-কার্যকর প্রশিক্ষণ প্রক্রিয়ার মাধ্যমে LLM-এর আচরণকে কাস্টমাইজ করে, পুরো মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়ার পরিবর্তে নতুন প্রশিক্ষণের ডেটার উপর ভিত্তি করে প্রশিক্ষণযোগ্য ওজনের একটি ছোট সেট তৈরি করে।
LLM ইনফারেন্স API Gemma-2 2B , Gemma 2B এবং Phi-2 মডেলের মনোযোগ স্তরগুলিতে LoRA ওজন যোগ করতে সমর্থন করে। safetensors
ফরম্যাটে মডেলটি ডাউনলোড করুন।
LoRA ওজন তৈরি করার জন্য বেস মডেল অবশ্যই safetensors
ফরম্যাটে হতে হবে। LoRA প্রশিক্ষণের পরে, আপনি MediaPipe-এ চালানোর জন্য মডেলগুলিকে 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 চেকপয়েন্ট।
মডেল রূপান্তর
মডেলের ওজনকে ফ্ল্যাটবাফার ফরম্যাটে রূপান্তর করতে MediaPipe পাইথন প্যাকেজ ব্যবহার করুন। 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()
পদ্ধতি ব্যবহার করুন।