7.10. CMSIS-NN¶
Danh sách toán tử mà TFLM duyệt qua chủ yếu là một số toán tử nặng: tích chập trượt một lưới nhỏ các trọng số học được trên tensor đầu vào và ghi tổng có trọng số tại mỗi vị trí; tích chập theo chiều sâu làm điều tương tự theo từng kênh; kết nối đầy đủ nhân ma trận giữa vector đầu vào và ma trận trọng số; gộp (pooling) thu nhỏ tensor bằng cách lấy giá trị lớn nhất hoặc trung bình trong các vùng lân cận nhỏ; hàm kích hoạt như ReLU và sigmoid chạy theo từng điểm trên mọi giá trị. Một lần suy luận thị giác tiêu tốn hầu hết chu kỳ bên trong một vài toán tử đó.
Nếu được triển khai theo cách đơn giản, chúng sẽ chậm trên vi điều khiển. CMSIS-NN là thư viện của Arm cung cấp các phiên bản nhanh hơn -- được tinh chỉnh thủ công bằng assembly, lượng tử hóa số nguyên sang các giá trị int8 và uint8 mà tensor I/O đã mô tả, và được viết dựa trên các lệnh SIMD của CPU. SIMD -- Single Instruction, Multiple Data -- cho phép CPU thực hiện một phép tính trên nhiều giá trị trong cùng một chu kỳ. Một phép nhân-cộng vô hướng thông thường tạo ra một kết quả mỗi chu kỳ; một phép nhân-cộng SIMD đóng gói nhiều giá trị vào một thanh ghi rộng và tạo ra tất cả chúng cùng một lúc.
Cortex-M7 trên H7 và RT1062 có phần mở rộng DSP của Arm, giữ bốn giá trị int8 trong thanh ghi 32-bit và chạy phép nhân-cộng trên cả bốn trong một chu kỳ. Cortex-M55 trên AE3 có Helium -- chính thức là MVE, M-profile Vector Extension -- giữ mười sáu làn int8 trong thanh ghi 128-bit, gấp bốn lần thông lượng mỗi chu kỳ. Helium là tập lệnh CPU rộng hơn, không phải bộ tăng tốc; Ethos-U55 NPU trên cùng die là bộ tăng tốc.
Các bản dựng TFLM được xuất xưởng được liên kết với CMSIS-NN, và TFLM điều phối mỗi toán tử nặng đến biến thể SIMD phù hợp cho camera tại thời điểm chạy. Trên AE3, việc điều phối phức tạp hơn một chút: trình biên dịch Vela đã duyệt qua mô hình ngoại tuyến và đánh dấu các lát kết nối của các toán tử đủ điều kiện cho NPU -- subgraph -- để điều phối đến Ethos-U. Tại thời điểm suy luận, các subgraph đó chạy trên bộ tăng tốc trong một khối, và phần còn lại chuyển sang CMSIS-NN Helium trên M55.
Các toán tử dấu phẩy động bỏ qua CMSIS-NN hoàn toàn và chạy qua các kernel tham chiếu di động của TFLM. Khoảng cách độ chính xác giữa mô hình int8 và mô hình dấu phẩy động thường nhỏ; khoảng cách thông lượng thì lớn. Các mô hình xuất xưởng trên camera được lượng tử hóa sang int8 vì lý do này.