大规模语言模型--训练成本

目前,基于 Transformers 架构的大型语言模型 (LLM),如 GPT、T5 和 BERT,已经在各种自然语言处理 (NLP) 任务中取得了 SOTA 结果。将预训练好的语言模型(LM) 在下游任务上进行微调已成为处理 NLP 任务的一种 范式。与使用开箱即用的预训练 LLM (例如: 零样本推理) 相比, 在下游数据集上微调这些预训练 LLM 会带来 巨大的性能提升。

但是, 随着模型变得越来越大, 在消费级硬件上对模型进行全部参数的微调(full fine-tuning) 变得不可行。此 外, 为每个下游任务独立存储和部署微调模型变得非常昂贵, 因为微调模型(调整模型的所有参数) 与原始预训 练模型的大小相同。因此, 近年来研究者们提出了各种各样的参数高效迁移学习方法(Parameter-efficient Transfer Learning), 即固定住 Pretrain Language model (PLM) 的大部分参数, 仅调整模型的一小部分参数来达到与全部 参数的微调接近的效果(调整的可以是模型自有的参数,也可以是额外加入的一些参数)

根据 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 大会上所公开的信息, OpenAI 所使用的大规模 语言模型构建流程主要包含四个阶段: 预训练、有监督微调、奖励建模、强化学习。这四个阶段都需要不同规模 数据集合以及不同类型的算法,会产出不同类型的模型,同时所需要的资源也有非常大的差别。

大模型训练过程示意图

预训练 (Pretraining) 阶段需要利用海量的训练数据, 包括互联网网页、维基百科、书籍、 GitHub、论文、问答 网站等, 构建包含数千亿甚至数万亿单词的具有多样性的内容。利用由数千块高性能 GPU 和高速网络组成超级 计算机, 花费数十天完成深度神经网络参数训练, 构建基础语言模型 (Base Model) 。基础大模型构建了长文本的 建模能力,使得模型具有语言生成能力,根据输入的提示词 (Prompt),模型可以生成文本补全句子。也有部分研究 人员认为, 语言模型建模过程中也隐含的构建了包括事实性知识 (Factual Knowledge) 和常识知识 (Commonsense) 在内的世界知识 (World Knowledge)。GPT-3 完成一次训练的总计算量是 3640PFlops,按照 NVIDIA A100 80G 和平 均利用率达到 50% 计算, 需要花费近一个月时间使用 1000 块 GPU 完成。由于 GPT-3 训练采用了 NVIDIA V100 32G,其实际计算成本远高于上述计算。参数量同样是 1750 亿的 OPT 模型, 该模型训练使用了 992 块 NVIDIA A100 80G,整体训练时间将近 2 个月。 BLOOM 模型的参数量也是 1750 亿, 该模型训练一共花费 3.5 个月, 使 用包含 384 块 NVIDIA A100 80G GPU 集群完成。可以看到大规模语言模型的训练需要花费大量的计算资源和时 间。包括 LLaMA 系列、 Falcon 系列、百川 (Baichuan) 系列等在模型都属于此阶段。由于训练过程需要消耗大量 的计算资源, 并很容易受到超参数影响, 如何能够提升分布式计算效率并使得模型训练稳定收敛是本阶段的重 点研究内容。

有监督微调(Supervised Finetuning),也称为指令微调 (Instruction Tuning),利用少量高质量数据集合, 包含 用户输入的提示词 (Prompt) 和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任 务。利用这些有监督数据, 使用与预训练阶段相同的语言模型训练算法, 在基础语言模型基础上再进行训练, 从 而得到有监督微调模型 (SFT 模型)。经过训练的 SFT 模型具备了初步的指令理解能力和上下文理解能力, 能够完成开放领域问题、阅读理解、翻译、生成代码等能力, 也具备了一定的对未知任务的泛化能力。由于有监督微 调阶段的所需的训练语料数量较少, SFT 模型的训练过程并不需要消耗非常大量的计算。根据模型的大小和训 练数据量, 通常需要数十块 GPU ,花费数天时间完成训练。 SFT 模型具备了初步的任务完成能力, 可以开放给 用户使用, 很多类 ChatGPT 的模型都属于该类型, 包括: Alpaca 、Vicuna 、MOSS 、ChatGLM-6B 等。很多这类 模型效果也非常好, 甚至在一些评测中达到了 ChatGPT 的 90% 的效果。当前的一些研究表明有监督微调阶段数 据选择对 SFT 模型效果有非常大的影响, 因此如何构造少量并且高质量的训练数据是本阶段有监督微调阶段的 研究重点。​

