我一直在尝试使用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
('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)
没有权重或模型量化
('Time for ', 10, ' is ', 0.6342859268188477)
量化重量后;型号大小为39 MB !! (约149 MB) 但是时间是一倍 (“时间为',10,'为',1.201113224029541)
使用NVIDIA TensorRT Optimization(可伸缩笔记本)
('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)
('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
注意:运行之间有细微差别
答案 0 :(得分:0)
一些事情可以帮助导致缺乏加速的根源。
您可以检查有多少个节点转换为TRT。
使用最新版本的TF(1.13或每晚)来利用最近添加的所有功能。
个人资料(例如nvprof或tf分析器),以了解推理工作量的瓶颈所在。
TF-TRT用户指南可能会有所帮助:https://docs.nvidia.com/deeplearning/dgx/integrate-tf-trt/index.html
此仓库中还有很多示例:https://github.com/tensorflow/tensorrt
答案 1 :(得分:0)
我在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