你的大模型为什么训不快?大模型预训练技术精要

大模型训练显存优化推理加速方案 当前的深度学习框架大都采用的都是fp32来进行权重参数的存储,比如Python float的类型为双精度浮点数fp64,pytorch Tensor的默认类型为单精度浮点数fp32。随着模型越来越大,加速训练模型的需求就产生了。在深度学习模型中使用fp32主要存在几个问题,第一模型尺寸大,训练的时候对显卡的显存要求高;第二模型训练速度慢;第三模型推理速度慢。其解决方案就是使用低精度计算对模型进行优化。本文主要讲解几种优化显存存储的方法。 阅读详情

大模型训练用时可以拆解成两方面:一个是模型运行时间,这部分要想快就需要买更好的机器,研究fused kernel来加速,一般时间周期长,难度高,这部分后面文章会有专门讨论。第二部分是通讯时间,大模型训练过程中需要不断从其他GPU,其他节点收集梯度信息更新模型。千万不可小看第二部分通讯时间,笔者在默认设置下在自己环境上跑大模型并行,发现通讯时间竟然高达90%,模型训练异常低效,优化后占比降低到20%左右,显著提升了模型训练效率,并且吞吐率到能对齐甚至略高于llama2官方的吞吐率。

训模型常见思路

为啥要做并行方式验证和调优?

是基于你的训练GPU,训练集群的inter-gpu带宽,inter-node带宽,模型大小,训练数据,选择一个最优吞吐率的并行方案(人工加粗加黑,集群不同并行方案就不同)。别人在别人机器上的验证并行方式不一定适用你自己的机器。一般做好并行方式验证调优的话吞吐率可以提升30%-50%。通过并行方式验证和调优,我们就是找到适合自己机器通讯环境的最优模型并行方式,这样可以逼近集群运算能力的上限。

如何确定使用什么样的并行策略?

如果模型不是特别大7B,13B直接数据并行Data parallel(DP)搞起(zero0,zero1,zero2往上尝试),还塞不下然后考虑加Pipeline parallel(PP)。如果模型特别大70B,130B的时候,这时候考虑加Tensor parallel(TP)到2-4-8(一般先设置为2比较合适,优先增加PP),扩大PP直到能塞下模型,如果已经能塞的下模型了,再增大PP速度会降低速度,因为需要通讯量增加了,在笔者的8节点64 A800机器上增加BS塞满显存并不能抵消通讯量带来的速度损失。如果还是实在塞不下再考虑gradient chekpointing和offload等技术。

注意:如果用了Pipeline parallel(PP),就不能用zero2和zero3。因为zero-2/3就将梯度也切分了,但在做梯度累计的时候,流水线并行的时候的需要从不同的nodes汇集梯度会需要巨量的通信开销,所以deepspeed直接禁用了zero2/3 + PP的组合。

一般单GPU batch size (micro batch size)设置为1就行了,大的batch size通过梯度累计实现,预训练过程是一个GPU计算密集型任务,GPU利用率一般都能跑满,所以加大batch size提速不大。更重要的是,显存应该用于存模型训练相关参数,比如模型参数,梯度,优化器参数等。这样可以减少整体通信开销,加快训练速度。有一种场景是可以增大micro batch size的,就是模型本来是塞不下的,我的PP从4增大到8以后可以塞下了,但空出来20%的显存,这时候我可以将micro batch size 从1变成2把多出来的20%显存占满,实验发现也可以提速5%左右,原理是GPU计算更大矩阵乘法效率会更高。

Zero3只适合机器比较少的时候玩一下,扩展到多机就很慢,因为zero3本质上其实是DP+TP,如果我们有64个GPU,就相当于64路TP了,通讯成本太高了限制了训练速度。

为啥优先用PP而不是TP(2以上)呢?

我们知道做Ring-AllReduce通讯量是和参数的通讯节点数量线性相关的。

具体可参考文章:https://zhuanlan.zhihu.com/p/617133971

这个问题和通讯量有关,PP简单来说就是横着切模型,模型切成很多块(chunk),但层还是完整的。这样每次通讯的话只需要在断点出进行块与块之间的通讯,因此PP无论切多少刀,每次只需要在两个节点之间通讯,并且不同chunk通讯是异步的,同一时间的通讯压力小。而TP是竖着切模型,每一层都切开了,通讯的话需要每一层不同块进行all reduce通讯,如果切得太多,则同一时间需要参与通讯的GPU数量就很多,训练就会慢。如果TP=2切一刀那么通讯量和PP是一样的,如果切成4份那么需要在4个节点之间进行同步通讯,通讯量直接翻倍。甚至TP如果切多了,比GPU个数还多了,就需要inter-node的通讯了,这个一般比Intra-node通讯慢很多,自然是无法承受的。