奖励建模 (Reward Modeling) 阶段目标是构建一个文本质量对比模型, 对于同一个提示词, SFT 模型给出的多个不同输出结果的质量进行排序。奖励模型 (RM 模型) 可以通过二分类模型, 对输入的两个结果之间的优劣 进行判断。 RM 模型与基础语言模型和 SFT 模型不同, RM 模型本身并不能单独提供给用户使用。奖励模型的训 练通常和 SFT 模型一样, 使用数十块 GPU,通过几天时间完成训练。由于 RM 模型的准确率对于强化学习阶段 的效果有着至关重要的影响, 因此对于该模型的训练通常需要大规模的训练数据。 Andrej Karpathy 在报告中指 出, 该部分需要百万量级的对比数据标注, 而且其中很多标注需要花费非常长的时间才能完成。标注示例中文 本表达都较为流畅, 标注其质量排序需要制定非常详细的规范, 标注人员也需要非常认真的对标规范内容进行 标注, 需要消耗大量的人力, 同时如何保持众包标注人员之间的一致性, 也是奖励建模阶段需要解决的难点问 题之一。此外奖励模型的泛化能力边界也在本阶段需要重点研究的另一个问题。如果 RM 模型的目标是针对所 有提示词系统所生成输出都能够高质量的进行判断, 该问题所面临的难度在某种程度上与文本生成等价, 因此 如何限定 RM 模型应用的泛化边界也是本阶段难点问题。

强化学习 (Reinforcement Learning) 阶段根据数十万用户给出的提示词, 利用在前一阶段训练的 RM 模型, 给出 SFT 模型对用户提示词补全结果的质量评估, 并与语言模型建模目标综合得到更好的效果。该阶段所使用 的提示词数量与有监督微调阶段类似,数量在十万量级,并且不需要人工提前给出该提示词所对应的理想回复。 使用强化学习, 在 SFT 模型基础上调整参数, 使得最终生成的文本可以获得更高的奖励 (Reward) 。该阶段所需 要的计算量相较预训练阶段也少很多, 通常也仅需要数十块 GPU,经过数天时间的即可完成训练。对比强化学 习和有监督微调, 在模型参数量相同的情况下, 强化学习可以得到相较于有监督微调好得多的效果。关于为什么 强化学习相比有监督微调可以得到更好结果的问题, 截止到 2023 年 9 月也还没有完整和得到普遍共识的解释。 此外, Andrej Karpathy 也指出强化学习也并不是没有问题的, 它会使得基础模型的熵降低, 从而减少了模型输 出的多样性。在经过强化学习方法训练完成后的 RL 模型, 就是最终提供给用户使用具有理解用户指令和上下文 的类 ChatGPT 系统。由于强化学习方法稳定性不高, 并且超参数众多, 使得模型收敛难度大, 再叠加 RM 模型 的准确率问题,使得在大规模语言模型如何能够有效应用强化学习非常困难。

模型的训练成本

在模型的训练过程中除了要考虑模型准确性, 性能、成本和延迟都是重要考虑因素, 需要考虑效率和效果 (efficiency with effectiveness)之间的平衡。

当然, 大语言模型需要大量数据来学习自然语言的模式和结构。估算数据的成本可能具有挑战性, 因为公 司通常使用其业务运营中长期积累的数据以及开源数据集。此外, 还要考虑到数据需要进行清洗、标记、组织 和存储, 考虑到 LLM 的规模, 数据管理和处理成本会迅速增加, 特别是考虑到这些任务所需的基础设施、工具 和数据工程师时。举个具体的例子, 已知 LLaMA 使用了包含 1.4 万亿个 token 的训练数据集, 总大小为 4.6TB! 接下主要介绍的是计算资源等方面的成本。

算力估算

如何评估大模型的所需算力。众所周知, 现如今的预训练语言模型均是基于 Transformer 结构实现的, 因此 大模型的参数主要来源于 Transformer 的 Self-Attention 部分。 EleutherAI 团队近期发布一篇博客来介绍如何估计一个大模型的算力成本,公式如下:​

C = τT ≈ 6PD

公式中各个符号代表的含义如下:

  • ​ C 表示 Transformer 需要的计算量,单位是 FLOP;

  • P 表示 Transformer 模型包含的参数量;

  • D 表示训练数据规模,以 Token 数量为单位;

  • τ 表示吞吐量,单位为 FLOP

  • T 表示训练时间;

C 是一个量化计算成本的单位,通常用FLOP 表示,也可以用一些新的单位来表示:

  • FLOP/s-s :表示每秒浮点运算数 × 秒;

  • PetaFLOP/s-days:表示实际情况下每秒浮点运算数 × 天

费用和能耗

