业界 | TensorFlow 携手 NVIDIA,使用 TensorRT 优化 TensorFlow Serving 性能( 五 )

-v /tmp:/tmp tensorflow/tensorflow:latest-gpu

/usr/local/bin/saved_model_cli convert

--dir /tmp/resnet/1538687457

--output_dir /tmp/resnet_trt/1538687457

--tag_set serve

tensorrt --precision_mode FP32 --max_batch_size 1 --

is_dynamic_op True

在这里,我们运行了 saved_model_cli 命令行工具,其中内置了对 TF-TRT 转换的支持。--dir和 --output_dir参数会告知它在哪里找到 SavedModel 以及输出转换后的 SavedModel,而--tag_set 则让它知道该转换 SavedModel 中的哪张图表。随后,我们通过在命令行中传递 tensorrt 并指定配置,明确指示其运行 TF-TRT 转换器:

--precision_mode 参数让转换器知道所需用到的精度,目前它仅支持 FP32 和 FP16--max_batch_size 参数确定输入的批次大小的上限。此转换器要求由 TensorRT 处理的所有张量将它们的首个维度作为批次维度,而该参数则让它知道推理过程中会产生的最大值。如果已知推理过程中的实际批次大小上限,同时该值还能够与之匹配,那么转换后的模型就是最优模型。要注意的是,转换后的模型无法处理批次规模大于这里指定了大小的输入,但对于批次规模更小的输入,它还是能够处理的。--is_dynamic_op 参数让它知道在模型运行时进行实际转换。这是因为在转换期间,TensorRT 需要知道所有的形状。对于该案例中所使用的 ResNet 模型,它的张量没有固定的形状,这也是我们需要用到该参数的原因。如此前一样简单,我们现在只需为模型指定正确的目录,便能利用 Docker 提供经 TF-TRT 转换的模型:

推荐阅读