TCCL 使用说明

最近更新时间: 2026-06-30 15:06:00

操作场景

本文介绍如何在云平台环境中配置 TCCL 加速通信库,实现您在云平台 RDMA 环境中多机多卡通信的性能提升。在大模型训练场景,对比开源的 NCCL 方案,TCCL 预计约可以提升 50% 带宽利用率。

操作步骤

准备环境

1、创建 分别支持 1.6Tbps 和 800Gbps RDMA 网络的高性能计算集群实例。
2、为 GPU 型实例安装 GPU 驱动和 nvidia-fabricmanager 服务

注意:

TCCL 运行软件环境要求 glibc 版本 2.17 以上,CUDA 版本 10.0 以上。

选择安装方式

TCCL目前支持三种使用方式安装,您可以根据需要选择适合业务场景的安装方式使用。

  • TCCL通信库 + 编译安装pytorch
  • TCCL通信库 + 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 以上<br>要求 CUDA 版本 10.0 以上
安装 NCCL 即可

如果您的机器资源和模型训练场景相对比较固定,推荐使用方法3,兼容不同的NCCL版本和CUDA版本,安装使用方便,不需要修改业务代码或者重新编译pytorch。
如果您的资源需要提供给不同的业务团队,或者经常有扩容的需求,推荐使用前两种方法,不需要算法人员或者调度框架刻意去感知机器的网络拓扑信息。
如果您不希望对业务代码做适配,那么可以使用方法1,只需要重新编译pytorch框架。

配置 TCCL 环境并验证

方法一:编译安装 Pytorch

由于社区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/pytorch
cd pytorch

# <!重要> 配置TCCL的安装路径
export USE_SYSTEM_NCCL=1
export NCCL_INCLUDE_DIR="/opt/tencent/tccl/include"
export NCCL_LIB_DIR="/opt/tencent/tccl/lib"

# 参考官网添加其他编译选项

# 安装开发环境
python setup.py develop
3、 配置TCCL环境变量
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_DISABLE=0
export 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
export NCCL_NET_GDR_LEVEL=2
export NCCL_IB_QPS_PER_CONNECTION=4
export NCCL_IB_TC=160
export NCCL_IB_TIMEOUT=22
export NCCL_PXN_DISABLE=0
export 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支持通过插件的方式接入第三方通信后端,所以在不重新编译 Pytorch 的前提下,用户可以使用 TCCL 通信后端,API 与 NCCL 完全兼容。详情可参考 Pytorch 现有通信后端介绍

1、 安装 Pytorch 通信插件
# 卸载现有的tccl和NCCL插件
dpkg -r tccl && dpkg -r nccl-rdma-sharp-plugins

# 卸载torch_tccl
pip 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=INFO
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_DISABLE=0
export 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
export NCCL_NET_GDR_LEVEL=2
export NCCL_IB_QPS_PER_CONNECTION=4
export NCCL_IB_TC=160
export NCCL_IB_TIMEOUT=22
export NCCL_PXN_DISABLE=0
export TCCL_TOPO_AFFINITY=4

注意:

需要通过 TCCL_TOPO_AFFINITY=4 开启网络拓扑感知特性。

4、 验证 Pytorch

您在执行分布式训练业务时,出现如下提示可确认通信后端被正确加载。

5、 软件版本限制

当前安装包仅支持Pytorch 1.12,其他 Pytorch 和 CUDA 版本支持请联系您的售前经理获取支持。

说明:

如果运行nccl-tests或者其他需要动态链接通信库的场景,请使用方法一安装 TCCL。

(推荐)方法三:安装 NCCL 插件

如果您已经安装了 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.txt
172.16.177.28
172.16.176.11
172.16.177.25
172.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.txt
172.16.176.11
172.16.177.12
172.16.177.25
172.16.177.28
3、 配置 TCCL 环境变量
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_DISABLE=0
export 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
export NCCL_NET_GDR_LEVEL=2
export NCCL_IB_QPS_PER_CONNECTION=4
export NCCL_IB_TC=160
export NCCL_IB_TIMEOUT=22
export 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 hostfile
172.16.176.11 slots=8
172.16.177.12 slots=8
172.16.177.25 slots=8
172.16.177.28 slots=8

deepspeed --hostfile ./hostfile --master_addr 172.16.176.11 train.py

如果使用 torchrun 启动训练进程,通过--node_rank指定对应的节点顺序,

// on 172.16.176.11
torchrun --nnodes=4 --nproc_per_node=8 --node_rank=0 --master_addr=172.16.176.11 train.py ...
// on 172.16.176.12
torchrun --nnodes=4 --nproc_per_node=8 --node_rank=1 --master_addr=172.16.176.11 train.py ...
// on 172.16.176.25
torchrun --nnodes=4 --nproc_per_node=8 --node_rank=2 --master_addr=172.16.176.11 train.py ...
// on 172.16.176.28
torchrun --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