预训练常见技术:红榜

【Flash Attention】 可以提速+降显存,尤其是llama2这种序列较长的降显存非常明显,在Zero2+flash attention可以在单机8卡上放下7B模型,并且训练速度可以提速大约75%,不使用gradient checkpointing可以提速25%,相比于Zero2+gradient checkpointing的组合快了一倍。

具体可参考文章:https://zhuanlan.zhihu.com/p/645238961

【Zero优化器】 显存占用:zero0>zero1>zero2>zero3 显存降低大概每一级降低10%左右(具体看模型,以及卡的个数,总之不会多特别多),速度上来看的话zer0>zero1>zero2>zero3 每一级降低5%左右(速度上感觉不到特别明显的差别)。所以huggingface 推荐 直接可以上zero2,因为速度没有慢多少,但可以降低显存比较多。从tflops来看会比较明显 zero 0 > zero 1 > zero 2 。因为优化器中的参数是最多的,一般在megatron框架中加入–use-distributed-optimizer就是zero1阶段就能升下不少显存,实测速度也不会降低。

【Pipeline Parallel(PP)和Tensor Parallel(TP)】 在保证能塞得下模型的前提下,PP * TP 应该越少越好,因为多了每个GPU显存降下去了,但通讯时间延长了。但PP和TP怎么配置也是讲究的,TP应该比较小,如果从2开到4吞吐量下降13%左右,2还行明通讯瓶颈一般到2了。PP开的如果太小的话 bubble就会比较多,所以提速不明显。64卡训练13B模型比如 pp2 + tp 1 和pp1 + tp2速度差不多,但pp4 + tp1 比 pp1 + tp4快20%。所以笔者发现13B模型64卡A800训练最优设置的PP 4 + TP 1,同时PP2 + TP 2 效果也非常接近,这个也是因为降低了PP的bubble。一般建议TP大小为Hidden size / TP > 1024。并且笔者的机器是A800机器,机内带宽是比较低的,PP 和 TP 的先后不存在明显的差异。同时TP一般会搭配sequence-parallel进行使用,可以在降低显存的情况下,不增加任何通讯成本。

具体可参考文章:

https://zhuanlan.zhihu.com/p/646406772

https://zhuanlan.zhihu.com/p/626553071

图片

在使用PP的时候我们会发现各个节点的显存占用不一样,比如PP为4的时候显存占用Rank0>Rank1>Rank2>Rank3>Rank4。这个是因为PP不同Rank激活值存储时间不一样。比如下图中的Rank0-F0节点需要存储激活值的时间要比F1/2/3要长,这部分存储的激活值增加了显存占用。同时embedining层也在Rank0节点,比中间节点多占用了一些显存。

图片

【Selective Activation Recomputation】 按照huggingface的描述可以在仅仅增加2.7%的FlOPs overhead的情况下对于GPT3可以降低70%的显存,是一个大杀器。

【梯度累积 Gradient Accumulation】 可以打印出来每次forward时间backward时间,梯度做传播的时间,如果发现做梯度传播的时间占整体训练时间1/5以上,那么可以考虑增加global batch size提升gradient accumulation,这样可以减少梯度在各个节点通讯的次数,从而显著提升吞吐量,笔者在256卡A800测试中发现,global batch size增加四倍后吞吐量增加25%,进一步提升训练效率,同时增加global batch size,需要适应调整学习率,一般可以线性增加,比如global batch size增加4倍,LR也要增加四倍,要不然训练的iteration太少,模型更新太慢的话,走不到最优点。

预训练常见技术:黑榜

【Full Activation Recomputation】 为虽然可以降显存,但是速度会慢25%,能不用的时候尽量不用。降显存完全可以用PP 和 TP,尤其是PP对通讯要求不是特别高,并且设置的得当的话还会加速。这个技术更像是一个显存严重不足场景下不得已为之的方法。

【Offload Optimizer/parameters】 使用后训练速度会慢非常多,基本慢了一倍。这个技术更像是一个显存严重不足场景下的不得已为之的方法。

一些调参的takeways

如何选择常见的训练策略

