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 无法加速的主要内容,如果未能解决你的问题,请参考以下文章

NVIDIA|深度学习性能架构组-TensorRT

ubuntu安装tensorrt

ubuntu安装tensorrt

ubuntu安装tensorrt

使用 NVIDIA TensorRT 推理引擎运行 TensorFlow

OpenAI开源Point-E,可在Nvidia V100 GPU上1-2分钟生成3D模型