大模型-训练推理 模型大小与硬件GPU 选取的大致关系-05

目录
  • 0. 计算公式
  • 1. 市面上常见的显卡
  • 2. 训练
  • 2. 推理

0. 计算公式

重点:显存大小 = 模型参数占用 + 梯度占用 + 优化器占用 + CUDA kernel占用 + 中间计算结果
每个神经元节点 不仅仅有自身的权重值
在进行反向传播的时候还有梯度的累计值

1. 市面上常见的显卡

英伟达GPU
3060 12G
3090 24G
4090 24G
A100 80G / 40G

2. 训练

LlaMa-7B 为例

  • 模型参数:等于参数量每个参数所需内存。
    对于 fp32,LlaMa-7B 需要 7B4 bytes = 28GB内存
    对于 int8,LlaMa-7B 需要 7B
    1 byte = 7GB

  • 梯度:同上,等于参数量每个梯度参数所需内存。
    对于 fp32, LlaMa-7B 需要 7B4 bytes = 28GB内存
    对于 int8, LlaMa-7B 需要 7B
    1 byte = 7GB

  • 优化器参数:不同的优化器所储存的参数量不同。
    对于常用的 AdamW 来说,需要储存两倍的模型参数(用来储存一阶和二阶momentum)。
    对于fp32 的 LLaMa-7B,AdamW 需要 7B8 bytes = 56 GB
    对于int8 的 LLaMa-7B,AdamW 需要 7B
    2 bytes = 14 GB

  • CUDA kernel也会占据一些 RAM,大概 1.3GB 左右

  • 中间计算结果
    layers * batch_size * sequence_length * (layers * sequence_length + 5 * dim(隐藏状态维度))
    32 * 1 * 2048 * ( 32 * 2048 + 5 * 4096 )
    对于int8 的 LLaMa-7B:32 * 1 * 2048 * ( 32 * 2048 + 5 * 4096) * 1 byte / 1024^3 = 5.25GB

综上,int8 精度的 LlaMa-6B 模型部分大致需要:

注意以上是int8精度的 float32还得乘以4

2. 推理

推理阶段只有一个forwar过程没有梯度更新 以及 优化器
LlaMa-7b-hf float32为例

  • 1b(10亿)个模型参数,约占用4G显存 (实际大小:10^9 * 4 / 1024^3 ~= 3.725 GB)
  • LlaMa的参数量为7b
  • 中间计算结果: layers * batch_size * sequence_length * (layers * sequence_length + 5 * dim(隐藏状态维度))
    32 * 1 * 2048 * ( 32 * 2048 + 5 * 4096 )
    32 * 1 * 2048 * ( 32 * 2048 + 5 * 4096) * 4 byte / 1024^3 = 21GB

总共:3.725 * 7 + 21GB = 47.075 GB

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MSSprinkler:一款针对MS账号的密码喷射安全测试工具

原创 Alpha_h4ck FreeBuf关于MSSprinkler MSSprinkler是一款功能强大的密码喷射安全测试工具,可以帮助广大研究人员从外部角度测试其 Microsoft Online 帐户的安全性。 MSSprinkler 是用 PowerShell 编写的,可以直接作为模块导入,并且没有其他依赖项。MSSprinkler 依靠 Micr…

Unbound数据结构分析

mesh结构msg_cache + rr_cache缓存数据 msg_cache里的entry是msgreply_entry,rr_cache里的entry是ub_packed_rrset_key。 ub_packed_rrset_key的rrset_id_type通过alloc_get_id方法获取。 ub_packed_rrset_key通过alloc_special_obtain方法从env->alloc分配。

开发中常用到的10个数据结构

开发中常用到的10个数据结构 ▪️列表(List):用于存储有序集合,如Twitter动态流🐦。 ▪️数组(Array):连续存储的元素集合,适用于数学运算和大数据集📊。 ▪️栈(Stack):后进先出(LIFO)的数据结构,常用于撤销/重做功能🔄。 ▪️队列(Queue):先进先出(F…

【JavaScript安全】JS沙箱隔离

原创 码中仙一、什么是沙箱环境 在计算机安全中,沙箱(Sandbox)是一种用于隔离正在运行程序的安全机制,通常用于执行未经测试或不受信任的程序或代码,它会为待执行的程序创建一个独立的执行环境,内部程序的执行不会影响到外部程序的运行。 其实在前端世界里,沙箱环境无处…

Unbound启动流程分析

unbound入口在run_daemon方法。 daemon_init方法,分配struct daemon结构体,设置信号处理方法,初始化openssl库,设置时区,设置daemon->need_to_exit为0,初始化模块栈(modstack_init方法)设置deamon->mods结构体(struct module_stack)的num为0、mod为NULL,为dae…

如何给 GoPro 拍摄的视频添加时间水印 All In One

如何给 GoPro 拍摄的视频添加时间水印 All In One 执法记录仪 时间水印是指在拍摄的照片或视频上添加一个显示时间的标识。 这个标识通常以数字的形式出现在画面的一个角落,它显示了拍摄的具体日期和时间。 时间水印的目的是为了记录下拍摄的时间,以便用户可以更好地回顾和分…

《使用Gin框架构建分布式应用》读后感

1.为什么选择这本书? 因为工作中有一个项目使用了Go进行开发,项目用到了MySQL, Redis,GORM,Rabbitmq,Zap等组件进行开发,没有使用到Web框架,因为本人是Web开发方向,所以就想了解下Web框架在Go开发中的应用,看看别人是怎么用的。国外的Go Web框架有:Echo, Gin, Iris, …

计算机组成原理基础知识(一)

来源:早期的冯诺依曼计算机以运算器为中心,现代计算机以存储器为中心; 现代计算器的结构:计算机硬件的基本组成:计算机系统的层次结构:计算机的性能指标:小练习:进制转换:

《图解设计模式》 第四部分 分开考虑

第九章 Bridge模式//使用代码 public class Main(){public static void main(String[] args){Display d1 = new Display(new StringDisPlayImpl("Hello, China."));Display d2 = new CountDisplay(new StringDisPlayImpl("Hello, World."));CountDisplay d…

Redis底层数据结构 SDS

SDS 字符串在 Redis 中是很常用的,键值对中的键是字符串类型,值有时也是字符串类型。 Redis 是用 C 语言实现的,但是它没有直接使用 C 语言的 char* 字符数组来实现字符串,而是自己封装了一个名为简单动态字符串(simple dynamic string,SDS) 的数据结构来表示字符串, 也…