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

Các thiết bị biên thường có bộ nhớ hoặc khả năng tính toán hạn chế. Có thể áp dụng nhiều cách tối ưu hóa khác nhau cho các mô hình để chúng có thể chạy trong những 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 độ 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 nhằm triển khai sang phần cứng biên.

Tại sao các mô hình cầ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ô 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 sẽ 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 mô hình nhỏ hơn sử dụng ít RAM hơn khi chạy, điều này giải phóng bộ nhớ cho các phần khác trong ứng dụng của bạn sử dụng và có thể mang lại 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ô hình trong tất cả các trường hợp này, có khả năng làm giảm độ chính xác. Việc cắt bớt và phân cụm có thể giảm kích thước của mô hình để tải xuống bằng cách làm cho mô hình đó 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 lượng tính toán cần thiết để chạy suy luận bằng mô hình, dẫn đến độ trễ thấp hơn. Độ trễ cũng có thể có tác độ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 phép tính xảy ra trong quá trình suy luận, có khả năng làm giảm độ chính xác.

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

Một số bộ 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.

sự đá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.

Những 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 đi 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ể 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 nhờ 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 để biểu thị 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 đây 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 phạm vi động sau đào tạo Không có dữ liệu Lên tới 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 ghi nhãn Lên tới 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 tới 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ỉ dựa trên kích thước và độ chính xác dự kiến ​​của mô hình.

lượng tử hóa-cây quyết định

Dưới đây là kết quả về độ trễ và độ chính xác cho việc đào tạo lượng tử hóa sau đào tạo và nhận thức lượng tử hóa trên một số mô hình. Tất cả các số liệu về độ trễ đều được đo trên thiết bị Pixel 2 sử dụng 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 Top 1 (Bản gốc) Độ chính xác hàng đầu (Số lượng hóa sau đào tạo) Độ chính xác hàng đầu (Đào tạo nhận thức lượng tử hóa) Độ trễ (Bản gốc) (ms) Độ trễ (Số lượng hóa sau đào tạo) (ms) Độ trễ (Đào tạo nhận thức lượng tử hóa) (ms) Kích thước (Bản gốc) (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
Khởi đầu_v3 0,78 0,772 0,775 11 giờ 30 845 543 95,7 23,9
Resnet_v2_101 0,770 0,768 không áp dụng 3973 2868 không áp dụng 178,3 44,9
Bảng 1 Lợi ích của việc lượng tử hóa mô hình đối với các mô hình CNN được chọn

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à sơ đồ lượng tử hóa số nguyên đầy đủ với các 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ự. Đó là khuyến cáo khi kích hoạt nhạy cảm với lượng tử hóa.

LƯU Ý: Hiện tại chỉ có các triển khai hạt nhân tham chiếu không được tối ưu hóa mới có sẵn trong TFLite cho sơ đồ lượng tử hóa này, do đó, theo mặc định, hiệu suất sẽ chậm so với hạt nhân int8. Hiện tại, toàn bộ lợi ích của chế độ này 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 (kích hoạt int8) Độ chính xác (kích hoạt int16)
thư wav2 WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (không được kiểm soát) 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(Kết hợp 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 tham số trong mô hình mà chỉ có tác động nhỏ đến dự đoán của mô hình. Các mô hình được cắt bớt 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 bớt 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ẽ giúp giảm độ trễ cho các mô hình được cắt 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 từng lớp trong mô hình thành một số cụm được xác định trước, sau đó chia sẻ các giá trị trung tâm 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 đó làm giảm độ phức tạp của nó.

Kết quả là các mô hình phân 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

Để 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 những trường hợp không đạt được mục tiêu về độ chính xác và độ trễ hoặc việc hỗ trợ bộ tăng tốc phần cứng là quan trọng, đào tạo nhận biết 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 lượng tử hóa mô hình của mình.