Lượng tử hóa sau đào tạo

Lượng tử hóa sau đào tạo bao gồm các kỹ thuật chung để giảm độ trễ, khả năng xử lý, công suất và kích thước mô hình của bộ tăng tốc CPU và phần cứng mà không làm giảm độ chính xác của mô hình. Những kỹ thuật này có thể được thực hiện trên mô hình TensorFlow float đã được đào tạo sẵn và được áp dụng trong quá trình chuyển đổi TensorFlow Lite. Các kỹ thuật này được kích hoạt dưới dạng tùy chọn trong bộ chuyển đổi TensorFlow Lite .

Để chuyển ngay sang các ví dụ từ đầu đến cuối, hãy xem các hướng dẫn sau:

Lượng tử hóa trọng lượng

Trọng lượng có thể được chuyển đổi thành các loại có độ chính xác giảm, chẳng hạn như số float 16 bit hoặc số nguyên 8 bit. Chúng tôi thường khuyên dùng số float 16 bit để tăng tốc GPU và số nguyên 8 bit để thực thi CPU.

Ví dụ: đây là cách chỉ định lượng tử hóa trọng số nguyên 8 bit:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()

Khi suy luận, những phần quan trọng nhất được tính toán bằng 8 bit thay vì dấu phẩy động. Có một số chi phí về hiệu suất tại thời gian suy luận, liên quan đến việc lượng tử hóa cả trọng số và kích hoạt bên dưới.

Để biết thêm thông tin, hãy xem hướng dẫn lượng tử hóa sau đào tạo của TensorFlow Lite.

Lượng tử hóa số nguyên đầy đủ của trọng số và kích hoạt

Cải thiện độ trễ, khả năng xử lý và mức sử dụng năng lượng, đồng thời có quyền truy cập vào các bộ tăng tốc phần cứng chỉ có số nguyên bằng cách đảm bảo cả trọng số và kích hoạt đều được lượng tử hóa. Điều này đòi hỏi một tập dữ liệu đại diện nhỏ.

import tensorflow as tf

def representative_dataset_gen():
  for _ in range(num_calibration_steps):
    # Get sample input data as a numpy array in a method of your choosing.
    yield [input]

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()

Mô hình kết quả vẫn sẽ lấy đầu vào và đầu ra float để thuận tiện.

Để biết thêm thông tin, hãy xem hướng dẫn lượng tử hóa sau đào tạo của TensorFlow Lite.