早有耳闻,clip模型会在fp16下发生NAN的问题,但是今天基于2080Ti测试,发现在单精度下的tensorrt推理同样存在NAN的问题,我甚至一度怀疑是tensorrt的推理代码有问题。
之后,决定从python代码的角度去寻找问题的答案,经过单步调试,发现,在transformers库的/modeling_clip.py文件的 _build_causal_attention_mask()函数中,存在inf的输入,接着,把它用-10000替代。
在转换为onnx后,对比onnxruntime和原始torch的推理结果,一致。然后,对比tensorrt的输出结果,符合预期。
这一方法简单粗暴,确实有蒙的成分。但是,代码改动量小。。