近年来, LLM 变得越来越大, LLM 的训练费用跟参数大小直接相关, 训练大型模型需要大量的算力, 因为 需要处理海量的数据。训练这类模型所需的算力取决于以下因素: 模型的规模(参数数量)、训练数据集的大小、 训练轮次、批次大小。 T5 11b 规模的模型单次训练成本预估超过 130 万美元, GPT-3 175B 单次训练需要 460 万 美元。

在此, 我们假定要训练一个千亿规模的大模型, 用 1PB 数据进行训练, 训练一次, 并且在 10 天内完成训练。 看看需要消耗多少算力,并计算这样的算力消耗,如果用英伟达的芯片,需要多少芯片。

首先, 我们要了解一个概念, 即 FLOPs (浮点运算次数)。FLOPs 用来衡量执行某个任务所需的计算量。 T5 11B 模型只需要 3.3x102 2,假设一个千亿(1000 亿) 参数的大型模型, 我们可以参考 GPT-3。GPT-3 中最大的模 型(1750 亿参数) 的训练大约需要 3.14 ∗ 102 3 次浮点运算(FLOPs),FLOPs 大了 10 倍, 下图是训练大语言模 型所需 FLOPs 对比示意图。

训练大语言模型所需 FLOPs 对比示意图

我们可以通过以下简化公式估算所需的 FLOPs:

所需 FLOPs = (千亿参数 / 1750 亿参数) * 3.14 ∗ 102 3 FLOPs

根据这个公式, 我们得出训练一个千亿参数的模型大约需要 1.8 ∗ 102 3 次浮点运算。我们来看看英伟达的芯片。 以英伟达 A100 GPU 为例, 其具有每秒 19.5 万亿次(19.5 TFLOPs) 的浮点运算能力。要计算出需要多少个 A100 GPU 来满足这个算力需求,我们可以使用以下公式:

所需GPU数量 = 1.8 ∗ 10^23FLOPs/(19.5∗10^12FLOPs/s * 训练时间秒数)

如果希望在 10 天(约 864000 秒) 内完成训练, 可以按照以下计算方式得到所需 GPU 数量, 在 10 天内训练 1000 亿参数规模、 1PB 训练数据集,大约需要 10830 个英伟达 A100 GPU:

所需GPU数量 = 1.8 ∗ 10^23FLOPs/(19.5∗10^12FLOPs/s * 864000s)

接下来, 我们来计算大模型的训练成本。要计算训练一个千亿规模大型模型的总费用, 我们需要考虑以下 因素: GPU 成本、其他硬件成本(如 CPU、内存、存储等)、数据中心成本(如电力、冷却、维护等)、人力成本。

还是上面的例子,需要在 10 天内训练 1000 亿参数规模的大模型,总的成本如下:

GPU 成本: 英伟达 A100 GPU 的价格因供应商和购买数量而异, 假设每个 A100 GPU 的成本约为 10000 美 元,那么 10830 个 GPU 的总成本约为: 10830 * $10,000 = $108,300,000

其他硬件成本: GPU 只是整个计算系统的一部分, 我们还需要考虑其他硬件设备的成本。包括 CPU、内存、 存储、网络设备等。这些硬件成本可能占据整体硬件成本的一部分, 假设其他硬件成本占 GPU 成本的 20%,那 么:其他硬件成本 = $108,300,000 * 20% = $21,660,000

数据中心成本: 我们还需要考虑数据中心的成本, 包括电力、冷却、维护等。假设这些成本占 GPU 成本的 10%,那么:数据中心成本 = $108,300,000 * 10% = $10,830,000

人力成本: 训练大型模型需要一支研究和工程团队, 包括研究员、工程师、数据科学家等。人力成本因团队 规模和地区差异而异。在这里,我们假设人力成本约为 200 万美元。

训练大语言模型所需费用对比示意图

综合以上因素,训练一个千亿规模大型模型的总费用大约为 $142,790,000:

  • 总费用 = GPU 成本 + 其他硬件成本 + 数据中心成本 + 人力成本

  • 总费用 = $108,300,000 + $21,660,000 + $10,830,000 + $2,000,000

因此, 在 10 天内训练一个千亿规模的大型模型大约需要花费 1.43 亿美元。当然, 如果训练时间长一点, 就 可以用更少的 GPU,花费更少的成本。但一般而言, 总成本都会在几千万美元规模。从上面的分析可以发现, 大模型真的是烧钱的游戏。先不考虑大模型的研发, 就是要完成一次大模型的训练, 首先就要有上亿的成本投入, 上图是训练大语言模型所需费用对比示意图。

对于 OpenAI API 的用户, 定价基于模型和使用情况而变化, 例如 GPT-3.5-turbo 通用聊天服务的收费标准 为 0.002$/1k token, 0.003$/1k token0. 12$/1k token

