日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

ACCL:阿里云自研高性能集合通信庫

ACCL(Alibaba Collective Communication Library)是阿里云自研的,基于NCCL(Nvidia Collective Communication Library)開發的集合通信庫。它結合阿里云自身網絡特點以及豐富的大模型任務通信調優經驗,可為客戶任務提供更高的通信性能,并且具備一定的故障診斷和自愈能力。本文為您介紹ACCL的主要特性和安裝方法。

ACCL支持的增強特性

ACCL目前支持的主要增強特性清單如下,所有的增強特性都支持通過環境變量來開啟或關閉:

  • 修復了對應NCCL社區開源版本的BUG;

  • 對集合通信不同算子和不同消息區間進行了調優,使其相比開源NCCL擁有更好的性能;

  • 支持訓練過程中集合通信統計分析,可用于診斷訓練過程中設備故障導致的計算/通信Slow(慢)和Hang(掛起)等問題,配合阿里云PAI的AIMaster:彈性自動容錯引擎C4D:模型訓練任務問題診斷工具,可以快速的進行任務的異常檢測和自動容錯;

  • 支持多路徑傳輸和負載均衡功能,在訓練集群中降低甚至消除哈希不均導致的擁塞問題,提升整體訓練性能;

使用限制

僅在AI計算資源(靈駿智算資源)部署的地域,使用靈駿智算資源和自定義鏡像提交DLC任務時,需要安裝ACCL。

安裝方法

PAI官方鏡像默認已安裝ACCL,當您使用官方鏡像提交DLC任務時,無需執行以下操作。

步驟一:確認鏡像中使用的Pytorch依賴的NCCL庫是否為動態庫

在自定義鏡像容器中執行以下操作步驟:

  1. 確認PyTorch庫所在位置。

    如果已知PyTorch安裝于特定目錄,您可以直接在該目錄下進行搜索。例如,在確認PyTorch位于/usr/local/lib的情況下,通過執行查詢命令,成功定位到libtorch.so文件的具體路徑,如下所示:

    find /usr/local/lib -name "libtorch*"
    # 示例結果如下
    /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchcuda.so
    /usr/local/lib/pvthon3.10/dist-packages/torch/lib/libtorch.so
    /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchbindtest.so
  2. 使用ldd命令查看PyTorch庫依賴NCCL庫的方式。

    ldd libtorch.so | grep nccl
    • 如果命令返回結果為如下形式,則說明PyTorch是以動態庫的方式依賴NCCL,可以繼續根據后續步驟進行ACCL的下載與安裝。

      libnccl.so.2=>/usr/lib/x86_64-linux-gnu/libnccl.so.2(0x00007feab3b27000)
    • 如果命令返回結果為空,說明PyTorch是以非動態庫的方式依賴NCCL,則無法安裝ACCL。您需要基于NVIDIA官方提供的NGC鏡像制作您自己的鏡像,或者將使用的PyTorch庫改為依賴NCCL動態庫的版本,之后才能繼續下載安裝ACCL。

步驟二:確認鏡像中使用的CUDA版本

您可以在自定義鏡像容器中,使用如下命令確認當前環境依賴的CUDA版本。

nvidia-smi

返回結果示例如下圖所示,表明使用的CUDA版本為12.2。您的CUDA版本以實際返回結果為準。image

步驟三:下載CUDA版本對應的ACCL

CUDA版本對應的ACCL下載鏈接如下:

CUDA版本

ACCL庫下載鏈接

12.3

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2

12.2

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.2/lib/libnccl.so.2

12.1

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.1/lib/libnccl.so.2

11.7

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.7/lib/libnccl.so.2

11.4

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.4/lib/libnccl.so.2

您可以在自定義鏡像容器中,使用如下命令下載與CUDA版本相對應的ACCL,以CUDA 12.3版本為例:

wget http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2

步驟四:安裝ACCL庫

在安裝ACCL庫之前,您需要先確認系統是否已經安裝NCCL。您可以使用如下命令確認libnccl.so.2庫文件是否已存在:

sudo find / -name "libnccl.so.2"

