当前位置: 首页 > news >正文

人工智能GPU算力评估分析

GPU算力评估

7c90d76e65b2751e430da0d1a08c8603.jpeg

一、 关于训练GPU的带宽

大模型训练算力需求:总算力(Tlops)=6倍模型参数量×训练数据token量,精准高效满足大规模训练需求。

需要把那么计算量和通信量的比例是多少?

  • 3:指的是一次正向两次反向,反向是梯度和权重。
  • 在Transformer模型中,heads num代表了自注意力计算的并行度。输入嵌入向量被分解为多个“头”,每个“头”独立执行自注意力运算。这种设计使得每个“头”仅需处理部分嵌入向量,显著降低了内存需求,提升了模型效率。优化后的Transformer模型通过heads num的设置,实现高效且精准的自注意力计算。
  • "bytes per param"指的是每个参数的字节数。对于BF/FP16类型的参数,每参数占用2字节。除以该值,旨在将内存需求从字节量转化为参数数量,实现精准的资源评估。

若以每个head分配至一个GPU进行运算,并采用点对点通讯,基于4090的330 Tflops性能,为避免通信瓶颈,所需带宽至少为1.7 TB/s(330T / 384 * 2)。这一需求远超PCIe Gen4 x16的64 GB/s,即使NVLink的900 GB/s也难以满足。由此可见,高效通信技术在当前高性能计算领域具有极其重要的地位。

强调一点,注意力头(attention heads)在GPU间的分割,特指在训练大型深度学习模型(如Transformer)时,通过并行处理将不同注意力头分配到不同GPU,以优化计算效率。此分割通常限于单服务器内的多GPU操作,实现高效计算。

对于4090的330 Tflops性能,为确保通信无阻,所需带宽至少为859 GB/s(330T / 384),双向通信则翻倍至1.7 TB/s,远超PCIe Gen4 x16的64 GB/s带宽,确保高性能计算无瓶颈。

在应用张量并行时,不应过度细分工作负载,确保每个GPU处理足够多的attention heads。这样,由于多个attention heads共享输入矩阵X,输入矩阵的通信开销可以在这些heads之间分摊,从而提高计算量与通信量的比例。以NVIDIA 4090 GPU为例,其计算能力和单向通信带宽为330Tflops和32GB/s(因为64GB/s的带宽需要除以2来考虑单向通信)。这种情况下,计算和通信的比例至少需要达到10000,计算得张量并行的GPU数量应不超过2.4。这意味着,使用张量并行时最多只能使用两个GPU,超过这一数量,GPU的计算能力就无法被充分利用。

然而,当使用更为先进的NVIDIA H100 GPU,情况则有所不同。H100的峰值计算能力为989Tflops,而NVLink的双向带宽为900GB/s。这使得计算量与通信量的比例至少需要1100,计算得出张量并行的GPU数量可以达到11。这表明,在单机配置8张GPU卡进行张量并行是可行的,对于embedding size等于8192的模型,通信不会成为限制因素。

在优化模型性能时,对于embedding size为8192的模型,其参数存储与GPU数量的关系为:2 * 3 * 8192 / (GPU数量 * 2) ≥ 1100。经计算,张量并行GPU数量应不多于11个,即单机8卡配置恰好满足需求,确保通信不会成为性能瓶颈。这一配置优化了模型在GPU上的并行处理能力。

Llama3架构揭秘&FMOps

NVIDIA H200计算力等同H100,GPU显存与内存速度显著增强,将为用户带来前所未有的性能提升体验。

1. 显存提升的影响

  • 大显存助力训练更大规模模型,支持更大batch size,显著提升模型性能与训练效率,实现更高效学习。

2. 内存速度提升的影响

二、3D并行

Tensor、Pipeline和Data三种并行策略分别针对模型层内、层间及训练数据,优化GPU资源分配。这三者的并行度相乘,即确定训练任务所需的总GPU数量,实现高效资源利用与训练效率提升。

fa795dc28f071bdf94e9f2ec42155efe.jpeg

数据并行,即各GPU独立处理不同输入数据,计算梯度后汇总平均,再广播至各GPU进行更新(allreduce)。此方式直观高效,实现模型参数的快速同步更新。

702612ce29eea3639558f2b913c4ce27.jpeg

模型训练所需GPU内存涵盖模型参数、梯度、优化器内存及正向传播中的激活状态。确保充足资源,优化训练效率。

Pipeline parallelism(流水线并行)

当单GPU无法满足模型需求时,我们需借助多GPU实现model parallelism(模型并行),主要策略包括pipeline parallelism与tensor parallelism,确保高效并行处理大型模型。

