Toán tử máy học (ML) mà bạn sử dụng trong mô hình của mình có thể tác động đến quá trình chuyển đổi mô hình TensorFlow sang định dạng TensorFlow Lite. Bộ chuyển đổi TensorFlow Lite hỗ trợ một số hoạt động TensorFlow hạn chế được sử dụng trong các mô hình suy luận phổ biến, điều đó có nghĩa là không phải mọi mô hình đều có thể chuyển đổi trực tiếp. Công cụ chuyển đổi cho phép bạn bao gồm các toán tử bổ sung, nhưng việc chuyển đổi mô hình theo cách này cũng yêu cầu bạn sửa đổi môi trường thời gian chạy TensorFlow Lite mà bạn sử dụng để thực thi mô hình của mình, điều này có thể hạn chế khả năng của bạn khi sử dụng các tùy chọn triển khai thời gian chạy tiêu chuẩn, chẳng hạn như dịch vụ Google Play .
TensorFlow Lite Converter được thiết kế để phân tích cấu trúc mô hình và áp dụng các tối ưu hóa nhằm làm cho nó tương thích với các toán tử được hỗ trợ trực tiếp. Ví dụ: tùy thuộc vào các toán tử ML trong mô hình của bạn, trình chuyển đổi có thể tách hoặc kết hợp các toán tử đó để ánh xạ chúng tới các đối tác TensorFlow Lite của chúng.
Ngay cả đối với các hoạt động được hỗ trợ, các mẫu sử dụng cụ thể đôi khi được mong đợi vì lý do hiệu suất. Cách tốt nhất để hiểu cách xây dựng mô hình TensorFlow có thể được sử dụng với TensorFlow Lite là xem xét cẩn thận cách các hoạt động được chuyển đổi và tối ưu hóa, cùng với các giới hạn do quy trình này áp đặt.
nhà khai thác được hỗ trợ
Các toán tử tích hợp trong TensorFlow Lite là một tập hợp con của các toán tử nằm trong thư viện lõi TensorFlow. Mô hình TensorFlow của bạn cũng có thể bao gồm các toán tử tùy chỉnh ở dạng toán tử tổng hợp hoặc toán tử mới do bạn xác định. Sơ đồ dưới đây cho thấy mối quan hệ giữa các toán tử này.
Từ phạm vi toán tử mô hình ML này, có 3 loại mô hình được quá trình chuyển đổi hỗ trợ:
- Các kiểu máy chỉ có toán tử tích hợp sẵn TensorFlow Lite. ( Khuyến nghị )
- Các mô hình có toán tử tích hợp và chọn toán tử lõi TensorFlow.
- Các mô hình có toán tử tích hợp sẵn, toán tử lõi TensorFlow và/hoặc toán tử tùy chỉnh.
Nếu mô hình của bạn chỉ chứa các hoạt động vốn được TensorFlow Lite hỗ trợ, thì bạn không cần thêm bất kỳ cờ nào để chuyển đổi mô hình đó. Đây là đường dẫn được đề xuất vì loại mô hình này sẽ chuyển đổi trơn tru và đơn giản hơn để tối ưu hóa và chạy bằng cách sử dụng thời gian chạy TensorFlow Lite mặc định. Bạn cũng có nhiều tùy chọn triển khai hơn cho mô hình của mình, chẳng hạn như dịch vụ Google Play . Bạn có thể bắt đầu với hướng dẫn chuyển đổi TensorFlow Lite . Xem trang TensorFlow Lite Ops để biết danh sách các toán tử tích hợp.
Nếu bạn cần bao gồm các thao tác TensorFlow đã chọn từ thư viện lõi, bạn phải chỉ định điều đó khi chuyển đổi và đảm bảo thời gian chạy của bạn bao gồm các thao tác đó. Xem chủ đề Chọn toán tử TensorFlow để biết các bước chi tiết.
Bất cứ khi nào có thể, hãy tránh tùy chọn cuối cùng bao gồm các toán tử tùy chỉnh trong mô hình đã chuyển đổi của bạn. Toán tử tùy chỉnh là toán tử được tạo bằng cách kết hợp nhiều toán tử lõi TensorFlow nguyên thủy hoặc xác định một toán tử hoàn toàn mới. Khi các toán tử tùy chỉnh được chuyển đổi, chúng có thể tăng kích thước của mô hình tổng thể bằng cách phát sinh các phụ thuộc bên ngoài thư viện TensorFlow Lite tích hợp sẵn. Các hoạt động tùy chỉnh, nếu không được tạo riêng cho việc triển khai thiết bị hoặc thiết bị di động, có thể dẫn đến hiệu suất kém hơn khi được triển khai cho các thiết bị bị hạn chế tài nguyên so với môi trường máy chủ. Cuối cùng, giống như bao gồm các toán tử lõi TensorFlow được chọn, các toán tử tùy chỉnh yêu cầu bạn sửa đổi môi trường thời gian chạy mô hình , điều này hạn chế bạn tận dụng các dịch vụ thời gian chạy tiêu chuẩn như dịch vụ Google Play .
Các loại được hỗ trợ
Hầu hết các hoạt động của TensorFlow Lite nhắm mục tiêu cả suy luận dấu phẩy động ( float32
) và lượng tử hóa ( uint8
, int8
), nhưng nhiều hoạt động chưa áp dụng cho các loại khác như tf.float16
và chuỗi.
Ngoài việc sử dụng phiên bản khác nhau của các hoạt động, sự khác biệt khác giữa các mô hình dấu phẩy động và lượng tử hóa là cách chúng được chuyển đổi. Chuyển đổi lượng tử hóa yêu cầu thông tin phạm vi động cho tenxơ. Điều này yêu cầu "lượng tử hóa giả" trong quá trình đào tạo mô hình, nhận thông tin phạm vi thông qua bộ dữ liệu hiệu chuẩn hoặc thực hiện ước tính phạm vi "nhanh chóng". Xem lượng tử hóa để biết thêm chi tiết.
Chuyển đổi thẳng về phía trước, liên tục gấp và hợp nhất
Một số hoạt động của TensorFlow có thể được xử lý bởi TensorFlow Lite mặc dù chúng không có tương đương trực tiếp. Đây là trường hợp đối với các hoạt động có thể được xóa khỏi biểu đồ ( tf.identity
), được thay thế bằng các thang đo ( tf.placeholder
) hoặc hợp nhất thành các hoạt động phức tạp hơn ( tf.nn.bias_add
). Thậm chí một số thao tác được hỗ trợ đôi khi có thể bị xóa thông qua một trong các quy trình này.
Dưới đây là danh sách không đầy đủ các hoạt động của TensorFlow thường bị xóa khỏi biểu đồ:
-
tf.add
-
tf.debugging.check_numerics
-
tf.constant
-
tf.div
-
tf.divide
-
tf.fake_quant_with_min_max_args
-
tf.fake_quant_with_min_max_vars
-
tf.identity
-
tf.maximum
-
tf.minimum
-
tf.multiply
-
tf.no_op
-
tf.placeholder
-
tf.placeholder_with_default
-
tf.realdiv
-
tf.reduce_max
-
tf.reduce_min
-
tf.reduce_sum
-
tf.rsqrt
-
tf.shape
-
tf.sqrt
-
tf.square
-
tf.subtract
-
tf.tile
-
tf.nn.batch_norm_with_global_normalization
-
tf.nn.bias_add
-
tf.nn.fused_batch_norm
-
tf.nn.relu
-
tf.nn.relu6
Hoạt động thử nghiệm
Các thao tác TensorFlow Lite sau hiện có, nhưng chưa sẵn sàng cho các mô hình tùy chỉnh:
-
CALL
-
CONCAT_EMBEDDINGS
-
CUSTOM
-
EMBEDDING_LOOKUP_SPARSE
-
HASHTABLE_LOOKUP
-
LSH_PROJECTION
-
SKIP_GRAM
-
SVDF