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.22'
}
Android 12 (API 31) বা উচ্চতর ডিভাইসগুলির জন্য, নেটিভ OpenCL লাইব্রেরি নির্ভরতা যোগ করুন। আরও তথ্যের জন্য, uses-native-library
ট্যাগের ডকুমেন্টেশন দেখুন।
AndroidManifest.xml
ফাইলে নিম্নলিখিত uses-native-library
ট্যাগ যোগ করুন:
<uses-native-library android:name="libOpenCL.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false"/>
একটি মডেল ডাউনলোড করুন
হাগিং ফেস থেকে 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 ব্যবহার করে Android এর জন্য একটি মৌলিক পাঠ্য প্রজন্মের অ্যাপ্লিকেশনের একটি উদাহরণ। আপনি অ্যাপটিকে আপনার নিজের অ্যান্ড্রয়েড অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, বা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন। উদাহরণ কোডটি গিটহাবে হোস্ট করা হয়েছে।
নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:
git clone https://github.com/google-ai-edge/mediapipe-samples
উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি প্রকল্পটি অ্যান্ড্রয়েড স্টুডিওতে আমদানি করতে এবং অ্যাপটি চালাতে পারেন। আরও তথ্যের জন্য, Android এর জন্য সেটআপ গাইড দেখুন।
কনফিগারেশন বিকল্প
একটি 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 |
মডেল রূপান্তর
LLM ইনফারেন্স API নিম্নলিখিত ধরণের মডেলগুলির সাথে সামঞ্জস্যপূর্ণ, যার মধ্যে কিছু মডেল রূপান্তর প্রয়োজন৷ আপনার মডেলের জন্য প্রয়োজনীয় পদক্ষেপ পদ্ধতি সনাক্ত করতে টেবিলটি ব্যবহার করুন।
মডেল | রূপান্তর পদ্ধতি | সামঞ্জস্যপূর্ণ প্ল্যাটফর্ম | ফাইলের ধরন |
---|---|---|---|
Gemma-3 1B | কোন রূপান্তর প্রয়োজন | অ্যান্ড্রয়েড, ওয়েব | .টাস্ক |
Gemma 2B, Gemma 7B, Gemma-2 2B | কোন রূপান্তর প্রয়োজন | অ্যান্ড্রয়েড, আইওএস, ওয়েব | .বিন |
Phi-2, StableLM, Falcon | মিডিয়াপাইপ রূপান্তর স্ক্রিপ্ট | অ্যান্ড্রয়েড, আইওএস, ওয়েব | .বিন |
সমস্ত PyTorch LLM মডেল | এআই এজ টর্চ জেনারেটিভ লাইব্রেরি | অ্যান্ড্রয়েড, আইওএস | .টাস্ক |
আপনি কীভাবে অন্যান্য মডেলগুলিকে রূপান্তর করতে পারেন তা জানতে, মডেল রূপান্তর বিভাগটি দেখুন৷
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()
পদ্ধতি ব্যবহার করুন।