LLM - 训练与推理过程中的 GPU 算力评估

news2024/11/18 1:40:30

目录

一.引言

二.FLOPs 和 TFLOPs

◆ FLOPs [Floating point Opearation Per Second]

◆ TFLOPs [Tera Floating point Opearation Per Second]

三.训练阶段的 GPU 消耗

◆ 影响训练的因素

◆ GPT-3 训练统计

◆ 自定义训练 GPU 评估

四.推理阶段的 GPU 消耗

◆ 影响推理的因素

◆ 自定义推理 GPU 评估

◆ 计算差异

五.基于 Token 的计算方式

六.总结


一.引言

LLM 大模型时代,GPU 显卡的算力至关重要,无论是训练还是推理都离不开大规模 GPU 的支持。由于工作需要,需要评估 LLM 任务所需显卡算力,搜了一下发现网上关于 GPU 评估计算的文章并不多,特此记录,有不妥的地方欢迎大家评论区多多交流。

二.FLOPs 和 TFLOPs

介绍 GPU 算力评估之前,首先我们需要了解下 GPU 计算能力的常见评估指标。

 FLOPs [Floating point Opearation Per Second]

        表示设备每秒所执行的浮点运算数量。

 TFLOPs [Tera Floating point Opearation Per Second]

        表示设备每秒执行一万亿次浮点运算的数量,即 10^12 次方。

其中浮点运算是指涉及小数点的计算,例如加减乘除。TFLOPs 比 FLOPs 单位更大,其用于衡量计算机或处理器的更高性能。以 L40S 为例,在精度为 FP32 的情况下,其算力可达 91.6 TFLOPs,而 A800 则只有 19.5 TFLOPs,RTX 3060 大约是 12.5 TFLOPS。如果是超级计算机其 TFLOPS 性能指标可达 1000 万亿次每秒。

三.训练阶段的 GPU 消耗

影响训练的因素

计算前先看下训练阶段有哪些因素会影响训练的进程。

- 训练数据大小

- 模型参数规模

- 训练 Epoch 次数

- 显卡算力

GPT-3 训练统计

上面我们介绍了 FLOPs 和 TFLOPs,这里 ZettaFLOPs 代表每秒十万京 (10^21) 次的浮点运算,不同指标之间主要是单位的差异。以 GPT-3 为参照,其为 1750 亿参数的模型,45 TB 训练数据,训练一次大约需要 175 ZettaFLOPs 即 1.75 x 10^23 次浮点数运算。由于这里我们没有获取到 175 ZFLOPs 是一个 Epoch 还是完整训练,所以后续的计算我们先统一按完整训练所需为参照。

自定义训练 GPU 评估

这里假定我们训练的模型是 LLaMA-33B,参数量为 330 以,训练数据量为 50G,GPU 算力以 A800 下 FP32 计算即 19.5 TFLOPs,则训练该模型需要 GPU 算力为:

NeedFLOPs = (330 / 1750) * (0.048828125 / 45) * 1.75 * 10^23 FLOPs

我们使用设备为 A800,则其可提供的算力为:

CalcByA800 = 19.5 * 10^12 FLOPs

最后结合我们需要的天数,例如训练 5 天结束,则 5 天的 s 数为:

TrainTime = 86400 * 5

最终所需 GPU 数量为:

GPUCount = NeedFLOPs / (CalcByA800 * TrainTime)

为了方便计算我们直接改写为 Python 代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

"""
    Returns the estimated number of GPUs

    Parameters
    ----------
    args_num : 当前模型参数数量,单位为 亿
    data_size : 当前训练数据大小,单位为 GB

    Returns
    -------
    count : 所需 GPU 数量, 未向上取整
"""


def calc_gpu_num(_args_num, _data_size, _train_days):
    need_flops = (_args_num / 1750) * (_data_size / 45) * 1.75 * 10 ** 23
    calc_by_a800 = 19.5 * 10 ** 12
    train_time = 86400 * _train_days
    gpu_count = need_flops / (calc_by_a800 * train_time)
    return gpu_count


if __name__ == '__main__':
    args_num = 330 # LLaMA-33B
    data_size = 0.048828125 # 50G
    train_days = 5 # 训练5天
    count = calc_gpu_num(args_num, data_size, train_days)
    print(count)

计算得到 count = 4.250628165558721,我们向上取整可得 5 天训练 50G 数据的 LLaMA-33B 模型需要 5 张 A800,不过这里并未考虑显存或者性能损耗等问题,只是粗略估算。

四.推理阶段的 GPU 消耗

影响推理的因素

- 输入输出数据

- 模型参数规模

- 显卡算力

推理阶段需要计算输入与输出的文本之和,实际计算中,需要将文本 tokenizer 到 token_ids 以便 transformers 计算,中文字符与 token 比例大概为 1:2 即 1 个中文字符对应 2 个 token_ids。GPU 推理计算时,其与输入输出文本和 L、模型维度 D 和模型层数 N 成正比。

