昇腾CANN 7.0 黑科技:大模型训练性能优化之道

news2025/1/2 0:09:55

目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大模型预训练+微调”开发范式即可在实际业务场景取得理想的效果。从经济成本和时间成本来看,预训练是构筑各种行业模型的主要部分,优化大模型预训练具有非常重要的意义。

Open AI研究表明:大模型表现好坏强烈依赖于模型规模,弱依赖于架构;模型表现随着计算量、数据量和参数量提升;模型表现随着训练数据量和参数量的提升是可预测的。总体来讲,大参数量、大数据量、大计算量已经成为大模型表现好的主要因素。

来源:OpenAI Scaling laws for neural language models

这样的趋势给大模型训练带来什么挑战呢?

首先是算力问题。1750亿参数量的GPT-3训练3000亿token,需要算力3.14e11 TFLOPs,千卡A100集群训练时长需要22天左右(算力利用率约为50%);1.8万亿参数的GPT-4模型,训练13万亿token,需要算力2.15e13TFLOPs,2.5万卡A100训练时长达到90~100天(算力利用率32%~36%)。

其次是显存容量问题。1750亿参数量的GPT-3预训练大约需要3TB内存,大模型训练在短序列长度时,模型参数是内存占用的主要部分,在长序列长度时,激活内存是主要部分。总体来说,随着序列增长,需要的内存越来越大。

最后是通信开销问题。大模型预训练的高算力和大内存诉求往往通过分布式集群scale out的方式应对,但这将带来相当大的通信开销。具体包括模型并行通信开销、数据并行通信拖尾开销、流水并行的通信开销,另外还有流水并行引入的bubble。通常情况下,通信耗时约占E2E耗时的10%~30%,当存在更大通信域时,通信占比会更大。

因此,大模型预训练需要解决三个核心问题:大模型可部署,在内存受限的AI加速卡上放得下;充分发挥算力,提升计算效率,让训练流程更快;提升通信性能,降低通信开销,让计算更专注。

为了释放昇腾硬件算力,昇腾AI异构计算架构CANN发布更开放、更易用的CANN 7.0版本,全面兼容业界的AI框架、加速库和主流大模型,同时通过大颗粒算子深度融合、Kernel调度策略优化、通信并发流水等技术手段,解决大模型训练核心问题,使能大模型性能深度优化。

1  支持分布式切分策略+内存优化策略,让大模型放得下

学术界和工业界发明了很多大模型计算加速策略,包括最为经典的3D并行、序列并行、重计算、ZeRO系列的内存优化策略等等。通过这些并行策略,解决大模型放得下、训的快问题。基于昇腾AI处理器的多样算力和丰富的内存资源,异构计算架构CANN提供完备的技术栈功能,支持各种并行策略部署,也有很好的扩展能力,能支持新的并行算法和策略。下面来列举下在大模型训练中常用的计算加速策略:

  • 3D并行(TP/PP/DP)

  • 序列并行

来源:Reducing Activation Recomputation in Large Transformer Models

  • Checkpoint完全重计算

  •   选择性重计算
  1. Self-attention中的softmax和dropout算子计算结果占用内存大,但计算量相对少,不保留正向计算结果到反向,在反向计算流程可以重新计算softmax和dropout的结果。

来源:Reducing Activation Recomputation in Large Transformer Models

  • 内存优化:ZeRO1/2/3

来源:ZeRO Memory Optimizations Toward Training Trillion Parameter Models

2  充分发挥昇腾算力,提升计算效率,让模型跑得更快

在大模型计算优化方面,CANN通过高频算子优化、大颗粒算子融合、构建Transformer加速库等提升大模型计算效率。在调度方面,CANN通过执行器优化、算子Kernel重构等有效减少或避免host bound,提升算子在Host侧的下发性能。

1、高频算子优化,充分利用L1/L2 cache,发挥cube大算力

来源:Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM

矩阵乘MatMul算子是大模型的高频算子,在GPT-3模型中,占60%以上的计算量。CANN通过算子tiling优化合理切分数据,通过算子流水优化使得数据搬运与计算流水并行,同时,通过cube与vector算子融合,减少内存使用,最终MatMul算子Cube利用率提升显著,性能达到业界先进水平。

2、Flash/Sparse Attention大颗粒算子融合,减少显存耗用,提升计算性能

CANN基于Ascend C编程语言开发了Flash/Sparse Attention算子,支持fp16、bf16、fp32多种数据类型计算,并支持8K及以上的长序列,在bloom、llama、gpt-3等大模型有很好的应用。相对稠密模型,CANN还针对MOE稀疏模型进行了重要的优化,通过MOE融合算子优化内存占用,并实现All-to-All通信与计算并发流水,大幅度提升性能。