8f0eb153c1579ec5e1cf1350d3a67b9c.jpeg

面临的问题是,链上仅一个GPU工作,其余闲置。为提升效率,可将一个batch切分为多个mini-batch,实现并行计算,每个mini-batch独立处理,显著提升整体运算效能。

9e25436b70ff62daa29ff287418f4fa7.jpeg

那么,是不是把 pipeline 搞的越深越好,每个 GPU 只算一层?

正向传播中间状态的存储容量随流水级数N成倍增长,对内存容量构成巨大挑战。每级流水线计算后,需历经2N-2轮正反向传播才能利用该中间状态,期间产生并保存2N-1个中间状态。当N值较大时,存储容量急剧膨胀,成为不可忽视的问题。因此,优化存储容量管理,提高内存使用效率,成为亟待解决的关键任务。

在pipeline设计中,相邻流水级间需通信,级数增加会直接导致通信数据量和时延显著上升,影响整体性能。


确保pipeline顺畅运行,需将batch size设为Transformer层数(通常几十层),再乘以data parallelism的并行数。尽管此设定下batch size较大,但务必注意其对模型收敛速度和精度的潜在影响。

因此,在内存容量足够的情况下,最好还是少划分一些流水级

LLaMA-2 70B模型:参数占140GB,梯度同;若选Adam优化器,状态需额外840GB。高效存储,强大性能,满足大规模AI应用需求。

正向传播的中间状态跟 batch size 和选择性重新计算的配置有关,我们在算力和内存之间取一个折中,那么正向传播的中间状态需要 token 长度 * batch size * hidden layer 的神经元数量 * 层数 * (10 + 24/张量并行度) 字节。假设 batch size = 8,不用张量并行,那么 LLaMA-2 70B 模型的正向传播中间状态需要 4096 * 8 * 8192 * 80 * (10 + 24) byte = 730 GB,是不是很大?

总需求高达1850GB,远超单模型参数的140GB。对于A100/H100卡(每卡80GB),至少需24张;而若选择4090(每卡24GB),则至少需78张。这一庞大需求彰显了计算资源的巨大挑战,体现了高性能计算在现代科技中的核心地位。

LLaMA-2模型仅80层,每张卡承载一层,完美契合。实现80个流水级并行,每个并行batch均能填满流水线,高效运算。

正向传播的中间状态存储膨胀至160轮,即放大160倍,难以承受。即便采用选择性重新计算策略,如将80层划分为8组,每组10层,中间状态存储仍激增16倍,挑战显著。

除极端情况需全面重算,常规反向传播无需逐层重新计算正向结果。但此举计算成本随层数激增,如80层模型需算3240层,开销是正常计算的40倍。如此高昂的代价,岂能容忍?优化算法势在必行,以减轻计算负担,提升模型效率。

中间状态存储挑战严峻,2048张卡间通信开销更是不可小觑。这些卡采用层级分配,各卡以不同输入数据进行独立流水计算,相当于独立参与数据并行处理。在数据并行中,每轮传输涉及梯度和全局平均梯度,其数据量等同于模型参数数量,这进一步加剧了通信负担。

把 70B 模型分成 80 层,每一层大约有 1B 参数,由于优化器用的是 32 bit 浮点数,这就需要传输 4 GB 数据。那么一轮计算需要多久呢?总的计算量 = batch size * token 数量 * 6 * 参数量 = 8 * 4096 * 6 * 1B = 196 Tflops,在 4090 上如果假定算力利用率 100%,只需要 0.6 秒。而通过 PCIe Gen4 传输这 4 GB 数据就已经至少需要 0.12 秒了,还需要传两遍,也就是先传梯度,再把平均梯度传过来,这 0.24 秒的时间相比 0.6 秒来说,是占了比较大的比例。

当然我们也可以做个优化,让每个 GPU 在 pipeline parallelism 中处理的 80 组梯度数据首先在内部做个聚合,这样理论上一个 training step 就需要 48 秒,通信占用的时间不到 1 秒,通信开销就可以接受了。

当然,通信占用时间不到 1 秒的前提是机器上插了足够多的网卡,能够把 PCIe Gen4 的带宽都通过网络吐出去,否则网卡就成了瓶颈。假如一台机器上插了 8 块 GPU,这基本上需要 8 块 ConnectX-6 200 Gbps RDMA 网卡才能满足我们的需求。

聚焦batch size,2048张卡集群运行时,每GPU mini-batch设为8,总batch size高达16384,堪称大规模训练之典范。然而,再增大batch size可能影响模型收敛速度及精度。因此,当前配置已趋近最佳,确保训练高效且精准。

