Khả năng tương thích với TensorFlow Lite và toán tử TensorFlow

Các toán tử học máy (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ố ít thao tác của TensorFlow được dùng trong các mô hình dự đoán phổ biến. Điều này có nghĩa là không phải mô hình nào cũng có thể chuyển đổi trực tiếp. Công cụ chuyển đổi cho phép bạn thêm các toán tử khác. Tuy nhiên, việc chuyển đổi một mô hình theo cách này cũng đòi hỏi bạn phải sửa đổi môi trường thời gian chạy TensorFlow Lite mà bạn dùng để thực thi mô hình của mình. Điều này có thể hạn chế khả năng sử dụng các tuỳ 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ế nhằm phân tích cấu trúc mô hình và áp dụng các biện pháp tối ưu hoá sao cho tương thích với các toán tử được hỗ trợ trực tiếp. Ví dụ: tuỳ thuộc vào các toán tử ML trong mô hình của bạn, bộ chuyển đổi có thể huỷ hoặc hợp nhất các toán tử đó để liên kết chúng với các toán tử tương ứng trong TensorFlow Lite.

Ngay cả đối với các thao tác được hỗ trợ, đôi khi mẫu sử dụng cụ thể vẫn được dự kiến vì lý do hiệu suất. Cách tốt nhất để tìm 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 kỹ cách chuyển đổi và tối ưu hóa các toán tử, cùng với những hạn chế của quy trình này.

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

Các toán tử tích hợp sẵn của TensorFlow Lite là một tập hợp con gồm các toán tử nằm trong thư viện cốt lõi TensorFlow. Mô hình TensorFlow cũng có thể bao gồm các toán tử tuỳ chỉnh dưới dạng toán tử kết hợp hoặc cá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

Trong số các toán tử mô hình học máy 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 sẵn TensorFlow Lite. (Được đề xuất)
  2. Các mô hình có các toán tử tích hợp sẵn và chọn các toán tử cốt lõi của TensorFlow.
  3. Các mô hình có các toán tử tích hợp sẵn, toán tử cốt lõi TensorFlow và/hoặc toán tử tuỳ chỉnh.

Nếu mô hình của bạn chỉ chứa các toán tử do TensorFlow Lite hỗ trợ sẵn, thì bạn không cần thêm 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 suôn sẻ và đơn giản hơn khi tối ưu hoá cũng như chạy bằng thời gian chạy TensorFlow Lite mặc định. Bạn cũng có thêm các lựa chọn triển khai 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 bằng hướng dẫn về trình chuyển đổi TensorFlow Lite. Hãy xem trang TensorFlow Lite Ops để biết danh sách các toán tử tích hợp sẵn.

Nếu cần thêm một số thao tác TensorFlow từ thư viện cốt lõi, bạn phải chỉ định điều đó khi chuyển đổi và đảm bảo thời gian chạy bao gồm các thao tác đó. Hãy 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 lựa chọn cuối cùng là thêm toán tử tuỳ chỉnh vào mô hình chuyển đổi. Toán tử tuỳ chỉnh là các toán tử được tạo bằng cách kết hợp nhiều toán tử cốt lõi của TensorFlow nguyên gốc hoặc xác định một toán tử hoàn toàn mới. Khi được chuyển đổi, các toán tử tuỳ chỉnh có thể làm tăng kích thước của mô hình tổng thể bằng cách phát sinh 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 tuỳ chỉnh (nếu không được tạo riêng để triển khai thiết bị di động hoặc thiết bị) có thể mang lại hiệu suất kém hơn khi được triển khai cho 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, cũng giống như việc thêm một số toán tử cốt lõi của TensorFlow, các toán tử tuỳ chỉnh yêu cầu bạn phải sửa đổi môi trường thời gian chạy của mô hình, điều này hạn chế việc 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 kiểu được hỗ trợ

Hầu hết các thao tác của TensorFlow Lite đều nhắm mục tiêu đến cả dự đoán dấu phẩy động (float32) và lượng tử hoá (uint8, int8), nhưng nhiều thao tác thì 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 các phiên bản khác nhau của toán tử, sự khác biệt khác giữa các mô hình dấu phẩy động và mô hình lượng tử hoá là cách chuyển đổi các mô hình này. Việc chuyển đổi lượng tử hoá yêu cầu thông tin về dải động cho tensor. Điều này đòi hỏi "lượng tử giả" trong quá trình huấn luyện mô hình, lấy thông tin phạm vi thông qua tập dữ liệu hiệu chỉnh hoặc ước tính phạm vi "nhanh chóng". Hãy xem phần lượng tử hoá để biết thêm thông tin chi tiết.

Chuyển đổi đơn giản, liên tục gập và hợp nhất

Một số thao tác của TensorFlow có thể được TensorFlow Lite xử lý ngay cả khi các thao tác này không có tương đương trực tiếp. Đây là trường hợp của các toán tử có thể chỉ đơn giản là bị xoá khỏi biểu đồ (tf.identity), được thay thế bằng tensor (tf.placeholder) hoặc kết hợp thành các phép toán phức tạp hơn (tf.nn.bias_add). Đôi khi, một số toán tử được hỗ trợ cũng có thể bị xoá thông qua một trong các quy trình này.

Dưới đây là danh sách chưa đầy đủ gồm các thao tác của TensorFlow thường bị xoá 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

Vận hành thử nghiệm

Các thao tác của TensorFlow Lite sau đây đã có sẵn, nhưng chưa sẵn sàng cho các mô hình tuỳ chỉnh:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF