阿里十万卡训练集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model Training

news2024/11/14 21:27:03

本博客的视频教程在这:

2.2阿里十万卡集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model_哔哩哔哩_bilibili

一、大模型训练的核心问题

1.1 流量模式的问题

大语言模型训练的流量模式问题可参考这个:

ECMP等价多路由机制,大模型训练负载均衡流量极化冲突原因,万卡(大规模)集群语言模型(LLM)训练流量拥塞特点_ecmp路由影响因素-CSDN博客

1.2 集群故障

大模型训练的集群故障特点:

a、大模型训练要多个GPU协同,故障敏感性高,一个GPU或链路故障了,可能会整个训练崩溃。

b、故障带来经济损失高,毕竟涉及成千上万张卡。

c、第一层交换机缺乏链路冗余,故障影响大。

具体点解释就是

a、故障敏感性高:LLM(Large Language Model,大语言模型)训练是一个同步过程,所有GPU协同完成一系列迭代;因此,任何GPU中的异常都可能延迟或崩溃整个训练过程。

b、故障带来的经济损失高:由于在LLM训练中生成检查点(checkpoint)需要大量存储(例如,每个GPU 30GB)和高开销(例如,100秒),我们的客户选择每隔几个小时生成一个检查点。LLM中的检查点生成间隔,通常在两到四个小时之间(即使在这些高间隔下,检查点引入的开销仍然在5%左右)。这意味着一旦出现故障,整个训练必须回滚到几个小时更早地接受再训练。考虑到使用3K GPU的训练任务每小时的训练成本为2万美元,失败可能会导致3万美元的经济损失。

c、第一层交换机(TOR(Top of Rack)指的是在每个服务器机柜上部署的交换机,直接连服务器网卡的交换机)故障影响大:如下图所示,第一层没有冗余链接,发生故障将带来巨大影响。虽然第2层和第3层具有丰富的冗余链路,但每个NIC都通过单个链路连接到ToR,从而带来单点故障风险。当访问链路(即连接NIC和ToR的链路)断开时,会导致相应的主机断开连接。更糟糕的是,ToR的故障可能会使数十甚至数百台主机不可用,导致服务质量严重下降。LLM训练需要数千个GPU协同训练,涉及数十个ToR和数千个光学模块和链路。由于规模如此之大,很难保证没有网络设备停机。监控和故障排除系统等工具可用于被动定位故障的根本原因,但无法防止训练崩溃。在我们的操作集群中,如图5所示,每月有0.057%的NIC ToR链路发生故障,约0.051%的ToR交换机遇到严重错误和崩溃。在这种高失败率下,一份训练工作每月会遇到1-2起事故。此外,每天都会发生5K-60K链路摆动的情况,也会导致暂时的性能下降。

二、阿里集群中心设计目标:

2.1 可扩展性。

为了适应未来更大规模训练需求的演变,我们设定了包含15K GPU的主要容量目标,这也符合主流LLM训练提供商(如谷歌、AWS、Azure和NVIDIA)为每个训练集群提供10K-30K GPU的要求。根据我们的经验,模型参数的数量在未来几年可能会继续增加一个数量级(即从1万亿个参数增加到10万亿个参数)。因此,我们数据中心的额外容量目标是能够支持100K GPU的规模。

2.2 高性能。

性能很重要。为了提高性能,我们的设计应该尽可能减少网络跳数。减少跳数不仅可以降低延迟,还可以减少ECMP哈希的次数,使路径选择方案更加精确。此外,我们的设计应该允许尽可能多的GPU到GPU的直接通信,而不是通过网络。

2.3 单ToR容错。

根据前面所提到的第一层交换机TOR故障影响大,可能影响LLM训练可靠性的最关键风险是单个ToR的错误。因此,我们的新网络架构应该从根本上避免拓扑级别的单个ToR故障。

三、阿里集群HPN拓扑架构设计:

3.1 网络架构总览

阿里的集群架构分为前端网络和后端网络(即训练网络)。

前端网络就是每台主机一个单独网卡的两个端口连接分别连接到前端两个ToR交换机。将存储流量与训练隔离开来,并兼容支持模型推理。

重点我们看下后端训练网络。

后端训练网络架构总结:

a、服务器内:GPU通过NVlink互联,每台主机配备了9个NIC,每个NIC具有2×200Gbps。这九个NIC中的一个(即图7中的NIC0)连接到前端网络,而其余八个NIC连接到后端网络,在LLM训练期间承载流量。这八个NIC中的每一个都服务于一个专用GPU,每个NIC两个端口。

b、Segment层(即服务器和ToR交换机连接层)每个GPU对应的NIC两个端口分别连接到不同的ToR交换机。每个Segment包含16个ToR交换机136个服务器超1000个GPU。

c、Pod层(将多个Segment层连接到一起):1个Pod包含15个Segment,约1万5千个GPU。1个Pod被划分为两个Plane(这个是防止ECMP流量冲突,后面细说)

