我一直在尝试使用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优化(colab笔记本)
('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
注意:在运行之间存在细微差别
一些事情可以帮助根本导致缺乏加速。
您可以检查转换为TRT的节点数。
使用最新版本的TF(1.13或每晚)来使用添加的所有最新功能。
配置文件(例如nvprof或tf profiler),以查看推理工作负载的瓶颈。
TF-TRT用户指南可能会有所帮助:https://docs.nvidia.com/deeplearning/dgx/integrate-tf-trt/index.html
这个回购中还有一些例子:https://github.com/tensorflow/tensorrt
我在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