TinyML
TinyML chạy machine learning trên vi điều khiển với bộ nhớ tính bằng kilobyte và công suất tính bằng milliwatt. Tìm hiểu cách thu nhỏ model, ứng dụng và công cụ.
TinyML (học máy siêu nhỏ) là phương pháp chạy model machine learning trên vi điều khiển và các chip công suất cực thấp khác, thường chỉ có vài trăm kilobyte bộ nhớ, không có hệ điều hành và giới hạn công suất ở mức miliwatt. Chạy suy luận trên chip ngay cạnh cảm biến cho phép các thiết bị dùng pin liên tục nghe, nhìn hoặc cảm nhận môi trường xung quanh trong nhiều tháng hoặc nhiều năm, chỉ gửi kết quả như "đã nghe từ khóa" hoặc "máy rung bất thường" thay vì dữ liệu thô. Cách này giúp giảm độ trễ, giữ dữ liệu riêng tư và tiết kiệm năng lượng vô tuyến vốn cần thiết để truyền dữ liệu liên tục. Tổ chức cộng đồng của lĩnh vực này, EDGE AI FOUNDATION, trước đây có tên là tinyML Foundation.
Cách đưa model vào vi điều khiển#
Vi điều khiển lưu trọng số của model trong bộ nhớ flash cùng với chương trình, đồng thời lưu các activation đang được tính toán trong SRAM, vốn thường là giới hạn chặt hơn. Lượng tử hóa model thành số nguyên 8-bit giảm kích thước trọng số còn một phần tư so với FP32 và thay phép tính dấu phẩy động bằng số học số nguyên mà các lõi nhỏ có thể xử lý hiệu quả. Các kiến trúc gọn nhẹ sử dụng tích chập depthwise-separable, cắt tỉa model và độ phân giải đầu vào thấp hơn giúp thu nhỏ các thành phần còn lại; tìm kiếm kiến trúc mạng có thể thiết kế mạng phù hợp với bộ nhớ của một chip cụ thể. MCUNet kết hợp kiểu tìm kiếm này với runtime có xét đến bộ nhớ, đạt độ chính xác top-1 trên ImageNet trên 70% trên một vi điều khiển thương mại. Model hoàn thiện được biên dịch vào firmware và thực thi bằng một trình thông dịch nhỏ hoặc mã đã biên dịch:
Có thể ước tính mức sử dụng trước khi dùng đến phần cứng. Mạng nhận diện từ khóa này là một CNN depthwise-separable thuộc loại dùng để nhận diện lệnh nói từ các đặc trưng âm thanh; mạng tính một byte cho mỗi trọng số INT8 trong flash và dùng cặp activation đầu vào-đầu ra lớn nhất để tính SRAM:
import torch
from torch import nn
# A depthwise-separable CNN for keyword spotting on 49x10 MFCC audio features
model = nn.Sequential(
nn.Conv2d(1, 64, (10, 4), stride=2, padding=(5, 1)),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(64, 12),
)
# At INT8, flash stores one byte per weight and SRAM holds activations in flight
weights = sum(p.numel() for p in model.parameters())
x, peak = torch.randn(1, 1, 49, 10), 0
for layer in model:
y = layer(x)
peak = max(peak, x.numel() + y.numel()) # a layer's input and output coexist
x = y
print(f"Flash: {weights / 1024:.1f} KB, peak SRAM: {peak / 1024:.1f} KB")Kết quả in ra 12,7 KB flash và 15,6 KB SRAM đỉnh, chỉ chiếm một phần nhỏ trong 1 MB flash và 256 KB RAM của vi điều khiển nRF52840 trên Arduino Nano 33 BLE Sense, để lại dung lượng cho pipeline âm thanh và chính runtime.
Runtime và phần cứng#
- LiteRT cho vi điều khiển: Trình thông dịch của Google, trước đây là TensorFlow Lite cho vi điều khiển, không cần hệ điều hành, thư viện chuẩn hay cấp phát bộ nhớ động; runtime cốt lõi chỉ chiếm 16 KB trên Arm Cortex-M3.
- ExecuTorch: Runtime trên thiết bị của PyTorch; backend Arm Ethos-U chạy các model đã lượng tử hóa trên NPU Ethos-U của Arm, vốn nằm cạnh lõi Cortex-M trong nhiều chip công suất thấp.
- Arm Cortex-M: Họ bộ xử lý bên trong phần lớn vi điều khiển chạy TinyML, từ các thành phần Cortex-M0+ có vài kilobyte RAM đến Cortex-M55 và Cortex-M85 có lệnh vector dành cho machine learning.
- NPU Coral: Thiết kế bộ tăng tốc RISC-V mã nguồn mở của Google, được công bố vào tháng 10 năm 2025 cho thiết bị đeo luôn bật, hướng tới khoảng 512 tỷ phép toán mỗi giây với mức tiêu thụ điện chỉ vài miliwatt.
TinyML và Edge AI#
Edge AI bao quát mọi hoạt động suy luận trên thiết bị nơi dữ liệu được tạo ra, bao gồm điện thoại, máy tính bo mạch đơn như Raspberry Pi và module GPU nhúng như NVIDIA Jetson, vốn có bộ nhớ hàng gigabyte và tiêu thụ điện ở mức watt. TinyML là phân khúc nhỏ nhất, với model có kích thước tính bằng kilobyte. Ranh giới này liên tục thay đổi khi vi điều khiển được trang bị bộ tăng tốc: STM32N6 của ST kết hợp Cortex-M55 với bộ xử lý thần kinh 600 GOPS và RAM 4,2 MB. Detector Ultralytics YOLO26 nhỏ nhất có 2,4 triệu tham số, tương đương khoảng 2,4 MB ở INT8; vì vậy, bản xuất LiteRT INT8 (format="litert", quantize=8) hướng đến phân khúc cao hơn TinyML truyền thống: điện thoại, máy tính bo mạch đơn và bo mạch có bộ tăng tốc.
Ứng dụng của TinyML#
- Nhận diện từ khóa: Các detector từ đánh thức luôn bật trên điện thoại, tai nghe và loa thông minh lắng nghe một cụm từ trên lõi công suất thấp, chỉ đánh thức bộ xử lý chính khi nhận ra cụm từ đó.
- Bảo trì dự đoán: Cảm biến rung và âm thanh gắn vào động cơ, máy bơm học cách vận hành bình thường và phát hiện bất thường báo trước sự cố; thiết bị có thể chạy bằng pin trong nhiều năm.
- Giám sát động vật hoang dã và môi trường: Cảm biến âm thanh dùng năng lượng mặt trời hoặc pin nhận diện tiếng kêu của động vật hoặc tiếng cưa máy trong rừng hẻo lánh và gửi cảnh báo ngắn qua sóng vô tuyến tầm xa.
- Từ đánh thức bằng hình ảnh: Camera độ phân giải thấp trên vi điều khiển xác định có người trong khung hình hay không, và chỉ đánh thức hệ thống lớn hơn khi phát hiện người.
MLPerf Tiny, benchmark của MLCommons dành cho nhóm phần cứng này, đo độ chính xác, độ trễ và năng lượng trên các tác vụ trong những ứng dụng nói trên, như nhận diện từ khóa, từ đánh thức bằng hình ảnh, phân loại ảnh CIFAR-10 và phát hiện bất thường trong âm thanh máy móc.










