LLM大模型显存计算

一、目录

  1. 模型参数单位
  2. 内存计算案例
  3. 显卡算力
  4. 推理显存计算
  5. 训练显存计算
  6. huggface 官网计算 模型推理/训练 需要的显存
  7. 大模型输入长度与显存的关系
  8. 大模型推理 多线程与显存的关系

参考:https://blog.csdn.net/Johntill/article/details/132629075

二、实现

  1. 模型参数单位
    “10b”、“13b”、"70b"等术语通常指的是大型神经网络模型的参数数量。“10b” 意味着模型有大约 100 亿个参数。

  2. 内存计算案例
    ● fp32 精度,一个参数需要 32 bits, 4 bytes.
    ● fp16 精度,一个参数需要 16 bits, 2 bytes.
    ● int8 精度,一个参数需要 8 bits, 1 byte.
    内存分配: 1.模型参数 2. 梯度 3.优化器参数。

  3. 显卡算力
    显卡算力是什么?
    显卡算力是指显卡能够在给定时间内完成多少次浮点运算。它用于评估显卡的性能。通常被表示为每秒执行的浮点运算次数,也称为 FLOPS(Floating Point Operations Per Second)。
    计算显卡算力涉及到几个因素。首先,需要知道显卡的核心数量、时钟速度和每个核心的浮点运算单元数量。然后,将这些因素结合在一起,使用以下公式计算显卡算力:
    显卡算力 = 核心数量 x 时钟速度 x 浮点运算单元数量
    例如,如果显卡具有1280个核心,时钟速度为1400 MHz,每个核心具有两个浮点运算单元,则该显卡的算力为
    算力 = 1280 x 1400 x 2 = 3.584 TFLOPS

  4. 推理显存计算
    Llama-2-7b-hf 为例,全精度模型参数是float32类型:
    1b(10亿)个模型参数,约占用4G显存(实际大小:10^9 * 4 / 1024^3 ~= 3.725 GB),那么LLaMA的参数量为7b,那么加载模型参数需要的显存为:3.725 * 7 ~= 26.075 GB

  5. 训练显存计算
    大小=模型参数占用+梯度占用+优化器占用+CUDA kernel占用
    LLaMA-6B为例:
    模型参数:等于参数量每个参数所需内存。
    对于 fp32,LLaMA-6B 需要 6B
    4 bytes = 24GB内存
    对于 int8,LLaMA-6B 需要 6B1 byte = 6GB
    梯度:同上,等于参数量
    每个梯度参数所需内存。
    对于 fp32,LLaMA-6B 需要 6B4 bytes = 24GB内存
    对于 int8,LLaMA-6B 需要 6B
    1 byte = 6GB
    优化器参数:不同的优化器所储存的参数量不同。
    对于常用的 AdamW 来说,需要储存两倍的模型参数(用来储存一阶和二阶momentum)。
    fp32 的 LLaMA-6B,AdamW 需要 6B8 bytes = 48 GB
    int8 的 LLaMA-6B,AdamW 需要 6B
    2 bytes = 12 GB
    除此之外,CUDA kernel也会占据一些 RAM,大概 1.3GB 左右,查看方式如下。
    综上,int8 精度的 LLaMA-6B 模型部分大致需要 6GB+6GB+12GB+1.3GB = 25.3GB 左右

  6. huggface 官网计算 推理/训练 需要的显存
    https://huggingface.co/spaces/hf-accelerate/model-memory-usage

  7. 大模型输入长度与显存的关系

