۱. 🏁 مقدمه و مرور کلی CLI
به آزمایشگاه کدنویسی عملی LiteRT CLI 101 خوش آمدید! این راهنما به گونهای طراحی شده است که شما را گام به گام از راهاندازی صفر محیط تا استقرار هوش لبه بهینه همراهی کند.
🌟 پسزمینه
هوش مصنوعی لبهای (Edge AI) نیازمند آوردن مدلهای عصبی پیچیده به طور مستقیم به تلفنهای همراه، پوشیدنیها و سختافزارهای تعبیهشده است.
- LiteRT (که قبلاً TensorFlow Lite / TFLite نام داشت) چارچوب روی دستگاه گوگل برای استقرار با کارایی بالای یادگیری ماشین و GenAI در پلتفرمهای لبه، از طریق تبدیل، زمان اجرا و بهینهسازی کارآمد.
- رابط خط فرمان LiteRT، پشتههای Google AI Edge را در یک فرمان پوسته مستقل (
litert) ادغام میکند تا گردشهای کاری توسعه مرتبط با LiteRT، از جمله تبدیل، کوانتیزه کردن، کامپایل کردن، اجرا، بنچمارکگیری و مصورسازی مدلهای LiteRT (TFLite) را روی سختافزارهای مختلف (CPU / GPU / NPU) در پلتفرمهای مختلف (دسکتاپ، موبایل یا ابری) سادهسازی کند.
۲. 🔄 گردشهای کاری پایه: تبدیل، کوانتیزه کردن و اجرا
در این بخش، بیایید یک چرخه حیات کامل مدلسازی هوش مصنوعی لبهای را با رابط خط فرمان LiteRT اجرا کنیم: پوشش مدل PyTorch ➔ تبدیل ردیابی ➔ کوانتیزاسیون مدل ➔ استنتاج دسکتاپ ➔ معیارهای عملکرد.
📝 مرحله ۱: آمادهسازی اسکریپت پوششدهنده مدل PyTorch
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: تبدیل یک مدل PyTorch به LiteRT با استفاده از LiteRT Torch
برای ساخت یک مدل هدف استاندارد 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
📊 مرحله ۵: ارزیابی عملکرد مدل
اندازهگیری معیارهای با دقت بالا شامل میانگین تأخیر، هزینههای اولیهسازی، توان عملیاتی CPU و ردپای حافظه فعال پویا:
# 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) بسازیم.
🔌 گزینه الف: راهاندازی فوقالعاده سریع (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
🐍 گزینه ب: تنظیمات استاندارد (پیپ)
اگر 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
🛠️ گزینه ج: تنظیمات محلی قابل ویرایش
اگر مستقیماً در حال توسعه یا آزمایش درون کلون دایرکتوری منبع مخزن هستید:
# 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 یک کاتالوگ مدل متمرکز پیادهسازی میکند:
- قالب : یک نام منحصر به فرد (نام مستعار) به یک مدل دانلود شده یا وارد شده، مانند
mobilenet، اختصاص دهید. - انواع : از دونقطه هدف برای اشاره به انواع بهینه شده استفاده کنید، مانند
mobilenet:int8یاmobilenet:gpu. - سادگی : همه دستورات CLI این را بدون مسیر میپذیرند.
مستقیماً با نام مستعار، به طور خودکار و در لحظه، فضای ذخیرهسازی فیزیکی فایل را حل میکند!
۴. 📲 استقرار و پروفایلبندی دستگاه
بیایید با اجرای بنچمارکهای محلی با دقت بالا، استقرار در اهداف سختافزاری USB واقعی، پیادهسازی نمایندگان سختافزاری، کامپایل Ahead-of-Time و بنچمارک ابری، بهینهسازی را بیشتر پیش ببریم.
📊 معیارهای پروفایل محلی
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: حداکثر میزان رم مصرفی در حین اجرا.
📲 هدف الف: پردازنده موبایل (اتصال USB)
یک دستگاه اندروید را که اشکالزدایی USB در آن فعال است، متصل کنید و موارد زیر را پیادهسازی کنید:
# 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
⚙️ هدف C: واحد پردازش عصبی (NPU) اندروید JIT
پارامترهای اجرا را مستقیماً به NPU در چیپستهای مدرن منتقل کنید:
# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
- هشدار : ساختهای نمودار پویا درون زمان اجرای روی دستگاه از تأخیرهای قابل توجه در راهاندازی اولیه JIT رنج میبرند.
🚀 هدف D: NPU کامپایل شده توسط AOT
برای دور زدن سربارهای 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
☁️ پروفایل ابری (پورتال لبه هوش مصنوعی گوگل)
تستها را به پروفایلهای سختافزاری از راه دور در مزارع دستگاه Google Cloud ارسال کنید.
# 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 و تشخیص گفتار
بیایید مدلهای پیشرفته را با تبدیل و اجرای مدلهای زبان بزرگ (LLM) و مدلهای تشخیص خودکار گفتار (ASR) بررسی کنیم.
💬 هوش مصنوعی مولد (LLM)
LLM های لبهای (Edge LLMs) به حافظه محدود هستند. ما این مشکل را با اعمال کوانتیزاسیون 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)
مدلهای ASR مانند Whisper یا Parakeet هم ماژول رمزگذار و هم ماژول رمزگشا دارند. میتوانیم ماژولهای خاص را با استفاده از کلیدهای امضا (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 با عاملها سازگار است و میتوانید آن را مستقیماً با عاملهای کدنویسی ادغام کنید.
در اینجا چند مثال آورده شده است. مهارت SKILL.md مربوط به LiteRT CLI را به عامل کدنویسی خود (مانند Google Antigravity ) اضافه کنید و دستورالعملهایی مانند زیر را امتحان کنید.
۷. 🚀 تبریک و مراحل بعدی
🎉 فوقالعادهست! شما آزمایشگاه کد LiteRT CLI 101 را به پایان رساندید!
اکنون مهارتهای لازم برای تسلط بر توسعهی یادگیری ماشینی لبهای را دارید:
- تبدیل مدلهای PyTorch به مدلهای LiteRT
- وزنهای مدل را به INT4/INT8 کوانتیزه کنید.
- مدلها را روی CPU/GPU/NPU موبایل اجرا کنید.
- برای 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