Skip to content

TinyML trên MCU

TinyML là việc chạy model học máy trên MCU, với bộ nhớ tính bằng KB và công suất tính bằng mW. Trang này trình bày TinyML ở góc độ chọn MCU và triển khai firmware. Trang lần lượt nêu các ràng buộc của MCU so với SoC chạy Linux, các ứng dụng điển hình, các runtime và thư viện kernel, các MCU có microNPU, và cuối cùng là cách đánh giá hiệu năng. Tổng quan về MCU xem mục MCU.

Ràng buộc của MCU

Các runtime cho Linux như LiteRT hay ONNX Runtime giả định có hệ điều hành, cấp phát bộ nhớ động và hệ thống file. MCU không có những thứ này, nên TinyML dùng các runtime được thiết kế riêng với các ràng buộc sau:

Ràng buộc Hệ quả với việc triển khai model
SRAM từ vài chục KB tới vài MB Activation (kết quả trung gian giữa các lớp) phải vừa SRAM; model phải nhỏ và đã quantization
Flash từ vài trăm KB tới vài MB, không có hệ thống file Trọng số được biên dịch vào firmware dưới dạng mảng hằng (const) và đọc trực tiếp từ flash
Không có MMU, thường không dùng malloc Runtime cấp phát toàn bộ bộ nhớ từ một vùng tĩnh định trước
Không có hệ điều hành hoặc chỉ có RTOS Runtime không được phụ thuộc thư viện chuẩn đầy đủ hay thread của hệ điều hành
Nhiều MCU không có FPU, hoặc FPU chậm Tính toán dùng số nguyên int8 hoặc int16
Ngân sách năng lượng chặt Thời gian inference quyết định thời gian MCU phải thức, do đó ảnh hưởng trực tiếp tới thời lượng pin

Vì các ràng buộc trên, model TinyML thường là mạng nhỏ được thiết kế riêng (ví dụ DS-CNN, MobileNet thu nhỏ), không phải model lớn rút gọn lại.

Ứng dụng điển hình

Bộ benchmark MLPerf Tiny của MLCommons chọn bốn tác vụ đại diện cho TinyML, dùng dữ liệu từ microphone và camera. Bốn tác vụ này cũng là các ứng dụng thường gặp trong thực tế:

Tác vụ Mô tả Model tham chiếu trong MLPerf Tiny
Keyword spotting Phát hiện một tập từ khóa ngắn trong luồng âm thanh, ví dụ từ đánh thức thiết bị DS-CNN, dữ liệu Speech Commands
Visual wake words Phân loại ảnh thành hai lớp có người hoặc không có người MobileNetV1 0.25x
Image classification Phân loại ảnh nhỏ vào một số lớp ResNet nhỏ, dữ liệu CIFAR-10
Anomaly detection Phát hiện âm thanh máy móc bất thường, dùng cho bảo trì dự đoán Autoencoder, dữ liệu ToyADMOS

Ngoài các tác vụ trên, TinyML còn được dùng để nhận dạng cử chỉ từ cảm biến gia tốc và con quay, phân loại dữ liệu cảm biến rung, nhiệt độ hoặc dòng điện trên thiết bị công nghiệp.

Chưa kiểm chứng

Model tham chiếu cho tác vụ image classification (ResNet nhỏ, CIFAR-10) chưa được đối chiếu trực tiếp với repository mlcommons/tiny.

Runtime và thư viện kernel

Phần mềm TinyML gồm hai lớp. Lớp runtime nạp model, lập kế hoạch bộ nhớ và gọi từng operator. Lớp thư viện kernel cung cấp cài đặt tối ưu cho từng operator trên một kiến trúc CPU cụ thể. Ngoài ra, một số hãng cung cấp công cụ sinh code trực tiếp từ model, bỏ qua runtime thông dịch.

LiteRT for Microcontrollers

LiteRT for Microcontrollers (trước đây là TensorFlow Lite for Microcontrollers, TFLM) là phiên bản LiteRT cho MCU. Runtime dùng cùng định dạng .tflite với LiteRT trên Linux, được viết bằng C++ và không cần hệ điều hành.

Các đặc điểm chính:

  • Model nằm trong firmware. File .tflite được chuyển thành mảng C và biên dịch cùng firmware.
  • Tensor arena. Ứng dụng cấp sẵn một vùng SRAM liên tục gọi là arena. Interpreter đặt toàn bộ tensor trung gian vào arena, dùng thuật toán xếp chỗ (bin-packing) dựa trên thời gian sống của từng tensor để các tensor không cùng lúc tồn tại dùng chung vùng nhớ. Kích thước arena phụ thuộc model và thường được xác định bằng thử nghiệm.
  • Op resolver. Ứng dụng chỉ đăng ký các operator mà model dùng, nhờ đó linker loại bỏ code của các operator khác và firmware nhỏ hơn.
  • Kernel tối ưu thay thế được. Runtime có cài đặt tham chiếu viết bằng C++ cho mọi operator, và cho phép thay bằng cài đặt tối ưu cho từng kiến trúc, ví dụ CMSIS-NN cho Cortex-M.

CMSIS-NN

CMSIS-NN là thư viện kernel mạng neural của Arm cho Cortex-M. Thư viện tuân theo quy ước quantization int8 và int16 của LiteRT for Microcontrollers và cho kết quả khớp từng bit (bit-exact) với kernel tham chiếu trong đa số trường hợp, nên có thể thay vào mà không đổi kết quả của model. CMSIS-NN tận dụng lệnh SIMD của DSP extension trên Cortex-M4, M7, M33, và lệnh vector Helium (M-profile Vector Extension, MVE) trên Cortex-M55, M85. Bài báo gốc năm 2018 báo cáo CMSIS-NN cải thiện thông lượng khoảng 4.6 lần và hiệu quả năng lượng khoảng 4.9 lần so với cài đặt cơ sở.

Các runtime và công cụ khác

Công cụ Hãng Cách hoạt động Ghi chú
ExecuTorch Meta (PyTorch) Runtime cho model xuất từ PyTorch, có backend Cortex-M dùng CMSIS-NN và backend Ethos-U Bản 1.0 phát hành 10/2025; backend Cortex-M còn ở giai đoạn beta
X-CUBE-AI (ST Edge AI Core) STMicroelectronics Chuyển model Keras, LiteRT, ONNX thành code C tối ưu cho STM32, tích hợp vào STM32CubeMX; báo cáo bộ nhớ và thời gian chạy theo từng lớp Sinh microcode cho NPU Neural-ART trên STM32N6, operator không hỗ trợ chạy trên CPU
ESP-DL Espressif Thư viện inference cho chip Espressif, dùng lệnh vector của ESP32-S3; có công cụ chuyển model sang 8-bit hoặc 16-bit Hãng công bố ESP32-S3 nhanh hơn ESP32 từ 4.5 tới 6.25 lần trên các model mẫu

Theo đánh giá của tác giả, LiteRT for Microcontrollers kèm CMSIS-NN là điểm khởi đầu hợp lý khi MCU dùng core Cortex-M, vì chạy được trên nhiều hãng và được Zephyr tích hợp sẵn dưới dạng module. Công cụ của hãng phù hợp khi đã chốt dòng MCU và cần dùng NPU của chính hãng đó.

MCU có microNPU

Các dòng MCU mới tích hợp khối tăng tốc AI nhỏ, gọi là microNPU, để chạy các model mà CPU Cortex-M không đáp ứng được thời gian. Hai hướng chính là dùng IP NPU của Arm hoặc NPU do hãng MCU tự thiết kế.

NPU Nhà thiết kế Đặc điểm Toolchain
Ethos-U55, Ethos-U65, Ethos-U85 Arm (IP, được nhiều hãng tích hợp) Cấu hình theo số MAC mỗi chu kỳ (ví dụ ethos-u55-128); U55 đi kèm Cortex-M, U65 có thể đi kèm Cortex-A (ví dụ i.MX 93), U85 là thế hệ mới nhất Vela biên dịch model LiteRT hoặc TOSA đã quantization thành command stream; chạy bằng LiteRT for Microcontrollers hoặc ExecuTorch
Neural-ART STMicroelectronics (trên STM32N6x7) 288 MAC mỗi chu kỳ, tối đa 1 GHz, 600 GOPS; đi kèm Cortex-M55 tối đa 800 MHz X-CUBE-AI / ST Edge AI Core

Con số 600 GOPS của Neural-ART phù hợp với quy ước tính mỗi MAC là hai phép toán: 288 MAC × 2 × 1 GHz xấp xỉ 576 GOPS. Dòng STM32N6x5 cùng series không có NPU.

Với microNPU, model bắt buộc phải quantization toàn bộ sang số nguyên. Vela và công cụ của ST đều chia đồ thị theo operator: phần NPU hỗ trợ được biên dịch cho NPU, phần còn lại chạy trên CPU. Cũng như trên Linux SoC, cần kiểm tra báo cáo của công cụ để biết bao nhiêu operator thực sự chạy trên NPU.

Đánh giá hiệu năng

Hiệu năng của một giải pháp TinyML được đánh giá bằng bốn đại lượng: độ chính xác, thời gian inference, năng lượng mỗi lần inference, và bộ nhớ (flash cho trọng số và code, SRAM cho arena). MLPerf Tiny đo ba đại lượng đầu trên các tác vụ chuẩn ở mục trên, nên kết quả công bố của MLPerf Tiny dùng được để so sánh sơ bộ các MCU và runtime.

Khi đánh giá cho sản phẩm cụ thể, cần đo trên chính model và dữ liệu của sản phẩm, vì kết quả benchmark phụ thuộc mạnh vào cấu trúc model. Công cụ của hãng như X-CUBE-AI cho phép chạy model trên board thật và báo cáo bộ nhớ và thời gian của từng lớp, giúp xác định lớp nào cần tối ưu.

Liên quan

Tài liệu tham khảo