大模型训练时,流水线并行与数据并行的核心挑战在于级数过多,引发正向传播中间状态存储容量瓶颈,亟需解决。

Tensor parallelism(张量并行)

仍有转机!最后一招是Tensor parallelism(张量并行),作为模型并行的高级形式,它在层内而非层间进行划分。这一方法将同一层的attention计算和Feed Forward Network分散至多个GPU处理,从而显著提升计算效率。

张量并行技术巧妙解决了GPU存储限制导致流水级过多的挑战。原本需80个GPU才能容纳的模型,通过单机8卡张量并行,仅需10个流水级即可。此外,该技术还能降低batch size,因各GPU协同处理同一输入数据,实现了高效计算与资源优化。

3d23b8a985bdb9c4de9ff18b2f0cb05a.jpeg

Attention计算高效并行,得益于多head机制,能同时关注输入序列不同位置。简单拆分head,即可实现并行处理,提升效率。

8edbf3f93bb72dcd06b12a60994ec471.jpeg

三、Batch size的公式

fadf592346ac34c4ae600edca94d3637.jpeg

global_batch_size =

gradient_accumulation_steps

* nnodes (节点数)

* nproc_per_node (每个节点卡数)

* per_device_train_batch_si(micro bs大小)

我们想象一个场景:

假设情景:

  • batch_size = 10 #每批次大小
  • total_num = 1000 #数据总量

按照 训练一个批次数据,更新一次梯度;

训练步数 train_steps = 1000 / 10 = 100

梯度更新步数 = 1000 / 10 = 100

当显存不足以支持每次 10 的训练量!需要减小 batch_size

通过设置gradient_accumulation_steps = 2

batch_size = 10 / 2 =5

优化后文案:采用每5个数据作为一个批次,训练2批次后更新一次梯度,既减轻显存负担,又确保每次更新基于10个数据,效率与准确性并存。

梯度更新步数 1000 / 10 = 100 未改变

梯度累加优化策略:每batch数据计算梯度后不清零,持续累加,直至达到gradient_accumulation_steps次数,再更新参数并清零梯度,实现高效参数更新,循环推进训练进程。

直接调小Batch Size的影响

 

  1. 训练稳定性
    • 小批量尺寸易导致梯度估计方差上升,影响训练稳定性。相反,大批量尺寸能提供更稳定的梯度估计,优化训练过程。
  2. 训练时间
  3. 学习率调整
    • 调整学习率对于较小的batch size至关重要。建议降低学习率,防止梯度更新过大引发训练波动,确保训练过程更加稳定。

使用梯度累加的优势

  1. 保持有效批次大小
  2. 减少训练步数
    • 梯度累加可以减少训练步数,因为每次参数更新仍然基于较大的有效批次大小。

f8b80c90f3b6fcb3e39189d11aa04ba7.jpeg

                   

 

-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity动画模块 之 Animation
  • Gradle相关的语法
  • 官宣|Apache Flink 1.20 发布公告
  • linux系统编程:缓冲区,文件io(19)
  • 【Linux】快速入门系列(四) —— Linux实用操作
  • 【LeetCode】452.用最少数量的箭引发气球
  • C++ 适配器 stack
  • 加强混合工作时代的组织网络安全态势
  • Feign的优化
  • https跟http有什么区别?
  • 《剑指offer》题目 C++详细题解
  • 代码随想录算法训练营 | 贪心算法 part04
  • 提升家居品质,从一颗螺丝开始:深度解析定制螺丝服务
  • 使用Nvm切换nodeJs高版本之后,使用npm install一闪而过
  • 分班查询一键发布,老师们都在用
  • [case10]使用RSQL实现端到端的动态查询
  • Cumulo 的 ClojureScript 模块已经成型
  • es6--symbol
  • js算法-归并排序(merge_sort)
  • node学习系列之简单文件上传
  • PHP面试之三:MySQL数据库
  • Python语法速览与机器学习开发环境搭建
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue 个人积累(使用工具,组件)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 那些年我们用过的显示性能指标
  • 物联网链路协议
  • 在Docker Swarm上部署Apache Storm:第1部分
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Note)C++中的继承方式
  • (二)WCF的Binding模型
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (六)Hibernate的二级缓存
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ******之网络***——物理***
  • *2 echo、printf、mkdir命令的应用
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net MVC4 上传大文件,并保存表单
  • .NET 通过系统影子账户实现权限维持
  • .NET 药厂业务系统 CPU爆高分析
  • .Net程序帮助文档制作