自定义推理 GPU 评估

假设输入的 query 文本数为 100,输出的文本书为 1000,则 L = (100 + 1000) * 2 = 2200,按模型维度 D = 1280,层数 N = 96,则计算所需算力:

​NeedFLOPs ≈ L * D * N ≈ 270336000 = 2.7 * 10^8

假设我们使用 A800 用 1s 时间完成本次推理请求:

CalcByA800 = 19.5 * 10^12 FLOPs

则需要 GPU 数量:

count = 270336000 / (19.5 * 10**12) = 1.3863384615384615e-05

反过来 CalcByA800 / NeedFLOPs 可以计算一张 A800 可以满足约 7.2 w 用户 1s 内获取回复,不过这只是理想情况:

people = (19.5 * 10**12) / 270336000 = 72132.45738636363

◆ 计算差异

推理时涉及到文字和计算,例如生成连贯的剧情、生成数学逻辑的推理。这些处理对算力的消耗几乎相同,这是 LLM 的本质是语言模型,只要在输入输出相同的情况下,其处理的都是 token_ids,推理得到的也都是 next_token 的分布,还是 token_ids,所以与具体的表现形式无关,即不同类型的任务,只要输入输出相近,则其对算力的消耗也相近。

五.基于 Token 的计算方式

上面的方式都是基于 FLOPs 为基准计算的,但是由于实际场景下很多信息我们获取的并不完整。例如 GPT-3 的训练 FLOPs 是否准确,训练的 FLOPs 是一个 epoch 还是一整个训练流程,因此实际场景下还可以采用另一种方式,即基于 Token 处理效率的计算,但是这种计算方式有一个前提,就是需要你事先测算出对应 GPU 设备每秒处理的 token 数量,即 Process Tokens / s。

以博主实际测算为例,P40 即 4090 的 token 处理能力约为 25 Token / s,假设我们一天需要请求 1000 次,每次输入输出共 1000 个汉字,共花费 10 h 处理完成,则需要 P40 的数量可通过下述公式计算:

def calc_gpu_num_by_token(post_token_num, post_time_all, token_process):
    return post_token_num / (post_time_all * token_process)


if __name__ == '__main__':
    token_num = 1000 * 1000 * 2  # 1000 次请求、1000 个汉字对应 2000 个 token
    time_cost = 10 * 3600  # 总处理时间
    token_process_num = 25  # 每s可处理 token 数目
    print(calc_gpu_num_by_token(token_num, time_cost, token_process_num))

算下来 10h 处理完这些需求需要 2.223 台 P40,则向上取整得到需要 3 台 P40。

六.总结

这里分享了几种 GPU 算力计算的方法,上面的计算都是基于理想状态,实际情况下还需要考虑多机多卡的 IO 延迟,机器的网络延迟,以及模型大小与 GPU 显存的供需关系等等。更多的数据还是需要自己实践出真知,有问题欢迎大家在评论区一直讨论,因为现在网上这方面的信息还是相对较少,可以一起分享一起进步!

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

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

相关文章

Azure机器学习 - 在 Azure 机器学习中上传、访问和浏览数据

目录 一、环境准备二、设置内核三、下载使用的数据四、创建工作区的句柄五、将数据上传到云存储空间六、访问笔记本中的数据七、创建新版本的数据资产八、清理资源 机器学习项目的开始阶段通常涉及到探索性数据分析 (EDA)、数据预处理(清理、特征工程)以…

WebService接口方式是什么

业务应用系统指标采集采用WebService接口方式,这表明系统通过WebService这种网络服务的形式来收集和交换业务应用的运行指标和数据。 WebService是一种在网络上提供服务的方式,它允许不同的应用程序在网络上进行交互和通信,无论它们是用什么…

javaEE -14(10000字 JavaScript入门 - 1)

一:初始 JavaScript JavaScript (简称 JS)是世界上最流行的编程语言之一,它是一个脚本语言, 通过解释器运,主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 和 HTML 和 CSS 之间的关系: HTML…

Spring IOC - ConfigurationClassPostProcessor源码解析

上文提到Spring在Bean扫描过程中,会手动将5个Processor类注册到beanDefinitionMap中,其中ConfigurationClassPostProcessor就是本文将要讲解的内容,该类会在refresh()方法中通过调用invokeBeanFactoryPosstProcessors(beanFactory)被调用。 5…

dsm 和 大五人格

问题记录 1. 九型人格好像有很多层, 各层会有对应? 笔迹分析. 2. 还要结合行为吧? 书: dsm5 失序的人格 动力取向精神 问题: 大五人格和dsm的渊源, 觉得dsm太粗略了,搞个大五海洋. 问题: 很内向, 然后喜欢摄影, 也喜欢看b站上其他专业博主上传的摄影vlog. 跟他交流的时候又…

