whisper转onnx
只需要转化模型即可。(nn.module)
encoder
decoder
检测模型正确性:
import onnx
onnx_model = onnx.load("/home/mgtv/test_whisper/onnx/medium/whisper_decoder.onnx")
onnx.checker.check_model(onnx_model)
报错:ValueError: This protobuf of onnx model is too large (>2GB). Call check_model with model path instead.
错误原因:模型文件的大小超过了2GB,check_model函数在检查模型之前会将整个模型加载到内存中,所以对于超过2GB的模型,它将无法正常工作。
一些问题
runtimeonnx只支持输入numpy,float32.需要将decoding中的fp16设置为False
将Whisper模型转换为TensorRT需要以下步骤:
安装TensorRT库和依赖项。您需要从NVIDIA官方网站下载TensorRT软件包并按照官方文档进行安装。
使用Whisper库加载模型并将其转换为TensorRT可识别的格式。Whisper库提供了将模型导出为ONNX格式的功能,您可以使用ONNX-TensorRT转换器将其转换为TensorRT可识别的格式。
创建TensorRT引擎。您需要定义输入和输出张量的维度和数据类型,以及网络的配置选项(例如最大批处理大小和最大工作空间大小)。使用TensorRT API创建引擎对象并将其配置为使用您的模型。
使用引擎推理。使用TensorRT API将数据加载到输入张量中,然后使用引擎对象进行推理。最后,从输出张量中获取结果。
以下是一个示例代码片段,展示了如何使用TensorRT API创建引擎对象并进行推理:
点击查看代码
import tensorrt as trt
# 创建TensorRT引擎
with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.OnnxParser(network, TRT_LOGGER) as parser:
builder.max_workspace_size = 1 << 30 # 1 GB
builder.max_batch_size = 1
builder.fp16_mode = True
with open(onnx_model_file, 'rb') as model:
parser.parse(model.read())
engine = builder.build_cuda_engine(network)
# 推理
with engine.create_execution_context() as context:
input = np.random.randn(1, 3, 224, 224).astype(np.float16)
output = np.empty((1, 1000), dtype=np.float16)
bindings = [input, output]
results = do_inference(context, bindings=bindings)