详情页标题前

腾讯云高性能计算集群GPU 型实例安装 TCCL 说明

详情页1

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):

腾讯云高性能计算集群GPU 型实例安装 TCCL 说明



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

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

腾讯云高性能计算集群GPU 型实例安装 TCCL 说明



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

(0)
上一篇 2023年12月9日 上午11:47
下一篇 2023年12月9日 上午11:47
详情页2

相关推荐

  • 腾讯云对象存储取消任务

    功能描述 取消一个任务,只有未执行的任务才可以被取消。 授权说明 授权策略中 action 设置为 ci:CancelMediaJob 。查看所有 action。 服务开通 使用该功能需提前开通数据万象,并绑定存储桶。详情请参见 绑定存储桶。 使用限制 使用该接口时,请先确认相关限制条件。详情请参见 使用限制。 请求 请求示例 PUT /jobs/<…

    腾讯云 2023年12月9日
  • 视觉智能平台阿里云云安全中心企业版的容器镜像安全扫描功能,支持OKD的景象扫描吗?-云小二-阿里云

    咨询一个问题,阿里云云安全中心企业版的容器镜像安全扫描功能,支持OKD的景象扫描吗? 以下为热心网友提供的参考意见 这个产品非视觉智能开放平台的哈——该回答整理自钉群“阿里云视觉智能开放平台咨询1群” 以下为热心网友提供的参考意见 阿里云云安全中心企业版的容器镜像安全扫描功能可以支持所有基于Linux的容器镜像,包括OKD的景象扫描。该功能可以帮助您检测您的…

    2023年12月11日
  • 腾讯云云点播短视频播放器小程序插件

    基于腾讯云点播短视频播放器小程序插件,能快速将短视频发布到您的原生小程序中,并在小程序端进行视频播放。短视频播放器小程序插件依托于云点播成熟的一站式服务平台,在云点播完成视频上传、视频处理和视频 AI 等操作后,可直接将视频发布至小程序端,有效提高视频服务质量。 准备工作 注册腾讯云 1. 注册腾讯云 账号,并完成 企业实名认证。2. 访问 云点播控制台,获…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 函数计算中,函数计算Fc能不能内网访问rds mysql数据库,有具体操作吗?-云小二-阿里云

    函数计算中,函数计算Fc能不能内网访问rds mysql数据库,有具体操作吗? 以下为热心网友提供的参考意见 函数计算(Function Compute)是一种无服务器计算服务,它允许您运行代码而无需管理服务器。在函数计算中,您可以使用内网访问RDS MySQL数据库。以下是一些操作步骤: 创建RDS实例:首先,您需要在AWS控制台中创建一个RDS实例,并确…

    阿里云 2024年1月9日
  • 腾讯云对象存储复制与移动对象

    简介 本文档提供关于复制、移动对象的 API 概览以及 SDK 示例代码。简单操作 API 操作名 操作描述 PUT Object – Copy 设置对象复制(修改对象属性) 复制文件到目标路径 DELETE Object 删除单个对象 在存储桶中删除指定对象 分块操作 API 操作名 操作描述 List Multipart Uploads 查询…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。