Giúp bảo vệ Great Barrier Reef với TensorFlow trên Kaggle Tham Challenge

Tối ưu hóa mô hình

Các thiết bị Edge thường có bộ nhớ hoặc sức mạnh tính toán hạn chế. Các tối ưu hóa khác nhau có thể được áp dụng cho các mô hình để chúng có thể chạy trong các ràng buộc này. Ngoài ra, một số tối ưu hóa cho phép sử dụng phần cứng chuyên dụng để tăng tốc suy luận.

TensorFlow Lite và các TensorFlow Mẫu Tối ưu hóa Toolkit cung cấp các công cụ để giảm thiểu sự phức tạp của việc tối ưu hóa suy luận.

Bạn nên xem xét việc tối ưu hóa mô hình trong quá trình phát triển ứng dụng của mình. Tài liệu này phác thảo một số phương pháp hay nhất để tối ưu hóa các mô hình TensorFlow để triển khai cho phần cứng cạnh.

Tại sao mô hình nên được tối ưu hóa

Có một số cách chính để tối ưu hóa mô hình có thể giúp phát triển ứng dụng.

Giảm kích cỡ xuống

Một số hình thức tối ưu hóa có thể được sử dụng để giảm kích thước của một mô hình. Các mô hình nhỏ hơn có những lợi ích sau:

  • Kích thước lưu trữ nhỏ hơn: mô hình nhỏ chiếm không gian lưu trữ ít trên các thiết bị của người dùng. Ví dụ: một ứng dụng Android sử dụng kiểu máy nhỏ hơn sẽ chiếm ít dung lượng lưu trữ hơn trên thiết bị di động của người dùng.
  • Dung lượng file download nhỏ: mô hình nhỏ hơn đòi hỏi ít thời gian và băng thông để tải xuống thiết bị của người dùng.
  • Ít sử dụng bộ nhớ: mô hình nhỏ hơn sử dụng ít RAM khi họ đang chạy, mà giải phóng bộ nhớ cho các phần khác của ứng dụng của bạn để sử dụng, và có thể dịch để hiệu suất tốt hơn và ổn định.

Lượng tử hóa có thể làm giảm kích thước của một mô hình trong tất cả các trường hợp này, có khả năng phải trả giá bằng một số độ chính xác. Việc cắt tỉa và phân cụm có thể làm giảm kích thước của một mô hình để tải xuống bằng cách làm cho nó dễ nén hơn.

Giảm độ trễ

Độ trễ là số lượng thời gian cần thiết để chạy một suy luận duy nhất với một mô hình nhất định. Một số hình thức tối ưu hóa có thể giảm số lượng tính toán cần thiết để chạy suy luận bằng cách sử dụng một mô hình, dẫn đến độ trễ thấp hơn. Độ trễ cũng có thể ảnh hưởng đến mức tiêu thụ điện năng.

Hiện tại, lượng tử hóa có thể được sử dụng để giảm độ trễ bằng cách đơn giản hóa các tính toán xảy ra trong quá trình suy luận, có khả năng phải trả giá bằng một số độ chính xác.

Khả năng tương thích của bộ tăng tốc

Một số tăng tốc phần cứng, chẳng hạn như Cạnh TPU , có thể chạy suy luận cực kỳ nhanh chóng với các mô hình đã được tối ưu hóa một cách chính xác.

Nói chung, các loại thiết bị này yêu cầu các mô hình phải được lượng tử hóa theo một cách cụ thể. Xem tài liệu của từng trình tăng tốc phần cứng để tìm hiểu thêm về các yêu cầu của chúng.

Đánh đổi

Việc tối ưu hóa có thể dẫn đến những thay đổi về độ chính xác của mô hình, điều này phải được xem xét trong quá trình phát triển ứng dụng.

Các thay đổi về độ chính xác phụ thuộc vào từng mô hình được tối ưu hóa và rất khó dự đoán trước. Nói chung, các mô hình được tối ưu hóa về kích thước hoặc độ trễ sẽ mất một lượng nhỏ độ chính xác. Tùy thuộc vào ứng dụng của bạn, điều này có thể có hoặc không ảnh hưởng đến trải nghiệm của người dùng. Trong một số trường hợp hiếm hoi, một số mô hình nhất định có thể đạt được độ chính xác nhất định do kết quả của quá trình tối ưu hóa.

Các loại tối ưu hóa

TensorFlow Lite hiện hỗ trợ tối ưu hóa thông qua lượng tử hóa, cắt tỉa và phân cụm.

Đây là một phần của TensorFlow Mẫu Tối ưu hóa Toolkit , cung cấp nguồn lực cho các kỹ thuật tối ưu hóa mô hình tương thích với TensorFlow Lite.

Lượng tử hóa

Lượng tử hoạt động bằng cách làm giảm độ chính xác của các con số dùng để biểu diễn các thông số của mô hình, mà theo mặc định là 32-bit số dấu chấm động. Điều này dẫn đến kích thước mô hình nhỏ hơn và tính toán nhanh hơn.

Các loại lượng tử hóa sau có sẵn trong TensorFlow Lite:

Kỹ thuật Yêu cầu dữ liệu Giảm kích cỡ xuống Sự chính xác Phần cứng được hỗ trợ
Lượng tử hóa float16 sau đào tạo Không có dữ liệu Lên đến 50% Mất độ chính xác không đáng kể CPU, GPU
Lượng tử hóa dải động sau đào tạo Không có dữ liệu Lên đến 75% Mất độ chính xác nhỏ nhất CPU, GPU (Android)
Lượng tử hóa số nguyên sau đào tạo Mẫu đại diện không có nhãn Lên đến 75% Mất độ chính xác nhỏ CPU, GPU (Android), EdgeTPU, Hexagon DSP
Đào tạo nhận thức lượng tử hóa Dữ liệu đào tạo được gắn nhãn Lên đến 75% Mất độ chính xác nhỏ nhất CPU, GPU (Android), EdgeTPU, Hexagon DSP

