RDMA:使用高性能网络进行分布式训练

RDMA:使用高性能网络进行分布式训练

RDMA:使用高性能网络进行分布式训练

https://help.aliyun.com/zh/pai/user-guide/use-a-custom-image?spm=a2c4g.11186623.0.0.72379b9bnwBbxP

更新时间:2024-06-14 17:08:00

在大模型的AI并行计算中,确保算力最优计算性能,需要通过降低通信量、计算和通信交叠、提升通信效率达到通信的最优。本文为您介绍使用高性能网络的配置说明。

使用限制

仅适用于基于灵骏智算资源(Serverless)提交的训练任务。

配置高性能网络变量

PAI基于灵骏智算资源,已开启了RDMA特性,且默认设置了最优NCCL变量。您可以根据训练框架、通信框架以及模型特点进行必要的调整。强烈建议您使用平台预置系统内的默认变量, 可以获得较优性能。

默认变量(平台预置)

根据不同的灵骏规格,平台已经在系统中预置了默认变量,具体请参照下表内容:

灵骏规格

NCCL变量

  • ml.gu7xf.c96m1600.8-gu108

  • ml.gu7xf.8xlarge-gu108

  • ml.gu7ef.c96m1600.8-gu100

export NCCL_IB_TC=136
export NCCL_IB_SL=5
export NCCL_IB_GID_INDEX=3
export NCCL_SOCKET_IFNAME=eth
export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5
export NCCL_IB_TIMEOUT=22
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_NET_PLUGIN=none

ml.gu8xf.8xlarge-gu108

export NCCL_IB_TC=136
export NCCL_IB_SL=5
export NCCL_IB_GID_INDEX=3
export NCCL_SOCKET_IFNAME=eth
export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5
export NCCL_IB_TIMEOUT=22
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_NET_PLUGIN=none

关于NCCL变量的具体说明,请参见。

环境变量说明

NCCL关键环境变量的说明如下表所示,更多关于NCCL其他环境变量的说明,请参见。

关键环境变量

环境变量说明

NCCL_IB_TC

该变量匹配了阿里云网络映射规则,若未配置或配置错误可能会导致性能受损。

NCCL_IB_GID_INDEX

提供推荐值,若未配置或配置错误会导致NCCL报错。

NCCL_SOCKET_IFNAME

NCCL需要选择正确的端口以建立连接,不同的规格对端口的要求不同。若未配置或配置错误可能会导致NCCL建连失败。

NCCL_DEBUG

通常将日志级别设置为INFO,这样可以获得更多NCCL相关的日志输出,有助于定位和解决潜在问题。

NCCL_IB_HCA

需要指定RDMA通信的网卡。在不同的算力节点下IBdev的数量和命名规则有所区别,若未配置或配置错误可能会导致性能受损。

NCCL_IB_TIMEOUT

增加RDMA连接超时时间,可以提升训练任务时的容错性能,若未配置或配置错误,可能会导致训练任务出现中断。

NCCL_IB_QPS_PER_CONNECTION

适当增加NCCL中每个连接的QP(Queue Pair)数量,可以有效提高网络吞吐率。

配置镜像

官方镜像

基于灵骏智算类型的资源提交训练任务时,您可以使用阿里云DLC为您提供的官方内置镜像,详情请参见。

www.zeeklog.com  - RDMA:使用高性能网络进行分布式训练

自定义镜像

基于灵骏智算类型的资源提交训练任务时,您也可以自行构建并使用自定义镜像,注意事项如下:

环境要求

CUDA >= 11.2

NCCL >= 2.12.10

Python3

安装RDMA库

灵骏智算资源为您提供高性能的RDMA网络,当您用自定义镜像时,需在自定义镜像的Dockerfile中手动安装灵骏智算资源的Serverless的RDMA库,才能更好的使用灵骏智算资源的RDMA网络能力。

安装RDMA库的示例代码如下。

RUN apt-get update && \
    apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends libnl-3-dev libnl-route-3-dev libnl-3-200 libnl-route-3-200 iproute2 udev dmidecode ethtool && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN cd /tmp/ && \
    wget http://pythonrun.oss-cn-zhangjiakou.aliyuncs.com/rdma/nic-libs-mellanox-rdma-5.2-2/nic-lib-rdma-core-installer-ubuntu.tar.gz && \
    tar xzvf nic-lib-rdma-core-installer-ubuntu.tar.gz && \
    cd nic-lib-rdma-core-installer-ubuntu && \
    echo Y | /bin/bash install.sh && \
    cd .. && \
    rm -rf nic-lib-rdma-core-installer-ubuntu && \
    rm -f nic-lib-rdma-core-installer-ubuntu.tar.gz

相关文档

使用灵骏智算资源(Serverless)提交训练任务的具体操作步骤,请参见。

Read more

白岩松:没有一代人的青春是容易的

白岩松:没有一代人的青春是容易的