d、Core层(将多个Pod连接到一起):支持10万GPU卡的集群。

3.2 架构优势

哈哈哈,NVlink的优势就不强调了啊,反正就是GPU直接连接带宽高,我们从Segment层开始。

A、Segment层优势

a1、容错:Segment层优势就是每个GPU对应的NIC两个端口分别连接到不同的ToR交换机。每个NIC的两个端口分别连接到不同的ToR,形成双ToR设计。这样就能容错了啊,一个链路挂了或者一个ToR交换机挂了,还有备份。

a2、通信优化1千多个GPU卡通信,只经过一个交换机。如图下图红线所示,同一轨道中的NIC通过同一组双ToR交换机连接,如主机1中的GPU1想与主机3中的GPU1通信,主机1GPU1→ToR1→主机3中GPU1;不同轨道中的NIC可以通过主机内+主机间转发的组合进行通信。如下图中黄线所示,如果主机1中的GPU1想与主机3中的GPU2通信,则转发路径为主机1中GPU1→主机1中GPI2→ToR3→主机3中GPU2。

B、Pod层优势

b1、 避免ECMP流量冲突:如果只是在ToR交换机和Agg交换机(第二层交换机,或叫汇聚层交换机)之间部署一个典型的Clos(或说是spine leaf)拓扑,如下图12(a)标明Load imbalance处所示,哈希极化仍然存在。因此采用图12(b)的拓扑结构,采用双平面(分组)设计,即连接到同一万卡两个端口的两个ToR被分为两个单独的组。简单点讲就是Pod层分组设计,组与组的流量不会流到一起,不会冲突

实验结果表明,这种分组(双平面)设计可以有效降低流量冲突,如下图所示,左图为Clos拓扑架构,流量冲突流量分布不均。右图为分平面拓扑设计,流量分布相对均匀。

b2、Pod层支持15K张GPU卡:分平面设计将ToR和Agg交换机之间的链路连接数量减半,使Agg交换机能够在同一Pod中支持更GPU。实现了在同一Pod中包含15K卡的目标,并为每个GPU提供400Gbps的网络访问容量。减少不必要的交换机和链路,成本节省了约30%15K张GPU卡只需通过三个交换机进行通信

C、Core层优势

c1、十万卡集群支持:增加核心层(core)交换机,支持十万卡集群的长期规划。

c2、根据并行策略降低Core层流量:DP数据并行、PP模型并行、TP张量并行训练时的流量大小如下表所示。PP产生的流量最低,并利用基本的发送/接收进行通信,这对网络带宽不敏感。因此,通过和工作调度器的适当合作,确保只有PP流量通过Core核心层,从而最大限度地减少多跳转发带来的副作用

c3、减少流量冲突和负载不均衡:(1) 我们在Core核心层进行双平面设计。(2) 在每个Core交换机中,我们采用预先设置每个端口哈希来确保从物理端口流向Pod𝑖的流量将唯一地转发到端口𝑘(与5元组无关),从而消除了哈希极化。

参考资料

Alibaba HPN: A Data Center Network for Large Language Model Training (ennanzhai.github.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 服务器下非root用户安装CUDA完整流程(多次踩雷经验总结)

参考博客: linux下安装cuda和cudnn(非root权限)_cuda下载安装 远程服务器 linux-CSDN博客 Linux下非root用户安装CUDA_linux下cuda-toolkit-archive-CSDN博客 非root用户安装cuda10.1,以及CUDA不同版本间切换_非root用户.run文…

已解决centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

出现cannot find a valid baseurl for repo:base/7/x86_64错误通常是由于YUM仓库源无法找到或无法访问,导致YUM无法正常工作。这种情况常见于CentOS 7系统。解决这个问题需要检查几个方面,如网络连接、DNS设置和YUM仓库源配置。 🧑 博主简介&…

aspose-words中插入附件及遇到的问题

aspose-words版本:21.1 java:1.8 目标: 前端使用tinymce编辑一段内容,后端使用aspose-words将html转为word,并将html中的附件转换为word中的附件。 形如: 实现方案: 使用正则表达式找出需要替…

setData的 Qt::CheckStateRole是model中checkbox的状态(选中否)

checkbox的状态 bool MissionModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (role Qt::CheckStateRole && col 3 ) { } }

【嵌入式裸机开发】基于stm32的照相机(OV7670摄像头、STM32、TFTLCD)

