Нет ускорения с TensorRT FP16 или INT8 на NVIDIA V100 - PullRequest
0 голосов
/ 13 марта 2019

Я пытался использовать trt.create_inference_graph, чтобы преобразовать мою переведенную Keras сохраненную модель Tensorflow из FP32 в FP16 и INT8, а затем сохранить ее в формате, который можно использовать для обслуживания TensorFlow.Код здесь - https://colab.research.google.com/drive/16zUmIx0_KxRHLN751RCEBuZRKhWx6BsJ

Однако при работе с моим тестовым клиентом я не вижу изменений во времени.

Я сравнивал разные модели с 32 ГБ NVIDIA V100 и моей картой 1070 GTX 8 ГБ вноутбук.Я попытался уменьшить и увеличить входную форму, чтобы проверить эффекты памяти.В целом, я думаю, что, кроме преимущества 32 ГБ памяти (не только для загрузки моделей, но и для обработки, скажем, кадров, не выходя из памяти), 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 МБ!(от ~ 149 МБ) Но время удваивается («Время для», 10, «есть», 1.201113224029541)

Квантование модели - не работает (по крайней мере, с обслуживанием TF)

ИспользованиеОптимизация 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

Примечание: междупробеги есть небольшие различия

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Я провел тест с официальной моделью Resnet50 TF, FP32 и FP16 на NVIDIA GTX 1070 и NVIDIA V100.На этот раз я не использовал 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

enter image description here

0 голосов
/ 16 марта 2019

Несколько вещей могут помочь в корне вызвать отсутствие ускорения.

Вы можете проверить, сколько узлов преобразуется в 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

...