Comparación de rendimiento de tensorrt en diferentes tamaños de lote

Tensorrt utiliza GPU para la aceleración. La GPU natural es adecuada para la computación en paralelo, por lo que aumentar el tamaño de los lotes es una de las formas habituales de optimizar tensorrt

tensorrt por defecto es batchsize = 1, y luego haz algunos experimentos para observar

El modelo se descarga directamente del archivo onnx de este sitio web

Después de obtener el archivo onnx, debemos convertirlo en un archivo de motor tensorrt

/opt/TensorRT-7.1.3.4/bin/trtexec --onnx=ctdet_coco_dlav0_512.onnx --saveEngine=ctdet_coco_dlav0_512_256.trt --best --batch=256 --workspace=4096

El archivo trt se obtendrá directamente si la operación es exitosa

 A continuación, pruebe el rendimiento

/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=256
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=128
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=64
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=32
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=16
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=8
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=4
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=2
/opt/TensorRT-7.1.3.4/bin/trtexec --loadEngine=ctdet_coco_dlav0_512_256.trt --batch=1

Este artículo solo examina el rendimiento y el tiempo de ejecución, y resume los resultados de la siguiente manera

Calcular Tiempo total de BatchSize (S) Rendimiento (QPS)
. 1 2,94049 364.344
2 725.753 2.93884
. 4 2,77403 1365,88
. 8 1.65327 1,619.66
16 1818.5 0,922257
32 0,479588 1848,01
64 1859,18 0.238533
128 1842,8 0.12173
256 0,0641229 1817,42
visualizado en tiempo de cálculo ( total Tiempo de cálculo )

import numpy as  np
import pandas as pd
import matplotlib.pyplot as plt

df=pd.read_csv("data.txt",sep="\t")
x =df['batchsize'].values
y1 =df['total compute time(s)'].values
y2 =df['throughput(qps)'].values
plt.plot(x, y1, 'ro--')
#plt.plot(x, y1, 'b--')
plt.xlabel('batchsize')
plt.ylabel('total compute time(s)')
for a, b in zip(x, y1):
    plt.text(a+15,b-0.15,'(%d,%.4f)'%(a,b),ha='center', va='bottom',fontdict={'size': 10, 'color':  'g'})
plt.show()

 Del mismo modo, visualice el rendimiento

A partir de las dos imágenes anteriores, podemos ver que aumentar el tamaño del lote tiene un gran impacto en el tiempo de cálculo; y aumentar el tamaño del lote puede alcanzar fácilmente la saturación del rendimiento.

Los estudiantes cuidadosos pueden encontrar que al transferir archivos trt desde onnx, se usa --best

Este parámetro es

--best                      Enable all precisions to achieve the best performance (default = disabled)

Pertenece a precisión mixta, ni fp32 puro, ni fp16, int8

A continuación, compare el impacto de diferentes cuantificaciones en el tiempo de cálculo y el rendimiento.

Se realizaron tres experimentos, best, fp16 e int8

Los resultados se resumen en tres archivos

best.txt

fp16.txt

int8.txt

La visualización es la siguiente:

import numpy as  np
import pandas as pd
import matplotlib.pyplot as plt
plt.tight_layout()

df_int8=pd.read_csv("int8.txt",sep="\t")
df_best=pd.read_csv("best.txt",sep="\t")
df_fp16=pd.read_csv("fp16.txt",sep="\t")

x =df_int8['batchsize'].values
y1_int8 =df_int8['total compute time(s)'].values
y1_best =df_best['total compute time(s)'].values
y1_fp16 =df_fp16['total compute time(s)'].values

plt.plot(x, y1_int8, 'ro--',label='int8')
plt.plot(x, y1_best, 'bo--',label='best')
plt.plot(x, y1_fp16, 'go--',label='fp16')

plt.xlabel('batchsize')
plt.ylabel('total compute time(s)')
plt.legend()
plt.show()

De lo anterior, podemos ver que el rendimiento de best es casi el mismo que int8, que es mejor que fp16.

Supongo que te gusta

Origin blog.csdn.net/zhou_438/article/details/112823818
Recomendado
Clasificación