图片

不同并行策略如何选择

图片

图片

如何选择合适的Zero优化器

以及Deepspeed相关训练策略

图片

图片

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
大模型训练之加速篇 -attention优化【线性化performer/VQ->分块计算MQA/GQA->计算(flash atten/slim/dec)->缓存MLA/pagedAtt】 加速 阅读详情

相关推荐

大模型预训练

大模型预训练是深度学习领域的一项关键技术,通过在大规模数据上进行初步训练,让模型学习通用的特征表示,进而在下游任务中实现更高的性能。无论是自然语言处理还是计算机视觉,预训练模型都大大提高了模型的效率和泛化能力,同时减少了对标注数据的依赖。在未来,随着计算资源和数据集的进一步扩大,预训练技术将在更多领域中发挥重要作用。

qq_45809323的博客 2069

一文搞懂大模型训练加速框架 DeepSpeed 的使用方法!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。在AI领域,常见的深度学习框架TensorFlow、PyTorch和Keras无疑是开发者们的得力工具,但随着模型规模的急剧膨胀,这些传统框架在应对大模型时往往会显得力不从心。

2401_84033492的博客 3450

大模型训练时间估算

使用激活重计算的一次训练迭代中,对于每个token,每个模型参数,需要进行。内存比较小时再开激活重计算,若内存充足则没必要开激活重计算了。

qq_44193969的博客 3273

【AI大模型】深入理解预训练与微调,为什么需要预训练,什么是微调?

“大模型需要先经过模型设计和实现,然后再进行预训练获得通用能力,最后通过微调强化能力” 今天我们就来深入理解一下预训练与微调。

bugyinyin的博客 1379

在 Windows 上使用 Anaconda 创建 配置 YOLOv8虚拟环境,并更改 pip 源以及以 可编辑模式 安装ultralytics

前往 NVIDIA cuDNN 下载页面,下载与您安装的 CUDA 版本匹配的 cuDNN 版本。:根据您的系统和 CUDA 版本,选择适当的 whl 文件。如下12.7,表示最高可装12.7版本CUDA,与上图中的支持的最高cuda版本一致。,无需重新安装,从而大幅提升开发效率,适用于项目开发、调试或依赖本地未发布的版本时使用,但需确保当前目录包含。:访问 NVIDIA 官方网站,下载与您的显卡和操作系统兼容的 CUDA 版本。首先,确保NVIDIA 显卡支持 CUDA,并安装相应版本的驱动程序。

weixin_44115575的博客 1893

华为IC岗笔试刷题含答案(2)

又做了几套题,记录了部分及答案,如有错误,欢迎评论指正。

Ingrid的博客 1万+

大模型技术精要指南,入门到精通看这篇就够了

随着模型和语料的扩大,大型语言模型展示了从少量上下文示例中学习的能力,这被称为上下文增强学习(ICL)。利用ICL,大型语言模型可以执行各种复杂任务,例如解决数学推理问题。ICL的基本理念是从类比中汲取经验。ICL与监督学习有一个显著的区别,就是它不需要进行参数更新,而是直接在预训练的语言模型上进行预测。ICL作为一种新的范式,具有很多天然的优势:由于演示是用自然语言编写的,因此提供了一个可解释的接口来与LLM通信。这种方法通过改变演示和模板,使得人类知识更容易融入LLM的上下文学习中。

HJS123456780的博客 1104

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2288

为什么预训练大模型要使用无监督学习的方式?

预训练一般采用无监督的方式进行,而微调一般采用监督学习的方式进行说到预训练大模型,首先就要先了解一下pre-training(预训练) 和 fine-tuning(微调)。什么是预训练?比如说你想做一个图像识别的大模型,这时你需要使用某种神经网络架构(比如Transformer)来设计一个神经网络,然后通过某种初始化方法对神经网络参数进行初始化。然后,你就可以使用大量的训练数据对模型进行训练,也就是不断的调整其参数;直到损失差不断的降低,然后达到一个合适的值;

xzp740813的博客 958

论文理解【LLM-Agent】——【SkillOpt】Executive Strategy for Self-Evolving Agent Skills

SkillOpt 将 agent skill 从人工或一次性 prompt artifact 转化为可验证、可控、可迁移的文本空间“可训练状态”,通过有界编辑、验证门控、拒绝编辑反馈和 slow/meta update,在不更新模型权重的情况下显著提升多类 agent 任务表现

佚失的诗篇 589

