将seq2seqNLP模型转换为ONNX格式会对其性能产生负面影响吗?
我正在考虑将 ml NLP 模型转换为 ONNX 格式,以利用其速度提升(ONNX 运行时)。但是,我真的不明白新模型与旧模型相比有什么根本性的变化。另外,不知道有没有什么缺点。对此的任何想法将不胜感激。
回答
模型的精度性能将是相同的(仅考虑编码器和解码器的输出)。推理性能可能因您用于推理的方法而异(例如:贪婪搜索、波束搜索、top-k 和 top-p)。有关这方面的更多信息。
对于 onnx seq2seq 模型,您需要手动实现model.generate()方法。但是lib在实现贪婪搜索(对于onnx模型)方面做得很好。但是,大多数 NLP 生成模型通过波束搜索方法产生了良好的结果(您可以参考链接源了解 Huggingface 如何为其模型实现波束搜索)。不幸的是,对于 onnx 模型,您必须自己实现它。onnxt5
推理速度肯定会提高,如本笔记本中所示,onnx-runtime(示例在 bert 上)。您必须在 onnx-runtime 上分别运行编码器和解码器,并且可以利用 onnx-runtime。如果您想了解有关 onnx 及其运行时的更多信息,请参阅此链接。
更新:您可以参考fastT5库,它实现了greedy和beam searcht5。为bart看看这个问题。