如何减少来自 transformer 的 Helsinki-NLP/opus-mt-es-en(翻译模型)的推理时间
How to reduce the inference time of Helsinki-NLP/opus-mt-es-en (translation model) from transformer
目前 Helsinki-NLP/opus-mt-es-en 模型从 transformer 推断需要大约 1.5 秒。怎样才能减少呢?
此外,当尝试将其转换为 onxx 运行时时出现此错误:
ValueError: Unrecognized configuration class <class 'transformers.models.marian.configuration_marian.MarianConfig'> for this kind of AutoModel: AutoModel.
Model type should be one of RetriBertConfig, MT5Config, T5Config, DistilBertConfig, AlbertConfig, CamembertConfig, XLMRobertaConfig, BartConfig, LongformerConfig, RobertaConfig, LayoutLMConfig, SqueezeBertConfig, BertConfig, OpenAIGPTConfig, GPT2Config, MobileBertConfig, TransfoXLConfig, XLNetConfig, FlaubertConfig, FSMTConfig, XLMConfig, CTRLConfig, ElectraConfig, ReformerConfig, FunnelConfig, LxmertConfig, BertGenerationConfig, DebertaConfig, DPRConfig, XLMProphetNetConfig, ProphetNetConfig, MPNetConfig, TapasConfig.
是否可以将其转换为 onxx 运行时?
OPUS 模型最初是用 Marian which is a highly optimized toolkit for machine translation written fully in C++. Unlike PyTorch, it does have the ambition to be a general deep learning toolkit, so it can focus on MT efficiency. The Marian configurations and instructions on how to download the models are at https://github.com/Helsinki-NLP/OPUS-MT 训练的。
Huggingface 的变形金刚的 OPUS-MT 模型是从原始的 Marian 模型转换而来的,更多的是用于原型设计和分析模型,而不是在类似生产的设置中使用它们进行翻译。
运行 Marian 中的模型肯定会比 Python 中的模型快得多,而且肯定比用 onxx 运行 时间将变形金刚黑客攻击到 运行 容易得多。 Marian 还提供了进一步的技巧来加快翻译速度,例如通过模型量化,但这是以牺牲翻译质量为代价的。
对于 Marian 和变形金刚,如果使用 GPU 或在解码期间缩小波束宽度(变形金刚中 generate
方法中的属性 num_beams
),则可以加快速度。
加快翻译速度的一种方法是(如果可能)指出
源语言:
导入库并创建模型后:
from easynmt import EasyNMT
model = EasyNMT('opus-mt')
然后(如果可能)提供源语言:
translated_word = model.translate("Coucou!", source_lang="fr", target_lang="en" )
print(translated_word) # Hello!
与不提供源语言相比,这会获得更好的翻译结果(对于短句)并且速度更快:
translated_word = model.translate("Coucou!", target_lang="en")
print(translated_word) # He's gone!
官方页面上的更多详细信息:https://github.com/UKPLab/EasyNMT
享受
目前 Helsinki-NLP/opus-mt-es-en 模型从 transformer 推断需要大约 1.5 秒。怎样才能减少呢? 此外,当尝试将其转换为 onxx 运行时时出现此错误:
ValueError: Unrecognized configuration class <class 'transformers.models.marian.configuration_marian.MarianConfig'> for this kind of AutoModel: AutoModel. Model type should be one of RetriBertConfig, MT5Config, T5Config, DistilBertConfig, AlbertConfig, CamembertConfig, XLMRobertaConfig, BartConfig, LongformerConfig, RobertaConfig, LayoutLMConfig, SqueezeBertConfig, BertConfig, OpenAIGPTConfig, GPT2Config, MobileBertConfig, TransfoXLConfig, XLNetConfig, FlaubertConfig, FSMTConfig, XLMConfig, CTRLConfig, ElectraConfig, ReformerConfig, FunnelConfig, LxmertConfig, BertGenerationConfig, DebertaConfig, DPRConfig, XLMProphetNetConfig, ProphetNetConfig, MPNetConfig, TapasConfig.
是否可以将其转换为 onxx 运行时?
OPUS 模型最初是用 Marian which is a highly optimized toolkit for machine translation written fully in C++. Unlike PyTorch, it does have the ambition to be a general deep learning toolkit, so it can focus on MT efficiency. The Marian configurations and instructions on how to download the models are at https://github.com/Helsinki-NLP/OPUS-MT 训练的。
Huggingface 的变形金刚的 OPUS-MT 模型是从原始的 Marian 模型转换而来的,更多的是用于原型设计和分析模型,而不是在类似生产的设置中使用它们进行翻译。
运行 Marian 中的模型肯定会比 Python 中的模型快得多,而且肯定比用 onxx 运行 时间将变形金刚黑客攻击到 运行 容易得多。 Marian 还提供了进一步的技巧来加快翻译速度,例如通过模型量化,但这是以牺牲翻译质量为代价的。
对于 Marian 和变形金刚,如果使用 GPU 或在解码期间缩小波束宽度(变形金刚中 generate
方法中的属性 num_beams
),则可以加快速度。
加快翻译速度的一种方法是(如果可能)指出 源语言:
导入库并创建模型后:
from easynmt import EasyNMT
model = EasyNMT('opus-mt')
然后(如果可能)提供源语言:
translated_word = model.translate("Coucou!", source_lang="fr", target_lang="en" )
print(translated_word) # Hello!
与不提供源语言相比,这会获得更好的翻译结果(对于短句)并且速度更快:
translated_word = model.translate("Coucou!", target_lang="en")
print(translated_word) # He's gone!
官方页面上的更多详细信息:https://github.com/UKPLab/EasyNMT
享受