在查詢結果中,可能會出現以下兩種情況,并針對每種情況給出相應的處理措施:

  • 未發現libnccl.so.2文件,或者該文件存在于/usr/lib64/lib64系統目錄中。針對該情況,您可以直接使用cp命令,將新下載的libnccl.so.2文件復制到上述任一缺失的系統目錄中,以確保其可用性。

    sudo cp -f ./libnccl.so.2 /usr/lib64
  • 如果搜到libnccl.so.2文件位于其它目錄,比如/opt/xxx/,這種情況可能是因為NCCL的安裝目錄未使用默認路徑導致的。您同樣可以使用cp命令直接將新下載的libnccl.so.2文件復制到該目錄,以覆蓋現有文件。

    sudo cp -f libnccl.so.2 /opt/xxx/

步驟五:刷新動態庫

在自定義鏡像容器中,使用如下命令刷新動態庫緩存。

sudo ldconfig

步驟六:確認是否成功加載ACCL庫

  1. 使用自定義鏡像提交DLC任務,詳情請參見創建訓練任務

  2. 查看任務日志,如果在任務啟動日志中顯示了如下ACCL版本信息,則表明該任務已成功應用了ACCL庫。如何查看任務日志,請參見查看訓練詳情

    說明

    日志中務必出現accl-n標識,缺失則表明ACCL庫未成功加載。

    NCCL version 2.20.5.7-accl-n+cuda12.4, COMMIT_ID Zeaa6674c2f1f896e3a6bbd77e85231e0700****, BUILD_TIME 2024-05-10 15:40:56

推薦的環境變量配置

基于日常使用ACCL的經驗,PAI團隊整理了一系列能夠在不同環境中提升通信吞吐率的環境變量,供您參考使用:

export NCCL_IB_TC=136
export NCCL_IB_SL=5
export NCCL_IB_GID_INDEX=3
export NCCL_SOCKET_IFNAME=eth
export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5
export NCCL_IB_TIMEOUT=22
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_MIN_NCHANNELS=4
export NCCL_NET_PLUGIN=none
export ACCL_C4_STATS_MODE=CONN
export ACCL_IB_SPLIT_DATA_NUM=4
export ACCL_IB_QPS_LOAD_BALANCE=1
export ACCL_IB_GID_INDEX_FIX=1
export ACCL_LOG_TIME=1

關鍵環境變量說明如下:

環境變量

描述

NCCL_IB_TC

該變量匹配了阿里云網絡映射規則,若未配置或配置錯誤可能會導致性能受損。

NCCL_IB_GID_INDEX

設置RDMA協議使用的GID,若未配置或配置錯誤會導致NCCL報錯。

NCCL_SOCKET_IFNAME

NCCL需要選擇正確的端口以建立連接,不同的規格對端口的要求不同。若未配置或配置錯誤可能會導致NCCL建連失敗。

NCCL_DEBUG

通常將日志級別設置為INFO,這樣可以獲得更多NCCL相關的日志輸出,有助于定位和解決潛在問題。

NCCL_IB_HCA

指定RDMA通信使用的網卡,若未配置或配置錯誤可能會導致性能受損。

NCCL_IB_TIMEOUT

設置RDMA連接超時時間,可以提升訓練任務時的容錯性能。若未配置或配置錯誤,可能會導致訓練任務出現中斷。

NCCL_IB_QPS_PER_CONNECTION

適當增加NCCL中每個連接的QP(Queue Pair)數量,可以有效提高網絡吞吐率。

NCCL_NET_PLUGIN

配置NCCL網絡插件,建議配置為none,以防止誤加載其他插件,從而影響系統性能。

ACCL_C4_STATS_MODE

控制ACCL統計信息的維度,目前建議配置為CONN,代表按照連接維度進行統計。

ACCL_IB_SPLIT_DATA_NUM

將數據拆分到多個QP(Queue Pair)中進行發送。

ACCL_IB_QPS_LOAD_BALANCE

是否開啟Load Balance功能。

ACCL_IB_GID_INDEX_FIX

配置為1后,在任務啟動前會自動檢查GID是否異常,并且可以自動繞過這類異常。

ACCL_LOG_TIME

配置為1后,在打印的日志前會加上具體的時間,方便定位問題。