tf.experimental.tensorrt.Converter
Конвертер для преобразования TF-TRT для сохранённых моделей TF 2.0.
tf.experimental.tensorrt.Converter(
input_saved_model_dir=None, input_saved_model_tags=None,
input_saved_model_signature_key=None, conversion_params=None
)
В настоящее время эта функция недоступна на платформе Windows.
Обратите внимание, что в версии V2 параметр is_dynamic_op=False не поддерживается, что означает, что движки TRT будут создаваться только при выполнении соответствующего оператора TRTEngineOp. Но мы по-прежнему предоставляем способ избежать затрат на создание движков TRT во время вывода (см. подробнее ниже).
Есть несколько способов выполнить преобразование:
-
Точность FP32/FP16
params = tf.experimental.tensorrt.ConversionParams( precision_mode='FP16') converter = tf.experimental.tensorrt.Converter( input_saved_model_dir="my_dir", conversion_params=params) converter.convert() converter.save(output_saved_model_dir)В этом случае движки TRT не будут создаваться или сохраняться в преобразованной SavedModel. Однако, если входные данные доступны во время преобразования, мы по-прежнему можем создать и сохранить движки TRT, чтобы снизить затраты во время вывода (см. вариант 2 ниже).
-
Точность FP32/FP16 с предварительно созданными движками
params = tf.experimental.tensorrt.ConversionParams( precision_mode='FP16', # Set this to a large enough number so it can cache all the engines. maximum_cached_engines=16) converter = tf.experimental.tensorrt.Converter( input_saved_model_dir="my_dir", conversion_params=params) converter.convert() # Define a generator function that yields input data, and use it to execute # the graph to build TRT engines. # With TensorRT 5.1, different engines will be built (and saved later) for # different input shapes to the TRTEngineOp. def my_input_fn(): for _ in range(num_runs): inp1, inp2 = ... yield inp1, inp2 converter.build(input_fn=my_input_fn) # Generate corresponding TRT engines converter.save(output_saved_model_dir) # Generated engines will be saved.Таким образом, для каждого уникального набора входных форм оператора TRTEngineOp будет создан/сохранён один движок. Это хорошо подходит для приложений, которые не могут позволить себе создавать движки во время вывода, но имеют доступ к входным данным, аналогичным тем, которые используются в производстве (например, имеющим те же входные формы). Кроме того, сгенерированные движки TRT зависят от платформы, поэтому нам необходимо запустить
build()в среде, аналогичной производственной (например, с тем же типом графического процессора). -
Точность INT8 и калибровка с предварительно созданными движками
params = tf.experimental.tensorrt.ConversionParams( precision_mode='INT8', # Currently only one INT8 engine is supported in this mode. maximum_cached_engines=1, use_calibration=True) converter = tf.experimental.tensorrt.Converter( input_saved_model_dir="my_dir", conversion_params=params) # Define a generator function that yields input data, and run INT8 # calibration with the data. All input data should have the same shape. # At the end of convert(), the calibration stats (e.g. range information) # will be saved and can be used to generate more TRT engines with different # shapes. Also, one TRT engine will be generated (with the same shape as # the calibration data) for save later. def my_calibration_input_fn(): for _ in range(num_runs): inp1, inp2 = ... yield inp1, inp2 converter.convert(calibration_input_fn=my_calibration_input_fn) # (Optional) Generate more TRT engines offline (same as the previous # option), to avoid the cost of generating them during inference. def my_input_fn(): for _ in range(num_runs): inp1, inp2 = ... yield inp1, inp2 converter.build(input_fn=my_input_fn) # Save the TRT engine and the engines. converter.save(output_saved_model_dir)
| Аргументы | |
|---|---|
input_saved_model_dir | каталог для загрузки SavedModel, содержащего входной граф для преобразования. Используется только при input_graph_def = None. |
input_saved_model_tags | список тегов для загрузки SavedModel. |
input_saved_model_signature_key | ключ подписи для оптимизации графа. |
conversion_params | экземпляр TrtConversionParams. |
| Исключения | |
|---|---|
ValueError | если комбинация параметров неверна. |
Методы
build
build(
input_fn
)
Выполнить вывод с преобразованным графом для построения движков TensorRT.
| Аргументы | |
|---|---|
input_fn | функция-генератор, которая возвращает входные данные в виде списка или кортежа, которые будут использованы для выполнения преобразованной подписи для создания движков TRT. Пример: `def input_fn(): Предположим сеть с 2 входными тензорами. Мы генерируем 3 наборафиктивных входных данных:input_shapes = [[(1, 16), (2, 16)], # 1-й список [(2, 32), (4, 32)], # 2-й список из двух тензоров [(4, 32), (8, 32)]] # 3-й список входных данных для форм в input_shapes: вернуть список входных тензоровyield [np.zeros(x).astype(np.float32) for x in shapes]` |
| Исключения | |
|---|---|
NotImplementedError | build() уже вызван. |
RuntimeError | input_fx равен None. |
convert
convert(
calibration_input_fn=None
)
Преобразовать входную SavedModel в формате 2.0.
| Аргументы | |
|---|---|
calibration_input_fn | функция-генератор, которая возвращает входные данные в виде списка или кортежа, которые будут использованы для выполнения преобразованной подписи для калибровки. Все возвращаемые входные данные должны иметь одинаковую форму. Пример: def input_fn(): yield input1, input2, input3 |
| Исключения | |
|---|---|
ValueError | если комбинация входных данных неверна. |
| Возвращаемое значение | |
|---|---|
| Преобразованная функция TF-TRT. |
save
save(
output_saved_model_dir
)
Сохранить преобразованную SavedModel.
| Аргументы | |
|---|---|
output_saved_model_dir | каталог для сохранения преобразованной SavedModel. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/experimental/tensorrt/Converter