深入探究理解大型语言模型参数和内存需求

概述

大型语言模型 取得了显著进步。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 编码器:处理输入序列并创建上下文感知表示。
  • 解码功能:使用编码器的表示和先前生成的标记生成输出序列。

关键构建模块

  1. 多头注意力:使模型能够同时关注输入序列的不同部分。
  2. 前馈神经网络:给模型增加了非线性和复杂性。
  3. 层标准化:通过规范中间输出来稳定和加速训练。

计算参数数量

在这里插入图片描述

计算基于 Transformer 的 LLM 中的参数

让我们分解一下基于 Transformer 的 LLM 的每个组件的参数计算。我们将使用原始论文中的符号,其中 d_model 表示模型隐藏状态的维度。

  1. 嵌入层:
    • Parameters = vocab_size * d_model
  2. 多头注意力:
    • For h heads, with d_k = d_v = d_model / h:
    • Parameters = 4 * d_model^2 (for Q, K, V, and output projections)
  3. 前馈网络:
    • Parameters = 2 * d_model * d_ff + d_model + d_ff
    • Where d_ff is typically 4 * d_model
  4. 层标准化:
    • 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
  1. 嵌入层:
    • 50,000 * 768 = 38,400,000
  2. 多头注意力:
    • 4 * 768^2 = 2,359,296
  3. 前馈网络:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
  4. 层标准化:
    • 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 时,我们需要考虑两种主要类型的内存使用情况:

  1. 模型内存:存储模型参数所需的内存。
  2. 工作内存:推理或训练期间所需的内存,用于存储中间激活、梯度和优化器状态。

计算模型内存

模型内存与参数数量直接相关。每个参数通常存储为 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 架构训练大型语言模型时,了解内存使用情况对于高效分配资源至关重要。让我们将内存需求分为两大类:稳定状态内存使用情况和峰值内存使用情况。

稳定状态内存使用情况

稳定状态内存使用情况包括以下部分:

  1. 型号重量:FP32 模型参数的副本,需要 4N 字节,其中 N 是参数的数量。
  2. 优化器状态:对于 Adam 优化器,这需要 8N 字节(每个参数 2 个状态)。
  3. 渐变:渐变的FP32副本,需要4N字节。
  4. 输入数据:假设输入为 int64,这需要 8BD 字节,其中 B 是批量大小,D 是输入维度。

总的稳定状态内存使用量可以近似为:

  • M_steady = 16N + 8BD 字节
峰值内存使用率

在反向传递期间,当激活被存储用于梯度计算时,内存使用量达到峰值。造成内存峰值的主要因素有:

  1. 层标准化:每层标准需要 4E 字节,其中 E = BSH(B:批量大小,S:序列长度,H:隐藏大小)。
  2. 注意力障碍:
    • QKV计算:2E字节
    • 注意力矩阵:4BSS 字节(S:序列长度)
    • 注意输出:2E字节
  3. 前馈模块:
    • 第一线性层:2E 字节
    • GELU 激活:8E 字节
    • 第二线性层:2E 字节
  4. 交叉熵损失:
    • 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 等实际示例,我们可以更深入地了解这些模型的复杂性和规模。

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

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

相关文章

MySQL MVCC原理

全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列: 1、trx_id:每次一个事务对某条…

Harbor系列之1:介绍、架构及工作流程说明

Harbor介绍、架构及工作流程说明 Harbor 是一个用于存储、签名和扫描内容的企业级容器镜像注册表项目。由 VMware 开发并于 2016 年开源。Harbor 提供了一些关键特性,使其成为企业使用的理想选择。 1. Harbor 介绍 1.1 什么是 Harbor Harbor 是一个开源的云原生…

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例,介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…

在 ROS 2 中创建一个节点的过程

在 ROS 2 中创建一个节点的过程包括几个关键步骤。以下是一般的步骤流程,使用 C 和 ament_cmake 构建系统为例: 步骤 1: 创建工作空间 如果还没有工作空间,首先创建一个: mkdir -p ~/my_ros2_ws/src cd ~/my_ros2_ws colcon bu…

Java学习Day10:总结帖

学习第十天,发一个总结帖! 1.基本数据类型,变量 基本数据类型不用过多赘述,其在后面不论是面型对象还有其他知识等都会经常使用; 变量最重要的就是其定义: 这对于我们之后理解自定义类型变量有很大的用处…

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…

