Triển khai YOLO26 trên Mobile & Edge với ExecuTorch
Việc triển khai các model thị giác máy tính trên các thiết bị edge như smartphone, máy tính bảng và hệ thống nhúng đòi hỏi một runtime được tối ưu hóa để cân bằng giữa hiệu năng và giới hạn tài nguyên. ExecuTorch, giải pháp của PyTorch cho điện toán edge, cho phép thực hiện inference hiệu quả trên thiết bị cho các model Ultralytics YOLO.
Hướng dẫn này phác thảo cách xuất các model Ultralytics YOLO sang định dạng ExecuTorch, giúp bạn triển khai model của mình trên các thiết bị mobile và edge với hiệu năng tối ưu.
Tại sao nên xuất sang ExecuTorch?
ExecuTorch là giải pháp end-to-end của PyTorch để kích hoạt khả năng inference trên thiết bị trên các nền tảng mobile và edge. Được xây dựng với mục tiêu linh hoạt và hiệu quả, ExecuTorch có thể được sử dụng để chạy các chương trình PyTorch trên nhiều nền tảng máy tính đa dạng.
Các tính năng chính của ExecuTorch
ExecuTorch cung cấp một số tính năng mạnh mẽ để triển khai các model Ultralytics YOLO trên thiết bị edge:
-
Định dạng Model di động: ExecuTorch sử dụng định dạng
.pte(PyTorch ExecuTorch), được tối ưu hóa về kích thước và tốc độ tải trên các thiết bị có tài nguyên hạn chế. -
XNNPACK Backend: Tích hợp mặc định với XNNPACK cung cấp khả năng inference được tối ưu hóa cao trên CPU mobile, mang lại hiệu năng tuyệt vời mà không cần phần cứng chuyên dụng.
-
Hỗ trợ Quantization: Hỗ trợ tích hợp sẵn cho các kỹ thuật quantization để giảm kích thước model và cải thiện tốc độ inference trong khi vẫn duy trì độ chính xác.
-
Hiệu quả bộ nhớ: Quản lý bộ nhớ được tối ưu hóa giúp giảm dung lượng bộ nhớ runtime, làm cho nó phù hợp với các thiết bị có RAM hạn chế.
-
Metadata của Model: Các model sau khi xuất bao gồm metadata (kích thước ảnh, tên lớp, v.v.) trong một file YAML riêng biệt để dễ dàng tích hợp.
Các tùy chọn triển khai với ExecuTorch
Các model ExecuTorch có thể được triển khai trên nhiều nền tảng edge và mobile khác nhau:
-
Ứng dụng Mobile: Triển khai trên các ứng dụng iOS và Android với hiệu năng native, cho phép phát hiện đối tượng thời gian thực trong các ứng dụng di động.
-
Hệ thống nhúng: Chạy trên các thiết bị Linux nhúng như Raspberry Pi, NVIDIA Jetson và các hệ thống dựa trên ARM khác với hiệu năng tối ưu.
-
Thiết bị Edge AI: Triển khai trên các phần cứng Edge AI chuyên dụng với các delegate tùy chỉnh để tăng tốc inference.
-
Thiết bị IoT: Tích hợp vào các thiết bị IoT để inference ngay trên thiết bị mà không cần kết nối đám mây.
Xuất các model Ultralytics YOLO26 sang ExecuTorch
Chuyển đổi các model Ultralytics YOLO26 sang định dạng ExecuTorch cho phép triển khai hiệu quả trên thiết bị mobile và edge.
Cài đặt
Xuất ExecuTorch yêu cầu Python 3.10 trở lên và các dependency cụ thể:
# Install Ultralytics package
pip install ultralyticsĐể biết hướng dẫn chi tiết và các phương pháp tốt nhất liên quan đến quy trình cài đặt, hãy xem hướng dẫn cài đặt YOLO26 của chúng tôi. Trong khi cài đặt các gói cần thiết cho YOLO26, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo hướng dẫn các vấn đề thường gặp của chúng tôi để tìm giải pháp và mẹo.
Cách sử dụng
Việc xuất các model YOLO26 sang ExecuTorch rất đơn giản:
from ultralytics import YOLO
# Load the YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo26n_executorch_model' directory
# Load the exported ExecuTorch model
executorch_model = YOLO("yolo26n_executorch_model")
# Run inference on a single image
results = executorch_model.predict("https://ultralytics.com/images/bus.jpg")Các bản xuất ExecuTorch tạo ra một thư mục bao gồm một file .pte và metadata. Sử dụng ExecuTorch runtime trong ứng dụng di động hoặc ứng dụng nhúng của bạn để tải model .pte và thực hiện inference.
Các đối số Xuất
Khi xuất sang định dạng ExecuTorch, bạn có thể chỉ định các đối số sau:
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'executorch' | Định dạng mục tiêu cho model đã xuất, xác định khả năng tương thích với các môi trường triển khai khác nhau. |
imgsz | int hoặc tuple | 640 | Kích thước hình ảnh mong muốn cho đầu vào của model. Có thể là một số nguyên cho hình ảnh vuông hoặc một tuple (height, width) cho các kích thước cụ thể. |
batch | int | 1 | Chỉ định kích thước suy luận batch của model xuất hoặc số lượng ảnh tối đa mà model xuất sẽ xử lý đồng thời ở chế độ predict. |
device | str | None | Chỉ định thiết bị để xuất: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps). |
Cấu trúc Đầu ra
Bản xuất ExecuTorch tạo ra một thư mục chứa model và metadata:
yolo26n_executorch_model/
├── yolo26n.pte # ExecuTorch model file
└── metadata.yaml # Model metadata (classes, image size, etc.)Sử dụng các model ExecuTorch đã xuất
Sau khi xuất model, bạn sẽ cần tích hợp nó vào ứng dụng mục tiêu bằng cách sử dụng ExecuTorch runtime.
Tích hợp Mobile
Đối với các ứng dụng di động (iOS/Android), bạn sẽ cần:
- Thêm ExecuTorch Runtime: Bao gồm thư viện ExecuTorch runtime trong dự án mobile của bạn
- Tải Model: Tải file
.ptetrong ứng dụng của bạn - Chạy Inference: Xử lý ảnh và nhận dự đoán
Ví dụ tích hợp iOS (Objective-C/C++):
// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples
#include <executorch/extension/module/module.h>
using namespace ::executorch::extension;
// Load the model
Module module("/path/to/yolo26n.pte");
// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});
// Run inference
const auto result = module.forward(tensor);Ví dụ tích hợp Android (Kotlin):
import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor
// Load the model
val module = Module.load("/path/to/yolo26n.pte")
// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)
// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArrayLinux nhúng
Đối với các hệ thống Linux nhúng, hãy sử dụng ExecuTorch C++ API:
#include <executorch/extension/module/module.h>
// Load model
auto module = torch::executor::Module("yolo26n.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = torch::executor::Tensor(input_data, {1, 3, 640, 640});
// Run inference
auto outputs = module.forward({input_tensor});Để biết thêm chi tiết về việc tích hợp ExecuTorch vào ứng dụng của bạn, hãy truy cập Tài liệu ExecuTorch.
Tối ưu hóa hiệu năng
Tối ưu hóa kích thước model
Để giảm kích thước model cho việc triển khai:
- Sử dụng các model nhỏ hơn: Bắt đầu với YOLO26n (nano) để có dung lượng nhỏ nhất
- Giảm độ phân giải đầu vào: Sử dụng kích thước ảnh nhỏ hơn (ví dụ:
imgsz=320hoặcimgsz=416) - Quantization: Áp dụng các kỹ thuật quantization (được hỗ trợ trong các phiên bản ExecuTorch tương lai)
Tối ưu hóa tốc độ inference
Để inference nhanh hơn:
- XNNPACK Backend: Backend mặc định XNNPACK cung cấp khả năng inference CPU được tối ưu hóa
- Tăng tốc phần cứng: Sử dụng các delegate cụ thể theo nền tảng (ví dụ: CoreML cho iOS)
- Xử lý theo lô (Batch Processing): Xử lý nhiều ảnh khi có thể
Các Benchmark
Đội ngũ Ultralytics đã benchmark các model YOLO26, so sánh tốc độ và độ chính xác giữa PyTorch và ExecuTorch.
| Model | Định dạng | Trạng thái | Kích thước (MB) | metrics/mAP50-95(B) | Thời gian inference (ms/im) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4790 | 314.80 |
| YOLO26n | ExecuTorch | ✅ | 9.4 | 0.4800 | 142 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.5730 | 930.90 |
| YOLO26s | ExecuTorch | ✅ | 36.5 | 0.5780 | 376.1 |
Thời gian suy luận (inference) không bao gồm xử lý trước/sau (pre/post-processing).
Khắc phục sự cố
Các vấn đề thường gặp
Issue: Python version error
Giải pháp: ExecuTorch yêu cầu Python 3.10 trở lên. Hãy nâng cấp bản cài đặt Python của bạn:
# Using conda
conda create -n executorch python=3.10
conda activate executorchIssue: Export fails during first run
Giải pháp: ExecuTorch có thể cần tải xuống và biên dịch các thành phần trong lần sử dụng đầu tiên. Đảm bảo rằng bạn có:
pip install --upgrade executorchIssue: Import errors for ExecuTorch modules
Giải pháp: Đảm bảo rằng ExecuTorch đã được cài đặt đúng cách:
pip install executorch --force-reinstallĐể được trợ giúp khắc phục sự cố thêm, hãy truy cập Ultralytics GitHub Issues hoặc Tài liệu ExecuTorch.
Tóm tắt
Xuất các model YOLO26 sang định dạng ExecuTorch cho phép triển khai hiệu quả trên thiết bị mobile và edge. Với tích hợp PyTorch-native, hỗ trợ đa nền tảng và hiệu năng tối ưu, ExecuTorch là một lựa chọn tuyệt vời cho các ứng dụng Edge AI.
Những điểm chính:
- ExecuTorch cung cấp khả năng triển khai edge PyTorch-native với hiệu năng tuyệt vời
- Việc xuất rất đơn giản với tham số
format='executorch' - Các model được tối ưu hóa cho CPU mobile thông qua XNNPACK backend
- Hỗ trợ các nền tảng iOS, Android và Linux nhúng
- Yêu cầu Python 3.10+ và trình biên dịch FlatBuffers
Câu hỏi thường gặp (FAQ)
Làm thế nào để tôi xuất một model YOLO26 sang định dạng ExecuTorch?
Xuất một model YOLO26 sang ExecuTorch bằng Python hoặc CLI:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="executorch")hoặc
yolo export model=yolo26n.pt format=executorchYêu cầu hệ thống để xuất ExecuTorch là gì?
Xuất ExecuTorch yêu cầu:
- Python 3.10 trở lên
- Gói
executorch(cài đặt quapip install executorch) - PyTorch (được cài đặt tự động cùng với ultralytics)
Lưu ý: Trong lần xuất đầu tiên, ExecuTorch sẽ tự động tải xuống và biên dịch các thành phần cần thiết bao gồm trình biên dịch FlatBuffers.
Tôi có thể chạy inference với các model ExecuTorch trực tiếp trong Python không?
Các model ExecuTorch (file .pte) được thiết kế để triển khai trên các thiết bị mobile và edge bằng cách sử dụng ExecuTorch runtime. Chúng không thể được tải trực tiếp bằng YOLO() để thực hiện inference trong Python. Bạn cần tích hợp chúng vào ứng dụng mục tiêu của mình bằng các thư viện ExecuTorch runtime.
Những nền tảng nào được ExecuTorch hỗ trợ?
ExecuTorch hỗ trợ:
- Mobile: iOS và Android
- Linux nhúng: Raspberry Pi, NVIDIA Jetson và các thiết bị ARM khác
- Desktop: Linux, macOS và Windows (để phát triển)
ExecuTorch so với TFLite để triển khai trên mobile như thế nào?
Cả ExecuTorch và TFLite đều rất tuyệt vời cho việc triển khai trên mobile:
- ExecuTorch: Tích hợp PyTorch tốt hơn, quy trình làm việc PyTorch native, hệ sinh thái đang phát triển
- TFLite: Trưởng thành hơn, hỗ trợ phần cứng rộng rãi hơn, nhiều ví dụ triển khai hơn
Chọn ExecuTorch nếu bạn đã sử dụng PyTorch và muốn một lộ trình triển khai native. Chọn TFLite để đạt được khả năng tương thích tối đa và các công cụ hỗ trợ trưởng thành.
Tôi có thể sử dụng các model ExecuTorch với khả năng tăng tốc GPU không?
Có! ExecuTorch hỗ trợ tăng tốc phần cứng thông qua nhiều backend khác nhau:
- Mobile GPU: Thông qua các delegate Vulkan, Metal hoặc OpenCL
- NPU/DSP: Thông qua các delegate cụ thể theo nền tảng
- Mặc định: XNNPACK cho khả năng inference CPU được tối ưu hóa
Tham khảo Tài liệu ExecuTorch để thiết lập cụ thể theo backend.