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à Bộ công cụ tối ưu hóa mô hình TensorFlow 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 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: Các kiểu máy nhỏ hơn chiếm ít dung lượng lưu trữ hơn trên 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.
  • Kích thước tải xuống nhỏ hơn: Các mô hình nhỏ hơn yêu cầu ít thời gian và băng thông hơn để tải xuống thiết bị của người dùng.
  • Sử dụng ít bộ nhớ hơn: Các kiểu máy nhỏ hơn sử dụng ít RAM hơn khi chạy, điều này giúp 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ể chuyển sang hiệu suất và độ ổn định tốt hơn.

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 xén 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à 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ó thể 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ố trình tăng tốc phần cứng, chẳng hạn như Edge TPU , có thể chạy suy luận cực nhanh với các mô hình đã được tối ưu hóa 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ể ảnh hưởng đến trải nghiệm người dùng của bạn hoặc khô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 Bộ công cụ tối ưu hóa mô hình TensorFlow , cung cấp tài nguyên 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ử hóa hoạt động bằng cách giảm độ chính xác của các số được sử dụng để đại diện cho các tham số của mô hình, theo mặc định là các số dấu phẩy động 32 bit. Đ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 số 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 lượng tử hóa mô hình đối với một số 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ử hóa với kích hoạt int16 là một lược đồ lượng tử hóa số nguyên đầy đủ với kích hoạt trong int16 và trọng số 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.

LƯU Ý: Hiện tại chỉ có các triển khai nhân tham chiếu không được tối ưu hóa trong TFLite cho lược đồ lượng tử hóa này, vì vậy theo mặc định, hiệu suất sẽ chậm hơn so với 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 (int8 lần kích hoạt) Độ chính xác (int16 lần kích hoạt)
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 việc lượng tử hóa mô hình với kích hoạt int16

Cắt tỉa

Việc cắt tỉa hoạt động bằng cách loại bỏ các thông số trong một mô hình chỉ có tác động nhỏ đến các dự đoán của nó. 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

Phân cụm hoạt động bằng cách nhóm các trọng số của mỗi lớp trong một mô hình thành một số cụm được xác định trước, sau đó chia sẻ các giá trị centroid cho các trọng số thuộc từng cụm riêng lẻ. Đ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.

Phát triển quy trình làm việc

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

Đối với các trường hợp không đạt được mục tiêu về độ chính xác và độ trễ hoặc hỗ trợ bộ tăng tốc phần cứng là quan trọng, thì đào tạo nhận thức lượng tử hóa là lựa chọn tốt hơn. Xem các kỹ thuật tối ưu hóa bổ sung trong Bộ công cụ tối ưu hóa mô hình TensorFlow .

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