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

Những toán tử học máy (ML) mà bạn sử dụng trong mô hình của mình có thể ảnh hưởng đến của một quá trình chuyển đổi Mô hình TensorFlow sang định dạng LiteRT. Trình chuyển đổi LiteRT hỗ trợ một số ít toán tử TensorFlow được dùng chung các mô hình suy luận, 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 thêm các toán tử khác, 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 thời gian chạy LiteRT môi trường bạn dùng để thực thi mô hình. Điều này có thể giới hạn khả năng sử dụng các tuỳ chọn triển khai chuẩn trong thời gian chạy, chẳng hạn như Dịch vụ Google Play.

Trình chuyển đổi LiteRT được thiết kế để phân tích mô hình cấu trúc và áp dụng các biện pháp tối ưu hoá để làm cho công cụ này 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 toán tử ML trong mô hình của mình, người chuyển đổi có thể sử dụng hoặc cầu chì để ánh xạ chúng đến các đối tác LiteRT của chúng.

Ngay cả đối với các thao tác được hỗ trợ, đôi khi cũng phải có mẫu hình 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 TensorFlow mô hình có thể được sử dụng với LiteRT là xem xét kỹ lưỡng cách chuyển đổi phép toán và được tối ưu hoá cùng với những hạn chế do quy trình này đặt ra.

Các toán tử được hỗ trợ

Các toán tử tích hợp LiteRT là một tập hợp con các toán tử thuộc thư viện TensorFlow Core. Mô hình TensorFlow của bạn có thể cũng bao gồm các toán tử tùy chỉnh ở dạng toán tử kết hợp hoặc các toán tử mới do bạn xác định. Biểu đồ dưới đây thể hiện mối quan hệ giữa các toán tử này.

Toán tử TensorFlow

Trong phạm vi toán tử mô hình ML này, có 3 loại các mô hình được hỗ trợ bởi quá trình chuyển đổi:

  1. Các mô hình chỉ có toán tử tích hợp LiteRT. (Nên dùng)
  2. Mô hình có các toán tử tích hợp sẵn và chọn TensorFlow toán tử cốt lõi.
  3. 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 các toán tử tuỳ chỉnh.

Nếu mô hình của bạn chỉ chứa các toán tử được hỗ trợ sẵn LiteRT, bạn không cần thêm bất kỳ cờ nào để chuyển đổi mã này. Chiến dịch này là lộ trình được đề xuất vì loại mô hình này sẽ chuyển đổi suôn sẻ và đơn giản hơn để tối ưu hoá cũng như chạy bằng thời gian chạy LiteRT mặc định. Bạn cũng có nhiều lựa chọn triển khai khác 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 chuyển đổi LiteRT. Xem trang vận hành LiteRT để có danh sách toán tử tích hợp sẵn.

Nếu bạn cần thêm một số toán tử TensorFlow từ thư viện cốt lõi, bạn phải chỉ định điều đó tại thời điểm chuyển đổi và đảm bảo thời gian chạy của bạn bao gồm những các toán tử. Xem chủ đề Chọn toán tử TensorFlow để tìm 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à đưa 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 TensorFlow ban đầu hoặc xác định một toán tử hoàn toàn mới. Khi chuyển đổi các toán tử tuỳ chỉnh, chúng có thể làm tăng quy mô của tổng thể bằng cách phát sinh các phần phụ thuộc bên ngoài thư viện LiteRT tích hợp sẵn. Hoạt động tuỳ chỉnh, nếu không được tạo riêng cho việc triển khai trên thiết bị di động hoặc thiết bị, 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ế về tài nguyên so với môi trường máy chủ. Cuối cùng, giống như việc thêm một số toán tử cốt lõi TensorFlow, toán tử tuỳ chỉnh yêu cầu bạn sửa đổi môi trường thời gian chạy mô hình hạn chế bạn tận dụng các dịch vụ thời gian chạy chuẩn như Dịch vụ Google Play.

Các kiểu được hỗ trợ

Hầu hết các hoạt động LiteRT đều nhắm mục tiêu cả dấu phẩy động (float32) và suy luận lượng tử hoá (uint8, int8), nhưng nhiều hoạt động chưa có 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 của hoạt động, đ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ử hoá là cách chuyển đổi chúng. Việc chuyển đổi lượng tử hoá cần thông tin về dải động cho tensor. Chiến dịch này yêu cầu "lượng tử giả" trong khi huấn luyện mô hình, lấy thông tin về phạm vi thông qua tập dữ liệu hiệu chỉnh hoặc thực hiện thao tác "nhanh chóng" ước tính phạm vi. Xem lượng tử hoá để biết thêm chi tiết.

Chuyển đổi thẳng, thực hiện thao tác gập liên tục và kết hợp

LiteRT có thể xử lý một số toán tử TensorFlow 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 thao tác có thể chỉ đơn giản là xoá khỏi biểu đồ (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). Đôi khi, một số thao tác được hỗ trợ cũng có thể bị xoá thông qua một trong các thao tác sau các quy trình.

Dưới đây là danh sách (chưa đầy đủ) các toán tử 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

Hoạt động thử nghiệm

Các thao tác LiteRT sau đã hiện diện, nhưng chưa sẵn sàng cho việc tuỳ chỉnh mô hình:

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