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ổng quan về Edge AI
- Edge AI trên Linux SoC có NPU
- MCU Overview và Các dòng MCU phổ biến
- MCU Node & RTOS
- Arm: kiến trúc Cortex-M và Helium (tab Chip & SoC)
Tài liệu tham khảo¶
- R. David et al., TensorFlow Lite Micro: Embedded Machine Learning on TinyML Systems, MLSys 2021
- Google AI Edge, LiteRT for Microcontrollers
- TensorFlow GitHub issue, Tensor arena size determination
- Arm, CMSIS-NN
- L. Lai, N. Suda, V. Chandra, CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs, 2018
- C. Banbury et al., MLPerf Tiny Benchmark, NeurIPS Datasets and Benchmarks 2021
- MLCommons, mlcommons/tiny
- PyTorch, Introducing ExecuTorch 1.0, 10/2025
- PyTorch, ExecuTorch Arm Cortex-M backend
- Arm, ethos-u-vela
- Zephyr Project, TensorFlow Lite for Microcontrollers on Arm Ethos-U55, U65, and U85 NPUs
- STMicroelectronics, STM32N6 Series và STM32N657L0
- STMicroelectronics, X-CUBE-AI
- Espressif, ESP-DL
- NXP, i.MX Machine Learning User's Guide (UG10166)