笔记
PyTorch Translate 现已弃用,请改用 fairseq。
Translate 是一个用 PyTorch 编写的机器翻译库。它提供序列到序列模型的训练。 Translate 依赖于 fairseq,一个通用的序列到序列库,这意味着 Translate 和 Fairseq 中实现的模型都可以被训练。 Translate 还能够通过 ONNX 将某些模型导出到 Caffe2 图表,并从 C++ 加载和运行这些模型以用于生产目的。目前,我们将组件(编码器、解码器)单独导出到 Caffe2,并用 C++ 实现波束搜索。在不久的将来,我们也将能够导出集束搜索。我们还计划为更多型号添加出口支持。
如果您只是对训练/评估 MT 模型感兴趣,而不是通过 ONNX 将模型导出到 Caffe2,则可以按照以下几个步骤安装 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/ 下查看可用的映像版本。
这些指令主要在带有 Tesla M60 卡和 CUDA 9 安装的 Ubuntu 16.04.5 LTS (Xenial Xerus) 上进行测试。如果您无法根据您的特定配置安装此项目,我们强烈建议您报告问题。
如果您还没有使用 Python 3.6 的现有 Anaconda 环境,您可以通过 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
克隆翻译存储库:
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}"
安装 ONNX:
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 存储库的根目录,或者位于 Docker 或 Amazon 映像的translate
目录中。您可能还需要确保已激活 Anaconda 环境。
我们提供了一个示例脚本来训练 IWSLT 2014 德语-英语任务的模型。我们使用此命令来获取预训练模型:
bash pytorch_translate/examples/train_iwslt14.sh
预训练模型实际上包含两个检查点,对应于参数随机初始化的两次训练。这对于获得系综很有用。该数据集相对较小(约 160K 句对),因此训练将在单个 GPU 上在几个小时内完成。
我们提供使用张量板可视化训练统计数据的支持。作为依赖项,您需要安装tensorboard_logger。
pip install tensorboard_logger
另请确保已安装张量板。它还附带tensorflow
安装。
您可以使用上面的示例脚本来使用tensorboard进行训练,但需要将第10行更改为:
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train.py
到
CUDA_VISIBLE_DEVICES=0 python3 pytorch_translate/train_with_tensorboard.py
tensorboard 的事件日志目录可以通过选项--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 的整体而不是单个模型时性能的改进。
我们提供了一个示例脚本,用于通过 ONNX 将 PyTorch 模型导出到 Caffe2 图:
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
文件中所示。