diff --git a/docs/conf.py b/docs/conf.py index 0c3fd5aa1..7239bd3c1 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -60,9 +60,9 @@ github_doc_root = 'https://github.com/pytorch/fairseq/tree/master/docs/' # built documents. # # The short X.Y version. -version = '0.7.0' +version = '0.7.1' # The full version, including alpha/beta/rc tags. -release = '0.7.0' +release = '0.7.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/fairseq/__init__.py b/fairseq/__init__.py index 7e9595f60..c3f174e67 100644 --- a/fairseq/__init__.py +++ b/fairseq/__init__.py @@ -6,7 +6,7 @@ # can be found in the PATENTS file in the same directory. __all__ = ['pdb'] -__version__ = '0.7.0' +__version__ = '0.7.1' import fairseq.criterions import fairseq.models diff --git a/fairseq/data/audio/__init__.py b/fairseq/data/audio/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/fairseq/trainer.py b/fairseq/trainer.py index 220eb8142..7e0dcd27b 100644 --- a/fairseq/trainer.py +++ b/fairseq/trainer.py @@ -233,11 +233,11 @@ class Trainer(object): # forward and backward pass logging_outputs, sample_sizes, ooms = [], [], 0 for i, sample in enumerate(samples): - sample = self._prepare_sample(sample, self.args.fp16) + sample = self._prepare_sample(sample) if sample is None: # when sample is None, run forward/backward on a dummy batch # and ignore the resulting gradients - sample = self._prepare_sample(self._dummy_batch, self.args.fp16) + sample = self._prepare_sample(self._dummy_batch) ignore_grad = True else: ignore_grad = False @@ -381,9 +381,9 @@ class Trainer(object): self.model.eval() self.criterion.eval() - sample = self._prepare_sample(sample, self.args.fp16) + sample = self._prepare_sample(sample) if sample is None: - sample = self._prepare_sample(self._dummy_batch, self.args.fp16) + sample = self._prepare_sample(self._dummy_batch) ignore_results = True else: ignore_results = False @@ -488,7 +488,7 @@ class Trainer(object): self._num_updates = num_updates self.lr_step_update() - def _prepare_sample(self, sample, fp16): + def _prepare_sample(self, sample): if sample is None or len(sample) == 0: return None @@ -500,7 +500,10 @@ class Trainer(object): return t.half() return t - return utils.apply(apply_half, sample) if fp16 else sample + if self.args.fp16: + sample = utils.apply_to_sample(apply_half, sample) + + return sample def _set_seed(self): # Set seed based on args.seed and the update number so that we get diff --git a/fairseq/utils.py b/fairseq/utils.py index 7af140027..473beb53c 100644 --- a/fairseq/utils.py +++ b/fairseq/utils.py @@ -31,26 +31,32 @@ def load_ensemble_for_inference(filenames, task, model_arg_overrides=None): ) -def apply(f, sample): +def apply_to_sample(f, sample): if len(sample) == 0: return {} - if torch.is_tensor(sample): - return f(sample) - elif isinstance(sample, dict): - return { - key: apply(f, value) - for key, value in sample.items() - } - elif isinstance(sample, list): - return [apply(f, x) for x in sample] - else: - return sample + + def _apply(x): + if torch.is_tensor(x): + return f(x) + elif isinstance(x, dict): + return { + key: _apply(value) + for key, value in x.items() + } + elif isinstance(x, list): + return [_apply(x) for x in x] + else: + return x + + return _apply(sample) def move_to_cuda(sample): + def _move_to_cuda(tensor): - return tensor.cuda() - return apply(_move_to_cuda, sample) + return tensor.cuda() + + return apply_to_sample(_move_to_cuda, sample) INCREMENTAL_STATE_INSTANCE_ID = defaultdict(lambda: 0) diff --git a/setup.py b/setup.py index c2cc7a9c8..a15f3b3a9 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ bleu = Extension( setup( name='fairseq', - version='0.7.0', + version='0.7.1', description='Facebook AI Research Sequence-to-Sequence Toolkit', url='https://github.com/pytorch/fairseq', classifiers=[ @@ -40,6 +40,7 @@ setup( 'Topic :: Scientific/Engineering :: Artificial Intelligence', ], long_description=readme, + long_description_content_type='text/markdown', install_requires=[ 'cffi', 'numpy',