运行大型语言模型:70B参数需要多大GPU显存?

正如文章标题所言,你是否也曾好奇过:加载使用一个 70B 大小的 LLM,究竟需要多大的 GPU 显存呢?读完这篇文章应该会有答案。

为什么是GPU,而不是CPU

AI 本质上是大量的 矩阵 与 向量 运算 ,属于计算密集型运算,需要大量的内存空间来保存模型的训练参数。一般通用 CPU 运算单元都是标量 ,而 GPU 是一个把SIMD(单指令多数据)和SIMT(单指令多线程)运用到极致的协处理器,在体系结构上实现了运算单元的高度并行。

简单讲,就是 GPU 比 CPU 更适合用来做计算密集型任务。而 LLM 的推理、部署过程恰巧就是计算型任务。所以 GPU 比 CPU 更加适合用来运行 LLM 运算。

有一个有趣的事实,GPU的全称是Graphic Processing Unit,从名字中就能看出它最初被设计用来处理图像渲染相关的。但是命运似乎开了一个玩笑,没想到后来ML/AI也长成了矩阵的模样。GPU 就顺其自然的接管 AI/ML 甚至 LLM 运算了。

如何计算 GPU Memory

在大模型的使用过程中,有几个因素会影响 GPU Memory 的占用大小,主要包含以下几个因素:

  • 模型自身大小
    
  • Key-Value Cache
    
  • Memory Overhead
    

模型大小

模型本身的大小在很大程度上,决定了需要使用 GPU Memory 的大小。模型越大,需使用的 GPU 内存越大。

模型的大小由 2 部分决定:模型参数量数据精度类型

模型参数量

也就是进行模型训练的参数个数,单位是B(Billion缩写)。比如 GPT-3 的参数量是 175 Billion,LLaMa-2 13B 的参数量就是13 BIllion。

参数数据类型

也就是模型的输入参数数据类型,有float32或float16或者float8等。例如,在 PyTorch 中,你可以通过以下方式指定数据类型:

import torch``   ``# 设置数据类型为 float16``torch.set_default_dtype(torch.float16)``   ``# 创建一个 Transformer 模型实例``model = TransformerModel()

不同的数据类型,每个参数占用的大小也不一样:

  • float32 : 1 个参数占用 4 个 byte

  • float16 :1 个参数占用 2 个 byte

  • 8 bit :1 个参数只占用 1 个 byte

假设我们使用 float16 加载 LLaMa-2 13B 的模型,那最终加载模型的内存大小为 : 13 Billion * 2 byte = 26 GB。

Key-Value Cache

KV缓存(Key-Value Cache)是 Transformer 模型在自回归解码过程中使用的一种优化技术,主要是用来提升大模型的推理速度。它通过缓存之前计算得到的 键Key值Value 向量来减少重复计算,从而提高推理效率。大体思想其实跟动态规划DP中的以空间换时间差不多。

计算公式如下:

2 \* n\_dtype \* n\_layers \* n\_hidden\_size

参数解释:

  • 2 代表每个 KV-Cache 都需要保存 2 个byte 来分别缓存 Key 和 Value。

  • n_dtype 就是上文中提到的参数数据类型。这个参数确保了模型在处理数据时使用正确的数据类型,从而避免潜在的精度问题。

  • n_layers 表示Transformer中编码器和解码器的层数总和。每个编码器层和解码器层都包含自注意力机制和前馈神经网络,通过堆叠多个这样的层,可以增加模型的深度和表达能力。

  • n_hidden_size ‌指隐藏层的维度大小‌。神经网络通常包括输入层、隐藏层和输出层,而n_hidden_size就是用来定义隐藏层的维度大小。

同样还是以 LLaMa-2 13B 模型举例,数据类型为 float16,1 个 token 的 KV Cache 大小为:

2 \* 2 \* 40 \* 5120 = 820 KB/token

LLaMa-2 13B 的 n_layers是 40,n_hidden_size是 5120,所以最终结果是 820 KB。

800 KB 看起来并不是很多,但这只是仅仅一个 Token 的使用。在实际的大模型应用中里,用户的输入Input和大模型的输出Output,往往是需要使用成千上万个 Token 来推理得出的。

比如使用 “Token 计算网站” 来计算 “上海今天天气怎么样?” 这句话会使用多少 Token。结果如下:

