‫LiteRT CLI 101: ساده‌سازی گردش‌های کاری Edge AI

۱. 🏁 مقدمه و نمای کلی CLI

به کدآموزش عملی LiteRT CLI 101 خوش آمدید! این راهنما برای این طراحی شده است که شما را گام‌به‌گام از راه‌اندازی محیط صفر تا استقرار هوش لبه‌ای بهینه‌سازی‌شده راهنمایی کند.

🌟 پس‌زمینه

هوش مصنوعی Edge مستلزم آوردن مدل‌های عصبی پیچیده مستقیماً به تلفن‌های همراه، دستگاه‌های پوشیدنی، و سخت‌افزارهای جاسازی‌شده است.

  • LiteRT (‫TensorFlow Lite / TFLite سابق) چارچوب درون‌دستگاهی Google برای استقرار یادگیری ماشین و هوش مصنوعی زایا با عملکرد بالا در پلاتفرم‌های Edge، ازطریق تبدیل، زمان اجرا، و بهینه‌سازی کارآمد.
  • LiteRT CLI پشته‌های Google AI Edge را در یک فرمان پوسته مستقل (litert) ادغام می‌کند تا گردش‌های کاری توسعه مرتبط با LiteRT را ساده کند، ازجمله تبدیل، کوانتیزه کردن، کامپایل کردن، اجرا، محک‌زنی، و تجسم مدل‌های LiteRT (TFLite) در سخت‌افزارهای مختلف (CPU / GPU / NPU) در پلاتفرم‌های مختلف (رایانه، تلفن همراه، یا ابر).

۲. 🔄 گردش‌های کار پایه: تبدیل، کوانتش، و اجرا

در این بخش، بیایید چرخه کامل مدل‌سازی Edge AI را با LiteRT CLI اجرا کنیم: پوشش مدل PyTorch ➔ تبدیل ردیابی ➔ کمیت‌سازی مدل ➔ استنباط رایانه ➔ محک‌های عملکرد.

گردش کار LiteRT CLI 101

📝 مرحله ۱: آماده کردن اسکریپت بسته‌بندی مدل 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),)

🔄 مرحله ۲: تبدیل مدل PyTorch به LiteRT بااستفاده از LiteRT Torch

مبدل LiteRT Torch را برای ساختن مدل هدف استاندارد Float32 .tflite فراخوانی کنید:

# 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

🐍 گزینه ب: راه‌اندازی استاندارد (pip)

اگر uv وجود ندارد، از پیکربندی‌های استاندارد محیط مجازی Python استفاده کنید:

# 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 CLI یک کاتالوگ مدل متمرکز را پیاده‌سازی می‌کند:

نمودار مسیریابی کاتالوگ مدل

  • قالب: نامی منحصربه‌فرد (نام مستعار) به مدل بارگیری‌شده یا واردشده اختصاص دهید، مثلاً mobilenet.
  • انواع: از دونقطه هدف برای ارجاع به انواع بهینه‌شده، مانند mobilenet:int8 یا mobilenet:gpu استفاده کنید.
  • سادگی: همه فرمان‌های CLI این نام مستعار بدون مسیر را مستقیماً می‌پذیرند و به‌طور خودکار فضای ذخیره‌سازی فایل فیزیکی را در لحظه حل می‌کنند!

۴. 📲 استقرار و نمایه‌سازی دستگاه

اجازه دهید با اجرای محک‌های محلی با دقت بالا، استقرار در اهداف سخت‌افزاری USB واقعی، پیاده‌سازی نمایندگان سخت‌افزاری، کامپایل کردن «پیش‌از موعد»، و محک‌زنی ابری، بهینه‌سازی را فراتر ببریم.

گزینه‌های استقرار و شتاب هدف

📊 سنجه‌های نمایه‌سازی محلی

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: اوج RAM مصرف‌شده درطول اجرا.

📲 هدف A: واحد پردازش مرکزی تلفن همراه (اتصال USB)

دستگاه Android را با «اشکال‌زدایی 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

⚙️ Target C: JIT Android NPU

پارامترهای اجرای بارگذاری را مستقیماً به NPU در مجموعه تراشه‌های مدرن منتقل کنید:

# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
  • هشدار: ساختارهای نمودار پویا در زمان اجرای درون‌دستگاهی با تأخیرهای قابل‌توجهی در آماده‌سازی JIT برای مقداردهی اولیه مواجه می‌شوند.

🚀 هدف D: واحد پردازش عصبی کامپایل‌شده 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 AI Edge)

آزمایش‌ها را به نمایه‌های سخت‌افزاری ازراه‌دور در مزارع دستگاه 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) و مدل‌های «تشخیص خودکار گفتار» (ASR)، مدل‌های پیشرفته را کاوش کنیم.

💬 هوش مصنوعی زایا (مدل‌های زبانی بزرگ)

«مدل‌های زبانی بزرگ» در Edge محدودیت حافظه دارند. ما این مشکل را با اعمال کمیت‌سازی فقط وزن 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 دارای هر دو واحد کدبند و کدگشا هستند. می‌توانیم بااستفاده از کلیدهای امضا برای واحدهای خاصی معیار تعیین کنیم:

# 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 را به عامل کدنویسی خود (مانند Google Antigravity) اضافه کنید و پیام‌واره‌هایی مانند زیر را امتحان کنید.

‫۷. 🚀 تبریک و مراحل بعدی

🎉 فوق‌العاده! ‫codelab‏ LiteRT CLI 101 را تکمیل کردید!

اکنون مهارت‌های لازم برای تسلط بر توسعه ML لبه‌ای را دارید:

  • مدل‌های PyTorch را به مدل‌های LiteRT تبدیل کنید.
  • وزن‌های مدل را به INT4/INT8 کوانتیزه کنید.
  • مدل‌ها را در CPU/GPU/NPU تلفن همراه اجرا کنید.
  • برای NPU همگردانی کنید.
  • در رایانه، تلفن همراه، و فضای ابری محک بزنید.
  • مدل‌های زبانی بزرگ را تبدیل و اجرا کنید.
  • در کدنویسی عامل‌محور استفاده کنید.

🔗 منابع

  • 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