NCCL源碼分析1:單進(jìn)程單設(shè)備使用/調(diào)用案例 官網(wǎng)案例詳解

NCCL使用/調(diào)用步驟源碼解讀(單設(shè)備單進(jìn)程為例):

視頻教程

1.1 NCCL官網(wǎng)案例源碼詳解One Device per Process or Thread_嗶哩嗶哩_bilibili

步驟總結(jié):

通過MPI獲取本機(jī)rank(可理解為進(jìn)程)數(shù)量localrank,用于rank綁定GPU;

rank0獲取NCCL通信組ID,并通過MPI_Bcast廣播給其它rank;

借助MPI獲取的這些信息NCCL完成初始化,并進(jìn)行集合通信。

核心步驟:

1、初試化和啟動MPI通信。

2、計算主機(jī)名的哈希值,并MPI_allgather通信使得每個rank(進(jìn)程)都獲取其它rank的哈希值。

3、根據(jù)獲取的哈希值,比較得到該rank所在的主機(jī)參與通信的rank總數(shù)localrank(哈希值相同的rank在同一主機(jī)上)。(哈希值就是主機(jī)名,其實可以用主機(jī)名來獲取主機(jī)上參與通信的總rank數(shù),只是主機(jī)命名五花八門,哈希值更容易比較)

4、rank0上獲取NCCL的唯一ID,并MPI_Bcast廣播給其它rank。(這個唯一的ID是用來標(biāo)識通信組,因此所有通信組中的rank有相同的ID)

5、基于localrank綁定GPU,并分配發(fā)送接收緩沖區(qū),創(chuàng)建CUDA流。

6、初始化NCCL通信器。

7、nccl allreduce通信。同步CUDA流,確保通信完成。

8、釋放緩沖區(qū)。

9、銷毀通信器。

10、終止MPI環(huán)境

對應(yīng)源碼

源碼來源NCCL官方文檔 Example 2: One Device per Process or Thread:Examples — NCCL 2.21.5 documentation (nvidia.com)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容