图的广度优先遍历讲解附Java代码加详细注释

目录 引入 代码实现 复杂度分析 引入 类比树的广度优先遍历(层序遍历),通过一个队列不断地实现出队的同时把左右孩子入队的操作实现广度优先遍历,值得注意的是图是否有环的情况。 用相似的方法可以实现图的广度优先遍历&#…

Linux:Docker的介绍(1)

Docker官网 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ docker是什么? 是一种轻量级的‘虚拟机’ 在Linux容器里运行应用的开源工具 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个…

跟着步骤,快速实现图书行业小程序商城

跟着步骤,快速实现图书行业小程序商城 打造独特图书购物体验,小程序商城制作指南 轻松搭建图书馆与书店的线上商城小程序 值得一试的图书教材小程序商城搭建方法 图书商城小程序制作指南,助你成为行业领袖 实战教程:如何制作…

LabVIEW对多个同一类型控件进行操作

LabVIEW对多个同一类型控件进行操作 有时候LabVIEW要多多个同一类的控件进行操作,如对tab中某个page中所有String控件设为dissable。就可以用如下的方式。className是获取不同类型的控件。通过类型选择,可以选择所有的String控件,并可对特定…

Hydra(九头蛇海德拉)教程

Hydra 参数 hydra <参数> <IP地址> <服务名> 参数案例说明-l-l root登录账号-L-L userName.txt用户文件-p-l 123456登录密码-P-P passwd.txt密码文件-e-e nsrn 空密码 s 用户名即密码 r 用户名和密码相反&#xff08;如root的密码为toor&#xff09;-s-s 21指…

python基于VGG19实现图像风格迁移

目录 1、原理 2、代码实现 1、原理 图像风格迁移是一种将一张图片的内容与另一张图片的风格进行合成的技术。 风格&#xff08;style&#xff09;是指图像中不同空间尺度的纹理、颜色和视觉图案&#xff0c;内容&#xff08;content&#xff09;是指图像的高级宏观结构。 实…

小程序制作(超详解!!!)第十一节 成绩计算器

设计一个计算学生平均成绩的小程序。当输入学生信息和各门功课成绩并提交后&#xff0c;能够显示学生的信息及平均成绩。 1.index.wxml <view classbox><view classtitle>成绩计算器</view><input placeholder"请输入你的名字" placeholder-c…

台积电熊本厂力拚明年如期量产 | 百能云芯

台积电&#xff08;TSMC&#xff09;正在积极推进其在日本熊本的新工厂项目&#xff0c;该项目正在如火如荼地建设中。根据了解&#xff0c;该工厂的员工总数将超过千人。台积电的目标是确保该新工厂按计划于2024年开始量产&#xff0c;这将使其成为首个因应客户需求和地缘政治…

食品行业小程序开发攻略

想要设计一个食品小程序商城&#xff0c;却担心自己没有任何设计经验&#xff1f;别担心&#xff0c;现在有了一些简单易用的小程序制作工具&#xff0c;零基础也能成为一个小程序商城设计师&#xff01;接下来&#xff0c;我们将一步步教你如何使用这些工具快速上手。 首先&am…

Easy Javadoc插件的使用教程

目录 一、安装Easy Javadoc插件 二、配置注释模板 三、配置翻译 一、安装Easy Javadoc插件 在idea的File-Settings-Plugins中搜索Easy Javadoc插件&#xff0c;点击install进行安装&#xff0c;安装完成后需要restart IDE&#xff0c;重启后插件生效。 二、配置注释模板 …

相关性网络图 |显著性标记

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 本期教程 写在前面 此图是一位同学看到后&#xff0c;想出的一期教程。 最近&#xff0c;自己的事情比较多&#xff0c;会无暇顾及社群和公众号教程。 1 安装和加载相关的R包 library(ggraph) library(tidy…

AI大模型在短视频处理和剪辑中的应用,文末送书

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

【Elasticsearch 未授权访问漏洞复现】

文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&am…

信号类型(通信)——QPSK、OQPSK、IJF_OQPSK调制信号

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 《信号类型&#xff08;通信&#xff09;——QAM调制信号》 文章目录 前言 一、QPSK通信调制信号 1.1、原理 1.2、仿真 二、OQPSK通信调制信号 1.1、原理 1.2、仿真 三、IJF_OQPSK通信调制信号 1.1、…

java--方法的其他形式

1.方法定义时&#xff1a;需要按照方法解决的实际业务需求&#xff0c;来设计合理的方法形式解决问题。 1.注意事项 ①如果方法不需要返回数据&#xff0c;返回值类型必须申明成void(无返回值申明)&#xff0c;此时方法内部不可以使用return返回数据。 ②方法如果不需要接收数…