Optimum 文件

分散式訓練

您正在檢視的是需要從原始碼安裝. 如果你想使用常規的 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

分散式訓練

當單個 CPU 訓練速度過慢時,我們可以使用多個 CPU。本指南著重介紹基於 PyTorch 的 DDP,以高效地實現分散式 CPU 訓練。

多 CPU 分散式訓練透過 mpirun 啟動,它支援 Gloo 和 oneCCL 作為集合通訊後端。為了效能考慮,英特爾推薦使用 oneCCL 後端。

Intel® oneCCL (集合通訊庫) 是一個用於高效分散式深度學習訓練的庫,它實現了 allreduce、allgather、alltoall 等集合操作。有關 oneCCL 的更多資訊,請參閱 oneCCL 文件oneCCL 規範

模組 oneccl_bindings_for_pytorch (1.12 版本之前為 torch_ccl) 實現了 PyTorch C10D ProcessGroup API,可以作為外部 ProcessGroup 動態載入,目前僅在 Linux 平臺執行。

有關 oneccl_bind_pt 的更多詳細資訊,請檢視。

我們將按照以下步驟展示如何使用 oneCCL 後端進行分散式訓練。

Intel® oneCCL Bindings for PyTorch 安裝

以下 Python 版本提供了 wheel 檔案

擴充套件版本 Python 3.6 Python 3.7 Python 3.8 Python 3.9 Python 3.10
1.12.1
1.12.0
1.11.0
1.10.0
pip install oneccl_bind_pt=={pytorch_version} -f https://software.intel.com/ipex-whl-stable

其中 {pytorch_version} 應該是您的 PyTorch 版本,例如 1.12.0。oneCCL 和 PyTorch 的版本必須匹配。oneccl_bindings_for_pytorch 1.12.0 預構建的 wheel 檔案不適用於 PyTorch 1.12.1 (它適用於 PyTorch 1.12.0) PyTorch 1.12.1 應該與 oneccl_bindings_for_pytorch 1.12.1 配合使用

適用於 Intel® oneCCL 1.12.0 的 MPI 工具集

oneccl_bindings_for_pytorch_path=$(python -c "from oneccl_bindings_for_pytorch import cwd; print(cwd)")
source $oneccl_bindings_for_pytorch_path/env/setvars.sh

適用於 Intel® oneCCL 版本 < 1.12.0

torch_ccl_path=$(python -c "import torch; import torch_ccl; import os;  print(os.path.abspath(os.path.dirname(torch_ccl.__file__)))")
source $torch_ccl_path/env/setvars.sh

以下命令可以在一個節點上啟用 2 個程序的訓練,每個套接字執行一個程序。OMP_NUM_THREADS/CCL_WORKER_COUNT 變數可以進行調整以獲得最佳效能。

export CCL_WORKER_COUNT=1
export MASTER_ADDR=127.0.0.1
mpirun -n 2 -genv OMP_NUM_THREADS=23 \
python3 run_qa.py \
    --model_name_or_path distilbert-base-uncased-distilled-squad \
    --dataset_name squad \
    --apply_quantization \
    --quantization_approach static \
    --do_train \
    --do_eval \
    --verify_loading \
    --output_dir /tmp/squad_output \
    --no_cuda \
    --xpu_backend ccl

以下命令可以在兩個節點上(node0 和 node1,以 node0 為主程序)總共啟用四個程序的訓練,ppn(每個節點的程序數)設定為 2,每個套接字執行一個程序。OMP_NUM_THREADS/CCL_WORKER_COUNT 變數可以進行調整以獲得最佳效能。

在 node0 中,您需要建立一個包含每個節點 IP 地址的配置檔案(例如 hostfile),並將該配置檔案的路徑作為引數傳遞。

 cat hostfile
 xxx.xxx.xxx.xxx #node0 ip
 xxx.xxx.xxx.xxx #node1 ip

現在,在 node0 中執行以下命令,node0 和 node1 將啟用 4DDP

export CCL_WORKER_COUNT=1
export MASTER_ADDR=xxx.xxx.xxx.xxx #node0 ip
mpirun -f hostfile -n 4 -ppn 2 \
-genv OMP_NUM_THREADS=23 \
python3 run_qa.py \
    --model_name_or_path distilbert-base-uncased-distilled-squad \
    --dataset_name squad \
    --apply_quantization \
    --quantization_approach static \
    --do_train \
    --do_eval \
    --verify_loading \
    --output_dir /tmp/squad_output \
    --no_cuda \
    --xpu_backend ccl
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.