এই নির্দেশিকাটি Gemma মডেলগুলিকে Hugging Face Safetensors ফরম্যাটে ( .safetensors
) মিডিয়াপাইপ টাস্ক ফাইল ফরম্যাটে ( .task
) রূপান্তর করার নির্দেশনা প্রদান করে৷ MediaPipe LLM Inference API এবং LiteRT রানটাইম ব্যবহার করে অ্যান্ড্রয়েড এবং iOS-এ অন-ডিভাইস ইনফরেন্সের জন্য প্রাক-প্রশিক্ষিত বা সূক্ষ্ম-টিউনড জেমা মডেল স্থাপনের জন্য এই রূপান্তরটি অপরিহার্য।
প্রয়োজনীয় টাস্ক বান্ডেল ( .task
) তৈরি করতে, আপনি AI এজ টর্চ ব্যবহার করবেন। এই টুলটি PyTorch মডেলগুলিকে মাল্টি-সিগনেচার LiteRT ( .tflite
) মডেলগুলিতে রপ্তানি করে, যা MediaPipe LLM ইনফারেন্স API এর সাথে সামঞ্জস্যপূর্ণ এবং মোবাইল অ্যাপ্লিকেশনগুলিতে CPU ব্যাকএন্ডে চালানোর জন্য উপযুক্ত৷
চূড়ান্ত .task
ফাইলটি একটি স্বয়ংসম্পূর্ণ প্যাকেজ যা MediaPipe-এর জন্য প্রয়োজনীয়, LiteRT মডেল, টোকেনাইজার মডেল এবং প্রয়োজনীয় মেটাডেটাকে একত্রিত করে। এই বান্ডেলটি প্রয়োজনীয় কারণ টোকেনাইজার (যা মডেলের জন্য টেক্সট প্রম্পটকে টোকেন এম্বেডিংয়ে রূপান্তর করে) অবশ্যই শেষ-থেকে-এন্ড ইনফারেন্স সক্ষম করতে LiteRT মডেলের সাথে প্যাকেজ করা আবশ্যক।
এখানে প্রক্রিয়াটির একটি ধাপে ধাপে ব্রেকডাউন রয়েছে:
1. আপনার Gemma মডেল পান
শুরু করার জন্য আপনার কাছে দুটি বিকল্প আছে।
বিকল্প A. একটি বিদ্যমান ফাইন-টিউনড মডেল ব্যবহার করুন
আপনার যদি একটি সূক্ষ্ম-সুন্দর জেমা মডেল প্রস্তুত থাকে, তাহলে শুধু পরবর্তী ধাপে এগিয়ে যান।
বিকল্প B. অফিসিয়াল নির্দেশ-সুরিত মডেল ডাউনলোড করুন
আপনার যদি একটি মডেলের প্রয়োজন হয়, আপনি Hugging Face Hub থেকে একটি নির্দেশ-টিউনড জেমা ডাউনলোড করতে পারেন।
প্রয়োজনীয় সরঞ্জাম সেটআপ করুন:
python -m venv hf
source hf/bin/activate
pip install huggingface_hub[cli]
মডেল ডাউনলোড করুন:
হাগিং ফেস হাবের মডেলগুলিকে একটি মডেল আইডি দ্বারা চিহ্নিত করা হয়, সাধারণত <organization_or_username>/<model_name>
ফর্ম্যাটে। উদাহরণস্বরূপ, অফিসিয়াল Google Gemma 3 270M নির্দেশ-টিউনড মডেল ডাউনলোড করতে, ব্যবহার করুন:
hf download google/gemma-3-270m-it --local-dir "PATH_TO_HF_MODEL"
#"google/gemma-3-1b-it", etc
2. রূপান্তর করুন এবং মডেলটিকে LiteRT তে পরিমাপ করুন
একটি পাইথন ভার্চুয়াল পরিবেশ সেট আপ করুন এবং এআই এজ টর্চ প্যাকেজের সর্বশেষ স্থিতিশীল রিলিজ ইনস্টল করুন:
python -m venv ai-edge-torch
source ai-edge-torch/bin/activate
pip install "ai-edge-torch>=0.6.0"
Safetensor কে LiteRT মডেলে রূপান্তর করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করুন।
from ai_edge_torch.generative.examples.gemma3 import gemma3
from ai_edge_torch.generative.utilities import converter
from ai_edge_torch.generative.utilities.export_config import ExportConfig
from ai_edge_torch.generative.layers import kv_cache
pytorch_model = gemma3.build_model_270m("PATH_TO_HF_MODEL")
# If you are using Gemma 3 1B
#pytorch_model = gemma3.build_model_1b("PATH_TO_HF_MODEL")
export_config = ExportConfig()
export_config.kvcache_layout = kv_cache.KV_LAYOUT_TRANSPOSED
export_config.mask_as_input = True
converter.convert_to_tflite(
pytorch_model,
output_path="OUTPUT_DIR_PATH",
output_name_prefix="my-gemma3",
prefill_seq_len=2048,
kv_cache_max_len=4096,
quantize="dynamic_int8",
export_config=export_config,
)
সচেতন থাকুন যে এই প্রক্রিয়াটি সময়সাপেক্ষ এবং আপনার কম্পিউটারের প্রক্রিয়াকরণের গতির উপর নির্ভর করে। রেফারেন্সের জন্য, একটি 2025 8-কোর CPU-তে, একটি 270M মডেল 5-10 মিনিটের বেশি সময় নেয়, যেখানে একটি 1B মডেল প্রায় 10-30 মিনিট সময় নিতে পারে।
চূড়ান্ত আউটপুট, একটি LiteRT মডেল, আপনার নির্দিষ্ট OUTPUT_DIR_PATH
এ সংরক্ষণ করা হবে।
আপনার লক্ষ্য ডিভাইসের মেমরি এবং কর্মক্ষমতা সীমাবদ্ধতার উপর ভিত্তি করে নিম্নলিখিত মানগুলি টিউন করুন।
-
kv_cache_max_len
: মডেলের কার্যকারী মেমরির (KV ক্যাশে) মোট বরাদ্দকৃত আকার নির্ধারণ করে। এই ক্ষমতা একটি কঠিন সীমা এবং প্রম্পটের টোকেন (প্রিফিল) এবং পরবর্তীতে তৈরি হওয়া সমস্ত টোকেন (ডিকোড) এর সম্মিলিত সমষ্টি সংরক্ষণ করার জন্য যথেষ্ট হতে হবে। -
prefill_seq_len
: প্রিফিল চাঙ্কিংয়ের জন্য ইনপুট প্রম্পটের টোকেন গণনা নির্দিষ্ট করে। প্রিফিল চাঙ্কিং ব্যবহার করে ইনপুট প্রম্পট প্রক্রিয়া করার সময়, সমগ্র ক্রম (যেমন, 50,000 টোকেন) একবারে গণনা করা হয় না; পরিবর্তে, এটি পরিচালনাযোগ্য সেগমেন্টে বিভক্ত (যেমন, 2,048 টোকেনের অংশ) যা একটি মেমরির বাইরের ত্রুটি রোধ করতে ক্যাশে ক্রমান্বয়ে লোড করা হয়। -
quantize
: নির্বাচিত কোয়ান্টাইজেশন স্কিমের জন্য স্ট্রিং। Gemma 3 এর জন্য উপলব্ধ কোয়ান্টাইজেশন রেসিপিগুলির তালিকা নীচে দেওয়া হল।-
none
: কোন পরিমাপ নেই -
fp16
: FP16 ওজন, FP32 অ্যাক্টিভেশন এবং সমস্ত অপারেশনের জন্য ফ্লোটিং পয়েন্ট গণনা -
dynamic_int8
: FP32 সক্রিয়করণ, INT8 ওজন, এবং পূর্ণসংখ্যা গণনা -
weight_only_int8
: FP32 সক্রিয়করণ, INT8 ওজন, এবং ফ্লোটিং পয়েন্ট গণনা
-
3. LiteRT এবং tokenizer থেকে একটি টাস্ক বান্ডেল তৈরি করুন
একটি পাইথন ভার্চুয়াল পরিবেশ সেট আপ করুন এবং মিডিয়াপাইপ পাইথন প্যাকেজ ইনস্টল করুন:
python -m venv mediapipe
source mediapipe/bin/activate
pip install mediapipe
মডেল বান্ডিল করতে genai.bundler
লাইব্রেরি ব্যবহার করুন:
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model="PATH_TO_LITERT_MODEL.tflite",
tokenizer_model="PATH_TO_HF_MODEL/tokenizer.model",
start_token="<bos>",
stop_tokens=["<eos>", "<end_of_turn>"],
output_filename="PATH_TO_TASK_BUNDLE.task",
prompt_prefix="<start_of_turn>user\n",
prompt_suffix="<end_of_turn>\n<start_of_turn>model\n",
)
bundler.create_bundle(config)
bundler.create_bundle
ফাংশন একটি .task
ফাইল তৈরি করে যাতে মডেলটি চালানোর জন্য প্রয়োজনীয় সমস্ত তথ্য থাকে।
4. অ্যান্ড্রয়েডে মিডিয়াপাইপের সাথে অনুমান
মৌলিক কনফিগারেশন বিকল্পগুলির সাথে কাজটি শুরু করুন:
// Default values for LLM models
private object LLMConstants {
const val MODEL_PATH = "PATH_TO_TASK_BUNDLE_ON_YOUR_DEVICE.task"
const val DEFAULT_MAX_TOKEN = 4096
const val DEFAULT_TOPK = 64
const val DEFAULT_TOPP = 0.95f
const val DEFAULT_TEMPERATURE = 1.0f
}
// Set the configuration options for the LLM Inference task
val taskOptions = LlmInference.LlmInferenceOptions.builder()
.setModelPath(LLMConstants.MODEL_PATH)
.setMaxTokens(LLMConstants.DEFAULT_MAX_TOKEN)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, taskOptions)
llmInferenceSession =
LlmInferenceSession.createFromOptions(
llmInference,
LlmInferenceSession.LlmInferenceSessionOptions.builder()
.setTopK(LLMConstants.DEFAULT_TOPK)
.setTopP(LLMConstants.DEFAULT_TOPP)
.setTemperature(LLMConstants.DEFAULT_TEMPERATURE)
.build(),
)
একটি পাঠ্য প্রতিক্রিয়া তৈরি করতে generateResponse()
পদ্ধতি ব্যবহার করুন।
val result = llmInferenceSession.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
প্রতিক্রিয়া স্ট্রিম করতে, generateResponseAsync()
পদ্ধতি ব্যবহার করুন।
llmInferenceSession.generateResponseAsync(inputPrompt) { partialResult, done ->
logger.atInfo().log("partial result: $partialResult")
}
আরও তথ্যের জন্য অ্যান্ড্রয়েডের জন্য এলএলএম ইনফারেন্স গাইড দেখুন।
পরবর্তী পদক্ষেপ
জেমা মডেলগুলির সাথে আরও তৈরি করুন এবং অন্বেষণ করুন: