NVIDIA V100 上的 TensorRT FP16 或 INT8 无法加速
Posted
技术标签:
【中文标题】NVIDIA V100 上的 TensorRT FP16 或 INT8 无法加速【英文标题】:No speed up with TensorRT FP16 or INT8 on NVIDIA V100 【发布时间】:2019-03-13 19:33:50 【问题描述】:我一直在尝试使用 trt.create_inference_graph 将我的 Keras 翻译的 Tensorflow 保存模型从 FP32 转换为 FP16 和 INT8,然后将其保存为可用于 TensorFlow 服务的格式。代码在这里 - https://colab.research.google.com/drive/16zUmIx0_KxRHLN751RCEBuZRKhWx6BsJ
但是在我的测试客户端上运行这个,我发现时间没有变化。
我将不同型号的笔记本电脑与 NVIDIA V100 32 GB 和我的 8Gb 1070 GTX 卡进行了比较。我尝试减少和增加输入形状来检查记忆效果。总的来说,我认为,除了 32 GB 内存的优势(不仅仅是加载模型,而是处理更多帧而不会耗尽内存)V100 似乎没有加速;我特别想在 FP16 模式下将速度提高一倍。不确定 Keras 是否转换了 TF 模型,或者模型的复杂性或设计是否可以发挥作用。
这里是测试详情https://docs.google.com/spreadsheets/d/1Sl7K6sa96wub1OXcneMk1txthQfh63b0H5mwygyVQlE/edit?usp=sharing
Model 4 Keras converted TF sering
Model 6 TF Graph simple optimisation
Model 7 TF Graph simple optimisation + Weight Qunatization
Model 8 TF Graph simple optimisation + Weight + Model Qunatization
Model 9 Based on Model 4 frozen; NVIDIA Tensor RT Optimisation FP 32
Model 10 Based on Model 4 frozen; NVIDIA Tensor RT Optimisation FP 16
Model 11 Based on Model 4 frozen; NVIDIA Tensor RT Optimisation INT 8
No of Runs 1
Model NVIDIA GTX 1070 NVIDIA V100 32 GB
4 0.13 0.13
6 0.14 0.15
7 0.15 0.14
9 0.13 0.12
10 0.13 0.12
11 0.13 0.12
No of runs :10
4 1.15 0.81
6 1.34 1.16
7 1.15 1.27
9 1.23 0.82
10 1.22 0.83
11 1.22 0.85
FP32 - V100 - 无优化
('Label', 'person', ' at ', array([409, 167, 728, 603]), ' Score ', 0.968112)
('Label', 'person', ' at ', array([ 0, 426, 512, 785]), ' Score ', 0.8355837)
('Label', 'person', ' at ', array([ 723, 475, 1067, 791]), ' Score ', 0.7234411)
('Label', 'tie', ' at ', array([527, 335, 569, 505]), ' Score ', 0.52543193)
('Time for ', 10, ' is ', 0.7228488922119141)
FP 32 与基于 TensorFlow 的优化 - TransformGraph
没有权重或模型量化
('Time for ', 10, ' is ', 0.6342859268188477)
FP ??使用基于 TensorFlow 的优化 - +Weight Quantized- TransformGraph
权重量化后;模型大小为 39 MB!! (约 149 MB) 但时间是双倍的 ('时间为', 10, '是', 1.201113224029541)
模型量化 - 不起作用(至少在 TF Serving 中)
使用 NVIDIA TensorRT 优化(colab 笔记本)
FP16 - v100
('Label', 'person', ' at ', array([409, 167, 728, 603]), ' Score ', 0.9681119)
('Label', 'person', ' at ', array([ 0, 426, 512, 785]), ' Score ', 0.83558357)
('Label', 'person', ' at ', array([ 723, 475, 1067, 791]), ' Score ', 0.7234408)
('Label', 'tie', ' at ', array([527, 335, 569, 505]), ' Score ', 0.52543193)
('Time for ', 10, ' is ', 0.8691568374633789)
INT 8
('Label', 'person', ' at ', array([409, 167, 728, 603]), ' Score ', 0.9681119)
('Label', 'person', ' at ', array([ 0, 426, 512, 785]), ' Score ', 0.83558357)
('Label', 'person', ' at ', array([ 723, 475, 1067, 791]), ' Score ', 0.7234408)
('Label', 'tie', ' at ', array([527, 335, 569, 505]), ' Score ', 0.52543193)
('Time for ', 10, ' is ', 0.8551359176635742)
优化片段 https://colab.research.google.com/drive/1u79vDN4MZuq6gYIOkPmWsbghjunbDq6m
注意:运行之间存在细微差异
【问题讨论】:
您找到解决此问题的方法了吗?我遇到了类似的问题(使用 TensorRT 将 resnet50 从 FP32 转换为 FP16 后 V100 上没有加速)。 【参考方案1】:我在 NVIDIA GTX 1070 和 NVIDIA V100 上使用 TF 官方 Resnet50 模型、FP32 和 FP16 进行了测试。这次我没有使用 TensorRT 或任何优化。使用了来自
的 TF 模型MODEL = https://github.com/tensorflow/models/tree/master/official/resnet
FP32 = http://download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp32_savedmodel_NCHW.tar.gz
FP16 = http://download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp16_savedmodel_NCHW.tar.gz
Model Extracted and RUN
docker run --net=host --runtime=nvidia -it --rm -p 8900:8500 -p 8901:8501
-v /home/alex/coding/IPython_neuralnet/:/models/ tensorflow/serving:latesgpu
--model_config_file=/models/resnet50_fp32.json or resnet50_fp16.json
Results =
这是结果。似乎没有速度差异/超过某个点的 CUDA 内核数;并且这里的 FP16 模型运行速度没有两倍快。也许我需要使用 TensorRT 进行转换
https://docs.google.com/spreadsheets/d/1Sl7K6sa96wub1OXcneMk1txthQfh63b0H5mwygyVQlE/edit?usp=sharing
【讨论】:
【参考方案2】:有几件事可以帮助解决缺乏加速的根本原因。
您可以查看有多少节点转换为 TRT。
使用最新版本的 TF(1.13 或 nightly)来利用所有最近添加的功能。
配置文件(例如 nvprof 或 tf 分析器)以查看推理工作负载的瓶颈。
TF-TRT 用户指南可能会有所帮助:https://docs.nvidia.com/deeplearning/dgx/integrate-tf-trt/index.html
这个 repo 里还有一堆例子:https://github.com/tensorflow/tensorrt
【讨论】:
谢谢,我正在使用最新的二进制文件,但正在另一台机器上使用 CPU 进行转换。我将尝试在具有 GPU 的同一 v100 中执行此操作并检查 我使用了最新的 tensorflow-gpu 1.13.1,在 V100 中运行它并创建了不同的优化并进行了测试。结果是一样的。因此,GPU 或 CPU 中发生的优化过程似乎没有区别。所以这可能是由于模型——基于 resnet-50 的模型——retinanet 被转换为 TF Serving 和 Frozen 进行优化,或者仅仅是因为 V100 并不是很快,但只是有更多的内存——(看起来并不至少 FP16 应该让它以双倍速度运行——需要用更简单的模型检查)以上是关于NVIDIA V100 上的 TensorRT FP16 或 INT8 无法加速的主要内容,如果未能解决你的问题,请参考以下文章