基于STM32的照相机 准备工作最终效果一、下位机1、主函数2、OV7670初始化 二、上位机1、控制拍照2、接收图片数据 准备工作 一、硬件及片上资源: 1,串口1(波特率:921600,PA9/PA10通过usb转ttl连接电脑,或者其他方法)上传图片数据至上位机 2,串口2(波特率:115200,PA…

Opencv学习-直方图应用

1. 直方图均衡化 如果一个图像的直方图都集中在一个区域,那么整体图像的对比度比较小,不便于图像中纹理的识别。例如,如果相邻的两个像素灰度值分别是 120 和 121 ,那么仅凭肉眼是无法区别出来的。同时,如果图像中所…

音频提取软件分享:6款好用音频提取工具推荐

在现代数字媒体中,音频提取已经成为一项至关重要的技能。无论你是视频创作者、播客主持人,还是音乐爱好者,从视频、电影或其他多媒体文件中提取音频,都是一项非常有用的操作。 本文将围绕音频提取,介绍这项技术的应用、…

一篇文章带你实现大模型及RAG入门---小白速进

项目概述:随着人工智能技术的飞速发展,大模型(Large Models)和检索增强型生成(Retrieval-Augmented Generation, RAG)已成为自然语言处理(NLP)领域的热点。大模型以其强大的理解和生…

Java二十三种设计模式-责任链模式(17/23)

责任链模式:实现请求处理的灵活流转 引言 在这篇博客中,我们深入探讨了责任链模式的精髓,从其定义和用途到实现方法,再到使用场景、优缺点、与其他模式的比较,以及最佳实践和替代方案,旨在指导开发者如何…

力扣第 411 场周赛题解

3258. 统计满足 K 约束的子字符串数量 I 给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件,则认为该字符串满足 k 约束: 字符串中 0 的数量最多为 k。字符串中 1 的数量最多为 k。 返回一个整数,表示 s …

系统编程-进程初步1

5 进程初步 一、认识进程 -- 进程Process是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 -- 程序运行起来就是一个进程 进程存在于运行内存中程序存在于硬盘中 -- windows下查看进程使用任务管理器进行查看 1…

EXCEL——Vlookup17个高级用法

大纲 一、基本语法 1、参数详解 二、入门篇 1、单条件查找 2、屏蔽查找返回的错误值 三、进阶篇 1、反向查找 2、包含查找 3、区间查找 4、含通配符查找 5、多列查找 6、多区域查找 四、高级篇 1、多条件查找 2、合并单元格查找 3、带合并单元格的多条件查找 …

轻松玩转音频剪辑:推荐四大必备工具!

在这个多媒体时代,音频剪辑技能变得至关重要。无论是制作短视频、音频节目,还是音乐创作,一款得心应手的音频剪辑工具都能让你事半功倍。今天,我们将推荐几款热门音频剪辑工具,助你轻松玩转声音世界 福昕音频剪辑 链…

【数学建模】趣味数学模型——等额还款数学模型

问题 在银行贷款中,通常采用等额还款。假定银行贷款的年利率为 p,贷款 k 元,分 m 年采用每月等额还款方式还清。问每月还款多少钱?总共还的钱是多少?每月还款中还本金和利息各是多少元? 如果考虑每月等额…

Webrtc之SDP协议

SDP简介 SDP 最常用于 RTC 实时通话的协商过程,在 WebRTC 中,通信双方在连接阶段使用 SDP 来协商后续传输过程中使用的音视频编解码器(codec)、主机候选地址、网络传输协议等。 在实际的应用过程中,通信双方可以使用 HTTP、WebSocket、Data…

MySQL数据库主从复制

主从复制原理 MySQL的复制类型 基于语句的复制 (默认)基于行的复制混合类型的复制MySQL主从复制的工作过程 主从复制设置 主从复制时基于二进制文件的所以需要打开二进制文件 主数据库 在MySQL配置文件/etc/my.cnf修改或增加 #启用了MySQL的二进制日…

集合及数据结构第三节————包装类和简单认识泛型

系列文章目录 集合及数据结构第三节————包装类和简单认识泛型 包装类和简单认识泛型 基本数据类型和对应的包装类装箱和拆箱泛型泛型类的使用裸类型(Raw Type) (了解)泛型如何编译的泛型的上界泛型方法 文章目录 系列文章目录集合及数据结构第三节…

linux上常见问题

1.普通用户下,不能使用sudo 解决方法 1.切换到root用户下执行该指令是没有问题的 2.更改配置文件sudoers 1.进入root用户下:su - 2.编辑sudoers :visudo 此时就打开了一个文件 3.在该文件找到这么一行内容:root ALL(ALL) ALL 4.在该行的…

CUDA-MODE课程笔记 第8课: CUDA性能检查清单

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第8课: CUDA性能检查清单 课程笔记 这节课实际上算是CUDA-MODE 课程笔记 第一课: 如何在 PyTorch 中 profile CUDA kernels 这…

(16)prometheus(普罗米修斯)监控的搭建

prometheus是由go语言编写的,监控服务器是否正常运行的工具,使用experter工具收集数据,传到prometheus服务器。可以结合grafana图形化和pagerduty报警发送有邮件和信息。 实验环境: 关掉防火墙和selinux grafana.example.com 1…