১. 🏁 ভূমিকা ও সিএলআই সংক্ষিপ্ত বিবরণ
LiteRT CLI 101 হ্যান্ডস-অন কোডল্যাবে আপনাকে স্বাগতম! এই গাইডটি আপনাকে শূন্য থেকে এনভায়রনমেন্ট সেটআপ করা থেকে শুরু করে অপ্টিমাইজড এজ ইন্টেলিজেন্স ডেপ্লয় করা পর্যন্ত ধাপে ধাপে নিয়ে যাওয়ার জন্য ডিজাইন করা হয়েছে।
🌟 পটভূমি
এজ এআই-এর জন্য জটিল নিউরাল মডেলগুলোকে সরাসরি মোবাইল ফোন, পরিধানযোগ্য ডিভাইস এবং এমবেডেড হার্ডওয়্যারে নিয়ে আসা প্রয়োজন।
- LiteRT (পূর্বে TensorFlow Lite / TFLite নামে পরিচিত) হলো গুগলের একটি অন-ডিভাইস ফ্রেমওয়ার্ক, যা দক্ষ রূপান্তর, রানটাইম এবং অপ্টিমাইজেশনের মাধ্যমে এজ প্ল্যাটফর্মে উচ্চ-পারফরম্যান্সের এমএল ও জেনএআই স্থাপন করে।
- LiteRT CLI, Google AI Edge স্ট্যাকগুলিকে একটি স্বতন্ত্র শেল কমান্ড (
litert)-এর মধ্যে একীভূত করে, যা বিভিন্ন প্ল্যাটফর্ম (ডেস্কটপ, মোবাইল বা ক্লাউড) জুড়ে নানা হার্ডওয়্যারে (CPU / GPU / NPU) LiteRT (TFLite) মডেলের রূপান্তর, কোয়ান্টাইজিং, কম্পাইলিং, রান করা, বেঞ্চমার্কিং এবং ভিজ্যুয়ালাইজেশন সহ LiteRT-সম্পর্কিত ডেভেলপমেন্ট ওয়ার্কফ্লোকে সুবিন্যস্ত করে।
২. 🔄 মৌলিক কার্যপ্রবাহ: রূপান্তর, পরিমাণ নির্ধারণ ও চালনা
এই অংশে, চলুন LiteRT CLI ব্যবহার করে একটি সম্পূর্ণ এজ এআই মডেলিং লাইফসাইকেল সম্পাদন করি: পাইটর্চ মডেল র্যাপার ➔ ট্রেসিং রূপান্তর ➔ মডেল কোয়ান্টাইজেশন ➔ ডেস্কটপ ইনফারেন্স ➔ পারফরম্যান্স বেঞ্চমার্ক।
📝 পর্যায় ১: একটি পাইটর্চ মডেল র্যাপার স্ক্রিপ্ট প্রস্তুত করুন
আপনার বর্তমান ডিরেক্টরিতে resnet18.py ফাইলটি তৈরি করুন। এটি ডাইনামিক ট্রেসিং হুকগুলো উন্মুক্ত করে, যাতে গ্রাফ বিল্ডারটি শেপগুলো ক্যাপচার করতে পারে:
import torch
import torchvision
def get_model(batch_size: int = 1) -> torch.nn.Module:
model = torchvision.models.resnet18(
weights=torchvision.models.ResNet18_Weights.IMAGENET1K_V1
)
model.eval()
return model
def get_args(batch_size: int = 1) -> tuple[torch.Tensor, ...]:
return (torch.randn(batch_size, 3, 224, 224),)
🔄 পর্যায় 2: LiteRT টর্চ ব্যবহার করে একটি PyTorch মডেলকে LiteRT তে রূপান্তর করুন
একটি স্ট্যান্ডার্ড Float32 .tflite টার্গেট মডেল তৈরি করতে LiteRT Torch কনভার্টারটি চালু করুন:
# Convert PyTorch source to LiteRT
litert convert resnet18.py --output resnet18
# Verify target was exported
ls -lh resnet18/resnet18.tflite
📉 ধাপ ৩: ওয়েটগুলোকে INT8-এ কোয়ান্টাইজ করুন
আকার প্রায় ৪ গুণ ছোট করতে ডাইনামিক এবং শুধুমাত্র ওজন-ভিত্তিক রেসিপি কার্ড প্রয়োগ করুন:
# 1. Dynamic Range Quantization (Dynamic activations + static INT8 weights)
litert quantize resnet18/resnet18.tflite \
--recipe dynamic_wi8_afp32 \
--output resnet18/resnet18_int8_dynamic.tflite
# 2. Weight-Only Quantization (Float32 activations + static INT8 weights)
litert quantize resnet18/resnet18.tflite \
--recipe weight_only_wi8_afp32 \
--output resnet18/resnet18_int8_weight_only.tflite
🚀 ধাপ ৪: স্থানীয়ভাবে ইনফারেন্স চালান
পারফরম্যান্স ব্লকগুলো যাচাই করার জন্য ডামি ইনপুট প্যারামিটার ব্যবহার করে টেস্ট অপারেশনগুলো চালান:
# Run original Float32 model inference
litert run resnet18/resnet18.tflite --desktop --cpu
# Run optimized Dynamic INT8 model inference
litert run resnet18/resnet18_int8_dynamic.tflite --cpu --iterations 1
📊 পর্যায় ৫: মডেলের কর্মক্ষমতা বেঞ্চমার্ক করা
গড় লেটেন্সি, ইনিশিয়ালাইজেশন কস্ট, সিপিইউ এক্সিকিউশন থ্রুপুট এবং ডাইনামিক অ্যাক্টিভ মেমরি ফুটপ্রিন্ট সহ উচ্চ-নির্ভুল মেট্রিকগুলো পরিমাপ করুন:
# Benchmark original Float32 model
litert benchmark resnet18/resnet18.tflite --desktop --cpu
# Benchmark optimized Dynamic range INT8 model
litert benchmark resnet18/resnet18_int8_dynamic.tflite --desktop --cpu
৩. 🔌 স্থানীয় পরিবেশ স্থাপন ও যাচাইকরণ
চলুন আপনার ওয়ার্কস্টেশনে (macOS বা Linux) একটি বিচ্ছিন্ন ও পরিষ্কার স্যান্ডবক্স তৈরি করি।
🔌 বিকল্প A: অতি দ্রুত সেটআপ (uv)
uv ব্যবহার করে কয়েক সেকেন্ডের মধ্যে লাইব্রেরিগুলোকে আলাদা করা যায়, যা এনভায়রনমেন্ট ক্যাশের দ্বন্দ্ব দূর করে।
# Create active workspace sandbox
uv venv --clear --python=3.13 --seed
source .venv/bin/activate
# Install litert-cli from pypi
uv pip install litert-cli-nightly
🐍 বিকল্প B: সাধারণ সেটআপ (পিআইপি)
যদি uv উপস্থিত না থাকে, তাহলে স্ট্যান্ডার্ড পাইথন ভার্চুয়াল এনভায়রনমেন্ট কনফিগারেশন ব্যবহার করুন:
# Create active workspace sandbox
python3 -m venv .venv
source .venv/bin/activate
# Install litert-cli from pypi
pip install --upgrade pip setuptools wheel
pip install litert-cli-nightly
🛠️ বিকল্প C: সম্পাদনাযোগ্য স্থানীয় সেটআপ
আপনি যদি সরাসরি রিপোজিটরি সোর্স ডিরেক্টরির ভিতরে ডেভেলপ বা টেস্টিং করেন, তাহলে ক্লোন করুন:
# Create active workspace sandbox
uv venv --clear --python=3.13 --seed
source .venv/bin/activate
# Install from local directory root
uv pip install -e .
🔍 সেটআপ যাচাইকরণ
আপনার পাথটি litert কমান্ডটিকে সঠিকভাবে রাউট করছে কিনা তা যাচাই করুন:
litert --help
💡 কেন্দ্রীয় মডেল রেফারেন্স ক্যাটালগ (model-ref)
স্ক্রিপ্ট এবং উন্নয়নকে শক্তিশালী রাখতে, LiteRT CLI একটি কেন্দ্রীভূত মডেল ক্যাটালগ প্রয়োগ করে:
- ফর্ম্যাট : ডাউনলোড করা বা ইম্পোর্ট করা মডেলের জন্য একটি অনন্য নাম (উপনাম) নির্ধারণ করুন, যেমন
mobilenet। - ভ্যারিয়েন্ট : অপ্টিমাইজ করা সংস্করণগুলো বোঝাতে টার্গেট কোলন ব্যবহার করুন, যেমন
mobilenet:int8বাmobilenet:gpu। - সরলতা : সমস্ত CLI কমান্ড এই পাথলেস গ্রহণ করে
সরাসরি অ্যালিয়াস তৈরি করে, তাৎক্ষণিকভাবে ফিজিক্যাল ফাইল স্টোরেজ স্বয়ংক্রিয়ভাবে সমাধান করে!
৪. 📲 ডিভাইস স্থাপন ও প্রোফাইলিং
আসুন উচ্চ-নির্ভুল স্থানীয় বেঞ্চমার্ক চালানো, বাস্তব ইউএসবি হার্ডওয়্যার টার্গেটে ডেপ্লয় করা, হার্ডওয়্যার ডেলিগেট প্রয়োগ করা, অ্যাহেড-অফ-টাইম কম্পাইল করা এবং ক্লাউড বেঞ্চমার্কিংয়ের মাধ্যমে অপ্টিমাইজেশনকে আরও এগিয়ে নিয়ে যাই।
📊 স্থানীয় প্রোফাইলিং মেট্রিক্স
আপনার ডেস্কটপ হোস্টে EfficientNet-B1 ডাউনলোড করুন এবং পারফরম্যান্সের পরিসংখ্যান প্রোফাইল করুন:
# Download and register model alias in central catalog
litert download litert-community/efficientnet_b1 --file "*.tflite" --output efficientnet
litert import efficientnet/efficientnet_b1.tflite --model-ref efficientnet_b1
# Run high-precision benchmark on desktop CPU
litert benchmark efficientnet_b1 --desktop --cpu
বেঞ্চমার্ক লগে মূল পারফরম্যান্স হেডারগুলো পর্যবেক্ষণ করুন:
-
Model initialization: কাঠামোগত নেটওয়ার্কগুলো বুট করার সময় হয়েছে। -
Warmup (avg): কম্পাইলেশন ওভারহেড টাইমিং। -
Inference (avg): মূল গাণিতিক প্রক্রিয়াকরণের সময়। -
Overall footprint: কার্য সম্পাদনের সময় ব্যবহৃত সর্বোচ্চ র্যাম।
📲 টার্গেট এ: মোবাইল সিপিইউ (ইউএসবি সংযোগ)
ইউএসবি ডিবাগিং সক্ষম করা একটি অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করুন এবং স্থাপন করুন:
# 1. Confirm device connection
adb devices
# 2. Push and execute model on mobile CPU
litert run efficientnet_b1 --android --cpu
CLI স্বয়ংক্রিয়ভাবে মডেলটিকে টার্গেট ডিভাইসে পাঠায়, ইনফারেন্স লুপটি চালায় এবং আউটপুটগুলো ফেরত পাঠায়!
🎮 লক্ষ্য বি: মোবাইল জিপিইউ
OpenCL বা WebGPU ব্যবহার করে ভারী কাজের চাপ গতিশীলভাবে GPU-তে স্থানান্তর করুন:
# Benchmark model performance on mobile GPU
litert benchmark efficientnet_b1 --android --gpu
# Run inference with GPU acceleration and CPU fallback
litert run efficientnet_b1 --android --accelerator gpu,cpu
⚙️ টার্গেট সি: জেআইটি অ্যান্ড্রয়েড এনপিইউ
আধুনিক চিপসেটগুলিতে এক্সিকিউশন প্যারামিটারগুলি সরাসরি এনপিইউ-তে অফলোড করুন:
# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
- সতর্কীকরণ : অন-ডিভাইস রানটাইমের অভ্যন্তরে ডায়নামিক গ্রাফ তৈরির ক্ষেত্রে উল্লেখযোগ্য ইনিশিয়ালাইজেশন JIT ওয়ার্মআপ বিলম্ব ঘটে।
🚀 টার্গেট D: AOT কম্পাইল করা NPU
রানটাইম JIT ওভারহেড এড়াতে এবং সর্বোচ্চ ত্বরণ অর্জন করতে অফলাইনে প্রি-কম্পাইল করুন:
# 1. Offline compile for Qualcomm SM8750 NPU (Linux host)
litert compile efficientnet/efficientnet_b1.tflite --target sm8750
# 2. Execute compiled AOT binary with zero JIT warmup latency
litert run efficientnet_b1_Qualcomm_SM8750.tflite --android --npu
☁️ ক্লাউড প্রোফাইলিং (গুগল এআই এজ পোর্টাল)
গুগল ক্লাউডের ডিভাইস ফার্মে থাকা রিমোট হার্ডওয়্যার প্রোফাইলগুলিতে টেস্টগুলো পুশ করুন।
# Log in to your Google Cloud project
gcloud auth login
# Push benchmark metrics to Pixel 7 CPU
litert benchmark efficientnet_b1 --gcp --device "pixel 7" --cpu --gcp-project "your-project-id"
# Push benchmark metrics to Snapdragon GPU targets
litert benchmark efficientnet_b1 --gcp --devices "pixel 7, sm-s931u1" --gpu --gcp-project "your-project-id"
৫. 🧠 উন্নত বিষয়সমূহ: এলএলএম ও স্পিচ রিকগনিশন
চলুন লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) এবং অটোমেটিক স্পিচ রিকগনিশন (ASR) মডেলগুলোকে রূপান্তর করে ও চালিয়ে উন্নত মডেলগুলো অন্বেষণ করি।
💬 জেনারেটিভ এআই (এলএলএম)
এজ এলএলএম (Edge LLM) মেমরি-বাউন্ডেড। আমরা ওয়েট-অনলি INT4/INT8 কোয়ান্টাইজেশন প্রয়োগ করে এর সমাধান করি, যা ওয়েটগুলোকে কম্প্রেস করে এবং এক্সিকিউশন চ্যানেলগুলোকে Float32-এ রাখে:
# 1. Automated download & conversion from Hugging Face
litert convert Qwen/Qwen1.5-0.5B-Chat --output models/qwen
# 2. Quantize model weights to INT4
litert convert Qwen/Qwen1.5-0.5B-Chat \
--quantize-recipe weight_only_wi4_afp32 \
--output models/qwen_w4
# 3. Generation once
litert lm run models/qwen/model.litertlm --prompt "Introduce San Francisco."
# 4. Interactive chat
litert lm run models/qwen/model.litertlm
🎙️ বক্তৃতা প্রক্রিয়াকরণ (ASR)
Whisper বা Parakeet-এর মতো ASR মডেলগুলিতে এনকোডার এবং ডিকোডার উভয় মডিউলই থাকে। আমরা Signature Keys ব্যবহার করে নির্দিষ্ট মডিউলগুলির বেঞ্চমার্ক করতে পারি:
# 1. Download prepackaged Whisper-Tiny
litert download litert-community/whisper-tiny --file "whisper_tiny_30s_f32.tflite" --output "models/whisper_tiny"
# 2. Profile audio encoding
litert benchmark models/whisper_tiny/whisper_tiny_30s_f32.tflite --android --gpu --signature-key "encode"
# 3. Profile text token decoding loop
litert benchmark models/whisper_tiny/whisper_tiny_30s_f32.tflite --android --cpu --signature-key "decode"
৬. 🤖 এজেন্টিক কোডিং-এ ব্যবহার করুন
LiteRT CLI এজেন্ট-বান্ধব , এবং আপনি এটিকে সরাসরি কোডিং এজেন্টের সাথে একীভূত করতে পারেন।
এখানে কিছু উদাহরণ দেওয়া হলো। আপনার কোডিং এজেন্টে (যেমন গুগল অ্যান্টিগ্র্যাভিটি ) LiteRT CLI স্কিল SKILL.md যোগ করুন এবং নীচের মতো প্রম্পটগুলি চেষ্টা করুন।
৭. 🚀 অভিনন্দন ও পরবর্তী পদক্ষেপ
🎉 চমৎকার! আপনি LiteRT CLI 101 কোডল্যাবটি সম্পন্ন করেছেন!
এজ এমএল ডেভেলপমেন্টে দক্ষতা অর্জনের জন্য প্রয়োজনীয় যোগ্যতা এখন আপনার রয়েছে:
- PyTorch মডেলগুলোকে LiteRT মডেলে রূপান্তর করুন।
- মডেলের ওয়েটগুলোকে INT4/INT8-এ কোয়ান্টাইজ করুন।
- মোবাইল সিপিইউ/জিপিইউ/এনপিইউ-তে মডেলগুলো চালান।
- NPU-এর জন্য কম্পাইল করুন।
- ডেস্কটপ, মোবাইল এবং ক্লাউডে বেঞ্চমার্ক করুন।
- LLM মডেলগুলো রূপান্তর করে চালান।
- এজেন্টিক কোডিং-এ ব্যবহার করুন।
🔗 সম্পদ
- LiteRT CLI : https://github.com/google-ai-edge/LiteRT-CLI
- LiteRT : https://ai.google.dev/edge/litert
- উদাহরণ : https://github.com/google-ai-edge/LiteRT-CLI/tree/main/examples