Khả năng tương thích của toán tử TensorFlow Lite và TensorFlow

Toán tử máy học (ML) mà bạn sử dụng trong mô hình của mình có thể ảnh hưở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ố lượng hạn chế các thao tác TensorFlow được sử dụng trong các mô hình suy luận thông thường, đ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 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, bộ chuyển đổi có thể tách riêng hoặc hợp nhất 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ợ, đôi khi cũng cần có các kiểu sử dụng cụ thể 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ể sử dụng với TensorFlow Lite là xem xét cẩn thận cách chuyển đổi và tối ưu hóa các hoạt động, cùng với những hạn chế do quy trình này áp đặt.

Toán tử được hỗ trợ

Toán tử tích hợp TensorFlow Lite là 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.

Toán tử TensorFlow

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ợ:

  1. Các mô hình chỉ có toán tử tích hợp TensorFlow Lite. ( Khuyến khích )
  2. Các mô hình có các toán tử tích hợp và các toán tử lõi TensorFlow chọn lọc.
  3. Các mô hình có toán tử tích hợp, 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 được TensorFlow Lite hỗ trợ nguyên bản thì bạn không cần bất kỳ cờ bổ sung 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 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 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 cần bao gồm các thao tác TensorFlow chọn lọc 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 tạo ra các phần 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 trên các thiết bị bị hạn chế về 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 chọn lọc, 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 dành cho các loại khác như tf.float16 và chuỗi.

Ngoài việc sử dụng các phiên bản hoạt động khác nhau, điểm khác biệt khác giữa mô hình dấu phẩy động và mô hình 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 tensor. Điều này đòi hỏi phải "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, gấp và hợp nhất liên tục

Một số hoạt động TensorFlow có thể được TensorFlow Lite xử lý mặc dù chúng không có hoạt động tương đương trực tiếp. Đây là trường hợp đối với các phép toán có thể được loại bỏ khỏi biểu đồ một cách đơn giản ( tf.identity ), được thay thế bằng tensor ( tf.placeholder ) hoặc hợp nhất thành các phép toán 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 TensorFlow thường bị xóa khỏi biểu đồ:

Hoạt động thử nghiệm

Các hoạt động TensorFlow Lite sau đây đã có sẵn 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