‫LiteRT CLI 101: تبسيط مهام سير عمل الذكاء الاصطناعي على الأجهزة الطرفية

1- 🏁 مقدمة ونظرة عامة على واجهة سطر الأوامر

مرحبًا بك في التدريب العملي حول أساسيات واجهة سطر الأوامر في LiteRT. تم تصميم هذا الدليل ليأخذك خطوة بخطوة من إعداد البيئة إلى نشر الذكاء الاصطناعي المحسّن على الأجهزة الطرفية.

🌟 الخلفية

يتطلّب الذكاء الاصطناعي على الأجهزة الطرفية نقل النماذج العصبية المعقّدة مباشرةً إلى الهواتف الجوّالة والأجهزة القابلة للارتداء والأجهزة المضمّنة.

  • LiteRT (المعروف سابقًا باسم TensorFlow Lite / TFLite): هو إطار عمل من Google لتفعيل تعلُّم الآلة والذكاء الاصطناعي التوليدي عالي الأداء على الأجهزة الطرفية، وذلك من خلال التحويل الفعّال ووقت التشغيل والتحسين.
  • واجهة سطر الأوامر في LiteRT : تدمج حِزم Google AI Edge في أمر shell مستقل (litert) لتبسيط عمليات التطوير المرتبطة بـ LiteRT، بما في ذلك تحويل نماذج LiteRT (TFLite) وتحديد كميتها وتجميعها وتشغيلها وقياس أدائها وتصويرها على أجهزة مختلفة (وحدة المعالجة المركزية / وحدة معالجة الرسومات / وحدة المعالجة العصبية) على مستوى منصات مختلفة (الكمبيوتر المكتبي أو الجهاز الجوّال أو السحابة الإلكترونية).

2. 🔄 عمليات سير العمل الأساسية: التحويل وتحديد الكمية والتشغيل

في هذا القسم، لننفّذ دورة حياة كاملة لنمذجة الذكاء الاصطناعي على الأجهزة الطرفية باستخدام واجهة سطر الأوامر في LiteRT: برنامج تضمين نموذج PyTorch ➔ تحويل التتبُّع ➔ تحديد كمية النموذج ➔ الاستنتاج على الكمبيوتر المكتبي ➔ قياس الأداء.

سير عمل LiteRT CLI 101

📝 المرحلة 1: إعداد نص برمجي لبرنامج تضمين نموذج 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

استخدِم أداة التحويل LiteRT Torch لإنشاء نموذج مستهدَف بتنسيق .tflite قياسي من نوع Float32:

# Convert PyTorch source to LiteRT
litert convert resnet18.py --output resnet18

# Verify target was exported
ls -lh resnet18/resnet18.tflite

📉 المرحلة 3: تحديد كمية الأوزان إلى INT8

طبِّق بطاقات الوصفات الديناميكية وبطاقات الوصفات التي تستند إلى الأوزان فقط لتقليل الأحجام بنحو 4 أضعاف:

# 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

🚀 المرحلة 4: تشغيل الاستنتاج محليًا

نفِّذ عمليات الاختبار باستخدام مَعلمات الإدخال الوهمية للتحقّق من وحدات الأداء:

# 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

📊 المرحلة 5: قياس أداء النموذج

قِس المقاييس العالية الدقة، بما في ذلك متوسط وقت الاستجابة وتكاليف الإعداد ومعدّل نقل البيانات لتنفيذ وحدة المعالجة المركزية ومساحات الذاكرة النشطة الديناميكية:

# 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

3. 🔌 إعداد البيئة المحلية والتحقّق منها