通信网络机房服务器搬迁流程方案

数据中心机房搬迁是一项负责高难度的工程。整个搬迁过程充满挑战,伴随着各种风险。如何顺利的完成服务器的迁移,需要专业的数据中心服务商全程提供保障。友力科技(广州)有限公司,作为华南地区主流的数据中心服务商&…

Leetcode3208. 交替组 II

Every day a Leetcode 题目来源:3208. 交替组 II 解法1:环形数组 把数组复制一份拼接起来,和 3101 题一样,遍历数组的同时,维护以 i 为右端点的交替子数组的长度 cnt。 如果 i ≥ n 且 cnt ≥ k,那么 i…

【java】力扣 跳跃游戏

文章目录 题目链接题目描述代码1.动态规划2.贪心 题目链接 55.跳跃游戏 题目描述 代码 1.动态规划 1.1 dp数组的含义 dp[i]:从[0,i]的任意一点处出发,你最大可以跳跃到的位置。 例如nums[2,3,1,1,4]中: dp[0]2 dp[1]4 dp[2]4 dp[3]4 dp[4]8&#xff…

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(三)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上…

设计模式——模版方法和策略模式

前言 作为一名资深CV工程师,学会为自己减少工作量乃重中之重。但只是一味地CV,只会因为劣质代码而让自己的工作量加倍,为了将来不被繁重的维护工作而打扰自己的休息日,为了更好的节能,学习设计模式,刻不容缓…

数据结构_Map和Set

目录 一、搜索模型 二、Map 2.1 Map.Entry 2.2 Map 方法 2.3 Map 注意事项 三、Set 3.1 Set 方法 3.2 Set 注意事项 四、哈希表 4.1 哈希表 4.2 冲突 4.3 哈希函数设计 4.4 闭散列 4.5 开散列/哈希桶 总结 【搜索树】 二叉搜索树又称二叉排序树,它或…

spring-boot 整合 redisson 实现延时队列(文末有彩蛋)

应用场景 通常在一些需要经历一段时间或者到达某个指定时间节点才会执行的功能,比如以下这些场景: 订单超时提醒收货自动确认会议提醒代办事项提醒 为什么使用延时队列 对于数据量小且实时性要求不高的需求来说,最简单的方法就是定时扫描数据…

语音合成-TTS文字转语音(专业版)

语音合成-TTS文字转语音(专业版) 一、工具简介 *使用强大的智能AI语音库,合成独具特色接近真人语音的朗读音频。 *使用极具表现力和类似人类的声音,使文本阅读器和已启用语音的助理等方案栩栩如生。 *用途:这个语音工具,不仅可…

【C语言初阶】C语言数组基础:从定义到遍历的全面指南

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言函数 🌹🌹期待您的关注 🌹🌹 ❀数组 📒1. 什么是数组…

【C++】学习笔记——AVL树

文章目录 十六、AVL树1. AVL树的概念2. AVL树节点的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. 完整代码测试7. AVL树的性能 未完待续 十六、AVL树 1. AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树&…

前端基础之JavaScript学习——函数的使用

大家好我是来自CSDN的前端寄术区博主PleaSure乐事,今天我们继续有关JavaScript的学习,使用的编译器为vscode,浏览器为谷歌浏览器。 函数的声明与使用 声明 在JavaScript当中函数的声明和其他语言类似,使用如下格式即可声明&…

实战篇(十):使用Processing创建可爱花朵:实现随机位置、大小和颜色的花朵

使用Processing创建可爱花朵 0.效果预览1. 引言2. 设置Processing环境3. 创建花朵类4. 实现花瓣绘制5. 绘制可爱的笑脸6. 鼠标点击生成花朵7. 完整代码8. 总结与扩展0.效果预览 在本教程中,我们将使用Processing编程语言来创建一个可爱的花朵生成器。通过封装花朵为一个类,并…

大语言模型-检索测评指标

1. MRR (Mean Reciprocal Rank)平均倒数排名: 衡量检索结果排序质量的指标。 计算方式: 对于每个查询,计算被正确检索的文档的最高排名的倒数的平均值,再对所有查询的平均值取均值。 意义: 衡量…