Tối ưu hoá mô hình

Các thiết bị viền thường có bộ nhớ hoặc công suất tính toán hạn chế. Bạn có thể áp dụng nhiều phương án tối ưu hoá cho các mô hình để có thể chạy trong các quy tắc hạn chế này. Ngoài ra, một số hoạt động tối ưu hoá cho phép sử dụng phần cứng chuyên dụng để dự đoán nhanh.

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úp giảm thiểu độ phức tạp của quá trình tối ưu hóa quá trình suy luận.

Bạn nên cân nhắc việc tối ưu hoá mô hình trong quá trình phát triển ứng dụng. Tài liệu này trình bày một số phương pháp hay nhất để tối ưu hoá các mô hình TensorFlow nhằm triển khai cho phần cứng cạnh.

Lý do cần tối ưu hoá mô hình

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

Giảm kích thước

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

  • Kích thước bộ nhớ nhỏ hơn: Các mô hình nhỏ hơn sẽ chiếm ít không gian lưu trữ hơn trên thiết bị của người dùng. Ví dụ: ứng dụng Android sử dụng mẫu 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 cần ít thời gian và băng thông hơn để tải xuống thiết bị của người dùng.
  • Mức sử dụng bộ nhớ thấp 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úp giải phóng bộ nhớ cho các phần khác của ứng dụng dùng, đồng thời có thể mang lại hiệu suất và độ ổn định tốt hơn.

Quá trình lượng tử hoá 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 giảm 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 giúp mô hình đó dễ nén hơn.

Giảm độ trễ

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

Hiện tại, bạn có thể sử dụng quá trình lượng tử hoá để giảm độ trễ bằng cách đơn giản hoá các phép tính xảy ra trong quá trình suy luận, có thể gây tổn hại đến độ chính xác.

Khả năng tương thích với trình tăng tốc

Một số trình tăng tốc phần cứng, chẳng hạn như TPU Edge, có thể chạy dự đoán cực nhanh với các mô hình đã được tối ưu hoá chính xác.

Nhìn chung, những loại thiết bị này yêu cầu lượng tử hoá các mô hình theo một cách cụ thể. Hãy 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ề yêu cầu của chúng.

Đánh đổi

Hoạt động tối ưu hoá có thể dẫn đến sự 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 hoá, và bạn khó dự đoán trước được. Nhìn chung, các mô hình được tối ưu hoá về kích thước hoặc độ trễ sẽ mất độ chính xác nhỏ. Tuỳ thuộc vào ứng dụng của bạn, điều này có thể ảnh hưởng hoặc không ảnh hưởng đến trải nghiệm của người dùng. Trong một số ít trường hợp, một số mô hình có thể đạt được độ chính xác nhất định do quá trình tối ưu hoá.

Các kiểu tối ưu hoá

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

Đây là một phần của Bộ công cụ tối ưu hoá mô hình TensorFlow, cung cấp tài nguyên cho các kỹ thuật tối ưu hoá mô hình tương thích với TensorFlow Lite.

Lượng tử hoá

Tính năng Quant hoá hoạt động bằng cách giảm độ chính xác của các số dùng để biểu thị các tham số của mô hình, theo mặc định là số có dấu phẩy động 32 bit. Điều này giúp giảm kích thước mô hình và tính toán nhanh hơn.

Bạn có thể sử dụng các phương thức lượng tử hoá sau đây trong TensorFlow Lite:

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

Cây quyết định sau đây giúp bạn chọn lược đồ lượng tử hoá 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.

cây lượng tử hoá

Dưới đây là kết quả về độ trễ và độ chính xác của việc lượng tử hoá sau khi huấn luyện và huấn luyện nhận biết được lượng tử hoá trên một số mô hình. Tất cả các số liệu về độ trễ đều được đo lường trên các thiết bị Pixel 2 sử dụng một CPU lõi lớn. Khi bộ công cụ này cải thiện, các con số ở đây cũng sẽ thay đổi:

Mẫu Độ chính xác hàng đầu (Ban đầu) Độ chính xác hàng đầu (được lượng tử hoá sau chương trình đào tạo) Độ chính xác hàng đầu (Huấn luyện về nhận biết lượng tử hoá) Độ trễ (Ban đầu) (mili giây) Độ trễ (Sau khi đào tạo được lượng tử hoá) (mili giây) Độ trễ (Đào tạo nhận biết lượng tử hoá) (mili giây) Kích thước ban đầu (MB) Kích thước (Tối ưu hóa) (MB)
Mobilenet-v1-1-2240,7090,6570,70 1241126416,94,3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30,780,7720,775 113084554395,723,9
Resnet_v2_1010,7700,768Không áp dụng 39732868Không áp dụng178,344,9
Bảng 1 Lợi ích của việc lượng tử hoá mô hình đối với một số kiểu máy CNN

Lượng tử số nguyên đầy đủ bằng các kích hoạt int16 và trọng số int8

Quant hoá khi kích hoạt int16 là lược đồ lượng tử hoá số nguyên đầy đủ với các lượt 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ử hoá so với lược đồ lượng tử hoá đầy đủ số nguyên với cả các lần kích hoạt và trọng số trong int8 vẫn giữ kích thước mô hình tương tự. Bạn nên sử dụng thuộc tính này khi các kích hoạt nhạy cảm với lượng tử hoá.

LƯU Ý: Hiện tại, chỉ các hoạt động triển khai hạt nhân tham chiếu chưa được tối ưu hoá mới có trong TFLite cho lược đồ lượng hoá này, do đó, theo mặc định, hiệu suất sẽ chậm so với nhân int8. Hiện tại, bạn có thể truy cập toàn bộ lợi thế của chế độ này thông qua phần cứng chuyên dụng hoặc phần mềm tuỳ chỉnh.

Dưới đây là kết quả về độ chính xác cho một số mô hình hưởng lợi từ chế độ này.

Mẫu Loại chỉ số về độ 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)
Wav2letterTỶ LỆ6,7%7,7% 7,2%
DeepLocale 0.5.1 (chưa được cập nhật)TLCĐ6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Độ chính xác hàng đầu 10,70620,694 0,6936
MobileNetV2Độ chính xác hàng đầu 10,7180,7126 0,7137
MobileBertF1(Khớ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ử hoá mô hình bằng cách kích hoạt int16

Cưa cành cầm tay

Tính năng Cắt bỏ hoạt động bằng cách xoá các tham số trong mô hình chỉ có tác động nhỏ đến dự đoán. Các mô hình bị 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ể nén hiệu quả hơn. Điều này giúp việc cắt giảm kỹ thuật hữu ích để giảm kích thước tải xuống của mô hình.

Trong tương lai, TensorFlow Lite sẽ giảm độ trễ cho các mô hình bị cắt bớt.

Tạo cụm

Tính năng phân cụm hoạt động bằng cách nhóm trọng số của từng 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ị trọng tâm của 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, từ đó giảm tính phức tạp của mô hình.

Do đó, 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 giảm.

Quy trình phát triển

Trước tiên, hãy kiểm tra xem các mô hình trong mô hình được lưu trữ có phù hợp với ứng dụng của bạn hay không. Nếu không, người dùng nên bắt đầu bằng công cụ lượng tử hoá sau khi huấn luyện 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 huấn luyện.

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

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