各位的工作特别是双语这块,给rag开源社区带来了巨大贡献!目前在部署推理的时候,转为onnx过后精度不见损失,使用的opset版本为17,torch版本为2.1.2,onnx版本为:1.14.1。
onnx转换出来精度未见损失,但是将onnx转为trt时报warring:
[2024-04-05 03:07:58 WARNING] onnx2trt_utils.cpp:374: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
得到的trt模型,精度误差特别大,实际使用作为召回也只有3%左右准确度。请问这是因为这个模型中int64的原因嘛?但按理来说不应该这么大的精度损失,麻烦有空帮助解答一下,万分感谢。
转换代码如下:
model = AutoModel.from_pretrained('./bce-emb')
def make_train_dummy_input(seq_len):
org_input_ids = torch.tensor(
[[i for i in range(seq_len)]], dtype=torch.int32)
org_input_mask = torch.tensor([[1 for i in range(int(
seq_len/2))] + [1 for i in range(seq_len - int(seq_len/2))]], dtype=torch.int32)
return (org_input_ids.to(device), org_input_mask.to(device))
model.eval()
with torch.no_grad():
model=model.to(device)
org_dummy_input = make_train_dummy_input(64)
# print(org_dummy_input)
output = torch.onnx.export(model,
org_dummy_input,
"model17.onnx",
verbose=True,
opset_version=17,
# 需要注意顺序!不可随意改变, 否则结果与预期不符
input_names=[
'input_ids', 'attention_mask'],
# 需要注意顺序, 否则在推理阶段可能用错output_names
output_names=['logits'],
do_constant_folding=True,
dynamic_axes={"input_ids": {0: "batch_size", 1: "sequence_length"},
"attention_mask": {0: "batch_size", 1: "sequence_length"},
"logits": {0: "batch_size"}
})
[["what is panda", "panda is an animal"]] 能得到和pytorch一致的推理结果。
但在执行[["what is panda", "panda is an animal"],["what is panda", "panda is an animal"] ]时triton推理出来未经处理的结果和pytorch完全不一致。就很奇怪... 请问对于rerank有没有开源的onnx或者plan模型呢?如果我解决上述问题也愿意贡献可直接使用的转换模型。
如能解答万分感谢!
各位的工作特别是双语这块,给rag开源社区带来了巨大贡献!目前在部署推理的时候,转为onnx过后精度不见损失,使用的opset版本为17,torch版本为2.1.2,onnx版本为:1.14.1。 onnx转换出来精度未见损失,但是将onnx转为trt时报warring:
[2024-04-05 03:07:58 WARNING] onnx2trt_utils.cpp:374: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
得到的trt模型,精度误差特别大,实际使用作为召回也只有3%左右准确度。请问这是因为这个模型中int64的原因嘛?但按理来说不应该这么大的精度损失,麻烦有空帮助解答一下,万分感谢。 转换代码如下:trt转换如下:环境为nvcr.io/nvidia/tensorrt:23.06-py3 nvidia的官方docker,tensorrt版本为8.6.1。 trt转换cli:
log信息如下:
查看过log信息,有些异常的就只有INT64转为INT32的warring。请问你们遇到过这种问题吗?能提供一些参考的思路么 万分感谢。
同样在进行bce-rerank转换时,得到的plan模型,在推理单句时:
[["what is panda", "panda is an animal"]] 能得到和pytorch一致的推理结果。 但在执行[["what is panda", "panda is an animal"],["what is panda", "panda is an animal"] ]时triton推理出来未经处理的结果和pytorch完全不一致。就很奇怪... 请问对于rerank有没有开源的onnx或者plan模型呢?如果我解决上述问题也愿意贡献可直接使用的转换模型。 如能解答万分感谢!