3、构筑Transformer加速库提升核心Kernel性能,助力模型加速

基于Transformer,业界已经诞生了很多大模型,CANN针对这些模型进行泛化性分析,构筑Transformer加速库,主要包括FlashAttention、MOE FFN、Norm类等等,加速库为大模型训练保证了高性能下界,客户基于此可以快速改造写出性能更优的算子。

Transformer高性能库构建策略

4、高性能Kernel动态调度和下发,有效减少或避免host bound 

大模型训练不仅要提升AI Core上算子的计算性能,也需提升算子在host侧的下发性能。若host侧下发算子不及时,可能会导致AI Core空闲等待,算力利用率降低(即host bound现象)。为此,CANN通过重构runtime执行框架,包括优化执行图,提供多种策略调度器,可根据模型结构特点选择最优调度策略,重构算子的Shape推导、tiling策略实现高性能Kernel,采用用户态直通device、Host2Device快速拷贝技术实现高性能kernel launch,多措并举使能Tiling和Launch性能倍增,有效减少或避免host bound。

3  降低通信开销,让计算更专注

大模型训练随着集群规模和通信域的增大,通信耗时占比升高,逐渐成为主要性能矛盾。提升通信性能、降低通信开销显得愈发重要。学术界和工业界发明了很多高性能通信算法,在此不一一介绍。下面介绍两个充分利用通信带宽的优化点:

  • 跨server all-reduce场景:SDMA&RDMA通信流水化

跨server实现all reduce一般分为四个阶段:server内reduce scatter、server间reduce scatter、server间all-gather,server内reduce scatter,在同一时刻,server间链路和server内链路只有一个在工作,由此会造成带宽的浪费。将通信数据切片排布成流水,使server内和server间的链路并发利用起来,通过小步快跑方式节省通信耗时。

跨server all-reduce场景:SDMA&RDMA通信流水化

  • 单server内all-reduce场景:TP通信复用RDMA带宽

单server内SDMA通信(比如all-reduce)时,server间的RDMA通信链路通常是空闲的。此时将数据按照一定比例切分,分别由server内SDMA通信、server间的RDMA通信同时传输,从而充分利用server内和server间的通信链路并发,提升通信性能。

单server内all-reduce场景:TP通信复用RDMA带宽

4  总结

昇腾CANN借助根技术创新对大模型训练过程进行了系统级的优化加速,通过合理的分布式切分策略和内存优化策略,使大模型放得下;通过计算层、调度层和通信域的优化,使大模型跑得快,未来CANN也将持续研究、不断突破,以大模型赋能应用,加速千行万业智能化转型。

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

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

相关文章

量子力学期末复习--1

量子力学解题技巧--1 基础知识 薛定谔方程 Ehrenfest 定理 不确定性原理:正则对易关系:自由粒子:对于自由粒子,分离变量解不代表物理上可实现的态。但其含时薛定谔方程的一般解仍旧是分离变量解的线性组合 典型题目 自由粒子…

029-第三代软件开发-加载本地字体库

第三代软件开发-加载本地字体库 文章目录 第三代软件开发-加载本地字体库项目介绍加载本地字体库 关键字: Qt、 Qml、 QFont、 QFontDatabase、 ttf 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Langu…

深圳世有伯乐教育科技有限公司——LJ培训

今天来吐槽一波 深圳世有伯乐教育科技有限公司就是一个垃圾的培训机构,不,说是培训机构都是扭曲事实了,因为它根本就没有国家认可的办学许可证。光说没法让人信服,以下是企查查的截图: 世有伯乐的工商信息图片 续上&…

MPC预测控制概述和C++ 中的模型库