لننشئ بيئة اختبار معزولة ونظيفة على محطة العمل (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 كتالوج نماذج مركزيًا:

مخطّط توجيه كتالوج النماذج

  • التنسيق: يمكنك تعيين اسم فريد (اسم مستعار) لنموذج تم تنزيله أو استيراده، مثل mobilenet.
  • الأنواع: استخدِم النقطتَين المزدوجتَين للإشارة إلى الاختلافات المحسّنة، مثل mobilenet:int8 أو mobilenet:gpu.
  • البساطة: تقبل جميع أوامر واجهة سطر الأوامر هذا الاسم المستعار بدون مسار مباشرةً، ما يؤدي إلى حلّ مساحة تخزين الملفات الفعلية تلقائيًا أثناء التنفيذ.

4. 📲 نشر النموذج على الجهاز وقياس أدائه

لنحسّن الأداء بشكل أكبر من خلال تشغيل قياسات الأداء المحلية العالية الدقة، والنشر على أجهزة 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: الحد الأقصى لذاكرة الوصول العشوائي المستهلكة أثناء التنفيذ.

📲 الهدف "أ": وحدة المعالجة المركزية للجهاز الجوّال (الاتصال عبر USB)

وصِّل جهاز Android مع تفعيل "تصحيح الأخطاء عبر USB"، ثم انشر النموذج:

# 1. Confirm device connection
adb devices

# 2. Push and execute model on mobile CPU
litert run efficientnet_b1 --android --cpu

تُرسِل واجهة سطر الأوامر النموذج تلقائيًا إلى جهاز الاختبار، وتنفّذ حلقة الاستنتاج، وتُعيد النتائج إلى الجهاز.

🎮 الهدف "ب": وحدة معالجة الرسومات للجهاز الجوّال

يمكنك نقل أحمال العمل الثقيلة ديناميكيًا إلى وحدة معالجة الرسومات باستخدام OpenCL أو WebGPU:

# 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

⚙️ الهدف "ج": وحدة المعالجة العصبية في Android التي يتم تجميعها في الوقت المناسب

يمكنك تخفيف حِمل مَعلمات التنفيذ مباشرةً إلى وحدة المعالجة العصبية على شرائح التعريف الحديثة:

# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
  • تحذير: تعاني عمليات إنشاء الرسم البياني الديناميكي داخل وقت التشغيل على الجهاز فقط من تأخيرات كبيرة في وقت الإحماء لوحدة المعالجة العصبية التي يتم تجميعها في الوقت المناسب.

🚀 الهدف "د": وحدة المعالجة العصبية التي تم تجميعها مسبقًا

يمكنك إجراء عملية التجميع مسبقًا بلا إنترنت لتجاوز التحميل الزائد لوحدة المعالجة العصبية التي يتم تجميعها في وقت التشغيل وتحقيق أقصى تسريع:

# 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 Portal)

يمكنك إرسال الاختبارات إلى ملفات تعريف الأجهزة البعيدة في مزارع أجهزة 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"

5. 🧠 مواضيع متقدّمة: النماذج اللغوية الكبيرة والتعرّف على الكلام

لنستكشف النماذج المتقدّمة من خلال تحويل النماذج اللغوية الكبيرة ونماذج التعرّف التلقائي على الكلام وتشغيلها.

💬 الذكاء الاصطناعي التوليدي (النماذج اللغوية الكبيرة)

تكون النماذج اللغوية الكبيرة على الأجهزة الطرفية محدودة الذاكرة. نحلّ هذه المشكلة من خلال تطبيق تحديد كمية 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

🎙️ معالجة الكلام (التعرّف التلقائي على الكلام)

تحتوي نماذج التعرّف التلقائي على الكلام، مثل 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"

6. 🤖 الاستخدام في الترميز المستند إلى الذكاء الاصطناعي الوكيل

تتسم واجهة سطر الأوامر في LiteRT بالتكامل السهل مع الذكاء الاصطناعي الوكيل، ويمكنك دمجها مباشرةً مع وكلاء الترميز.

إليك بعض الأمثلة. أضِف مهارة واجهة سطر الأوامر في LiteRT SKILL.md إلى وكيل الترميز (مثل Google Antigravity) وجرِّب طلبات مثل ما يلي.

7. 🚀 تهانينا والخطوات التالية

🎉 أَدَاءْ مُتَمَيِّزْ! لقد أكملت التدريب العملي حول أساسيات واجهة سطر الأوامر في LiteRT.

أصبحت لديك الآن المهارات اللازمة لإتقان تطوير تعلُّم الآلة على الأجهزة الطرفية:

  • تحويل نماذج PyTorch إلى نماذج LiteRT
  • تحديد كمية أوزان النموذج إلى INT4/INT8
  • تشغيل النماذج على وحدة المعالجة المركزية/وحدة معالجة الرسومات/وحدة المعالجة العصبية للجهاز الجوّال
  • تجميع البيانات لوحدة المعالجة العصبية
  • قياس الأداء على الكمبيوتر المكتبي والجهاز الجوّال والسحابة الإلكترونية
  • تحويل نماذج النماذج اللغوية الكبيرة وتشغيلها
  • الاستخدام في الترميز المستند إلى الذكاء الاصطناعي الوكيل

🔗 المراجع

  • واجهة سطر الأوامر في LiteRT: 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