首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fairseq变换模型不工作(浮点不能转换为long)

Fairseq变换模型不工作(浮点不能转换为long)
EN

Stack Overflow用户
提问于 2021-01-03 03:26:22
回答 1查看 1.2K关注 0票数 2

我已经在一台新机器上安装了python 3.8,pytorch 1.7和fairseq 0.10.1,然后从运行python 3.6,pytorch 1.4和fairseq 0.9.0的机器上复制脚本和模型。

模型已加载并准备好,其中包含:

代码语言:javascript
复制
model = TransformerModel.from_pretrained(...)
model.eval()
model.cuda()

然后与以下命令一起使用:

代码语言:javascript
复制
inputs = [model.binarize(encode(src, str)) for str in texts]
batched_hypos = model.generate(inputs, beam)

inputs看起来像[tensor([ 116, 1864, 181, 6, 2]), tensor([ 5, 432, 7, 2])]

它断言,调用堆栈的最后一位是:

代码语言:javascript
复制
  ...
    batched_hypos = model.generate(inputs, beam)
  File "/path/to/fairseq/hub_utils.py", line 125, in generate
    sample = self._build_sample(tokens)
  File "/path/to/fairseq/hub_utils.py", line 196, in _build_sample
    assert torch.is_tensor(src_tokens)

如果我在命令行中使用fairseq-interactive,它将失败,并返回RuntimeError: result type Float can't be cast to the desired output type Long。(下面是完整堆栈跟踪。)

由于使用cli也失败了,我的直觉是我的模型是用fairseq 0.9.x构建的,不能与fairseq 0.10.x一起使用。如果是这样的话,是否有一种方法可以更新模型(即不必重新训练模型)。如果不是,问题可能是什么,我如何解决它?

顺便说一句,如果我将--cpu添加到命令行参数中,也会出现完全相同的错误,因此GPU或cuda版本可能会被排除。

代码语言:javascript
复制
$ fairseq-interactive path/to/dicts --path models/big.pt --source-lang ja --target-lang en  --remove-bpe sentencepiece


  File "/path/to/bin/fairseq-interactive", line 11, in <module>
    sys.exit(cli_main())
  File "/path/to/lib/python3.8/site-packages/fairseq_cli/interactive.py", line 190, in cli_main
    main(args)
  File "/path/to/lib/python3.8/site-packages/fairseq_cli/interactive.py", line 149, in main
    translations = task.inference_step(generator, models, sample)
  File "/path/to/lib/python3.8/site-packages/fairseq/tasks/fairseq_task.py", line 265, in inference_step
    return generator.generate(models, sample, prefix_tokens=prefix_tokens)
  File "/path/to/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 26, in decorate_context
    return func(*args, **kwargs)
  File "/path/to/lib/python3.8/site-packages/fairseq/sequence_generator.py", line 113, in generate
    return self._generate(model, sample, **kwargs)
  File "/path/to/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 26, in decorate_context
    return func(*args, **kwargs)
  File "/path/to/lib/python3.8/site-packages/fairseq/sequence_generator.py", line 376, in _generate
    cand_scores, cand_indices, cand_beams = self.search.step(
  File "/path/to/lib/python3.8/site-packages/fairseq/search.py", line 81, in step
    torch.div(self.indices_buf, vocab_size, out=self.beams_buf)
RuntimeError: result type Float can't be cast to the desired output type Long
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 19:57:41

(更新:以下说明在不支持GPU的情况下安装pytorch。回到使用pytorch通道,获得了GPU支持,但fairseq再次中断。我还没有破解密码,让一切都在一起工作。)

我决定自己回答,而不是删除问题,因为那些错误消息被证明是无用的(礼貌地说),所以当他们在谷歌上搜索时,它可能会对其他人有所帮助。

首先:我实际上安装了fairseq 0.9.0。尽管0.10.1在conda-forge上排在第一位。这显然意味着我的预感是错的,还有一些更隐蔽的因素在起作用。然后,我无法卸载或升级到工作。因此,我决定彻底清除蟒蛇,然后重新开始。

其次,我在conda文档中注意到一些很深的东西,说要一次性安装所有东西,以避免冲突。这不是我对包管理器应该如何工作的定义,但不管怎样。

第三,我创建了一个“测试”conda环境,而不是使用"base“缺省值。我怀疑这与让它工作没有任何关系,但我提到它只是为了以防万一。

因此,我成功的安装命令是:

代码语言:javascript
复制
conda install -c conda-forge pytorch cudatoolkit=11.0 nvidia-apex fairseq==0.10.1 sentencepiece

这样就得到了python 3.7.9 (而不是操作系统安装的3.8.5 )、pytorch 1.7.1、fairseq 0.10.1和判决书0.1.92。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65543178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档