系列续篇: C 中的模型预测路径积分 (MPPI) 控制-CSDN博客 一、说明 以下文章描述了应用模型预测控制器的简单控制系统方法。本文讨论了这种类型的控制的基本机制,该机制适用于各种工程领域。 MPC 涉及对未来系统行为的预测(由一组方程描述的模…

.net6部署到linux上(CentOS Linux 7)

目录 一、先在linux上配置.net环境 添加 Microsoft 包存储库 安装 SDK 安装运行时 检查 SDK 版本可使用终端查看当前安装的 .NET SDK 版本。 打开终端并运行以下命令。 二、创建.net6 mvc项目 并发布 创建项目 修改默认端口 打包发布到文件夹 运行打包项目查看项目是否…

华为OD机试 - 代表团坐车 - 动态规划(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

【vue】vue本地储存、会话存储插件vue-ls的使用:

文章目录 一、安装:二、vue项目中使用:三、API说明: 一、安装: npm install vue-ls -S 或 yarn add vue-ls二、vue项目中使用: //在vue项目中的入口文件main.js中引入import Storage from vue-ls;options {namespac…

DNS和ICMP协议

目录 一、DNS协议 二、ICMP协议 1.ICMP协议 2.ping命令 在讲完了OSI模型每层协议的讲解后,还有一些协议我们需要再讲解一下。 一、DNS协议 DNS是一整套从域名映射到IP地址的系统,也叫做域名解析服务,端口号为53。 我们生活中访问网站都…

微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题

本心、输入输出、结果 文章目录 微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题前言微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题完整的更新日志[Windows 中的 Copilot][开始菜单][任务栏搜索][设置] 已知问…

P1950 长方形

题目&#xff1a; P1950 长方形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算法&#xff1a; dp动态规划 代码&#xff1a; #include<iostream> #include<string> typedef unsigned long long ull; const int N 1010; using namespace std;int r, c, i, …

kali安装nodejs、npm失败

更新apt-get再安装&#xff0c;更新时间比较久&#xff0c;看网速&#xff0c;中间有一些确认步骤 22 apt-get update23 apt-get upgrade24 apt-get install nodejs25 node26 npm27 apt-get install npm

vulnhub靶机Funbox11

下载地址&#xff1a;Funbox: Scriptkiddie ~ VulnHub 主机发现 arp-scan -l 目标192.168.21.164 端口扫描 nmap --min-rate 1000 -p- 192.168.21.164 端口好多处理一下吧 nmap --min-rate 1000 -p- 192.168.21.164 |grep open |awk -F / {print $1} |tr \n , 端口服务版本…

Openssl数据安全传输平台004:套接字C语言API封装为C++类 / 客户端及服务端代码框架

1. 客户端C API // 客户端 // C API int sckClient_init(); /* 客户端 连接服务器 */ int sckClient_connect(char *ip, int port, int connecttime, int *connfd); /* 客户端 关闭和服务端的连接 */ int sckClient_closeconn(int connfd); /* 客户端 发送报文 */ int sckClie…

1024MSF工具的基本使用(第十五课)

1024MSF工具的基本使用(第十五课) 1 MSF 介绍 MSF&#xff08;Metasploit Framework&#xff09;是一款开源的渗透测试工具&#xff0c;旨在帮助安全专家进行安全测试&#xff0c;评估和漏洞利用。MSF提供了一系列的漏洞利用、Payload以及Post Exploit模块&#xff0c;使得渗…

【经验分享】WSL中使用USB设备

具体步骤&#xff1a; 首先在windows中安装 USBIP 工具&#xff0c;在GitHub上下载安装包并根据README文档的说明进行操作&#xff1a; 下载链接&#xff1a;https://github.com/dorssel/usbipd-win/releases 同时在 WSL Linux 端也需要安装编译内核所需的库和工具&#xff0c…

在 Python 中执行 Shell 命令并获取输出

在本文中&#xff0c;我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。 从 Python 脚本执行 CMD 命令并使用 os.system() 获取输出 我们出于不同目的在命令提示符或任何其…

Rclone连接Onedrive

一、Rclone介绍 Rclone是一款的命令行工具&#xff0c;支持在不同对象存储、网盘间同步、上传、下载数据。 我们这里连接的onedrive&#xff0c;其他网盘请查看官方文档。 注意&#xff1a; 需要先在Windows下配置好了&#xff0c;然后再将rclone配置文件复制到Linux的rclone配…

文件读取结束的判定

大家好啊&#xff0c;我们今天来补充文件操作的读取结束的判定。 被错误使用的feof 牢记&#xff1a;在文件读取过程中&#xff0c;不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候&#xff0c;判断是读取失败结束&#xff0c;还是遇到文件尾…

【鸿蒙软件开发】进度条Progress

文章目录 前言一、进度条Progress1.1 创建进度条1.2 进度条样式进度条样式ProgressType.Linear&#xff08;线性样式&#xff09;ProgressType.Ring&#xff08;环形无刻度样式&#xff09;ProgressType.ScaleRing&#xff08;环形有刻度样式&#xff09;ProgressType.Eclipse&…

028-第三代软件开发-CheckBox

第三代软件开发-CheckBox 文章目录 第三代软件开发-CheckBox项目介绍CheckBox实际使用 关键字&#xff1a; Qt、 Qml、 CheckBox、 indicator、 contentItem 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language…