深入探究理解大型语言模型参数和内存需求
概述
大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解决方案。
例如,OpenAI 的 GPT-4 在理解和生成类似人类的文本方面表现出了显著的进步,而谷歌的 Gemini 模型则擅长处理各种数据类型,包括文本、图像和音频,从而实现更无缝和上下文相关的交互。同样,Anthropic 的 Claude 3 模型以其多语言能力和在 AI 任务中的增强性能而闻名。
随着 LLM 的发展不断加速,了解这些模型的复杂性(尤其是它们的参数和内存要求)变得至关重要。本指南旨在揭开这些方面的神秘面纱,提供详细且易于理解的解释。
原文地址:https://www.unite.ai/understanding-large-language-model-parameters-and-memory-requirements-a-deep-dive/
大型语言模型的基础知识
什么是大型语言模型?
大型语言模型是使用海量数据集训练的神经网络,用于理解和生成人类语言。它们依赖于 Transformers 之类的架构,这些架构使用自注意力等机制来处理和生成文本。
LLM 中参数的重要性
参数是这些模型的核心组成部分。它们包括权重和偏差,模型会在训练期间调整这些参数,以尽量减少预测误差。参数的数量通常与模型的容量和性能相关,但也会影响其计算和内存需求。
了解 Transformer 架构
概述
Vaswani 等人在 2017 年发表的论文《Attention Is All You Need》中引入的 Transformer 架构已成为许多 LLM 的基础。它由一个编码器和一个解码器组成,每个编码器和解码器都由多个相同的层组成。
编码器和解码器组件
- Encoder 编码器:处理输入序列并创建上下文感知表示。
- 解码功能:使用编码器的表示和先前生成的标记生成输出序列。
关键构建模块
- 多头注意力:使模型能够同时关注输入序列的不同部分。
- 前馈神经网络:给模型增加了非线性和复杂性。
- 层标准化:通过规范中间输出来稳定和加速训练。
计算参数数量
计算基于 Transformer 的 LLM 中的参数
让我们分解一下基于 Transformer 的 LLM 的每个组件的参数计算。我们将使用原始论文中的符号,其中 d_model
表示模型隐藏状态的维度。
- 嵌入层:
- Parameters = vocab_size * d_model
- 多头注意力:
- For h heads, with d_k = d_v = d_model / h:
- Parameters = 4 * d_model^2 (for Q, K, V, and output projections)
- 前馈网络:
- Parameters = 2 * d_model * d_ff + d_model + d_ff
- Where d_ff is typically 4 * d_model
- 层标准化:
- Parameters = 2 * d_model (for scale and bias)
一个Transformer层的总参数:
- Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm
对于具有 N
层数:
- Total Parameters = N * Parameters_layer + Parameters_embedding + Parameters_output
示例计算
让我们考虑具有以下规格的模型:
- d_model = 768
- h (number of attention heads) = 12
- N (number of layers) = 12
- vocab_size = 50,000
- 嵌入层:
- 50,000 * 768 = 38,400,000
- 多头注意力:
- 4 * 768^2 = 2,359,296
- 前馈网络:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
- 层标准化:
- 2 * 768 = 1,536
每层总参数:
- 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984
12层的总参数:
- 12 * 7,081,984 = 84,983,808
模型参数总计:
- 84,983,808 + 38,400,000 123,383,808
该模型大约有 123 亿个参数。
内存使用类型
使用 LLM 时,我们需要考虑两种主要类型的内存使用情况:
- 模型内存:存储模型参数所需的内存。
- 工作内存:推理或训练期间所需的内存,用于存储中间激活、梯度和优化器状态。
计算模型内存
模型内存与参数数量直接相关。每个参数通常存储为 32 位浮点数,尽管有些模型使用 16 位浮点数进行混合精度训练。
模型内存(字节)= 参数数量 * 每个参数的字节数
对于具有 123 亿个参数的示例模型:
- 型号内存(32 位)= 123,383,808 * 4 字节 = 493,535,232 字节 ≈ 494 MB
- 型号内存(16 位)= 123,383,808 * 2 字节 = 246,767,616 字节 ≈ 247 MB
评估工作内存
根据具体任务、批次大小和序列长度,工作内存要求可能会有很大差异。推理过程中的工作内存粗略估计为:
工作内存 ≈ 2 * 模型内存
这用于存储模型参数和中间激活。在训练期间,由于需要存储梯度和优化器状态,内存要求可能更高:
训练内存 ≈ 4 * 模型内存
对于我们的示例模型:
- 推理工作内存 ≈ 2 * 494 MB = 988 MB ≈ 1 GB
- 训练内存 ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB
稳定状态内存使用情况和峰值内存使用情况
在基于 Transformer 架构训练大型语言模型时,了解内存使用情况对于高效分配资源至关重要。让我们将内存需求分为两大类:稳定状态内存使用情况和峰值内存使用情况。
稳定状态内存使用情况
稳定状态内存使用情况包括以下部分:
- 型号重量:FP32 模型参数的副本,需要 4N 字节,其中 N 是参数的数量。
- 优化器状态:对于 Adam 优化器,这需要 8N 字节(每个参数 2 个状态)。
- 渐变:渐变的FP32副本,需要4N字节。
- 输入数据:假设输入为 int64,这需要 8BD 字节,其中 B 是批量大小,D 是输入维度。
总的稳定状态内存使用量可以近似为:
- M_steady = 16N + 8BD 字节
峰值内存使用率
在反向传递期间,当激活被存储用于梯度计算时,内存使用量达到峰值。造成内存峰值的主要因素有:
- 层标准化:每层标准需要 4E 字节,其中 E = BSH(B:批量大小,S:序列长度,H:隐藏大小)。
- 注意力障碍:
- QKV计算:2E字节
- 注意力矩阵:4BSS 字节(S:序列长度)
- 注意输出:2E字节
- 前馈模块:
- 第一线性层:2E 字节
- GELU 激活:8E 字节
- 第二线性层:2E 字节
- 交叉熵损失:
- Logits:6BSV 字节(V:词汇量)
总激活内存可以估算为:
- M_act = L * (14E + 4BSS) + 6BSV 字节
其中 L 是 Transformer 层的数量。
总峰值内存使用量
训练期间的峰值内存使用量可以通过结合稳态内存和激活内存来近似:
- M_peak = M_steady + M_act + 4BSV 字节
额外的 4BSV 项解释了在后向传递开始时的额外分配。
通过了解这些组件,我们可以优化训练和推理期间的内存使用情况,确保高效的资源分配并提高大型语言模型的性能。
缩放定律和效率考虑
LLM 的缩放定律
研究表明,随着参数数量的增加,LLM 的性能趋向于遵循某些缩放规律。Kaplan 等人 (2020) 观察到,模型性能随着参数数量、计算预算和数据集大小的幂律而提高。
模型性能和参数数量之间的关系可以近似为:
绩效∝N^α
其中 N 是参数的数量,α 是缩放指数,对于语言建模任务通常约为 0.07。
这意味着为了实现 10% 的性能提升,我们需要将参数数量增加 10^(1/α) ≈ 3.7 倍。
效率技巧
随着LLM课程的不断发展,研究人员和实践者已经开发出各种技术来提高效率:
a) 混合精度训练:对某些操作使用 16 位甚至 8 位浮点数,以减少内存使用和计算要求。
b) 模型并行:将模型分布在多个 GPU 或 TPU 上,以处理超出单个设备容量的更大模型。
c) 梯度检查点:通过在反向传递过程中重新计算某些激活而不是存储它们来用计算换取内存。
d) 修剪和量化:删除不太重要的权重或降低其训练后的精度,以创建更小、更高效的模型。
e) 蒸馏:训练较小的模型来模仿较大模型的行为,有可能用更少的参数保留大部分性能。
实例和计算
GPT-3 是最大的语言模型之一,拥有 175 亿个参数。它使用了 Transformer 架构的解码器部分。为了了解它的规模,让我们用假设值来分解参数数量:
d_model = 12288
d_ff = 4 * 12288 = 49152
- 层数 = 96
对于一个解码器层:
总参数 = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 亿
共计 96 层:
1.1亿*96=105.6亿
其余参数来自嵌入和其他组件。
结论
了解大型语言模型的参数和内存需求对于有效设计、训练和部署这些强大的工具至关重要。通过分解 Transformer 架构的组件并研究 GPT 等实际示例,我们可以更深入地了解这些模型的复杂性和规模。
相关文章:
深入探究理解大型语言模型参数和内存需求
概述 大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解…...
maven 私服搭建(tar+docker)
maven私服搭建 一、linux安装nexus1、工具下载 二、 docker 搭建nexus1、镜像下载创建目录2、运行nexus3、访问确认,修改默认密码,禁用匿名用户登录4、创建仓库5、创建hostd仓库6、创建Blob Stores7、创建docker私服1、创建proxy仓库2、创建hotsed本地仓…...
银行业务知识全篇(财务知识、金融业务知识)
第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…...
解决ElasticJob项目重启ZooKeeper注册冲突以及zkCli删除目录
解决ElasticJob项目重启ZooKeeper注册冲突以及zkCli删除目录 背景 在现代化的分布式调度系统中,ElasticJob 是一个非常流行的选择。它利用 ZooKeeper 作为注册中心来管理任务分片。然而,有时在项目重启时,会遇到 ZooKeeper 注册冲突的问题&…...
【EI检索】第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)
一、会议信息 大会官网:www.mvipit.org 官方邮箱:mvipit163.com 会议出版:IEEE CPS 出版 会议检索:EI & Scopus 检索 会议地点:河北张家口 会议时间:2024 年 9 月 13 日-9 月 15 日 二、征稿主题…...
vscode通过ssh链接远程服务器上的docker
目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…...
使用NIFI连接瀚高数据库_并从RestFul的HTTP接口中获取数据局_同步到瀚高数据库中---大数据之Nifi工作笔记0067
首先来看一下如何,使用NIFI 去连接瀚高数据库. 其实,只要配置好了链接的,连接字符串,和驱动,任何支持JDBC的数据库都可以连接的. 首先我们用一个ListDatabaseTables处理器,来连接瀚高DB 主要是看这里,连接地址,以及驱动,还有驱动的位置 这个是数据连接的配置 jdbc:highgo://…...
IDEA的工程与模块管理
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
[M前缀和] lc3096. 得到更多分数的最少关卡数目(前缀和+思维)
文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:3096. 得到更多分数的最少关卡数目 2. 题目解析 比较有意思的题目,仔细读题后发现解题没啥难度,但是如何写好、写的更简洁需要注意下: 思路: 数据量 1e5&#…...
基础vrrp(虚拟路由冗余协议)
一、VRRP 虚拟路由冗余协议 比如交换机上联两个路由器,由两个路由虚拟出一台设备设置终端设备的网关地址,两台物理路由的关系是主从关系,可以设置自动抢占。终端设备的网关是虚拟设备的ip地址,这样,如果有一台路由设备…...
《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样
米哈游的《绝区零》最近在网上爆火呀,不过很多人都想知道mac电脑能不能玩《绝区零》,今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏,Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…...
Mysql sql技巧与优化
1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话,使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…...
7.SpringBoot整合Neo4j
1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> 说明:这里引入neo4j的版本跟spring框架的版本有关系。需要注意不同的版本在neo…...
教室管理系统的开发与实现(Java+MySQL)
引言 教室管理系统是学校和培训机构日常运营中不可或缺的工具。本文将介绍如何使用Java、Swing GUI、MySQL和JDBC开发一个简单而有效的教室管理系统,并涵盖系统的登录认证、教室管理、查询、启用、暂停和排课管理功能。 技术栈介绍 Java:作为主要编程…...
Go的入门
一、GO简介 Go语言(也叫 Golang)是Google开发的开源编程语言。 1. 语言特性 Go 语法简洁,上手容易,快速编译,支持跨平台开发,自动垃圾回收机制,天生的并发特性,更好地利用大量的分…...
windows中使用Jenkins打包,部署vue项目完整操作流程
文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…...
RocketMQ中概念知识点记录 和 与SpringBoot集成实现发送 同步、异步、延时、批量、tag、key、事务消息等
1. 消息模型 消息(Message): 是 RocketMQ 中数据传输的基本单位,由主题、标签、键值、消息体等组成。主题(Topic): 消息的分类,类似于邮件的主题,用于对消息进行粗粒度的分类。标签(…...
云计算实训09——rsync远程同步、自动化推取文件、对rsyncd服务进行加密操作、远程监控脚本
一、rsync远程同步 1.rsync基本概述 (1)sync同步 (2)async异步 (3)rsync远程同步 2.rsync的特点 可以镜像保存整个目录树和文件系统 可以保留原有权限,owner,group,时间,软硬链…...
【DGL系列】DGLGraph.out_edges简介
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 函数说明 用法示例 示例 1: 获取所有边的源节点和目标节点 示例 2: 获取特定节点的出边 示例 3: 获取所有边的边ID 示例 4: 获取所有信息&a…...
掌握品质之钥:ISO9001质量管理体系认证的巨大价值
在当今竞争激烈的市场环境中,企业若要脱颖而出并持续成功,就必须确保其产品和服务质量始终如一。ISO9001质量管理体系认证正是帮助企业实现这一目标的关键工具。本文将深入探讨ISO9001认证的巨大价值以及它如何助力企业提升竞争力、优化内部管理并赢得客…...
网络开局 与 Underlay网络自动化
由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…...
MySQL MVCC原理
全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列: 1、trx_id:每次一个事务对某条…...
编织文字的魔法:探索WebKit的CSS文本效果
编织文字的魔法:探索WebKit的CSS文本效果 在现代网页设计中,文本不仅仅是信息的载体,更是视觉表现的重要元素。WebKit,作为众多浏览器的核心引擎,支持一系列CSS文本效果,使开发者能够创造出引人注目的文本…...
如何在Linux上部署Ruby on Rails应用程序
在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程,需要按照一系列步骤进行。下面是一个基本的部署过程,涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前,需要确保Linux系统上安装了…...
极狐GitLab 如何管理 PostgreSQL 扩展?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
SpringBoot如何使用Kafka来优化接口请求的并发
在Spring Boot中使用 Kafka 来优化接口请求的并发,主要是通过将耗时的任务异步化到Kafka消息队列中来实现。这样,接口可以立即响应客户端,而不需要等待耗时任务完成。 在Spring Boot应用程序中调用Kafka通常涉及使用Spring Kafka库ÿ…...
全面了解不同GPU算力型号的价格!
这两年人工智能(AI)、机器学习(ML)、深度学习和高性能计算(HPC)领域的快速发展,GPU算力已成为不可或缺的资源。企业、研究机构乃至个人开发者越来越依赖于GPU加速计算来处理大规模数据集和复杂模…...
Linux网络编程之UDP
文章目录 Linux网络编程之UDP1、端口号2、端口号和进程ID的区别3、重新认识网络通讯过程4、UDP协议的简单认识5、网络字节序6、socket编程接口6.1、socket常见接口6.2、sockaddr通用地址结构 7、简单的UDP网络程序7.1、服务器响应程序7.2、服务器执行命令行7.3、服务器英语单词…...
graham 算法计算平面投影点集的凸包
文章目录 向量的内积(点乘)、外积(叉乘)确定旋转方向numpy 的 cross 和 outernp.inner 向量与矩阵计算示例np.outer 向量与矩阵计算示例 python 示例生成样例散点数据图显示按极角排序的结果根据排序点计算向量转向并连成凸包 基本…...
【海外云手机】静态住宅IP集成解决方案
航海大背景下,企业和个人用户对于网络隐私、稳定性以及跨国业务的需求日益增加。静态住宅IP与海外云手机的结合,提供了一种创新的集成解决方案,能够有效应对这些需求。 本篇文章分为三个部分;静态住宅优势、云手机优势、集成解决…...
商标设计logo网站/今日新闻最新头条10条
每日温度今天又给大家挑了一道十分经典的题目,也是一道面试常考题目,所以大家记得打卡啊,我们先来看一下题目描述,题目很容易理解,而且用暴力法也很容易实现,因为这个题目出现了我们的栈的模块,…...
免费建站的手机app/广东seo网站优化公司
转载于:https://blog.51cto.com/241998/43668...
wordpress怎么改颜色/宁波抖音seo搜索优化软件
技术可以做多长 在这里,我用我自己经历做个例子,我在软件编程上有14年了(加上大学里的项目就有16年了),虽然我今天是经理了,但是我还是喜欢编程。我以前也听到过别人说的——做技术太辛苦,没前途…...
武汉 大型 网站建设/今日足球赛事推荐
在路由文件需要守卫的path后面加上meta {path: /home,component: home,meta:{requireAuth:true}}在main.js里面加上 //路由守卫 router.beforeEach((to, from, next) > {console.log(to);console.log(from);if (to.meta.requireAuth) { // 判断该路由是否需要登录权限if(J…...
从网址怎么看网站的域名/品牌设计公司
这几天做了下美团校招的一些套题。(只写了编程,这两天慢慢更新吧)这套题还是蛮简单的。。我暴力了好几个都能过。一个小时多一点差不多能写完。4、棋子翻转题意:在4*4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),…...
深圳市住房和建设局官方网站查询/宣传营销方式有哪些
2019独角兽企业重金招聘Python工程师标准>>> 先了解一下反射(这玩意着实让我理解了很久啊)博文参考(http://blog.csdn.net/cookieweb/article/details/7056277) 先了解一些基本的概念:运行时,编…...