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

图说GPT网络结构(参数量与计算量估计)

现在AI领域的主流模型几乎都是Transformer网络架构衍生而来。大热的LLM中的生成类模型很多都是来自于Transformer的变体,即decoder only架构。而GPT就是该类中的经典模型。尽管现在变体甚多,但大多没有根本性地改变其套路。

为了阐述方便,首先约定一些符号:

符号含义
bBatch size
LTransformer layer层数
sSequence length
nAttention head个数
hHidden size,或embedding dim
d每个head的hidden size,与前两者有关系 h = n d h = n d h=nd
VVocabulary size
P最大sequence length

在模型的优化时,我们经常需要一些信息,诸如特定配置的模型计算需要多少compute与memory资源,计算与数据传输大概需要多长时间等。这就要求我们对网络中的一些量(如参数量,计算量,内存使用量等)进行一些粗略估计。基于这些估计,还可以得到这些量之间的大致关系。如一个transformer layer的参数量约为 12 h 2 + 13 h 12 h ^ 2 + 13 h 12h2+13h,计算量约为 24 b s h 2 + 4 b h s 2 24 b s h^2 + 4 b h s^2 24bsh2+4bhs2。这意味着,在 h h h远大于 s s s的情况下,计算量与参数量大约是两倍关系。而Backward的计算量又约是Forward计算量的两倍(因需要对输入与权重都计算梯度)。由于transformer layer是网络中参数量(除embedding外)与计算量的主要贡献者。因此,计算量与除embedding外参数量之间有那个著名的公式 C ≈ 6 N C \approx 6 N C6N

但是,诸如这些都是general的结论。实际使用时,我们会碰到各种网络变体,各种配置或各种跑法,另外还可能需要回答一些更细节具体的问题,比如KV Cache节省了多少计算量,需要额外占用多少memory,把某层分布式计算需要增加多少通信量,或者MQA/GQA相比传统的MHA可以节省多少memory等等。而只有了解了那些估计是怎么来的,才能够更加灵活地运用。

下面以经典的GPT2模型为例,在其网络结构上标注了各操作的shape,并进行参数量和计算量估计。
Prefill阶段:
在这里插入图片描述
Generation阶段:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示
  • 更换代理IP技术有哪些?
  • 如何在多台Linux虚拟机上安装和配置Kafka集群
  • 【FastAPI】服务器使用SSE实现客户端之间的广播和点对点功能
  • C#命令行参数解析库System.CommandLine介绍
  • vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局
  • 关于文件操作
  • CAD图1
  • 功能测试干了三年,快要废了。。。
  • 多维度测评!希亦、美的、大宇三大爆款超声波清洗机,谁才是实力王?
  • 『 Linux 』HTTP(一)
  • 【GO开发】MacOS上搭建GO的基础环境-Hello World
  • python植物大战僵尸项目源码【免费】
  • AI 大模型开发 —— 面对转行挑战与机遇,探索有效学习开启职业转型
  • Java学习路线指南
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Bootstrap JS插件Alert源码分析
  • ERLANG 网工修炼笔记 ---- UDP
  • Flannel解读
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript函数式编程(一)
  • JS字符串转数字方法总结
  • Material Design
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 每天一个设计模式之命令模式
  • 驱动程序原理
  • 我是如何设计 Upload 上传组件的
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • C# - 为值类型重定义相等性
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​iOS安全加固方法及实现
  • ​Java基础复习笔记 第16章:网络编程
  • ​TypeScript都不会用,也敢说会前端?
  • ​力扣解法汇总946-验证栈序列
  • #宝哥教你#查看jquery绑定的事件函数
  • (Java入门)抽象类,接口,内部类
  • (poj1.3.2)1791(构造法模拟)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (区间dp) (经典例题) 石子合并
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • ***监测系统的构建(chkrootkit )
  • . Flume面试题
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 的缓存方案
  • .NET 快速重构概要1
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • @Async 异步注解使用
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息