Spaces:
Runtime error
Runtime error
| Overview | |
| ======== | |
| Fairseq can be extended through user-supplied `plug-ins | |
| <https://en.wikipedia.org/wiki/Plug-in_(computing)>`_. We support five kinds of | |
| plug-ins: | |
| - :ref:`Models` define the neural network architecture and encapsulate all of the | |
| learnable parameters. | |
| - :ref:`Criterions` compute the loss function given the model outputs and targets. | |
| - :ref:`Tasks` store dictionaries and provide helpers for loading/iterating over | |
| Datasets, initializing the Model/Criterion and calculating the loss. | |
| - :ref:`Optimizers` update the Model parameters based on the gradients. | |
| - :ref:`Learning Rate Schedulers` update the learning rate over the course of | |
| training. | |
| **Training Flow** | |
| Given a ``model``, ``criterion``, ``task``, ``optimizer`` and ``lr_scheduler``, | |
| fairseq implements the following high-level training flow:: | |
| for epoch in range(num_epochs): | |
| itr = task.get_batch_iterator(task.dataset('train')) | |
| for num_updates, batch in enumerate(itr): | |
| task.train_step(batch, model, criterion, optimizer) | |
| average_and_clip_gradients() | |
| optimizer.step() | |
| lr_scheduler.step_update(num_updates) | |
| lr_scheduler.step(epoch) | |
| where the default implementation for ``task.train_step`` is roughly:: | |
| def train_step(self, batch, model, criterion, optimizer, **unused): | |
| loss = criterion(model, batch) | |
| optimizer.backward(loss) | |
| return loss | |
| **Registering new plug-ins** | |
| New plug-ins are *registered* through a set of ``@register`` function | |
| decorators, for example:: | |
| @register_model('my_lstm') | |
| class MyLSTM(FairseqEncoderDecoderModel): | |
| (...) | |
| Once registered, new plug-ins can be used with the existing :ref:`Command-line | |
| Tools`. See the Tutorial sections for more detailed walkthroughs of how to add | |
| new plug-ins. | |
| **Loading plug-ins from another directory** | |
| New plug-ins can be defined in a custom module stored in the user system. In | |
| order to import the module, and make the plugin available to *fairseq*, the | |
| command line supports the ``--user-dir`` flag that can be used to specify a | |
| custom location for additional modules to load into *fairseq*. | |
| For example, assuming this directory tree:: | |
| /home/user/my-module/ | |
| βββ __init__.py | |
| with ``__init__.py``:: | |
| from fairseq.models import register_model_architecture | |
| from fairseq.models.transformer import transformer_vaswani_wmt_en_de_big | |
| @register_model_architecture('transformer', 'my_transformer') | |
| def transformer_mmt_big(args): | |
| transformer_vaswani_wmt_en_de_big(args) | |
| it is possible to invoke the :ref:`fairseq-train` script with the new architecture with:: | |
| fairseq-train ... --user-dir /home/user/my-module -a my_transformer --task translation | |