TCCL简介
TCCL(Tencent Collective Communication Library)是一款针对腾讯云星脉网络架构的高性能定制加速通信库。主要功能是依托星脉网络硬件架构,为 AI 大模型训练提供更高效的网络通信性能,同时具备网络故障快速感知与自愈的智能运维能力。TCCL 基于开源的 NCCL 代码做了扩展优化,完全兼容 NCCL 的功能与使用方法。TCCL 目前支持主要特性包括:双网口动态聚合优化,发挥 bonding 设备的性能极限。全局 Hash 路由(Global Hash Routing),负载均衡,避免拥塞。拓扑亲和性流量调度,最小化流量绕行。
操作场景
本文介绍如何在腾讯云环境中配置 TCCL 加速通信库,实现您在腾讯云RDMA环境中多机多卡通信的性能提升。在大模型训练场景,对比开源的 NCCL 方案,TCCL 预计约可以提升 50% 带宽利用率。
操作步骤
准备环境
1、创建 GPU 型 HCCPNV4sne 或 GPU 型 HCCPNV4sn 高性能计算集群实例,分别支持 1.6Tbps 和 800Gbps RDMA 网络。2、为 GPU 型实例安装 GPU 驱动和 nvidia-fabricmanager 服务。注意:TCCL 运行软件环境要求 glibc 版本 2.17 以上,CUDA 版本 10.0 以上。
选择安装方式
TCCL目前支持三种使用方式安装,您可以根据需要选择适合业务场景的安装方式使用。TCCL通信库 + 编译安装pytorchTCCL通信库 + pytorch通信插件NCCL插件 + 排序的IP列表说明:由于当前大模型训练基本都基于 Pytorch 框架,所以主要以 Pytorch 为例进行说明,TCCL的三种接入方案对比如下表:
安装方式 | 方法一:编译安装 Pytorch | 方法二:安装 Pytorch 通信插件 | 方法三:安装NCCL通信插件 |
使用步骤 | 安装 TCCL重新编译安装 Pytorch | 安装 Pytorch 通信插件修改分布式通信后端 | 安装 NCCL 插件修改启动脚本 |
优点 | 对业务代码无入侵 | 安装方便 | 安装方便 |
缺点 | 需要重新编译安装 Pytorch对软件环境有要求 | 需要修改业务代码对软件环境有要求 | 集群节点扩充之后,需要更新排序列表 |
软件环境依赖 | 对应 NCCL 版本 2.12 要求 glibc 版本 2.17 以上要求 CUDA 版本 10.0 以上 | 当前安装包仅支持 Pytorch 1.12要求 glibc 版本 2.17 以上 要求 CUDA 版本 10.0 以上 |
安装 NCCL 即可 |
如果您的机器资源和模型训练场景相对比较固定,推荐使用方法3,兼容不同的NCCL版本和CUDA版本,安装使用方便,不需要修改业务代码或者重新编译pytorch。如果您的资源需要提供给不同的业务团队,或者经常有扩容的需求,推荐使用前两种方法,不需要算法人员或者调度框架刻意去感知机器的网络拓扑信息。如果您不希望对业务代码做适配,那么可以使用方法1,只需要重新编译pytorch框架。
配置 TCCL 环境并验证
方法一: 编译安装 Pytorch方法二:安装 Pytorch 通信插件方法三:安装 NCCL 插件由于社区pytorch默认采用静态方式连接NCCL通信库,所以无法通过替换共享库的方式使用TCCL。
1、安装TCCL
以 Ubuntu 20.04 为例,您可以使用以下命令安装,安装之后TCCL位于 /opt/tencent/tccl 目录。
# 卸载已有tccl版本和nccl插件dpkg -r tccl && dpkg -r nccl-rdma-sharp-plugins
# 下载安装tccl v1.5版本wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/tccl/TCCL_1.5-ubuntu.20.04.5_amd64.deb && dpkg -i TCCL_1.5-ubuntu.20.04.5_amd64.deb && rm -f TCCL_1.5-ubuntu.20.04.5_amd64.deb
如果您使用 CentOS 或 TencentOS,参考以下步骤安装:
# 卸载已有tccl版本和nccl插件rpm -e tccl && rpm -e nccl-rdma-sharp-plugins-1.0-1.x86_64
# 下载tccl v1.5版本wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/tccl/tccl-1.5-1.tl2.x86_64.rpm && rpm -ivh --nodeps --force tccl-1.5-1.tl2.x86_64.rpm && rm -f tccl-1.5-1.tl2.x86_64.rpm
2、 重新编译安装 Pytorch
以下为 Pytorch 源码安装示例,详情参考官网 Pytorch 安装说明。
#!/bin/bash
# 卸载当前版本pip uninstall -y torch
# 下载pytorch源码git clone --recursive https://github.com/pytorch/pytorchcd pytorch
# 配置TCCL的安装路径export USE_SYSTEM_NCCL=1export NCCL_INCLUDE_DIR="/opt/tencent/tccl/include"export NCCL_LIB_DIR="/opt/tencent/tccl/lib"
# 参考官网添加其他编译选项
# 安装开发环境python setup.py develop
3、 配置TCCL环境变量
export NCCL_DEBUG=INFOexport NCCL_SOCKET_IFNAME=eth0export NCCL_IB_GID_INDEX=3export NCCL_IB_DISABLE=0export NCCL_IB_HCA=mlx5_bond_0,mlx5_bond_1,mlx5_bond_2,mlx5_bond_3,mlx5_bond_4,mlx5_bond_5,mlx5_bond_6,mlx5_bond_7export NCCL_NET_GDR_LEVEL=2export NCCL_IB_QPS_PER_CONNECTION=4export NCCL_IB_TC=160export NCCL_IB_TIMEOUT=22export NCCL_PXN_DISABLE=0export TCCL_TOPO_AFFINITY=4
注意:需要通过TCCL_TOPO_AFFINITY=4开启网络拓扑感知特性。
4、 验证 Pytorch
运行单机多卡或者多机多卡训练过程中有如下打印(export NCCL_DEBUG=INFO):

