问题描述
我在命令行中运行 Fairseq。 Fairseq 即时加载语言模型并进行翻译。它工作正常,但加载模型和进行翻译需要时间。我在想,如果我们将 Fairseq 作为内存服务运行并预加载所有语言模型,那么运行该服务并进行翻译会很快。
我的问题是,
非常感谢您的帮助。
解决方法
预加载模型存在问题:
https://github.com/pytorch/fairseq/issues/1694
对于自定义模型,下面的代码展示了如何在内存中预加载 fairseq 模型,这是一个官方示例,可以在:https://github.com/pytorch/fairseq/tree/master/examples/translation#example-usage-torchhub
from fairseq.models.transformer import TransformerModel
zh2en = TransformerModel.from_pretrained(
'/path/to/checkpoints',checkpoint_file='checkpoint_best.pt',data_name_or_path='data-bin/wmt17_zh_en_full',bpe='subword_nmt',bpe_codes='data-bin/wmt17_zh_en_full/zh.code'
)
zh2en.translate('你好 世界')
# 'Hello World'
您可以通过源代码找到有关方法 from_pretrained
的更多详细信息:https://github.com/pytorch/fairseq/blob/579a48f4be3876082ea646880061a98c94357af1/fairseq/models/fairseq_model.py#L237
预加载后,无需命令行即可重复使用。
如果你想使用gpu,记得执行:model.to('cuda')
。
当然,如果你预加载它会更有效率。对于一个非常大的模型,加载到内存需要几秒钟的时间。