来源于白岩松演讲《用理想和现实谈谈青春》 没有一代人的青春是容易的,关于青春每个人都有一段长长的独白。把理想藏起来,理想不必天天想。 因为买不起房子,所以爱情太贵了;人际关系太难处了,都不敢说不了;想到北京、上海、广州漂流的,你们是现在最委屈、最难受、最不幸的一代。从喝完酒后做什么事情来判断是哪一代人。 在我成长的年代里,我不知道什么是新闻。因为我在内蒙古一个边疆的小城市里。在我们那没有新闻,我也不知道记者是干什么的。广播学院考试容易过,逃课没人抓,课外书随便看。 我夫人认识我的时候,我什么都不是,只是一个很可爱的人。对于爱情来说,这个就够了。 但是现在要用房子、车子来衡量是否要跟他拥有爱情。对于60后来说,连上大学都是懵懵懂懂。房子太贵,我们这一代人从来都没有想过,能买自己的房子。 有人说,在上海漂流,是蚁族。但是我们这一代连漂流的机会都没有。你们的痛苦是让我们羡慕的幸福。 过了30之后社会才给我们这样的人提供漂流的机会。89年,我们的毕业空前绝后。我们是唱着大约在冬季,一批一批人在火车站泪洒火车站,充满了绝望,不知道未来在哪里。有时候,

By Ne0inhk
敏捷开发系列学习总结(11)——Scrum敏捷开发流程的三个角色、四个会议和三个物件

敏捷开发系列学习总结(11)——Scrum敏捷开发流程的三个角色、四个会议和三个物件

Scrum敏捷开发流程主要包扩三个角色、四个会议和个三物件。 三个角色 Scrum团队中包括三个角色,他们分别是产品负责人、开发团队和 项目的直接管理者(Scrum Master)。 Scrum 团队是自组织、跨职能的完整团队。自组织团队决定如何最好地完成他们的工作,而不是由团队外的其他人来指挥他 们。 跨职能的团队拥有完成工作所需要的全部技能,不需要依赖团队外部的人。Scrum 团队模式的目的是最大限度地优化适应性、创造性和生产力。 Scrum 团队通过迭代和增量交付产品功能的方法最大化反馈的机会。增量交付潜在可交付的产品增量保证了 每个迭代都有潜在可发布的版本。 Scrum角色之:产品负责人 产品负责人负责最大化产品以及开发团队工作的价值。实现这一点的方式会随着组 织、Scrum 团队以及单个团队成员的不同而不同。 产品负责人是管理产品待办事项列表的唯一责任人。产品待办事项列表的管理包括: ● 清晰地表达产品代办事项列表条目 ● 对产品代办事项列表中的条目进行排序,最好地实现目标和使命 ● 确保开发团队所执行工作的价值 ● 确保产品代办事项列表对所有人可见、

By Ne0inhk
Java基础学习总结(103)——Java 9的9个新特性

Java基础学习总结(103)——Java 9的9个新特性

Java 8 发布三年多之后,即将快到2017年7月下一个版本发布的日期了。 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新。 1. Java 平台级模块系统 Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面对两个基础的问题: 很难真正地对代码进行封装, 而系统并没有对不同部分(也就是 JAR 文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到, 这样就会导致无意中使用了并不想被公开访问的 API。此外,类路径本身也存在问题: 你怎么知晓所有需要的 JAR 都已经有了, 或者是不是会有重复的项呢? 模块系统把这俩个问题都给解决了。 模块化的 JAR 文件都包含一个额外的模块描述器。在这个模块描述器中, 对其它模块的依赖是通过 “ requires” 来表示的。另外,  “ exports”  语句控制着哪些包是可以被其它模块访问到的。所有不被导出的包默认都封装在模块的里面。如下是一个模块描述器的示例,存在于

By Ne0inhk
互联网产品之百万级高并发技术整体架构

互联网产品之百万级高并发技术整体架构

高并发是由于移动APP或网站PV(page view)即页面浏览量或点击量大,单台服务器无法承载大量访问所带来的压力,因此会采用服务器集群技术,用N台服务器进行分流,对于每次访问采取负载均衡策略,被分配到不同的服务器来处理请求。 负载均衡种类 一种是通过硬件来实现,常见硬件有F5,NetScaler、Radware和Array等商用的负载均衡器,但是它们是比较昂贵,成本比较高。 另一种是通过软件来实现,常见的软件有LVS、Nginx、Apache等,它们是基于Linux系统并且开源的负载均衡策略。 常用的软件解决方案之一 Keepalived的作用是检测服务器的状态利用其来避免单点故障、LVS(Linux Virtual Server)作为负载均衡和请求分发、Nginx(是一个高性能的HTTP和反向代理服务器)作为LVS的节点负载均衡使用,Tomcat作为web服务器具体处理访问请求,Redis作为缓存数据库,Mysql作为最终存储数据库。 整体架构图 整理架构图 架构说明 Keepalived:Keepalived是分布式部署系统解决系统高可用的软件,结

By Ne0inhk