OBSERVAÇÃO
PyTorch Translate agora está obsoleto, use fairseq.
Translate é uma biblioteca para tradução automática escrita em PyTorch. Ele fornece treinamento para modelos sequência a sequência. O Translate depende do fairseq, uma biblioteca geral de sequência a sequência, o que significa que os modelos implementados no Translate e no Fairseq podem ser treinados. O Translate também oferece a capacidade de exportar alguns modelos para gráficos Caffe2 via ONNX e de carregar e executar esses modelos a partir de C++ para fins de produção. Atualmente, exportamos componentes (codificador, decodificador) para Caffe2 separadamente e a pesquisa de feixe é implementada em C++. Num futuro próximo, poderemos exportar também a pesquisa de feixe. Também planejamos adicionar suporte à exportação para mais modelos.
Se você está interessado apenas em treinar/avaliar modelos MT, e não em exportar os modelos para Caffe2 via ONNX, você pode instalar o Translate for Python 3 seguindo estas etapas:
git clone https://github.com/pytorch/translate.git pytorch-translate && cd pytorch-translate
python setup.py install
Desde que você tenha o CUDA instalado, você estará pronto para prosseguir.
Instale o Docker e o nvidia-docker e execute
sudo docker pull pytorch/translate
sudo nvidia-docker run -i -t --rm pytorch/translate /bin/bash
. ~/miniconda/bin/activate
cd ~/translate
Agora você deve conseguir executar os comandos de amostra na seção Exemplos de uso abaixo. Você também pode ver as versões de imagem disponíveis em https://hub.docker.com/r/pytorch/translate/tags/.
Estas instruções foram testadas principalmente no Ubuntu 16.04.5 LTS (Xenial Xerus) com uma placa Tesla M60 e uma instalação CUDA 9. Recomendamos fortemente que você relate um problema se não conseguir instalar este projeto para sua configuração específica.
Se você ainda não possui um ambiente Anaconda com Python 3.6, você pode instalar um 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
Clone o repositório do Google Tradutor:
git clone https://github.com/pytorch/translate.git
pushd translate
Instale o pacote 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}"
Instale ONNX:
git clone --recursive https://github.com/onnx/onnx.git
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Se você receber um erro Protobuf compiler not found
, será necessário instalá-lo:
conda install -c anaconda protobuf
Em seguida, tente instalar o ONNX novamente:
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Construir tradução:
pip uninstall -y pytorch-translate
python3 setup.py build develop
Agora você deve conseguir executar os scripts de exemplo abaixo!
Observação: os comandos de exemplo fornecidos presumem que você é a raiz do repositório GitHub clonado ou que está no diretório translate
da imagem Docker ou Amazon. Você também pode precisar certificar-se de que o ambiente Anaconda está ativado.
Fornecemos um script de exemplo para treinar um modelo para a tarefa Alemão-Inglês do IWSLT 2014. Usamos este comando para obter um modelo pré-treinado:
bash pytorch_translate/examples/train_iwslt14.sh
O modelo pré-treinado, na verdade, contém dois pontos de verificação que correspondem ao treinamento duplo com inicialização aleatória dos parâmetros. Isto é útil para obter conjuntos. Este conjunto de dados é relativamente pequeno (cerca de 160 mil pares de frases), portanto, o treinamento será concluído em algumas horas em uma única GPU.
Fornecemos suporte para visualização de estatísticas de treinamento com tensorboard. Como dependência, você precisará do tensorboard_logger instalado.
pip install tensorboard_logger
Certifique-se também de que o tensorboard esteja instalado. Ele também vem com instalação de tensorflow
.
Você pode usar o script de exemplo acima para treinar com tensorboard, mas precisa alterar a linha 10 de:
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train.py
para
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train_with_tensorboard.py
O diretório de log de eventos do tensorboard pode ser especificado pela opção --tensorboard_dir
com um valor padrão: run-1234
. Este diretório é anexado ao seu argumento --save_dir
.
Por exemplo, no script acima, você pode visualizar com:
tensorboard --logdir checkpoints/runs/run-1234
Várias execuções podem ser comparadas especificando diferentes --tensorboard_dir
. ou seja, run-1234
e run-2345
. Então
tensorboard --logdir checkpoints/runs
pode visualizar estatísticas de ambas as execuções.
Um modelo pré-treinado para IWSLT 2014 pode ser avaliado executando o script de exemplo:
bash pytorch_translate/examples/generate_iwslt14.sh
Observe a melhoria no desempenho ao usar um conjunto de tamanho 2 em vez de um modelo único.
Fornecemos um script de exemplo para exportar um modelo PyTorch para um gráfico Caffe2 via ONNX:
bash pytorch_translate/examples/export_iwslt14.sh
Isso produzirá dois arquivos, encoder.pb
e decoder.pb
, que correspondem ao cálculo do codificador e a uma etapa do decodificador. O exemplo exporta um único ponto de verificação ( --checkpoint model/averaged_checkpoint_best_0.pt
mas também é possível exportar um conjunto ( --checkpoint model/averaged_checkpoint_best_0.pt --checkpoint model/averaged_checkpoint_best_1.pt
). Note que durante a exportação, você também pode controlar alguns hiperparâmetros, como tamanho da pesquisa de feixe, palavras e recompensas UNK.
Para usar o modelo Caffe2 exportado de amostra para traduzir frases, execute:
echo "hallo welt" | bash pytorch_translate/examples/translate_iwslt14.sh
Observe que o modelo aceita entradas BPE, portanto, algumas palavras de entrada precisam ser divididas em vários tokens. Por exemplo, "hineinstopfen" é representado como "hinein@@ stop@@ fen".
Convidamos você a explorar os modelos que temos na pasta pytorch_translate/research
. Se você usá-los e encontrar algum erro, cole os logs e um comando que possamos usar para reproduzir o erro. Sinta-se à vontade para contribuir com correções de bugs ou relatar sua experiência, mas lembre-se de que esses modelos são um trabalho em andamento e, portanto, não têm suporte no momento.
Aceitamos contribuições! Consulte o arquivo CONTRIBUTING.md
para saber como ajudar.
O Translate é licenciado pelo BSD, conforme encontrado no arquivo LICENSE
.