Cây quyết định sau đây giúp bạn chọn các lược đồ lượng tử hóa mà bạn có thể muốn sử dụng cho mô hình của mình, chỉ đơn giản dựa trên kích thước và độ chính xác của mô hình dự kiến.

cây lượng tử hóa

Dưới đây là kết quả độ trễ và độ chính xác cho lượng tử hóa sau đào tạo và đào tạo nhận thức lượng tử hóa trên một vài mô hình. Tất cả các con số về độ trễ đều được đo trên các thiết bị Pixel 2 sử dụng một CPU lõi lớn duy nhất. Khi bộ công cụ được cải thiện, các con số ở đây cũng vậy:

Người mẫu Độ chính xác hàng đầu (Bản gốc) Độ chính xác hàng đầu (Số lượng bài tập sau đào tạo) Độ chính xác Top-1 (Đào tạo Nhận thức Lượng tử hóa) Độ trễ (Bản gốc) (mili giây) Độ trễ (Bài huấn luyện được lượng tử hóa) (mili giây) Độ trễ (Đào tạo Nhận thức Lượng tử hóa) (mili giây) Kích thước (Original) (MB) Kích thước (Tối ưu hóa) (MB)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16,9 4.3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3.6
Inception_v3 0,78 0,772 0,775 1130 845 543 95,7 23,9
Resnet_v2_101 0,770 0,768 N / A 3973 2868 N / A 178.3 44,9
Bảng 1 Lợi ích của mô hình lượng tử cho chọn mô hình CNN

Lượng tử hóa số nguyên đầy đủ với kích hoạt int16 và trọng số int8

Lượng tử với kích hoạt int16 là một lượng tử sơ đồ nguyên đầy đủ với kích hoạt trong int16 và trọng lượng trong int8. Chế độ này có thể cải thiện độ chính xác của mô hình lượng tử hóa so với sơ đồ lượng tử hóa số nguyên đầy đủ với cả kích hoạt và trọng số trong int8 giữ kích thước mô hình tương tự. Nó được khuyến khích khi các hoạt động nhạy cảm với lượng tử hóa.

Chú ý: Hiện nay chỉ có không được tối ưu hóa việc triển khai kernel tài liệu tham khảo có sẵn trong TFLite cho chương trình lượng tử hóa này, do đó theo mặc định việc thực hiện sẽ được chậm so với hạt nhân int8. Toàn bộ lợi thế của chế độ này hiện có thể được truy cập thông qua phần cứng chuyên dụng hoặc phần mềm tùy chỉnh.

Dưới đây là kết quả độ chính xác của một số kiểu máy được hưởng lợi từ chế độ này.

Người mẫu Loại chỉ số độ chính xác Độ chính xác (kích hoạt float32) Độ chính xác (lần kích hoạt int8) Độ chính xác (kích hoạt int16)
Wav2letter WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (chưa cuộn) CER 6,13% 43,67% 6,52%
YoloV3 mAP (IOU = 0,5) 0,577 0,563 0,574
MobileNetV1 Độ chính xác hàng đầu 0,7062 0,694 0,6936
MobileNetV2 Độ chính xác hàng đầu 0,718 0,7126 0,7137
MobileBert F1 (Đối sánh chính xác) 88,81 (81,23) 2,08 (0) 88,73 (81,15)
Bảng 2 Lợi ích của mô hình lượng tử với kích hoạt int16

Cắt tỉa

Cắt tỉa công trình bằng cách loại bỏ các thông số trong một mô hình mà chỉ có một tác động nhỏ trên những dự đoán của mình. Các mô hình được cắt tỉa có cùng kích thước trên đĩa và có cùng độ trễ thời gian chạy, nhưng có thể được nén hiệu quả hơn. Điều này làm cho việc cắt tỉa trở thành một kỹ thuật hữu ích để giảm kích thước tải xuống mô hình.

Trong tương lai, TensorFlow Lite sẽ cung cấp tính năng giảm độ trễ cho các mô hình đã được lược bớt.

Phân cụm

Clustering công trình bằng cách nhóm các trọng của mỗi lớp trong một mô hình thành một số được xác định trước của các cụm, sau đó chia sẻ các giá trị trọng tâm đối với khối lượng thuộc từng cụm riêng biệt. Điều này làm giảm số lượng giá trị trọng số duy nhất trong một mô hình, do đó giảm độ phức tạp của nó.

Do đó, các mô hình theo cụm có thể được nén hiệu quả hơn, mang lại lợi ích triển khai tương tự như việc cắt tỉa.

Quy trình phát triển

Là một điểm khởi đầu, kiểm tra nếu các mô hình trong mô hình tổ chức có thể làm việc cho các ứng dụng của bạn. Nếu không, chúng tôi khuyên người dùng bắt đầu với các công cụ lượng tử sau đào tạo vì đây là áp dụng rộng rãi và không cần dữ liệu huấn luyện.

Đối với trường hợp tính chính xác và chỉ tiêu độ trễ không được đáp ứng, hoặc hỗ trợ tăng tốc phần cứng là quan trọng, đào tạo lượng tử-aware là lựa chọn tốt hơn. Xem kỹ thuật tối ưu hóa bổ sung theo TensorFlow Mẫu Tối ưu hóa Toolkit .

Nếu bạn muốn tiếp tục làm giảm kích thước mô hình của bạn, bạn có thể thử cắt tỉa và / hoặc phân nhóm trước khi lượng tử mô hình của bạn.