首页 > 解决方案 > 在内存和预加载语言模型中运行 Fairseq

问题描述

我在命令行中运行 Fairseq。Fairseq 即时加载语言模型并进行翻译。它工作正常,但加载模型和进行翻译需要时间。我在想,如果我们将 Fairseq 作为内存服务运行并预加载所有语言模型,那么运行该服务并进行翻译会很快。

我的问题是,

  1. 如果我们将 Fairseq 作为内存服务运行并预加载语言模型,效率会更高吗?
  2. 我们可以期待多少效率提升?
  3. 实现这样一个内存中的 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_pretrainedhttps ://github.com/pytorch/fairseq/blob/579a48f4be3876082ea646880061a98c94357af1/fairseq/models/fairseq_model.py#L237

预加载后,您可以在没有命令行的情况下重复使用。

如果要使用 gpu,请记住执行:model.to('cuda')

当然,如果您预加载它会更有效。对于一个相当大的模型,加载到内存需要几秒钟。


推荐阅读