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.mzph.cn/news/620075.shtml

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

相关文章

【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习

文章目录 RV1126芯片介绍rv1126 模块代码目录相关说明 SDK 包下的脚本使用build.sh 脚本使用envsetup.sh 脚本使用mkfirmware.sh 脚本使用rkflash.sh 脚本使用 U-Boot 编译和配置uboot 的配置修改编译操作 kernel 的修改编译rootfs 编译和配置buildroot 配置busybox 配置 固件打…

爬虫之牛刀小试(四):爬取B站番剧的简介

今天爬取的是b站。 如何爬取b站中的番剧呢? 首先我们来到番剧索引中,随便点开一部动漫,检查代码。 每个作品对应一个链接: https://www.bilibili.com/bangumi/play/ss…(ss后面的数字称为ss号) 发现关于动漫的信息…

【SAP ABAP】数据赋值

1. 赋值 语法格式 f2 f1. 表示将变量f1的值赋值给变量f2 输出结果如下: 扩展补充(带偏移量的赋值) 输出结果如下: 将lv_a从偏移2位开始的位置,取长度为3的内容345赋值给 lv_b,赋值覆盖lv_b从偏移4位开始的位置且长度为3的内容…

法线变换矩阵的推导

背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…

线程安全--互斥锁

文章目录 一.线程安全问题读取无效(脏)数据丢失更新线程安全的保证--操作的原子性 二.互斥锁及其实现原理互斥锁的实现原理pthread线程库提供的锁操作 三.死锁问题 一.线程安全问题 当多个线程并发地对同一个共享资源进行修改操作时,可能会引发数据读写错误(比如读取无效(脏)数…

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测效果一览基…

数据安全保障的具体措施有哪些

随着信息化时代的到来,数据已经成为企业和社会发展的重要资产。然而,数据安全问题也日益突出,如何保障数据的安全性、完整性和可用性成为了亟待解决的问题。以下将详细探讨数据安全保障的各个方面,以期为企业和社会提供更好的数据…

飞桨分子动力学模拟-论文复现第六期:复现TorchMD

飞桨分子动力学模拟-论文复现第六期:复现TorchMD Paddle for MD 飞桨分子动力学模拟科学计算 复现论文-TorchMD: A deep learning framework for molecular simulations 本项目可在AIStudio一键运行:飞桨分子动力学模拟PaddleMD-复现TorchMD 【论文复…

分布式系统的前世

文章目录 前言分布式系统解决了什么问题分布式系统存在什么问题总结 前言 大家好,我是醉墨居士,我准备和大家浅聊一下分布式系统,分享我一下我的心得体会🫠 分布式系统解决了什么问题 如果用户的请求压力过于庞大,使…

U盘安装XP纯净版系统教程软件安装教程(附软件下载地址)

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! U盘安装XP纯净版系统是一种便捷且快速的方式,以实现系统重装或升级的需求。这篇教程将为您详细介绍如何使用U盘来安装XP纯净版系统。XP纯…

Java初学习

Java代码示例: public class helloworld {public static void main(String[] args){System.out.println("hello world");} } Java程序的名字需要和文件名字一致,就是那个helloworld Java程序需要对类有深度的认识: 对象是类的…

oracle—IMU机制

正常的情况下,当事务需要回滚块的时候,是去undo表空间找 现在是在sharepool中分一个IMUbuffer,将所有的回滚信息写入。直接就可以从中取。减少了物理IO 同时这个过程也产生redo,直接就是图中红色的,不防止崩溃 优点 1…

开机自启动android app

Android App开机自启动_android 开机自启动-CSDN博客 注意权限问题: 第二种实现方式:系统桌面应用 问:android的系统桌面应用启动是什么: 答: Android 系统桌面应用是指用户在设备主屏幕上看到的默认启动界面&…

代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点面试题 02.07. 链表相交、142.环形链表II

文档讲解:虚拟头节点,三指针,快慢指针,链表相交,环形链表, 技巧: 1、对于指针的操作要画图,明确步骤后好做了 2、使用虚拟头节点可以避免对头节点单独讨论,且方便对头节点…

C++ Primer 6.1 函数基础

函数的形参列表 int func(int v,int v2) {int v,v2;//!错误 } 函数返回类型 不能是数组和函数(两者都不接受对拷),但可以是指针 局部对象 形参和函数体内部的变量称为局部变量,仅在函数内部可见,隐藏外部…

Python 安卓开发:Kivy、BeeWare、Flet、Flutter

kivy:https://github.com/kivy python-for-android :https://python-for-android.readthedocs.io/en/latest/ BeeWare:https://docs.beeware.org/en/latest/ Flet:https://github.com/flet-dev/flet 把 PySide6 移植到安卓上去&a…

权值初始化

一、梯度消失与爆炸 在神经网络中,梯度消失和梯度爆炸是训练过程中常见的问题。 梯度消失指的是在反向传播过程中,梯度逐渐变小,导致较远处的层对参数的更新影响较小甚至无法更新。这通常发生在深层网络中,特别是使用某些激活函…

C++STL

STL基本概念 standard template library : 标准模板库STL从广义上可以分为: 容器(container) 算法(algorithm) 迭代器(iterator)。 容器和算法之间通过迭代器进行无缝连接。 STL几乎所有的代码都采用了模板类或者模板函数STL六大组件 STL的容器 STL的容器就是将运…

vmlinux, System.map; cmake的find_package(Clang)产生的变量们; geogebra单位切向量(简单例子)

linux4.15.y内核中的函数个数 依赖关系: vmlinux, vmlinux.bin, bzImage cd /bal/linux-stable/ file vmlinux #vmlinux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, BuildID[sha1]b99bbd9dda1ec2751da246d4a7ae4e6fcf7d789b, not str…

SQL Server 配置远程连接

Windows 安装好 SQL Server 的 SSMS,打开SSMS配置远程连接 找到 配置管理器 启用 TCP/IP 打开防火墙设置 新建入站规则 端口TCP - 特定本地端口 (1433)允许连接下一步名称完成 重启 SQL Server 服务