注記
PyTorch Translate は現在非推奨になっています。代わりに、fairseq を使用してください。
Translate は、PyTorch で書かれた機械翻訳用のライブラリです。シーケンス間モデルのトレーニングを提供します。 Translate は、一般的なシーケンス間ライブラリである Fairseq に依存しています。これは、Translate と Fairseq の両方で実装されたモデルをトレーニングできることを意味します。 Translate は、ONNX 経由で一部のモデルを Caffe2 グラフにエクスポートし、運用目的でこれらのモデルを C++ からロードして実行する機能も提供します。現在、コンポーネント (エンコーダー、デコーダー) を Caffe2 に個別にエクスポートし、ビーム検索は C++ で実装されています。近い将来、ビーム検索もエクスポートできるようになる予定です。また、より多くのモデルに輸出サポートを追加する予定です。
ONNX 経由でモデルを Caffe2 にエクスポートするのではなく、MT モデルのトレーニング/評価のみに興味がある場合は、次のいくつかの手順に従って Python 3 用の Translate をインストールできます。
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
事前トレーニングされたモデルには、実際には、パラメーターのランダムな初期化による 2 回のトレーニングに対応する 2 つのチェックポイントが含まれています。これはアンサンブルを取得するのに役立ちます。このデータセットは比較的小さい (約 160,000 文のペア) ため、トレーニングは単一の GPU で数時間で完了します。
tensorboard を使用したトレーニング統計の視覚化のサポートを提供します。依存関係として、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
これにより、エンコーダーの計算とデコーダーの 1 ステップに対応する 2 つのファイル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
ファイルを参照してください。
LICENSE
ファイルにあるように、Translate は BSD ライセンスを取得しています。