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

目录

一.引言

二.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 GPUsParameters----------args_num : 当前模型参数数量,单位为 亿data_size : 当前训练数据大小,单位为 GBReturns-------count : 所需 GPU 数量, 未向上取整
"""def calc_gpu_num(_args_num, _data_size, _train_days):need_flops = (_args_num / 1750) * (_data_size / 45) * 1.75 * 10 ** 23calc_by_a800 = 19.5 * 10 ** 12train_time = 86400 * _train_daysgpu_count = need_flops / (calc_by_a800 * train_time)return gpu_countif __name__ == '__main__':args_num = 330 # LLaMA-33Bdata_size = 0.048828125 # 50Gtrain_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 个 tokentime_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.hqwc.cn/news/155412.html

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

相关文章

识别flink的反压源头

背景 flink中最常见的问题就是反压,这种情况下我们要正确的识别导致反压的真正的源头,本文就简单看下如何正确识别反压的源头 反压的源头 首先我们必须意识到现实中轻微的反压是没有必要去优化的,因为这种情况下是由于偶尔的流量峰值,Task…

PHP连接SQLServer echo输出中文汉字显示乱码解决方法

1、查询结果有中文会显示乱码。 解决方法一&#xff08;较简单&#xff0c;建议使用&#xff09;&#xff1a; 在php文件最开头写上&#xff1a; header(Content-type: text/html; charsetUTF8); // UTF8不行改成GBK试试&#xff0c;与你保存的格式匹配 <?php header(&q…

python 练习 在列表元素中合适的位置插入 输入值

目的&#xff1a; 有一列从小到大排好的数字元素列表&#xff0c; 现在想往其插入一个值&#xff0c;要求&#xff1a; 大于右边数字小于左边数字 列表元素&#xff1a; [1,4,6,13,16,19,28,40,100] # 方法&#xff1a; 往列表中添加一个数值&#xff0c;其目的方便元素位置往后…

APISpace 全国快递物流地图轨迹查询API接口案例代码

1.全国快递物流地图轨迹查询接口详解 1.1 接口请求 请求方式&#xff1a;POST请求地址&#xff1a;https://eolink.o.apispace.com/wldtgj1/paidtobuy_api/trace_map请求头&#xff1a; 标签必填说明X-APISpace-Token是鉴权私钥&#xff0c;登陆 APISpace 后在管理后台的[访…

对xss-labs靶场的一次XSS攻击

1、首先我们进入靶场&#xff0c;提示我们开始测试 2、我使用AWVS工具进行了先行扫描&#xff0c;发现爆出XSS漏洞 3、然后对症下药 在输入框中输入&#xff1a; <script>alert(document.cookie)</script> 4、进入下一关 5、我们直接执行<script>…

【c++|opencv】一、基础操作---2.图像信息获取

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像信息获取&#xff0c;roi 1. 图像信息获取 // 获取图像信息#include <iostream> #include <opencv2/opencv.hpp>using namespace cv; …

【Docker】从命名空间和路由角度探究Docker的bridge网络

桥接网络是Docker的默认网络模式。在桥接网络中&#xff0c;Docker会为每个容器创建一个虚拟网络接口&#xff0c;并为容器分配一个IP地址。容器可以通过桥接网络与主机和其他容器进行通信&#xff0c;也能暴露端口供外部访问。 容器之间的通信原理 首先我们创建两个容器&…

三.RocketMQ单机安装及集群搭建

RocketMQ单机安装及集群搭建 一&#xff1a;安装环境1.软硬件要求2.下载RocketMQ 二.安装单机MQ1.上传并解压2.目录介绍3.修改MQ启动时初始JVM内存4.启动NameServer与Broker5.测试RocketMQ 三.RocketMQ集群搭建1.集群概念特点2.集群模式分类3.集群工作流程4.双主双从集群搭建4.…

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…

Linux的简介和环境搭建

简介 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想&#xff0c;是一个…

5000张照片怎么快速发给别人?分享三个简单的方法!

有的时候我们不得不一次性发送很多图片&#xff0c;一张一张发实在让人头疼&#xff0c;这个时候就需要借助一些图片压缩工具打包成文件压缩包发送。下面介绍了三种好用的方法&#xff0c;一起来看看吧&#xff5e; 方法一&#xff1a;使用微信助手 可以使用微信助手&#xff…

50元买来的iPhone手机刷机经验

前段时间&#xff0c;家里的iPad被家人误操作&#xff0c;导致iPad变成不可使用状态。自己折腾了半天&#xff0c;没有找到解决办法。没有办法&#xff0c;只好拿到手机维修店去修理,很快就修理好了.其实也很简单--就是对iPad进行了刷机操作。当然我也看到了刷机的方法。今天&a…