

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 集體通訊初始化改進
<a name="sagemaker-eks-checkpointless-features-communication"></a>

NCCL 和 Gloo 是基本通訊程式庫，可跨分散式訓練程序進行集體操作 （例如全縮減和廣播）。不過，傳統 NCCL 和 Gloo 初始化可能會在故障復原期間產生瓶頸。

標準復原程序需要所有程序連線到集中式 TCPStore，並透過根程序進行協調，進而帶來在重新啟動期間特別有問題的昂貴額外負荷。這種集中式設計會產生三個關鍵問題：強制性 TCPStore 連線的協調負荷、每次重新啟動時的復原延遲，都必須重複完整初始化序列，以及根程序本身的單一故障點。這會在每次訓練初始化或重新啟動時，強制執行昂貴的集中式協調步驟。

HyperPod 無檢查點訓練可消除這些協調瓶頸，透過初始化「無根」和「TCPStoreless."

## 無根組態
<a name="sagemaker-eks-checkpointless-features-communication-rootless-config"></a>

若要啟用無根，您可以直接公開下列環境變數。

```
export HPCT_USE_ROOTLESS=1 && \
sysctl -w net.ipv4.ip_local_port_range="20000 65535" && \
```

HPCT\$1USE\$1ROOTLESS：0 或 1。使用 開啟和關閉無根

sysctl -w net.ipv4.ip\$1local\$1port\$1range="20000 65535"：設定系統連接埠範圍

請參閱啟用無根[的範例](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml#L111-L113)。

## 無根
<a name="sagemaker-eks-checkpointless-features-communication-rootless"></a>

HyperPod 無檢查點訓練為 NCCL 和 Gloo 程序群組提供新的初始化方法，無根和 TCPStoreless。

這些最佳化的實作涉及修改 NCCL、Gloo 和 PyTorch：
+ 擴展第三方程式庫 APIs 以啟用無根和無儲存 NCCL 和 Gloo 最佳化，同時保持回溯相容性
+ 更新程序群組後端以有條件地使用最佳化路徑並處理程序內復原問題
+ 略過在 PyTorch 分散式層建立昂貴的 TCPStore，同時透過全域群組計數器維護對稱地址模式

下圖顯示分散式訓練程式庫的架構，以及在無檢查點訓練中所做的變更。

![\[下圖顯示分散式訓練程式庫的架構，以及在無檢查點訓練中所做的變更。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-training-libraries.png)


### NCCL 和 Gloo
<a name="sagemaker-eks-checkpointless-features-communication-nccl-gloo"></a>

這些是執行集體通訊核心功能的獨立套件。它們提供金鑰 APIs，例如 ncclCommInitRank，以初始化通訊網路、管理基礎資源，以及執行集體通訊。在 NCCL 和 Gloo 中進行自訂變更後，Rootless 和 Storeless 會最佳化 （例如，略過連線至 TCPStore) 通訊網路初始化。您可以在彈性地使用原始程式碼路徑或最佳化程式碼路徑之間切換。

### PyTorch 程序群組後端
<a name="sagemaker-eks-checkpointless-features-communication-pytorch"></a>

程序群組後端，特別是 ProcessGroupNCCL 和 ProcessGroupGloo，透過叫用其對應基礎程式庫的 APIs 來實作 ProcessGroup APIs。由於我們擴展了第三方程式庫的 APIs，因此我們必須正確叫用它們，並根據客戶的組態進行程式碼路徑切換。

除了最佳化程式碼路徑之外，我們也將程序群組後端變更為支援處理中復原。