NOTE
PyTorch Translate est désormais obsolète, veuillez utiliser fairseq à la place.
Translate est une bibliothèque de traduction automatique écrite en PyTorch. Il fournit une formation pour les modèles séquence à séquence. Translate s'appuie sur fairseq, une bibliothèque générale séquence à séquence, ce qui signifie que les modèles implémentés à la fois dans Translate et Fairseq peuvent être entraînés. Translate offre également la possibilité d'exporter certains modèles vers des graphiques Caffe2 via ONNX et de charger et exécuter ces modèles à partir de C++ à des fins de production. Actuellement, nous exportons séparément les composants (encodeur, décodeur) vers Caffe2 et la recherche de faisceaux est implémentée en C++. Dans un avenir proche, nous pourrons également exporter la recherche de faisceaux. Nous prévoyons également d'ajouter la prise en charge de l'exportation à davantage de modèles.
Si vous souhaitez simplement entraîner/évaluer des modèles MT, et non exporter les modèles vers Caffe2 via ONNX, vous pouvez installer Translate for Python 3 en suivant ces quelques étapes :
git clone https://github.com/pytorch/translate.git pytorch-translate && cd pytorch-translate
python setup.py install
À condition que CUDA soit installé, vous devriez être prêt à partir.
Installez Docker et nvidia-docker, puis exécutez
sudo docker pull pytorch/translate
sudo nvidia-docker run -i -t --rm pytorch/translate /bin/bash
. ~/miniconda/bin/activate
cd ~/translate
Vous devriez maintenant pouvoir exécuter les exemples de commandes dans la section Exemples d'utilisation ci-dessous. Vous pouvez également voir les versions d'images disponibles sous https://hub.docker.com/r/pytorch/translate/tags/.
Ces instructions ont été principalement testées sur Ubuntu 16.04.5 LTS (Xenial Xerus) avec une carte Tesla M60 et une installation CUDA 9. Nous vous encourageons fortement à signaler un problème si vous ne parvenez pas à installer ce projet pour votre configuration spécifique.
Si vous ne disposez pas déjà d'un environnement Anaconda avec Python 3.6, vous pouvez en installer un via Miniconda3 :
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
chmod +x miniconda.sh
./miniconda.sh -b -p ~/miniconda
rm miniconda.sh
. ~/miniconda/bin/activate
Clonez le dépôt Translate :
git clone https://github.com/pytorch/translate.git
pushd translate
Installez le package conda PyTorch :
# Set to 8 or 9 depending on your CUDA version.
TMP_CUDA_VERSION="9"
# Uninstall previous versions of PyTorch. Doing this twice is intentional.
# Error messages about torch not being installed are benign.
pip uninstall -y torch
pip uninstall -y torch
# This may not be necessary if you already have the latest cuDNN library.
conda install -y cudnn
# Add LAPACK support for the GPU.
conda install -y -c pytorch "magma-cuda${TMP_CUDA_VERSION}0"
# Install the combined PyTorch nightly conda package.
conda install pytorch-nightly cudatoolkit=${TMP_CUDA_VERSION}.0 -c pytorch
# Install NCCL2.
wget "https://s3.amazonaws.com/pytorch/nccl_2.1.15-1%2Bcuda${TMP_CUDA_VERSION}.0_x86_64.txz"
TMP_NCCL_VERSION="nccl_2.1.15-1+cuda${TMP_CUDA_VERSION}.0_x86_64"
tar -xvf "${TMP_NCCL_VERSION}.txz"
rm "${TMP_NCCL_VERSION}.txz"
# Set some environmental variables needed to link libraries correctly.
export CONDA_PATH="$(dirname $(which conda))/.."
export NCCL_ROOT_DIR="$(pwd)/${TMP_NCCL_VERSION}"
export LD_LIBRARY_PATH="${CONDA_PATH}/lib:${NCCL_ROOT_DIR}/lib:${LD_LIBRARY_PATH}"
Installez ONNX :
git clone --recursive https://github.com/onnx/onnx.git
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Si vous obtenez une erreur Protobuf compiler not found
, vous devez l'installer :
conda install -c anaconda protobuf
Ensuite, essayez à nouveau d'installer ONNX :
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Construire Traduire :
pip uninstall -y pytorch-translate
python3 setup.py build develop
Vous devriez maintenant pouvoir exécuter les exemples de scripts ci-dessous !
Remarque : les exemples de commandes donnés supposent que vous êtes la racine du référentiel GitHub cloné ou que vous vous trouvez dans le répertoire translate
de l'image Docker ou Amazon. Vous devrez peut-être également vous assurer que l'environnement Anaconda est activé.
Nous fournissons un exemple de script pour entraîner un modèle pour la tâche allemand-anglais IWSLT 2014. Nous avons utilisé cette commande pour obtenir un modèle pré-entraîné :
bash pytorch_translate/examples/train_iwslt14.sh
Le modèle pré-entraîné contient en fait deux points de contrôle qui correspondent à un double entraînement avec initialisation aléatoire des paramètres. Ceci est utile pour obtenir des ensembles. Cet ensemble de données est relativement petit (~ 160 000 paires de phrases), donc la formation se terminera en quelques heures sur un seul GPU.
Nous fournissons un support pour visualiser les statistiques d'entraînement avec Tensorboard. En tant que dépendance, vous devrez installer tensorboard_logger.
pip install tensorboard_logger
Veuillez également vous assurer que le tensorboard est installé. Il est également livré avec l'installation tensorflow
.
Vous pouvez utiliser l'exemple de script ci-dessus pour vous entraîner avec Tensorboard, mais vous devez modifier la ligne 10 de :
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train.py
à
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train_with_tensorboard.py
Le répertoire du journal des événements pour tensorboard peut être spécifié par l'option --tensorboard_dir
avec une valeur par défaut : run-1234
. Ce répertoire est ajouté à votre argument --save_dir
.
Par exemple dans le script ci-dessus, vous pouvez visualiser avec :
tensorboard --logdir checkpoints/runs/run-1234
Plusieurs exécutions peuvent être comparées en spécifiant différents --tensorboard_dir
. c'est-à-dire run-1234
et run-2345
. Alors
tensorboard --logdir checkpoints/runs
peut visualiser les statistiques des deux courses.
Un modèle pré-entraîné pour IWSLT 2014 peut être évalué en exécutant l'exemple de script :
bash pytorch_translate/examples/generate_iwslt14.sh
A noter l'amélioration des performances lors de l'utilisation d'un ensemble de taille 2 au lieu d'un modèle unique.
Nous fournissons un exemple de script pour exporter un modèle PyTorch vers un graphique Caffe2 via ONNX :
bash pytorch_translate/examples/export_iwslt14.sh
Cela produira deux fichiers, encoder.pb
et decoder.pb
, qui correspondent au calcul de l'encodeur et à une étape du décodeur. L'exemple exporte un seul point de contrôle ( --checkpoint model/averaged_checkpoint_best_0.pt
mais il est également possible d'exporter un ensemble ( --checkpoint model/averaged_checkpoint_best_0.pt --checkpoint model/averaged_checkpoint_best_1.pt
). Notez que lors de l'exportation, vous pouvez également contrôlez quelques hyperparamètres tels que la taille de la recherche du faisceau, les mots et les récompenses UNK.
Pour utiliser l'exemple de modèle Caffe2 exporté pour traduire des phrases, exécutez :
echo "hallo welt" | bash pytorch_translate/examples/translate_iwslt14.sh
Notez que le modèle prend en compte les entrées BPE, certains mots d'entrée doivent donc être divisés en plusieurs jetons. Par exemple, "hineinstopfen" est représenté par "hinein@@ stop@@ fen".
Nous vous invitons à explorer les modèles que nous avons dans le dossier pytorch_translate/research
. Si vous les utilisez et rencontrez des erreurs, veuillez coller les journaux et une commande que nous pouvons utiliser pour reproduire l'erreur. N'hésitez pas à contribuer à des corrections de bugs ou à signaler votre expérience, mais gardez à l'esprit que ces modèles sont un travail en cours et ne sont donc actuellement pas pris en charge.
Nous apprécions les contributions ! Consultez le fichier CONTRIBUTING.md
pour savoir comment vous aider.
Translate est sous licence BSD, comme indiqué dans le fichier LICENSE
.