Mô hình JAX bằng LiteRT

Trang này cung cấp đường dẫn cho những người dùng muốn huấn luyện mô hình bằng JAX và triển khai đến thiết bị di động để suy luận (ví dụ về colab.

Các phương thức trong hướng dẫn này tạo ra một tflite_model mà bạn có thể sử dụng trực tiếp với ví dụ về mã thông dịch viên TFLite hoặc được lưu vào tệp TFLite FlatBuffer.

Điều kiện tiên quyết

Bạn nên dùng thử tính năng này với Python mới nhất để chạy vào ban đêm trên TensorFlow .

pip install tf-nightly --upgrade

Chúng tôi sẽ sử dụng Orbax Xuất thư viện sang xuất mô hình JAX. Đảm bảo phiên bản JAX của bạn ít nhất là 0.4.20 trở lên.

pip install jax --upgrade
pip install orbax-export --upgrade

Chuyển đổi mô hình JAX sang LiteRT

Chúng tôi dùng TensorFlow SavedModel làm trung gian giữa JAX và LiteRT. Sau khi bạn có SavedModel, hãy Các API LiteRT hiện có có thể được sử dụng để hoàn tất quá trình chuyển đổi.

# This code snippet converts a JAX model to TFLite through TF SavedModel.
from orbax.export import ExportManager
from orbax.export import JaxModule
from orbax.export import ServingConfig
import tensorflow as tf
import jax.numpy as jnp

def model_fn(_, x):
  return jnp.sin(jnp.cos(x))

jax_module = JaxModule({}, model_fn, input_polymorphic_shape='b, ...')

# Option 1: Simply save the model via `tf.saved_model.save` if no need for pre/post
# processing.
tf.saved_model.save(
    jax_module,
    '/some/directory',
    signatures=jax_module.methods[JaxModule.DEFAULT_METHOD_KEY].get_concrete_function(
        tf.TensorSpec(shape=(None,), dtype=tf.float32, name="input")
    ),
    options=tf.saved_model.SaveOptions(experimental_custom_gradients=True),
)
converter = tf.lite.TFLiteConverter.from_saved_model('/some/directory')
tflite_model = converter.convert()

# Option 2: Define pre/post processing TF functions (e.g. (de)?tokenize).
serving_config = ServingConfig(
    'Serving_default',
    # Corresponds to the input signature of `tf_preprocessor`
    input_signature=[tf.TensorSpec(shape=(None,), dtype=tf.float32, name='input')],
    tf_preprocessor=lambda x: x,
    tf_postprocessor=lambda out: {'output': out}
)
export_mgr = ExportManager(jax_module, [serving_config])
export_mgr.save('/some/directory')
converter = tf.lite.TFLiteConverter.from_saved_model('/some/directory')
tflite_model = converter.convert()

# Option 3: Convert from TF concrete function directly
converter = tf.lite.TFLiteConverter.from_concrete_functions(
    [
        jax_module.methods[JaxModule.DEFAULT_METHOD_KEY].get_concrete_function(
            tf.TensorSpec(shape=(None,), dtype=tf.float32, name="input")
        )
    ]
)
tflite_model = converter.convert()

Kiểm tra mô hình TFLite đã chuyển đổi

Sau khi mô hình được chuyển đổi sang TFLite, bạn có thể chạy các API phiên dịch TFLite để kiểm tra đầu ra của mô hình.

# Run the model with LiteRT
interpreter = tf.lite.Interpreter(model_content=tflite_model)
interpreter.allocate_tensors() input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]["index"], input_data)
interpreter.invoke()
result = interpreter.get_tensor(output_details[0]["index"])