我在命令行中运行 Fairseq。Fairseq 即时加载语言模型并进行翻译。它工作正常,但加载模型和进行翻译需要时间。我在想,如果我们将 Fairseq 作为内存服务运行并预加载所有语言模型,那么运行该服务并进行翻译会很快。
我的问题是,
- 如果我们将 Fairseq 作为内存服务运行并预加载语言模型,效率会更高吗?
- 我们可以期待多少效率提升?
- 实现这样一个内存中的 Fairseq 服务有多容易?
非常感谢您提供帮助。
我在命令行中运行 Fairseq。Fairseq 即时加载语言模型并进行翻译。它工作正常,但加载模型和进行翻译需要时间。我在想,如果我们将 Fairseq 作为内存服务运行并预加载所有语言模型,那么运行该服务并进行翻译会很快。
我的问题是,
非常感谢您提供帮助。
预加载模型存在问题:
https://github.com/pytorch/fairseq/issues/1694
对于自定义模型,下面的代码显示了如何在内存中预加载 fairseq 模型,这是一个官方示例,可以在以下位置找到:https ://github.com/pytorch/fairseq/tree/master/examples/translation#example-使用-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')
。
当然,如果您预加载它会更有效。对于一个相当大的模型,加载到内存需要几秒钟。