1. 🏁 Giới thiệu và tổng quan về CLI
Chào mừng bạn đến với lớp học lập trình thực hành về LiteRT CLI 101! Hướng dẫn này được thiết kế để từng bước hướng dẫn bạn từ việc thiết lập môi trường đến triển khai trí tuệ biên được tối ưu hoá.
🌟 Thông tin chung
AI biên yêu cầu đưa các mô hình thần kinh phức tạp trực tiếp vào điện thoại di động, thiết bị đeo và phần cứng nhúng.
- LiteRT (trước đây là TensorFlow Lite / TFLite) là khung trên thiết bị của Google để triển khai ML và GenAI hiệu suất cao trên các nền tảng biên, thông qua quá trình chuyển đổi, thời gian chạy và tối ưu hoá hiệu quả.
- LiteRT CLI tích hợp các ngăn xếp Google AI Edge vào một lệnh shell độc lập (
litert) để đơn giản hoá quy trình phát triển liên quan đến LiteRT, bao gồm chuyển đổi, lượng tử hoá, biên dịch, chạy, đo điểm chuẩn và trực quan hoá các mô hình LiteRT (TFLite) trên nhiều phần cứng (CPU / GPU / NPU) trên các nền tảng (máy tính, thiết bị di động hoặc đám mây).
2. 🔄 Quy trình cơ bản: chuyển đổi, lượng tử hoá và chạy
Trong phần này, hãy thực thi toàn bộ vòng đời mô hình hoá AI biên bằng LiteRT CLI: trình bao bọc mô hình PyTorch ➔ theo dõi quá trình chuyển đổi ➔ lượng tử hoá mô hình ➔ suy luận trên máy tính ➔ điểm chuẩn hiệu suất.
📝 Giai đoạn 1: Chuẩn bị tập lệnh trình bao bọc mô hình PyTorch
Tạo resnet18.py trong thư mục hiện tại. Tập lệnh này hiển thị các hook theo dõi động để trình tạo biểu đồ có thể ghi lại các hình dạng:
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),)
🔄 Giai đoạn 2: Chuyển đổi mô hình PyTorch sang LiteRT bằng LiteRT Torch
Gọi trình chuyển đổi LiteRT Torch để tạo mô hình mục tiêu Float32 .tflite tiêu chuẩn:
# Convert PyTorch source to LiteRT
litert convert resnet18.py --output resnet18
# Verify target was exported
ls -lh resnet18/resnet18.tflite
📉 Giai đoạn 3: Lượng tử hoá trọng số thành INT8
Áp dụng các thẻ công thức chỉ dành cho trọng số và động để giảm kích thước xuống khoảng 4 lần:
# 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
🚀 Giai đoạn 4: Chạy suy luận cục bộ
Thực thi các thao tác kiểm thử bằng các tham số đầu vào giả để xác minh các khối hiệu suất:
# 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
📊 Giai đoạn 5: Đo điểm chuẩn hiệu suất mô hình
Đo lường các chỉ số có độ chính xác cao, bao gồm độ trễ trung bình, chi phí khởi chạy, thông lượng thực thi CPU và dấu vết bộ nhớ hoạt động động:
# 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. 🔌 Thiết lập và xác minh môi trường cục bộ
Hãy tạo một hộp cát biệt lập và sạch sẽ trên máy trạm của bạn (macOS hoặc Linux)
🔌 Lựa chọn A: Thiết lập cực nhanh (uv)
Việc sử dụng uv sẽ tách biệt các thư viện trong vài giây, xoá các xung đột bộ nhớ đệm môi trường.
# 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
🐍 Lựa chọn B: Thiết lập tiêu chuẩn (pip)
Nếu không có uv, hãy dùng các cấu hình môi trường ảo Python tiêu chuẩn:
# 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
🛠️ Lựa chọn C: Thiết lập cục bộ có thể chỉnh sửa
Nếu bạn đang phát triển hoặc kiểm thử trực tiếp bên trong bản sao thư mục nguồn kho lưu trữ:
# Create active workspace sandbox
uv venv --clear --python=3.13 --seed
source .venv/bin/activate
# Install from local directory root
uv pip install -e .
🔍 Xác minh thiết lập
Xác minh rằng đường dẫn của bạn định tuyến chính xác lệnh litert:
litert --help
💡 Danh mục tham chiếu mô hình trung tâm (model-ref)
Để giữ cho tập lệnh và quá trình phát triển mạnh mẽ, LiteRT CLI triển khai Danh mục mô hình tập trung:
- Định dạng: Gán một tên duy nhất (bí danh) cho mô hình đã tải xuống hoặc nhập, chẳng hạn như
mobilenet. - Biến thể: Sử dụng dấu hai chấm mục tiêu để tham chiếu đến các biến thể được tối ưu hoá, chẳng hạn như
mobilenet:int8hoặcmobilenet:gpu. - Đơn giản: Tất cả các lệnh CLI đều chấp nhận bí danh
không có đường dẫn này trực tiếp, tự động phân giải bộ nhớ tệp vật lý ngay lập tức!
4. 📲 Triển khai và lập hồ sơ thiết bị
Hãy tối ưu hoá hơn nữa bằng cách chạy các điểm chuẩn cục bộ có độ chính xác cao, triển khai cho các mục tiêu phần cứng USB thực, triển khai các đại diện phần cứng, biên dịch Trước thời gian và đo điểm chuẩn trên đám mây.
📊 Chỉ số lập hồ sơ cục bộ
Tải EfficientNet-B1 xuống và lập hồ sơ số liệu thống kê hiệu suất trên máy chủ lưu trữ trên máy tính:
# 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
Quan sát các tiêu đề hiệu suất chính trong nhật ký điểm chuẩn:
Model initialization: Thời gian khởi động mạng cấu trúc.Warmup (avg): Thời gian hao tổn biên dịch.Inference (avg): Thời gian xử lý toán học thô.Overall footprint: RAM cao nhất được tiêu thụ trong quá trình thực thi.
📲 Mục tiêu A: CPU di động (kết nối USB)
Kết nối thiết bị Android có bật tính năng gỡ lỗi USB và triển khai:
# 1. Confirm device connection
adb devices
# 2. Push and execute model on mobile CPU
litert run efficientnet_b1 --android --cpu
CLI sẽ tự động đẩy mô hình đến thiết bị mục tiêu, thực thi vòng lặp suy luận và chuyển các đầu ra trở lại!
🎮 Mục tiêu B: GPU di động
Giảm tải các khối lượng công việc nặng một cách linh hoạt sang GPU bằng OpenCL hoặc 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
⚙️ Mục tiêu C: JIT Android NPU
Giảm tải trực tiếp các tham số thực thi sang NPU trên các bộ vi mạch hiện đại:
# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
- Cảnh báo: Các bản dựng biểu đồ động bên trong thời gian chạy trên thiết bị bị ảnh hưởng đáng kể bởi độ trễ khởi chạy JIT.
🚀 Mục tiêu D: NPU được biên dịch AOT
Biên dịch trước ngoại tuyến để bỏ qua các chi phí JIT thời gian chạy và đạt được mức tăng tốc tối đa:
# 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
☁️ Lập hồ sơ trên đám mây (Cổng thông tin Google AI Edge)
Đẩy các bài kiểm thử đến các hồ sơ phần cứng từ xa trong các trang trại thiết bị của 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. 🧠 Các chủ đề nâng cao: LLM và nhận dạng giọng nói
Hãy khám phá các mô hình nâng cao bằng cách chuyển đổi và chạy các Mô hình ngôn ngữ lớn (LLM) và mô hình Nhận dạng giọng nói tự động (ASR).
💬 AI tạo sinh (LLM)
LLM biên bị giới hạn bộ nhớ. Chúng tôi giải quyết vấn đề này bằng cách áp dụng lượng tử hoá Chỉ trọng số INT4/INT8, nén trọng số trong khi vẫn giữ các kênh thực thi ở 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
🎙️ Xử lý giọng nói (ASR)
Các mô hình ASR như Whisper hoặc Parakeet đều có mô-đun bộ mã hoá và bộ giải mã. Chúng ta có thể đo điểm chuẩn cho các mô-đun cụ thể bằng Khoá chữ ký:
# 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. 🤖 Sử dụng trong lập trình dựa trên tác nhân
LiteRT CLI thân thiện với tác nhân và bạn có thể tích hợp trực tiếp với các tác nhân lập trình.
Dưới đây là một số ví dụ. Thêm kỹ năng LiteRT CLI SKILL.md vào tác nhân lập trình của bạn (như Google Antigravity) và thử các lời nhắc như bên dưới.
7. 🚀 Xin chúc mừng và các bước tiếp theo
🎉 Xuất chúng! Bạn đã hoàn tất lớp học lập trình LiteRT CLI 101!
Giờ đây, bạn đã có các kỹ năng để làm chủ quá trình phát triển ML biên:
- Chuyển đổi mô hình PyTorch sang mô hình LiteRT.
- Lượng tử hoá trọng số mô hình thành INT4/INT8.
- Chạy mô hình trên CPU/GPU/NPU di động.
- Biên dịch cho NPU.
- Đo điểm chuẩn trên máy tính, thiết bị di động và đám mây.
- Chuyển đổi và chạy mô hình LLM.
- Sử dụng trong lập trình dựa trên tác nhân.
🔗 Tài nguyên
- LiteRT CLI: https://github.com/google-ai-edge/LiteRT-CLI
- LiteRT: https://ai.google.dev/edge/litert
- Ví dụ: https://github.com/google-ai-edge/LiteRT-CLI/tree/main/examples