facebookresearch/fairseq

Why inplace operation in `AdaptiveSoftmax`

Open

#760 opened on May 28, 2019

View on GitHub
 (6 comments) (1 reaction) (1 assignee)Python (6,224 forks)batch import
enhancementhelp wantedstale

Repository metrics

Stars
 (29,107 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

I used log_output for training purpose, but pytorch complains about inplace operation on backward.

For lines 204 and 205: https://github.com/pytorch/fairseq/blob/e6422528dae0b899848469efe2dc404c1e639ce9/fairseq/modules/adaptive_softmax.py#L200-L208

  1. why doing a copy_ on tailout
  2. why inplace add_

I changed to

tail_output = ...
... = self.lsm(tail_out) + tail_priors[idxs, i, None]

And it works for training.

Contributor guide