可以看出总共占用了 5 个 Token。然后输出结果如下:

可以看出大模型输出上海天气结果使用了 54 个 Token。

因此 “上海今天天气怎么样?” 这句 Query,大模型LLM总共使用了 5 + 54 个 Token。每个 Token 需使用 800KB,因此这次 Query 总共需要使用 59 * 800 KB = 46MB。

注意:实际场景中,LLM有可能接收到更多 Token 的输入Input,比如处理长文本等需求。 LLaMa-2 13B 单个请求可设置的最大 Token 数是 4096 个。因此 LLaMa-2 13B 单次能处理的最大 KV-Cache 就是 4096 * 820 KB = 3.2 GB。另外随着并发请求次数的增多,这个数字还会成倍的增长!

Memory Overhead

在 LLM 的推理过程中,还有一些碎片化的临时变量。这些临时变量也需要占用 GPU Memory。所以除了模型大小、KV-Cache 之外,还需要有一定的额外内存开销。一般可以使用模型大小 + KV-Cache最大值的 10% 来当做额外内存开销的大小。

GPU Memory 总计算公式

要计算所有大模型在使用过程中需要的 GPU Memory,需要将所有上述提到的因素都考虑到。下面公式是一个完整的计算公式:

Total GPU Memory = 模型大小 + KV Cache + Memory Overhead

最后还是以 LLaMa-2 13B 来举例。假设有 10 个并发请求,同时请求 LLaMa-2 13B 以最大 Token数(4096) 进行模型推理。 那最终需要的 GPU Memory 计算过程如下:

  1. 模型大小= 13 Billion * 2 Bytes = 26 GB

  2. Total KV cache= 800 KB * 4096 Tokens * 10 并发请求 = 32 GB

  3. Memory Overhead= 0.1 * (26 GB + 32 GB) = 5.8 GB

所以最终需要总 GPU memory为: 26 GB + 32 GB + 5.8 GB = 63.8 GB。需要 2 块英伟达的 A100 芯片才可以。

常见大模型的 GPU Memory

下面 2 张表格分别描述了不同大小的模型,根据不同Token数以及不同并发请求数的情况下,所需要的 GPU Memory 大小。

单次并发请求:

10 次 并发请求:

可以看出随着并发请求数、Token数,以及大模型大小的增长,GPU Memory的增长是很恐怖的,这样硬件算力的成本太高。其实是有一些技术手段是能够优化内存占用的,后续可以另起文章单独介绍。

AI大模型学习路线

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

扫描下方csdn官方合作二维码获取哦!

在这里插入图片描述

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

请添加图片描述
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

请添加图片描述

大模型全套视频教程

请添加图片描述

200本大模型PDF书籍

请添加图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

请添加图片描述

大模型产品经理资源合集

请添加图片描述

大模型项目实战合集

请添加图片描述

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

### 规模语言模型所需显存 对于规模语言模型而言,参数量直接影响到加载模型所需的VRAM或GPU内存小。具体来说,当处理具有70亿参数大模型时,在bfloat16精度下,每两个参数约占用1字节的存储空间[^1]。 因此,为了计算70亿参数模型所需的总显存量: - 参数总量:70,000,000,000 - 每个参数占用的空间(bfloat16):2 字节 / 8 = 0.25 字节 由此得出理论上的最小需求为: \[ \text{所需显存} = 70,000,000,000 \times 0.25\,\text{Byte} = 17,500,000,000\,\text{Byte} \] 转换成更常见的单位表示就是约等于 **16GB** 至 **17GB** 的显存容量。然而实际上由于框架开销和其他因素的影响,实际使用的显存可能会更一些。 值得注意的是,这只是一个粗略估计,并未考虑其他可能增加显存消耗的因素,比如优化器状态、激活函数中间结果等额外开销。在实践中部署如此庞模型通常还需要更的资源支持以及特定的技术手段来降低显存压力,例如分布式训练或节点并行化方案[^2]。 ```python # Python code snippet to calculate the theoretical minimum VRAM requirement parameters_count = 70_000_000_000 # Number of parameters bytes_per_param_bf16 = 2 # Each parameter uses 2 bytes in bfloat16 format required_vram_gb = (parameters_count * bytes_per_param_bf16) / (1024 ** 3) print(f"Theoretical minimum VRAM required: {required_vram_gb:.2f} GB") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值