筆記
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
文件所示。