5、 验证nccl-tests
运行 nccl-tests 之前需要 export 对应的 TCCL路径:
export LD_LIBRARY_PATH=/opt/tencent/tccl/lib:$LD_LIBRARY_PATH
6、 软件版本支持
目前 TCCL 对应 NCCL 版本 2.12 ,要求 glibc 版本 2.17 以上,CUDA 版本 10.0 以上。其他 CUDA 版本支持请联系您的售前经理获取支持。Pytorch支持通过插件的方式接入第三方通信后端,所以在不重新编译 Pytorch 的前提下,用户可以使用 TCCL 通信后端,API 与 NCCL 完全兼容。详情可参考 Pytorch 现有通信后端介绍。
1、 安装 Pytorch 通信插件
# 卸载现有的tccl和NCCL插件dpkg -r tccl && dpkg -r nccl-rdma-sharp-plugins
# 卸载torch_tcclpip uninstall -y torch-tccl
# 安装torch_tccl 0.0.2版本wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/tccl/torch_tccl-0.0.2_pt1.12-py3-none-any.whl && pip install torch_tccl-0.0.2_pt1.12-py3-none-any.whl && rm -f torch_tccl-0.0.2_pt1.12-py3-none-any.whl
2、 修改业务代码
import torch_tccl #args.dist_backend = "nccl" args.dist_backend = "tccl" torch.distributed.init_process_group( backend=args.dist_backend, init_method=args.dist_url, world_size=args.world_size, rank=args.rank )
3、 配置TCCL环境变量
export NCCL_DEBUG=INFOexport NCCL_SOCKET_IFNAME=eth0export NCCL_IB_GID_INDEX=3export NCCL_IB_DISABLE=0export NCCL_IB_HCA=mlx5_bond_0,mlx5_bond_1,mlx5_bond_2,mlx5_bond_3,mlx5_bond_4,mlx5_bond_5,mlx5_bond_6,mlx5_bond_7export NCCL_NET_GDR_LEVEL=2export NCCL_IB_QPS_PER_CONNECTION=4export NCCL_IB_TC=160export NCCL_IB_TIMEOUT=22export NCCL_PXN_DISABLE=0export TCCL_TOPO_AFFINITY=4
注意:需要通过 TCCL_TOPO_AFFINITY=4 开启网络拓扑感知特性。
4、 验证 Pytorch
您在执行分布式训练业务时,出现如下提示可确认通信后端被正确加载。