当前程序从启动到目前 查看显存最大占用情况:torch.cuda.max_memory_allocated("cuda:0")/1024**2
以chatglm2为例:
from transformers import AutoModel, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained("../chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("../chatglm2-6b", trust_remote_code=True).half().to(torch.device("cuda:0"))
model = model.eval()
res=[]
for i in range(100,6000,200):prompt=text[:i]max_length = len(prompt)top_p = 1temperature = 0.8response, history=model.chat(tokenizer, prompt, [], max_length=max_length, top_p=top_p,temperature=temperature)print(torch.cuda.max_memory_allocated("cuda:0")/1024**2)      #默认返回当前程序从开始所占用的最大显存print("=============================")res.append(torch.cuda.max_memory_allocated("cuda:0")/1024**2)
#查看显存
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
x=[i for i in range(100,6000,200)]
#服务器无法绘图,进行拷贝查看y=res
y=[11981.630859375, 12013.05419921875, 12056.77099609375, 12104.171875, 12147.87890625, 12194.2587890625, 12246.16259765625, 12283.880859375, 12326.7431640625, 12372.0830078125, 12418.00439453125, 12463.4248046875, 12504.59521484375, 12553.66162109375, 12593.26708984375, 12638.40234375, 12682.5390625, 12728.97021484375, 12790.80615234375, 12846.7744140625, 12894.125, 12944.5283203125, 12990.2294921875, 13030.0068359375, 13080.41064453125, 13126.8134765625, 13173.08203125, 13218.35302734375, 13265.4736328125, 13305.5966796875]
plt.plot(x,y,c="r")
plt.ylabel("显存占用:M")
plt.xlabel("序列长度:token")
plt.show()

在这里插入图片描述
8. 大模型推理 多线程与显存的关系

print(torch.cuda.memory_allocated("cuda:0")/1024**2)     #torch 模型占用显存
print(torch.cuda.max_memory_allocated("cuda:0")/1024**2)  #torch 模型占用显存最大值
显存大小=torch.cuda.memory_allocated("cuda:0")/1024**2 + (torch.cuda.max_memory_allocated("cuda:0")/1024**2)* 线程数

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

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

相关文章

ME6211C33M5G-N 输出3.3V 500mA 线性稳压器LDO 参数

描述 ME6211系列是高精度,低噪声,CMOS LDO电压调压器。ME6211系列提供低输出噪声,高纹波抑制率,低辍学率和非常快速的开启时间,ME6211系列是当今最前沿的手机的理想选择。ME6211内部包括参考电压源、误差放大器、驱动…

什么品牌的护眼灯最好?质量最好的护眼台灯推荐

作为一名家长,家里有两个孩子,为了给孩子营造良好的学习光线,花费了很多时间也费了不少钱去购买体验过许多款护眼台灯,相比传统台灯,护眼台灯不仅仅只是起到照明这么简单,而是舒适养眼的光线,不…

叉车车载终端定制_基于MT6762安卓核心板的车载终端设备方案

叉车车载终端是一款专为叉车车载场景设计的4英寸Android车载平板电脑。它采用了高能低耗的8核ARM架构处理器和交互开放的Android 12操作系统,算力表现强大。此外,该产品还具备丰富的Wi-Fi-5、4G LTE和蓝牙等通讯功能,可选配外部车载蘑菇天线&…

人工智能技术的突破性进展使得AI数字人的出现成为可能

随着科技的飞速发展,人机交互已成为当今社会中的热门话题。近年来,人工智能技术的突破性进展使得AI数字人的出现成为可能,其将开启一个全新的人机交互时代。 AI数字人是一种利用人工智能技术创建的虚拟人物,能够模拟真实人类的思…

【实用技巧】Steam Wallpaper Engine 壁纸引擎向手机导入壁纸方法

一、内容简介 本文介绍如何使用电脑上的 Wallpaper Engine (Steam 平台中的壁纸引擎)向安卓手机导入并使用壁纸。 二、所需原材料 安卓手机(以笔者使用的华为荣耀50为例)、安装有Steam以及Wallpaper Engine的电脑 三、导入方法…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的MySQL8.0.32的RPM包

本文适用:rhel9系列,或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

【代码随想录算法训练营-第七天】【哈希表】454,383,15,18

454. 四数相加 II 第一遍 思路 想不出来,除了暴力解法,完全想不出来其他解法,看答案思路了…学习了两个新的方法: getOrDefault:返回指定键对应的值,如果不存在,则返回默认值containsKey&…

干货|Google ads谷歌广告投放详细步骤与技巧

对于跨境电商、独立站运营的卖家来说,谷歌广告投放是必备的流量拓展来源,但是在投入运营之前,你需要完整了解谷歌广告投放详细步骤,以为你丝滑地进行有效投放做好基础,下面为大家整理具体的谷歌投放技巧与步骤&#xf…

uniapp运行自定义底座到真机没反应

同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。 如果此时手机没有任何反应,请检查自定义基座是否正确;如果是离线制作的自定义基座包, 请检查离线包制作是否正确。 网上各种查找报…

Unity中URP下实现能量罩(扭曲流光花纹)

文章目录 前言一、能量罩花纹1、在属性面板接收能量罩花纹纹理2、申明 纹理 和 采样器3、在顶点着色器,应用 Tilling 和 Offset4、在片元着色器,纹理采样后,与之前的结果相乘输出 二、能量罩流光1、在顶点着色器,记录原uv值2、在片…

【pytorch】使用pytorch构建线性回归模型-了解计算图和自动梯度

使用pytorch构建线性回归模型 线性方程的一般形式 衡量线性损失的一般形式-均方误差 pytorch中计算图的作用和优势 在 PyTorch 中,计算图(Computational Graph)是一种用于表示神经网络运算的数据结构。每个节点代表一个操作,例如…

蓝桥杯省赛无忧 STL 课件14 stack

01 stack的定义和结构 stack是一种后进先出(LIFO)的数据结构,使用前需要包含头文件。 stack提供了一组函数来操作和访问元素,但它的功能相对较简单。 stack的定义和结构如下(仅作了解即可): t…