Python xlwings报错解决:从‘NoneType‘到完美运行WPS表格的完整指南

本文深入解析了使用Python xlwings库自动化WPS表格时遇到的经典'NoneType'报错(AttributeError: 'NoneType' object has no attribute 'apps')的根源与解决方案。核心在于pywin32版本与WPS的兼容性问题,文章提供了从版本降级、依赖管理到构建健壮自动化环境的完整实战指南,帮助开发者彻底解决兼容性难题,实现稳定运行。

n4o5p6q7r的博客 303

深入理解预训练与微调,为什么需要预训练,什么是微调?

大模型需要先经过模型设计和实现,然后再进行预训练获得通用能力,最后通过微调强化能力**”**在上一篇文章中介绍了预训练为什么要使用无监督学习,并简单介绍了预训练与微调;而在之前的文章中也讲过什么是训练和微调,而现在再回头看看发现之前的理解还是太肤浅了。所以,今天我们就来深入理解一下预训练与微调。大模型预训练与微调在之前学习大模型训练和微调的过程中,一直认为预训练就是使用大规模数据训练一个新模型的过程;而微调就是在预训练模型的基础之上,做更加细化的训练。

h1453586413的博客 1857

一个最简单的 ALV Tree 树控件例子,无需依赖任何第三方代码

此行代码声明报表程序,程序名称为。在 SAP ABAP 中,报表(report)程序表示该程序具有独立执行、输出及打印功能。在实际开发过程中可根据公司命名规范确定报表名称,例如销售报表、库存报表等。这段代码声明了一个结构类型。id:数据类型为char18,用于存放节点标识符。text:数据类型为char40,用于存放节点显示文本。在实际场景中,例如构造产品目录时,id可以表示产品编号,而text则可以显示产品名称,这样便于用户直观识别。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

大模型预训练技巧

领域模型 / 专家模型 就是在某一个专业领域性能特别好的模型,可能包括法律、医学、教育、role-play 等等。一般来说,领域模型比较重要的环节是 RAG,我们需要有一个特别高精的检索库,来辅助模型做一些专业的回答。这也就是说,做好 sft 和 ppo 似乎就可以了?其实,这么想也基本正确,因为大部分领域模型所处理的任务场景,80% 都是模型的通用能力能 cover 的。以法律大模型为例,“判断是否是法律问题、总结律师发言重点、提取法官判决结果等等?

狮子座明仔知识集散场 2955

【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果

游戏和应用开发中,真实感的交互设计能显著提升用户体验。Unity3D图书翻页效果插件为开发者提供了一种便捷方式,可在项目中实现高度拟真的书籍翻页动画。 本文介绍该插件的快速使用方法,涵盖从基础导入到自动翻页效果创建的全过程,让我们快速实现翻页效果。

努力前行,总会成为自己心中的那道光 1万+

功能安全实战系列09-英飞凌TC3xx LBIST开发详解

英飞凌Tricore/LBIST开发详解

initiallizer的博客 1106

大模型学习:为什么预训练大模型要使用无监督学习的方式?

比如说你想做一个图像识别的大模型,这时你需要使用某种神经网络架构(比如Transformer)来设计一个神经网络,然后通过某种初始化方法对神经网络参数进行初始化。然后,你就可以使用大量的训练数据对模型进行训练,也就是不断的调整其参数;直到损失差不断的降低,然后达到一个合适的值;这就是一个完整的训练过程,而这个训练完成的模型就叫做预训练模型。预训练一般使用无监督学习。所谓的微调其实和预训练差不多,只不过预训练是一个从未训练过的模型,其参数值都是随机的,而微调是在预训练的基础之上对部分参数进行调整。

2401_85373691的博客 1506

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

一文读懂预训练模型(非常详细),大模型预训练看我这一篇就够了!

对于希望学习算法或尝试现有框架的人来说,预训练的模型是一个很好的帮助。由于时间限制或计算资源的限制,不可能总是从头构建模型,这就是为什么存在预训练模型!通常而言,预训练好的网络参数,尤其是底层的网络参数,若抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。预训练模型是指在大规模数据集上预先进行训练的神经网络模型,通常在。

m0_63171455的博客 3423

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 前沿探索 | 让大语言模型更聪明!引入经验笔记本提升解决问题的能力
下一篇: 本地部署huggingface模型,建立自己的翻译应用
AI程序猿人
博客等级 码龄3年 6517粉丝 561原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值