DeepNCCL是阿里云神龍異構產品開發的用于多GPU互聯的AI通信加速庫,能夠無感地加速基于NCCL進行通信算子調用的分布式訓練或多卡推理等任務。開發人員可以根據實際業務情況,在不同的GPU云服務器上安裝DeepNCCL通信庫,以加速分布式訓練或推理性能。本文主要介紹在Ubuntu或CentOS操作系統的GPU實例上安裝和使用DeepNCCL的操作方法。
關于DeepNCCL的更多信息,請參見什么是AI通信加速庫DeepNCCL。
使用限制
已創建阿里云GPU實例,且GPU實例需滿足以下限制:
操作系統為Ubuntu 18.04或更高版本,以及CentOS 7.x或更高版本。
已安裝GPU Driver、CUDA 11.4或更高版本。
創建GPU實例時,選擇鏡像后,建議您同時選中安裝GPU驅動選項,然后依次選擇CUDA版本、Driver版本以及cuDNN版本,具體操作,請參見創建GPU實例。
僅部分GPU實例支持使用DeepNCCL。
DeepNCCL支持的NCCL通信算法如下所示,本文以常用的allreduce(全局歸約)通信算法為例展示DeepNCCL的優化效果。
NCCL通信算法
支持的GPU實例
說明
allgather(全收集)
多機優化
V100:ecs.gn6v-c10g1.20xlarge、ecs.gn6e-c12g1.24xlarge、ecs.ebmgn6e.24xlarge、ecs.ebmgn6v.24xlarge
ecs.ebmgn7e.32xlarge、ecs.ebmgn7ex.32xlarge、ecs.sccgn7ex.32xlarge、ecs.gn7e-c16g1.32xlarge
訓練2個機型提升60%。
多機最大支持擴展20個機型。
reduce-scatter(分散歸約)
多機優化
V100:ecs.gn6v-c10g1.20xlarge、ecs.gn6e-c12g1.24xlarge、ecs.ebmgn6e.24xlarge、ecs.ebmgn6v.24xlarge
ecs.ebmgn7e.32xlarge、ecs.ebmgn7ex.32xlarge、ecs.sccgn7ex.32xlarge、ecs.gn7e-c16g1.32xlarge
訓練2個機型提升60%。
多機最大支持擴展8個機型。
allreduce(全局歸約)
多機優化:
V100:ecs.gn6v-c10g1.20xlarge、ecs.gn6e-c12g1.24xlarge、ecs.ebmgn6e.24xlarge、ecs.ebmgn6v.24xlarge
ecs.ebmgn7e.32xlarge、ecs.ebmgn7ex.32xlarge、ecs.sccgn7ex.32xlarge、ecs.gn7e-c16g1.32xlarge
訓練2個機型提升40%。
多機最大支持擴展8個機型。
單機優化:
A10:ecs.ebmgn7ix.32xlarge
ebmgn7ix單機在512 B~2 MB下訓練效率提升10%~100%。
安裝DeepNCCL
根據GPU實例的操作系統,選擇不同方式安裝DeepNCCL。
Ubuntu操作系統
(推薦)PyPi安裝方式
執行以下命令,直接從阿里云Pip源中安裝最新的DeepNCCL 2.1.0。
pip install deepnccl
.deb
安裝包方式執行以下命令,從OSS中直接下載DeepNCCL的
.deb
安裝包。本步驟以下載DeepNCCL 2.1.0版本為例。
wget http://aiacc.oss-cn-beijing.aliyuncs.com/deepnccl/release/2.1.0/deb/deep-nccl-2.1.0.deb
執行以下命令,安裝DeepNCCL。
dpkg -i deep-nccl-2.1.0.deb
CentOS操作系統
(推薦)PyPi安裝方式
執行以下命令,直接從阿里云Pip源中安裝最新的DeepNCCL 2.1.0。
pip install deepnccl
.rpm
安裝包方式執行以下命令,從OSS中直接下載DeepNCCL的
.rpm
安裝包。本步驟以下載DeepNCCL 2.1.0版本為例。
wget http://aiacc.oss-cn-beijing.aliyuncs.com/deepnccl/release/2.1.0/rpm/deep-nccl-2.1.0.rpm
執行以下命令,安裝DeepNCCL。
rpm -i deep-nccl-2.1.0.rpm
執行以下命令,查看DeepNCCL是否安裝成功。
ldconfig -p | grep nccl
回顯結果如下圖所示,顯示
libnccl.so.2
表示DeepNCCL已安裝成功。
使用DeepNCCL
DeepNCCL(包括aiacc-nccl-plugin)安裝成功后,您可以直接使用DeepNCCL的通信優化功能,無需再進行其他配置。以下示例通過nccl-tests展示DeepNCCL在V100兩機16卡模型上,采用allreduce通信算法進行加速的效果。
腳本示例
在NVIDIA nccl-tests中下載nccl-tests軟件包,按照nccl-tests軟件包中的README.md中的說明,復制以下腳本示例來加載優化算法。
mpirun --allow-run-as-root \
--np 16 -npernode 8 \
--hostfile hostfile \
-mca btl_tcp_if_include eth0 \
-x NCCL_DEBUG=info \
-x NCCL_ALGO=Ring \
./build/${op}_perf -b 256K -e 1G -d $datatype -f 2 -g 1 -w 10 -n 100
算法加載與當前機型拓撲有關,如下圖所示,表示優化算法加載成功。
性能提升效果
相比NCCL優化性能(Baseline),使用DeepNCCL在V100兩機16卡模型上進行分布式優化時,采用allreduce通信算法,其優化提升效果顯著,具體busbw值如下圖所示:
①:表示使用NCCL(Baseline)進行分布式優化時,其優化性能的busbw值。
②:表示使用DeepNCCL進行分布式優化時,其優化性能的busbw值。
卸載DeepNCCL
如果您的業務暫不需要使用DeepNCCL優化能力,您可以通過以下方式卸載DeepNCCL。
Ubuntu操作系統
如果您采用PyPi安裝方式安裝了DeepNCCL,則執行以下命令卸載DeepNCCL。
pip uninstall deepnccl
如果您采用
.deb
安裝包方式安裝了DeepNCCL,則執行以下命令卸載DeepNCCL。dpkg -r deep-nccl
CentOS操作系統
如果您采用PyPi安裝方式安裝了Deepnccl,則執行以下命令卸載Deepnccl。
pip uninstall deepnccl
如果您采用
.rpm
安裝包方式安裝了Deepnccl,則執行以下命令卸載Deepnccl。rpm -e deep-nccl