5、 软件版本限制
当前安装包仅支持Pytorch 1.12,其他 Pytorch 和 CUDA 版本支持请联系您的售前经理获取支持。说明:如果运行nccl-tests或者其他需要动态链接通信库的场景,请使用方法一安装 TCCL。
如果您已经安装了 NCCL ,也可以使用 NCCL 插件的方式使用 TCCL 加速能力。
1、 安装 NCCL 插件
以 Ubuntu 20.04 为例,您可以使用以下命令安装插件。
# 卸载现有的 tccl 和 nccl 插件dpkg -r tccl && dpkg -r nccl-rdma-sharp-plugins
# 下载安装 nccl 1.2 插件wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins_1.2_amd64.deb && dpkg -i nccl-rdma-sharp-plugins_1.2_amd64.deb
# 请确保集群内使用的 nccl 插件版本一致,以下为 nccl 1.0 版本下载安装命令,推荐使用稳定性更优的 nccl 1.2 版本# wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins_1.0_amd64.deb && dpkg -i nccl-rdma-sharp-plugins_1.0_amd64.deb && rm -f nccl-rdma-sharp-plugins_1.0_amd64.deb
如果您使用 CentOS 或 TencentOS,参考以下步骤安装:
# 卸载现有的 nccl 插件rpm -e nccl-rdma-sharp-plugins-1.0-1.x86_64
# 下载安装 nccl 1.2 插件wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins-1.2-1.x86_64.rpm && rpm -ivh --nodeps --force nccl-rdma-sharp-plugins-1.2-1.x86_64.rpm
# 请确保集群内使用 nccl 插件版本一致,以下为 nccl 1.0 版本下载安装命令,推荐使用稳定性更优的 nccl 1.2 版本# wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins-1.0-1.x86_64.rpm && rpm -ivh --nodeps --force nccl-rdma-sharp-plugins-1.0-1.x86_64.rpm && rm -f nccl-rdma-sharp-plugins-1.0-1.x86_64.rpm
2、 获取拓扑排序的 IP 列表
NCCL 插件不需要依赖文件可提供 bonding 口动态聚合和全局 hash 路由两种优化。如果需要支持网络拓扑的亲和性感知,用户可以通过排序的IP列表来实现。IP 排序可以按照如下方式完成:a. 准备 IP 列表文件VPC IP 地址通过 ifconfig eth0
获取,每行1个节点 IP,格式如下:
root@VM-125-10-tencentos:/workspace# cat ip_eth0.txt172.16.177.28172.16.176.11172.16.177.25172.16.177.12
b. 执行排序
wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/tccl/get_rdma_order_by_ip.sh && bash get_rdma_order_by_ip.sh ip_eth0.txt
注意:所有节点都安装了 curl 工具(比如对于 Ubuntu,通过 apt install curl
安装)。执行脚本的节点可以 ssh 免密访问其他所有节点。c. 查看排序后的 IP 列表文件
root@VM-125-10-tencentos:/workspace# cat hostfile.txt172.16.176.11172.16.177.12172.16.177.25172.16.177.28
3、 配置 TCCL 环境变量
export NCCL_DEBUG=INFOexport NCCL_SOCKET_IFNAME=eth0export NCCL_IB_GID_INDEX=3export NCCL_IB_DISABLE=0export NCCL_IB_HCA=mlx5_bond_0,mlx5_bond_1,mlx5_bond_2,mlx5_bond_3,mlx5_bond_4,mlx5_bond_5,mlx5_bond_6,mlx5_bond_7export NCCL_NET_GDR_LEVEL=2export NCCL_IB_QPS_PER_CONNECTION=4export NCCL_IB_TC=160export NCCL_IB_TIMEOUT=22export NCCL_PXN_DISABLE=0
# 机器IP手动排序之后,就不需要添加如下变量了# export TCCL_TOPO_AFFINITY=4
4、 修改启动脚本
您需要在启动分布式训练时修改启动脚本。例如,如果使用 deepspeed launcher 启动训练进程,拿到排序后的 IP 列表之后,将对应的 IP 列表写入 hostfile,再启动训练进程。
root@vm-3-17-centos:/workspace/ptm/gpt# cat hostfile172.16.176.11 slots=8172.16.177.12 slots=8172.16.177.25 slots=8172.16.177.28 slots=8
deepspeed --hostfile ./hostfile --master_addr 172.16.176.11 train.py
如果使用 torchrun 启动训练进程,通过 --node_rank
指定对应的节点顺序,
// on 172.16.176.11torchrun --nnodes=4 --nproc_per_node=8 --node_rank=0 --master_addr=172.16.176.11 train.py ...// on 172.16.176.12torchrun --nnodes=4 --nproc_per_node=8 --node_rank=1 --master_addr=172.16.176.11 train.py ...// on 172.16.176.25torchrun --nnodes=4 --nproc_per_node=8 --node_rank=2 --master_addr=172.16.176.11 train.py ...// on 172.16.176.28torchrun --nnodes=4 --nproc_per_node=8 --node_rank=3 --master_addr=172.16.176.11 train.py ...
如果使用 mpirun 启动训练进程,按照顺序排列 IP 即可。
mpirun \-np 64 \-H 172.16.176.11:8,172.16.177.12:8,172.16.177.25:8,172.16.177.28:8 \--allow-run-as-root \-bind-to none -map-by slot \-x NCCL_DEBUG=INFO -x NCCL_IB_GID_INDEX=3 \-x NCCL_IB_DISABLE=0 \-x NCCL_SOCKET_IFNAME=eth0 \-x NCCL_IB_HCA=mlx5_bond_0,mlx5_bond_1,mlx5_bond_2,mlx5_bond_3,mlx5_bond_4,mlx5_bond_5,mlx5_bond_6,mlx5_bond_7 \-x NCCL_NET_GDR_LEVEL=2 \-x NCCL_IB_QPS_PER_CONNECTION=4 \-x NCCL_IB_TC=160 \-x NCCL_IB_TIMEOUT=22 \-x NCCL_PXN_DISABLE=0 \-x LD_LIBRARY_PATH -x PATH \-mca coll_hcoll_enable 0 \-mca pml ob1 \-mca btl_tcp_if_include eth0 \-mca btl ^openib \all_reduce_perf -b 1G -e 1G -n 1000 -g 1
官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:https://www.yunxiaoer.com/146564.html