ПРИМЕЧАНИЕ
PyTorch Translate устарел, используйте вместо него fairseq.
Translate — это библиотека машинного перевода, написанная на PyTorch. Он обеспечивает обучение моделям «последовательность-последовательность». Translate использует fairseq, общую библиотеку последовательного преобразования, что означает, что модели, реализованные как в Translate, так и в Fairseq, могут быть обучены. Translate также предоставляет возможность экспортировать некоторые модели в графы Caffe2 через ONNX, а также загружать и запускать эти модели из C++ для производственных целей. В настоящее время мы экспортируем компоненты (кодер, декодер) в Caffe2 отдельно, а поиск лучей реализован на C++. В ближайшем будущем мы также сможем экспортировать поиск луча. Мы также планируем добавить поддержку экспорта для большего количества моделей.
Если вас интересует только обучение/оценка моделей MT, а не экспорт моделей в Caffe2 через ONNX, вы можете установить Translate for Python 3, выполнив следующие несколько шагов:
git clone https://github.com/pytorch/translate.git pytorch-translate && cd pytorch-translate
python setup.py install
Если у вас установлен CUDA, все готово.
Установите Docker и nvidia-docker, затем запустите
sudo docker pull pytorch/translate
sudo nvidia-docker run -i -t --rm pytorch/translate /bin/bash
. ~/miniconda/bin/activate
cd ~/translate
Теперь вы сможете запускать примеры команд из раздела «Примеры использования» ниже. Вы также можете просмотреть доступные версии изображений на странице https://hub.docker.com/r/pytorch/translate/tags/.
Эти инструкции в основном тестировались на Ubuntu 16.04.5 LTS (Xenial Xerus) с картой Tesla M60 и установкой CUDA 9. Мы настоятельно рекомендуем вам сообщить о проблеме, если вы не можете установить этот проект для вашей конкретной конфигурации.
Если у вас еще нет среды Anaconda с Python 3.6, вы можете установить ее через 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
Клонируйте репозиторий Translate:
git clone https://github.com/pytorch/translate.git
pushd translate
Установите пакет PyTorch conda:
# 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}"
Установите ОННКС:
git clone --recursive https://github.com/onnx/onnx.git
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Если вы получаете сообщение об ошибке Protobuf compiler not found
, вам необходимо установить его:
conda install -c anaconda protobuf
Затем попробуйте снова установить ONNX:
yes | pip install ./onnx 2>&1 | tee ONNX_OUT
Перевести сборку:
pip uninstall -y pytorch-translate
python3 setup.py build develop
Теперь вы сможете запускать приведенные ниже примеры сценариев!
Примечание. В приведенных примерах команд предполагается, что вы являетесь корнем клонированного репозитория GitHub или находитесь в каталоге translate
образа Docker или Amazon. Вам также может потребоваться убедиться, что у вас активирована среда Anaconda.
Мы предоставляем пример сценария для обучения модели немецко-английскому заданию IWSLT 2014. Мы использовали эту команду для получения предварительно обученной модели:
bash pytorch_translate/examples/train_iwslt14.sh
Предварительно обученная модель фактически содержит две контрольные точки, которые соответствуют двукратному обучению со случайной инициализацией параметров. Это полезно для получения ансамблей. Этот набор данных относительно небольшой (~ 160 тыс. пар предложений), поэтому обучение завершится за несколько часов на одном графическом процессоре.
Мы предоставляем поддержку для визуализации статистики тренировок с помощью тензорной доски. В качестве зависимости вам понадобится установленный tensorboard_logger.
pip install tensorboard_logger
Также убедитесь, что тензорная доска установлена. Он также поставляется с установкой tensorflow
.
Вы можете использовать приведенный выше пример сценария для обучения с тензорной доской, но вам нужно изменить строку 10 с:
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train.py
к
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train_with_tensorboard.py
Каталог журнала событий для тензорной панели можно указать с помощью опции --tensorboard_dir
со значением по умолчанию: run-1234
. Этот каталог добавляется к вашему аргументу --save_dir
.
Например, в приведенном выше сценарии вы можете визуализировать с помощью:
tensorboard --logdir checkpoints/runs/run-1234
Несколько прогонов можно сравнить, указав разные --tensorboard_dir
. т.е. run-1234
и run-2345
. Затем
tensorboard --logdir checkpoints/runs
может визуализировать статистику обоих прогонов.
Предварительно обученную модель для IWSLT 2014 можно оценить, запустив пример сценария:
bash pytorch_translate/examples/generate_iwslt14.sh
Обратите внимание на улучшение производительности при использовании ансамбля размера 2 вместо одной модели.
Мы предоставляем пример скрипта для экспорта модели PyTorch в граф Caffe2 через ONNX:
bash pytorch_translate/examples/export_iwslt14.sh
Это выведет два файла, encoder.pb
и decoder.pb
, которые соответствуют вычислениям кодера и одному шагу декодера. В примере экспортируется одна контрольная точка ( --checkpoint model/averaged_checkpoint_best_0.pt
, но также возможно экспортировать ансамбль ( --checkpoint model/averaged_checkpoint_best_0.pt --checkpoint model/averaged_checkpoint_best_1.pt
). Обратите внимание, что во время экспорта вы также можете контролировать несколько гиперпараметров, таких как размер поиска луча, слово и вознаграждения UNK.
Чтобы использовать образец экспортированной модели Caffe2 для перевода предложений, запустите:
echo "hallo welt" | bash pytorch_translate/examples/translate_iwslt14.sh
Обратите внимание, что модель принимает входные данные BPE, поэтому некоторые входные слова необходимо разделить на несколько токенов. Например, «hineinstopfen» обозначается как «hinein@@ stop@@ fen».
Мы приглашаем вас изучить модели, которые есть в папке pytorch_translate/research
. Если вы используете их и столкнулись с какими-либо ошибками, вставьте журналы и команду, которую мы можем использовать для воспроизведения ошибки. Не стесняйтесь вносить исправления ошибок или сообщать о своем опыте, но имейте в виду, что эти модели находятся в стадии разработки и поэтому в настоящее время не поддерживаются.
Мы приветствуем вклады! О том, как помочь, смотрите в файле CONTRIBUTING.md
.
Translate имеет лицензию BSD, как указано в файле LICENSE
.