训练大模型的能耗同样惊人, 日前, 斯坦福大学人工智能研究所发布的一份新报告估计, 训练像 OpenAI 的 GPT-3 这样的人工智能模型所需消耗的能量, 足以可以让一个普通美国家庭用上数百年了。训练一个 6b trans- former 总能消耗估计约为 103.5 Mwh ,Google 称,训练 PaLM 两个月左右耗费约了 3.4 Gwh。

训练大语言模型二氧化碳排放量对比示意图

上图中展示了训练四种模型相关的碳成本的研究:DeepMind 的 Gopher 、BigScience inititiaives 的 BLOOM、 Meta 的 OPT 和 OpenAI 的 GPT-3。据报道, OpenAI 的模型在训练期间释放了 502 公吨碳。它释放的碳含量是 Gopher 的 1.4 倍, 是 BLOOM 的 20.1 倍。 GPT-3 的耗电量也是最大的, 达 1,287MWh。每个模型的能耗受很多 因素影响, 包括数据点或参数的数量, 它们训练所在的数据中心的能效。尽管能耗存在明显差异, 四个模型中 有三个(DeepMind 的 Gopher 除外) 都是在大致相当的 1750 亿个参数上进行训练的。 OpenAI 并没有透露其新 发布的 GTP-4 训练了多少参数,鉴于该模型前几个版本之间所需数据的巨大飞跃, 可以肯定 GTP-4 比之前的版 本需要更多数据。

ps: 欢迎扫码关注公众号^_^.

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

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

相关文章

蓝桥杯每日一题2023.10.3

杨辉三角形 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 40分写法&#xff1a; 可以自己手动构造一个杨辉三角&#xff0c;然后进行循环&#xff0c;用cnt记录下循环数的个数&#xff0c;看哪个数与要找的数一样&#xff0c;输出cnt #include<bits/stdc.h> using na…

【通意千问】大模型GitHub开源工程学习笔记(2)--使用Qwen进行推理的示例代码解析,及transformers的库使用

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

python——Django框架

一、基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本身基于 MVC …

使用关键字interface来声明使用接口-PHP8知识详解

继承特性简化了对象、类的创建&#xff0c;增加了代码的可重用性。但是php8只支持单继承&#xff0c;如果想实现多继承&#xff0c;就需要使用接口。PHP8可以实现多个接口。 接口类通过关键字interface来声明&#xff0c;接口中不能声明变量&#xff0c;只能使用关键字const声明…

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据&#xff5e; 数据长度 IP模块的分片功能 发送频率 网络包序号&#xff5e;利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

找不到msvcr120.dll怎么办?电脑缺失msvcr120.dll的修复方法

msvcr120.dll 是 Microsoft Visual C Redistributable Package 中的一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些功能。这个文件通常与 Visual C 2010 编译器一起使用&#xff0c;用于支持一些大型游戏和应用程序的运行。msvcr120.dll 文件的主要作用是提供 C 语言…

阿里云关系型数据库有哪些?RDS云数据库汇总

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

WebSocket实战之五JSR356

一、前言 前几篇WebSocket例子服务端我是用NodeJS实现,这一篇我们用Java来搭建一个WebSocket服务端&#xff0c;从2011年WebSocket协议RFC6455发布后&#xff0c;大多数浏览器都实现了WebSocket协议客户端的API,而对于服务端Java也定义了一个规范JSR356,即Java API for WebSoc…

TouchGFX之后端通信

在大多数应用中&#xff0c;UI需以某种方式连接到系统的其余部分&#xff0c;并发送和接收数据。 它可能会与硬件外设&#xff08;传感器数据、模数转换和串行通信等&#xff09;或其他软件模块进行交互通讯。 Model类​ 所有TouchGFX应用都有Model类&#xff0c;Model类除了存…

Collagen

\ collagen XV/XVIII, Endostatin- angiogenesis inhibitor; c-type lectin 结构&#xff1b; TSP ( 含有 Laminin-G)

【Pytorch笔记】4.梯度计算

深度之眼官方账号 - 01-04-mp4-计算图与动态图机制 前置知识&#xff1a;计算图 可以参考我的笔记&#xff1a; 【学习笔记】计算机视觉与深度学习(2.全连接神经网络) 计算图 以这棵计算图为例。这个计算图中&#xff0c;叶子节点为x和w。 import torchw torch.tensor([1.]…

【pwn入门】用gdb实现第1个pwn

声明 本文是B站你想有多PWN学习的笔记&#xff0c;包含一些视频外的扩展知识。 有问题的源码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> char sh[]"/bin/sh"; int func(char *cmd){system(cmd);return 0; }int main(){char …