|
<p align="center"> |
|
<img src="docs/fairseq_logo.png" width="150"> |
|
<br /> |
|
<br /> |
|
<a href="https://github.com/pytorch/fairseq/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a> |
|
<a href="https://github.com/pytorch/fairseq/releases"><img alt="Latest Release" src="https://img.shields.io/github/release/pytorch/fairseq.svg" /></a> |
|
<a href="https://github.com/pytorch/fairseq/actions?query=workflow:build"><img alt="Build Status" src="https://github.com/pytorch/fairseq/workflows/build/badge.svg" /></a> |
|
<a href="https://fairseq.readthedocs.io/en/latest/?badge=latest"><img alt="Documentation Status" src="https://readthedocs.org/projects/fairseq/badge/?version=latest" /></a> |
|
</p> |
|
|
|
-------------------------------------------------------------------------------- |
|
|
|
Fairseq(-py) is a sequence modeling toolkit that allows researchers and |
|
developers to train custom models for translation, summarization, language |
|
modeling and other text generation tasks. |
|
|
|
We provide reference implementations of various sequence modeling papers: |
|
|
|
<details><summary>List of implemented papers</summary><p> |
|
|
|
* **Convolutional Neural Networks (CNN)** |
|
+ [Language Modeling with Gated Convolutional Networks (Dauphin et al., 2017)](examples/language_model/conv_lm/README.md) |
|
+ [Convolutional Sequence to Sequence Learning (Gehring et al., 2017)](examples/conv_seq2seq/README.md) |
|
+ [Classical Structured Prediction Losses for Sequence to Sequence Learning (Edunov et al., 2018)](https://github.com/pytorch/fairseq/tree/classic_seqlevel) |
|
+ [Hierarchical Neural Story Generation (Fan et al., 2018)](examples/stories/README.md) |
|
+ [wav2vec: Unsupervised Pre-training for Speech Recognition (Schneider et al., 2019)](examples/wav2vec/README.md) |
|
* **LightConv and DynamicConv models** |
|
+ [Pay Less Attention with Lightweight and Dynamic Convolutions (Wu et al., 2019)](examples/pay_less_attention_paper/README.md) |
|
* **Long Short-Term Memory (LSTM) networks** |
|
+ Effective Approaches to Attention-based Neural Machine Translation (Luong et al., 2015) |
|
* **Transformer (self-attention) networks** |
|
+ Attention Is All You Need (Vaswani et al., 2017) |
|
+ [Scaling Neural Machine Translation (Ott et al., 2018)](examples/scaling_nmt/README.md) |
|
+ [Understanding Back-Translation at Scale (Edunov et al., 2018)](examples/backtranslation/README.md) |
|
+ [Adaptive Input Representations for Neural Language Modeling (Baevski and Auli, 2018)](examples/language_model/README.adaptive_inputs.md) |
|
+ [Lexically constrained decoding with dynamic beam allocation (Post & Vilar, 2018)](examples/constrained_decoding/README.md) |
|
+ [Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (Dai et al., 2019)](examples/truncated_bptt/README.md) |
|
+ [Adaptive Attention Span in Transformers (Sukhbaatar et al., 2019)](examples/adaptive_span/README.md) |
|
+ [Mixture Models for Diverse Machine Translation: Tricks of the Trade (Shen et al., 2019)](examples/translation_moe/README.md) |
|
+ [RoBERTa: A Robustly Optimized BERT Pretraining Approach (Liu et al., 2019)](examples/roberta/README.md) |
|
+ [Facebook FAIR's WMT19 News Translation Task Submission (Ng et al., 2019)](examples/wmt19/README.md) |
|
+ [Jointly Learning to Align and Translate with Transformer Models (Garg et al., 2019)](examples/joint_alignment_translation/README.md ) |
|
+ [Multilingual Denoising Pre-training for Neural Machine Translation (Liu et at., 2020)](examples/mbart/README.md) |
|
+ [Neural Machine Translation with Byte-Level Subwords (Wang et al., 2020)](examples/byte_level_bpe/README.md) |
|
+ [Unsupervised Quality Estimation for Neural Machine Translation (Fomicheva et al., 2020)](examples/unsupervised_quality_estimation/README.md) |
|
+ [wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations (Baevski et al., 2020)](examples/wav2vec/README.md) |
|
+ [Generating Medical Reports from Patient-Doctor Conversations Using Sequence-to-Sequence Models (Enarvi et al., 2020)](examples/pointer_generator/README.md) |
|
+ [Linformer: Self-Attention with Linear Complexity (Wang et al., 2020)](examples/linformer/README.md) |
|
+ [Cross-lingual Retrieval for Iterative Self-Supervised Training (Tran et al., 2020)](examples/criss/README.md) |
|
+ [Deep Transformers with Latent Depth (Li et al., 2020)](examples/latent_depth/README.md) |
|
+ [Unsupervised Cross-lingual Representation Learning for Speech Recognition (Conneau et al., 2020)](https://arxiv.org/abs/2006.13979) |
|
+ [Robust wav2vec 2.0: Analyzing Domain Shift in Self-Supervised Pre-Training (Hsu, et al., 2021)](https://arxiv.org/abs/2104.01027) |
|
+ [Unsupervised Speech Recognition (Baevski, et al., 2021)](https://arxiv.org/abs/2105.11084) |
|
* **Non-autoregressive Transformers** |
|
+ Non-Autoregressive Neural Machine Translation (Gu et al., 2017) |
|
+ Deterministic Non-Autoregressive Neural Sequence Modeling by Iterative Refinement (Lee et al. 2018) |
|
+ Insertion Transformer: Flexible Sequence Generation via Insertion Operations (Stern et al. 2019) |
|
+ Mask-Predict: Parallel Decoding of Conditional Masked Language Models (Ghazvininejad et al., 2019) |
|
+ [Levenshtein Transformer (Gu et al., 2019)](examples/nonautoregressive_translation/README.md) |
|
* **Finetuning** |
|
+ [Better Fine-Tuning by Reducing Representational Collapse (Aghajanyan et al. 2020)](examples/rxf/README.md) |
|
|
|
</p></details> |
|
|
|
### What's New: |
|
|
|
* September 2021 [`master` branch renamed to `main`](https://github.com/github/renaming). |
|
* July 2021 [Released DrNMT code](examples/discriminative_reranking_nmt/README.md) |
|
* July 2021 [Released Robust wav2vec 2.0 model](examples/wav2vec/README.md) |
|
* June 2021 [Released XLMR-XL and XLMR-XXL models](examples/xlmr/README.md) |
|
* May 2021 [Released Unsupervised Speech Recognition code](examples/wav2vec/unsupervised/README.md) |
|
* March 2021 [Added full parameter and optimizer state sharding + CPU offloading](examples/fully_sharded_data_parallel/README.md) |
|
* February 2021 [Added LASER training code](examples/laser/README.md) |
|
* December 2020: [Added Adaptive Attention Span code](examples/adaptive_span/README.md) |
|
* December 2020: [GottBERT model and code released](examples/gottbert/README.md) |
|
* November 2020: Adopted the [Hydra](https://github.com/facebookresearch/hydra) configuration framework |
|
* [see documentation explaining how to use it for new and existing projects](docs/hydra_integration.md) |
|
* November 2020: [fairseq 0.10.0 released](https://github.com/pytorch/fairseq/releases/tag/v0.10.0) |
|
* October 2020: [Added R3F/R4F (Better Fine-Tuning) code](examples/rxf/README.md) |
|
* October 2020: [Deep Transformer with Latent Depth code released](examples/latent_depth/README.md) |
|
* October 2020: [Added CRISS models and code](examples/criss/README.md) |
|
|
|
<details><summary>Previous updates</summary><p> |
|
|
|
* September 2020: [Added Linformer code](examples/linformer/README.md) |
|
* September 2020: [Added pointer-generator networks](examples/pointer_generator/README.md) |
|
* August 2020: [Added lexically constrained decoding](examples/constrained_decoding/README.md) |
|
* August 2020: [wav2vec2 models and code released](examples/wav2vec/README.md) |
|
* July 2020: [Unsupervised Quality Estimation code released](examples/unsupervised_quality_estimation/README.md) |
|
* May 2020: [Follow fairseq on Twitter](https://twitter.com/fairseq) |
|
* April 2020: [Monotonic Multihead Attention code released](examples/simultaneous_translation/README.md) |
|
* April 2020: [Quant-Noise code released](examples/quant_noise/README.md) |
|
* April 2020: [Initial model parallel support and 11B parameters unidirectional LM released](examples/megatron_11b/README.md) |
|
* March 2020: [Byte-level BPE code released](examples/byte_level_bpe/README.md) |
|
* February 2020: [mBART model and code released](examples/mbart/README.md) |
|
* February 2020: [Added tutorial for back-translation](https://github.com/pytorch/fairseq/tree/main/examples/backtranslation#training-your-own-model-wmt18-english-german) |
|
* December 2019: [fairseq 0.9.0 released](https://github.com/pytorch/fairseq/releases/tag/v0.9.0) |
|
* November 2019: [VizSeq released (a visual analysis toolkit for evaluating fairseq models)](https://facebookresearch.github.io/vizseq/docs/getting_started/fairseq_example) |
|
* November 2019: [CamemBERT model and code released](examples/camembert/README.md) |
|
* November 2019: [BART model and code released](examples/bart/README.md) |
|
* November 2019: [XLM-R models and code released](examples/xlmr/README.md) |
|
* September 2019: [Nonautoregressive translation code released](examples/nonautoregressive_translation/README.md) |
|
* August 2019: [WMT'19 models released](examples/wmt19/README.md) |
|
* July 2019: fairseq relicensed under MIT license |
|
* July 2019: [RoBERTa models and code released](examples/roberta/README.md) |
|
* June 2019: [wav2vec models and code released](examples/wav2vec/README.md) |
|
|
|
</p></details> |
|
|
|
### Features: |
|
|
|
* multi-GPU training on one machine or across multiple machines (data and model parallel) |
|
* fast generation on both CPU and GPU with multiple search algorithms implemented: |
|
+ beam search |
|
+ Diverse Beam Search ([Vijayakumar et al., 2016](https://arxiv.org/abs/1610.02424)) |
|
+ sampling (unconstrained, top-k and top-p/nucleus) |
|
+ [lexically constrained decoding](examples/constrained_decoding/README.md) (Post & Vilar, 2018) |
|
* [gradient accumulation](https://fairseq.readthedocs.io/en/latest/getting_started.html#large-mini-batch-training-with-delayed-updates) enables training with large mini-batches even on a single GPU |
|
* [mixed precision training](https://fairseq.readthedocs.io/en/latest/getting_started.html#training-with-half-precision-floating-point-fp16) (trains faster with less GPU memory on [NVIDIA tensor cores](https://developer.nvidia.com/tensor-cores)) |
|
* [extensible](https://fairseq.readthedocs.io/en/latest/overview.html): easily register new models, criterions, tasks, optimizers and learning rate schedulers |
|
* [flexible configuration](docs/hydra_integration.md) based on [Hydra](https://github.com/facebookresearch/hydra) allowing a combination of code, command-line and file based configuration |
|
* [full parameter and optimizer state sharding](examples/fully_sharded_data_parallel/README.md) |
|
* [offloading parameters to CPU](examples/fully_sharded_data_parallel/README.md) |
|
|
|
We also provide [pre-trained models for translation and language modeling](#pre-trained-models-and-examples) |
|
with a convenient `torch.hub` interface: |
|
|
|
``` python |
|
en2de = torch.hub.load('pytorch/fairseq', 'transformer.wmt19.en-de.single_model') |
|
en2de.translate('Hello world', beam=5) |
|
# 'Hallo Welt' |
|
``` |
|
|
|
See the PyTorch Hub tutorials for [translation](https://pytorch.org/hub/pytorch_fairseq_translation/) |
|
and [RoBERTa](https://pytorch.org/hub/pytorch_fairseq_roberta/) for more examples. |
|
|
|
# Requirements and Installation |
|
|
|
* [PyTorch](http://pytorch.org/) version >= 1.5.0 |
|
* Python version >= 3.6 |
|
* For training new models, you'll also need an NVIDIA GPU and [NCCL](https://github.com/NVIDIA/nccl) |
|
* **To install fairseq** and develop locally: |
|
|
|
``` bash |
|
git clone https://github.com/pytorch/fairseq |
|
cd fairseq |
|
pip install --editable ./ |
|
|
|
# on MacOS: |
|
# CFLAGS="-stdlib=libc++" pip install --editable ./ |
|
|
|
# to install the latest stable release (0.10.x) |
|
# pip install fairseq |
|
``` |
|
|
|
* **For faster training** install NVIDIA's [apex](https://github.com/NVIDIA/apex) library: |
|
|
|
``` bash |
|
git clone https://github.com/NVIDIA/apex |
|
cd apex |
|
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" \ |
|
--global-option="--deprecated_fused_adam" --global-option="--xentropy" \ |
|
--global-option="--fast_multihead_attn" ./ |
|
``` |
|
|
|
* **For large datasets** install [PyArrow](https://arrow.apache.org/docs/python/install.html#using-pip): `pip install pyarrow` |
|
* If you use Docker make sure to increase the shared memory size either with `--ipc=host` or `--shm-size` |
|
as command line options to `nvidia-docker run` . |
|
|
|
# Getting Started |
|
|
|
The [full documentation](https://fairseq.readthedocs.io/) contains instructions |
|
for getting started, training new models and extending fairseq with new model |
|
types and tasks. |
|
|
|
# Pre-trained models and examples |
|
|
|
We provide pre-trained models and pre-processed, binarized test sets for several tasks listed below, |
|
as well as example training and evaluation commands. |
|
|
|
* [Translation](examples/translation/README.md): convolutional and transformer models are available |
|
* [Language Modeling](examples/language_model/README.md): convolutional and transformer models are available |
|
|
|
We also have more detailed READMEs to reproduce results from specific papers: |
|
|
|
* [Cross-lingual Retrieval for Iterative Self-Supervised Training (Tran et al., 2020)](examples/criss/README.md) |
|
* [wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations (Baevski et al., 2020)](examples/wav2vec/README.md) |
|
* [Unsupervised Quality Estimation for Neural Machine Translation (Fomicheva et al., 2020)](examples/unsupervised_quality_estimation/README.md) |
|
* [Training with Quantization Noise for Extreme Model Compression ({Fan*, Stock*} et al., 2020)](examples/quant_noise/README.md) |
|
* [Neural Machine Translation with Byte-Level Subwords (Wang et al., 2020)](examples/byte_level_bpe/README.md) |
|
* [Multilingual Denoising Pre-training for Neural Machine Translation (Liu et at., 2020)](examples/mbart/README.md) |
|
* [Reducing Transformer Depth on Demand with Structured Dropout (Fan et al., 2019)](examples/layerdrop/README.md) |
|
* [Jointly Learning to Align and Translate with Transformer Models (Garg et al., 2019)](examples/joint_alignment_translation/README.md) |
|
* [Levenshtein Transformer (Gu et al., 2019)](examples/nonautoregressive_translation/README.md) |
|
* [Facebook FAIR's WMT19 News Translation Task Submission (Ng et al., 2019)](examples/wmt19/README.md) |
|
* [RoBERTa: A Robustly Optimized BERT Pretraining Approach (Liu et al., 2019)](examples/roberta/README.md) |
|
* [wav2vec: Unsupervised Pre-training for Speech Recognition (Schneider et al., 2019)](examples/wav2vec/README.md) |
|
* [Mixture Models for Diverse Machine Translation: Tricks of the Trade (Shen et al., 2019)](examples/translation_moe/README.md) |
|
* [Pay Less Attention with Lightweight and Dynamic Convolutions (Wu et al., 2019)](examples/pay_less_attention_paper/README.md) |
|
* [Understanding Back-Translation at Scale (Edunov et al., 2018)](examples/backtranslation/README.md) |
|
* [Classical Structured Prediction Losses for Sequence to Sequence Learning (Edunov et al., 2018)](https://github.com/pytorch/fairseq/tree/classic_seqlevel) |
|
* [Hierarchical Neural Story Generation (Fan et al., 2018)](examples/stories/README.md) |
|
* [Scaling Neural Machine Translation (Ott et al., 2018)](examples/scaling_nmt/README.md) |
|
* [Convolutional Sequence to Sequence Learning (Gehring et al., 2017)](examples/conv_seq2seq/README.md) |
|
* [Language Modeling with Gated Convolutional Networks (Dauphin et al., 2017)](examples/language_model/README.conv.md) |
|
|
|
# Join the fairseq community |
|
|
|
* Twitter: https://twitter.com/fairseq |
|
* Facebook page: https://www.facebook.com/groups/fairseq.users |
|
* Google group: https://groups.google.com/forum/#!forum/fairseq-users |
|
|
|
# License |
|
|
|
fairseq(-py) is MIT-licensed. |
|
The license applies to the pre-trained models as well. |
|
|
|
# Citation |
|
|
|
Please cite as: |
|
|
|
``` bibtex |
|
@inproceedings{ott2019fairseq, |
|
title = {fairseq: A Fast, Extensible Toolkit for Sequence Modeling}, |
|
author = {Myle Ott and Sergey Edunov and Alexei Baevski and Angela Fan and Sam Gross and Nathan Ng and David Grangier and Michael Auli}, |
|
booktitle = {Proceedings of NAACL-HLT 2019: Demonstrations}, |
|
year = {2019}, |
|
} |
|
``` |
|
|