NOTA
PyTorch Translate ahora está obsoleto; utilice fairseq en su lugar.
Translate es una biblioteca para traducción automática escrita en PyTorch. Proporciona entrenamiento para modelos secuencia a secuencia. Translate se basa en fairseq, una biblioteca general de secuencia a secuencia, lo que significa que se pueden entrenar modelos implementados tanto en Translate como en Fairseq. Translate también brinda la capacidad de exportar algunos modelos a gráficos Caffe2 a través de ONNX y cargar y ejecutar estos modelos desde C++ con fines de producción. Actualmente, exportamos componentes (codificador, decodificador) a Caffe2 por separado y la búsqueda de haces se implementa en C++. En un futuro próximo, también podremos exportar la búsqueda de haces. También planeamos agregar soporte de exportación a más modelos.
Si solo está interesado en entrenar/evaluar modelos MT y no en exportar los modelos a Caffe2 a través de ONNX, puede instalar Translate para Python 3 siguiendo estos pocos pasos:
git clone https://github.com/pytorch/translate.git pytorch-translate && cd pytorch-translate
python setup.py install
Siempre que tenga CUDA instalado, debería estar listo para comenzar.
Instale Docker y nvidia-docker, luego ejecute
sudo docker pull pytorch/translate
sudo nvidia-docker run -i -t --rm pytorch/translate /bin/bash
. ~/miniconda/bin/activate
cd ~/translate
Ahora debería poder ejecutar los comandos de muestra en la sección Ejemplos de uso a continuación. También puede ver las versiones de imágenes disponibles en https://hub.docker.com/r/pytorch/translate/tags/.
Estas instrucciones se probaron principalmente en Ubuntu 16.04.5 LTS (Xenial Xerus) con una tarjeta Tesla M60 y una instalación CUDA 9. Le recomendamos encarecidamente que informe un problema si no puede instalar este proyecto para su configuración específica.
Si aún no tiene un entorno Anaconda con Python 3.6, puede instalar uno a través de 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
Clona el repositorio de Traducir:
git clone https://github.com/pytorch/translate.git
pushd translate
Instale el paquete conda de 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}"
Instalar ONNX:
git clone --recursive https://github.com/onnx/onnx.git
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Si recibe un error Protobuf compiler not found
, debe instalarlo:
conda install -c anaconda protobuf
Luego, intenta instalar ONNX nuevamente:
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Construir traducir:
pip uninstall -y pytorch-translate
python3 setup.py build develop
¡Ahora debería poder ejecutar los scripts de ejemplo a continuación!
Nota: los comandos de ejemplo dados suponen que usted es la raíz del repositorio de GitHub clonado o que se encuentra en el directorio translate
de la imagen de Docker o Amazon. Es posible que también debas asegurarte de tener activado el entorno Anaconda.
Proporcionamos un script de ejemplo para entrenar un modelo para la tarea IWSLT 2014 alemán-inglés. Usamos este comando para obtener un modelo previamente entrenado:
bash pytorch_translate/examples/train_iwslt14.sh
El modelo previamente entrenado en realidad contiene dos puntos de control que corresponden a un entrenamiento dos veces con inicialización aleatoria de los parámetros. Esto es útil para obtener conjuntos. Este conjunto de datos es relativamente pequeño (~160 000 pares de oraciones), por lo que el entrenamiento se completará en unas pocas horas en una sola GPU.
Brindamos soporte para visualizar estadísticas de entrenamiento con tensorboard. Como dependencia, necesitará tener instalado tensorboard_logger.
pip install tensorboard_logger
Asegúrese también de que el tensorboard esté instalado. También viene con instalación tensorflow
.
Puede utilizar el script de ejemplo anterior para entrenar con tensorboard, pero debe cambiar la línea 10 de:
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train.py
a
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train_with_tensorboard.py
El directorio de registro de eventos para tensorboard se puede especificar mediante la opción --tensorboard_dir
con un valor predeterminado: run-1234
. Este directorio se agrega a su argumento --save_dir
.
Por ejemplo, en el script anterior, puede visualizar con:
tensorboard --logdir checkpoints/runs/run-1234
Se pueden comparar varias ejecuciones especificando diferentes --tensorboard_dir
. es decir, run-1234
y run-2345
. Entonces
tensorboard --logdir checkpoints/runs
Puede visualizar estadísticas de ambas carreras.
Se puede evaluar un modelo previamente entrenado para IWSLT 2014 ejecutando el script de ejemplo:
bash pytorch_translate/examples/generate_iwslt14.sh
Observe la mejora en el rendimiento al utilizar un conjunto de tamaño 2 en lugar de un solo modelo.
Proporcionamos un script de ejemplo para exportar un modelo de PyTorch a un gráfico Caffe2 a través de ONNX:
bash pytorch_translate/examples/export_iwslt14.sh
Esto generará dos archivos, encoder.pb
y decoder.pb
, que corresponden al cálculo del codificador y un paso del decodificador. El ejemplo exporta un único punto de control ( --checkpoint model/averaged_checkpoint_best_0.pt
pero también es posible exportar un conjunto ( --checkpoint model/averaged_checkpoint_best_0.pt --checkpoint model/averaged_checkpoint_best_1.pt
). Tenga en cuenta que durante la exportación, también puede Controle algunos hiperparámetros, como el tamaño de búsqueda del haz, las palabras y las recompensas UNK.
Para utilizar el modelo Caffe2 exportado de muestra para traducir oraciones, ejecute:
echo "hallo welt" | bash pytorch_translate/examples/translate_iwslt14.sh
Tenga en cuenta que el modelo acepta entradas BPE, por lo que algunas palabras de entrada deben dividirse en varios tokens. Por ejemplo, "hineinstopfen" se representa como "hinein@@ stop@@ fen".
Le invitamos a explorar los modelos que tenemos en la carpeta pytorch_translate/research
. Si los usa y encuentra algún error, pegue los registros y un comando que podamos usar para reproducir el error. No dudes en contribuir con cualquier corrección de errores o informar tu experiencia, pero ten en cuenta que estos modelos son un trabajo en progreso y, por lo tanto, actualmente no son compatibles.
¡Agradecemos las contribuciones! Consulte el archivo CONTRIBUTING.md
para saber cómo ayudar.
Translate tiene licencia BSD, como se encuentra en el archivo LICENSE
.