fairseq-generate 를 사용할 때 아래와 같이 RuntimeError: Mask Type should be defined 에러가 떴다.
실행:
# test
fairseq-generate fairseq_processed/ \
--path fairseq_train/checkpoint_best.pt \
--source-lang noise \
--target-lang clean \
--task translation \
--batch-size 10
에러:
Traceback (most recent call last):
File "/home/sujinkwon/anaconda3/envs/MThw1/bin/fairseq-generate", line 8, in <module>
sys.exit(cli_main())
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq_cli/generate.py", line 413, in cli_main
main(args)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq_cli/generate.py", line 50, in main
return _main(cfg, sys.stdout)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq_cli/generate.py", line 201, in _main
hypos = task.inference_step(
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/tasks/fairseq_task.py", line 540, in inference_step
return generator.generate(
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/sequence_generator.py", line 204, in generate
return self._generate(sample, **kwargs)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/sequence_generator.py", line 274, in _generate
encoder_outs = self.model.forward_encoder(net_input)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/sequence_generator.py", line 801, in forward_encoder
return [model.encoder.forward_torchscript(net_input) for model in self.models]
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/sequence_generator.py", line 801, in <listcomp>
return [model.encoder.forward_torchscript(net_input) for model in self.models]
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/models/fairseq_encoder.py", line 55, in forward_torchscript
return self.forward_non_torchscript(net_input)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/models/fairseq_encoder.py", line 62, in forward_non_torchscript
return self.forward(**encoder_input)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/models/transformer/transformer_encoder.py", line 165, in forward
return self.forward_scriptable(
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/models/transformer/transformer_encoder.py", line 294, in forward_scriptable
lr = layer(x, encoder_padding_mask=encoder_padding_mask_out)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "/home/sujinkwon/anaconda3/envs/MThw1/lib/python3.10/site-packages/fairseq/modules/transformer_layer.py", line 319, in forward
output = torch._transformer_encoder_layer_fwd(
RuntimeError: Mask Type should be defined
이 에러는 버전 문제로 생긴 에러이다.
pytorch 버전을 1.12.1+cu116
으로 낮추고, fairseq 버전도 0.12.2
로 해주니 에러가 안나고 돌아갔다.
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install fairseq==0.12.2
[Reference]