Основы работы с LiteRT CLI: оптимизация рабочих процессов Edge AI

1. 🏁 Введение и обзор интерфейса командной строки

Добро пожаловать на практическое занятие по LiteRT CLI 101! Это руководство шаг за шагом проведет вас от настройки среды с нуля до развертывания оптимизированных интеллектуальных решений на периферии сети.

🌟 Фон

Для внедрения Edge AI необходимо интегрировать сложные нейронные модели непосредственно в мобильные телефоны, носимые устройства и встроенное оборудование.

  • LiteRT (ранее TensorFlow Lite / TFLite ) — это разработанная Google платформа для высокопроизводительного развертывания машинного обучения и искусственного интеллекта на периферийных платформах, обеспечивающая эффективное преобразование, выполнение и оптимизацию.
  • LiteRT CLI интегрирует стеки Google AI Edge в автономную командную оболочку ( litert ), чтобы оптимизировать рабочие процессы разработки, связанные с LiteRT, включая преобразование, квантование, компиляцию, запуск, тестирование производительности и визуализацию моделей LiteRT (TFLite) на различном оборудовании (CPU/GPU/NPU) на разных платформах (настольные компьютеры, мобильные устройства или облако).

2. 🔄 Основные рабочие процессы: конверсия, квантизация и запуск

В этом разделе давайте выполним полный цикл моделирования Edge AI с помощью LiteRT CLI: оболочка модели PyTorch ➔ преобразование трассировки ➔ квантизация модели ➔ вывод на настольном компьютере ➔ тесты производительности.

Основы работы с командной строкой LiteRT: рабочий процесс

📝 Этап 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 для создания стандартной целевой модели Float32 .tflite :

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

🔌 Вариант A: Сверхбыстрая установка (УФ)

Использование 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: Стандартная настройка (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

🛠️ Вариант 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 принимают этот путь без указания пути. Используйте псевдоним напрямую, автоматически определяя физическое местоположение файла на лету!

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 : пиковое потребление оперативной памяти во время выполнения.

📲 Цель A: Мобильный процессор (подключение через USB)

Подключите устройство Android с включенной отладкой по USB и выполните развертывание:

# 1. Confirm device connection
adb devices

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

Интерфейс командной строки автоматически отправляет модель на целевое устройство, запускает цикл вывода и передает выходные данные обратно!

🎮 Цель B: Мобильный графический процессор

Динамическая передача ресурсоемких задач на графический процессор с использованием 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

⚙️ Целевая платформа C: JIT Android NPU

На современных чипсетах параметры выполнения передаются непосредственно в нейропроцессор (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 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"

5. 🧠 Расширенные темы: LLM и распознавание речи

Давайте рассмотрим более сложные модели, преобразовав и запустив модели обработки больших языковых данных (LLM) и модели автоматического распознавания речи (ASR).

💬 Генеративный ИИ (LLM)

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)

Модели 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"

6. 🤖 Использование в агентном кодировании

LiteRT CLI удобен для работы с агентами , и вы можете интегрировать его напрямую с агентами для программирования.

Вот несколько примеров. Добавьте навык LiteRT CLI SKILL.md в свой агент программирования (например, Google Antigravity ) и попробуйте использовать подсказки, подобные приведенным ниже.

7. 🚀 Поздравляем и расскажите о дальнейших шагах.

🎉 Отлично! Вы успешно завершили практическое занятие по основам работы с командной строкой LiteRT!

Теперь вы обладаете навыками, необходимыми для освоения разработки приложений машинного обучения на периферии сети:

  • Преобразование моделей PyTorch в модели LiteRT.
  • Присвойте весам модели значения INT4/INT8.
  • Запуск моделей на мобильных процессорах CPU/GPU/NPU.
  • Скомпилировать для NPU.
  • Проведите сравнительный анализ производительности на настольных компьютерах, мобильных устройствах и в облаке.
  • Преобразовать и запустить модели LLM.
  • Используется в агентском кодировании.

🔗 Ресурсы

  • Интерфейс командной строки 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