Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

开源方案复现ChatGPT流程!1.62GB显存即可体验,单机训练提速7.73倍

首个开源低成本复现ChatGPT完整流程来了。

火爆全网的 ChatGPT,仿佛开启了第四次工业革命,让微软、谷歌等全球科技巨头打得昏天黑地,引得各路玩家纷纷入局,抢占赛道。


然而由于 OpenAI 没有开源 ChatGPT,如何有效复现 ChatGPT 已成为摆在大家面前的头号难题,急需可靠的开源共建方案。

Colossal-AI 快速跟进,首个开源低成本复现 ChatGPT 完整流程。作为当下最火热的开源 AI 大模型解决方案,Colossal-AI 已收获开源社区 GitHub Star 近万颗,此次开源亮点包括:

  • 开源完整基于 PyTorch 的 ChatGPT 复现流程,涵盖全部 3 个阶段,可实现从预训练模型到 ChatGPT 的蜕变;
  • 体验最小 demo 训练流程最低仅需 1.62GB 显存,任意单张消费级 GPU 即可满足,单卡模型容量最多提升 10.3 倍
  • 相比原生 PyTorch,最高可提升单机训练速度 7.73 倍,单卡推理速度 1.42 倍,一行代码即可使用
  • 对于微调任务,可最多提升单卡的微调模型容量 3.7 倍,同时保持高速运行,仅需一行代码;
  • 提供单卡、单机多卡、1750 亿参数等多个版本,支持从 Hugging Face 导入 OPT,GPT-3,BLOOM 等多种预训练大模型;
  • 收敛验证正在进行中,该项目也在吸引合作者共建生态

开源地址:https://github.com/hpcaitech/ColossalAI

ChatGPT——AIGC 引发的工业革命

如果问新年伊始,最火爆的科技热点是什么?非 ChatGPT 莫属。

它仿佛无所不能的六边形战士,可以聊天、写代码、修改 bug、做表格、发论文、写作业、做翻译、甚至代替 Google 搜索引擎等……

自发布以来,ChatGPT 便已摧枯拉朽之势席卷各个行业,不仅 5 天时间便突破百万用户,月活用户突破 1 亿更是仅用时 2 个月,成为史上增速最快的消费级应用,远超如今其他知名应用,如 Twitter 5 年、Meta(Facebook)4 年半,TikTok 9 个月等,而手机普及到 1 亿用户则用了 16 年。

1 亿用户月活用户耗时

比尔・盖茨盛赞 “ChatGPT 的意义不亚于 PC 和互联网诞生”,而微软 CEO 萨蒂亚・纳德拉(Satya Nadella)更是直言 “堪比工业革命,这辈子第一次见这么大的技术浪潮” “AI 正在重塑互联网”。作为向 OpenAI 投资上百亿美元的大金主,微软已火速将 ChatGPT 整合进自家的搜索引擎必应 Bing 和 Edge 浏览器,还计划加入 Teams 以及 Office 等办公套件全家桶,股价一夜市值飙涨超 800 亿美元。

微软与谷歌发布会后股价对比

而隔壁需要担心被 ChatGPT 革命掉自家搜索引擎的谷歌,虽然拉响 “红色警报”,紧急发布对标竞品 Bard,却因 Demo 首秀翻车,股价市值瞬间蒸发 1000 亿美元。

一夜之间,全球的科技巨头们仿佛都回到了自己年轻时的样子,纷纷宣布要打造自己的 ChatGPT。

但 ChatGPT 发布已有数月,市面上不仅没有预训练权重开源,连可靠的完整开源训练流程都仍是空白,更无法实现基于千亿大模型的 ChatGPT 全流程高效搭建和应用。临时上线,号称 “对标 ChatGPT” 的一众新品们,因为闭源也难辨真伪。

为什么 ChatGPT 有如此魔力?复现它又有哪些难点?

ChatGPT 技术分析

ChatGPT 的惊人效果,重要特征是在训练过程引入人类反馈强化学习(RLHF),使得模型表现更符合人类价值观。

ChatGPT 的训练流程主要分为三个阶段:

1. 从 Prompt 库中采样,收集其人工回答,利用这些数据来微调预训练大语言模型
2. 从 Prompt 库中采样,使用大语言模型生成多个回答,人工对这些回答进行排序后,训练奖励模型(RM),来拟合人类的价值判断。
3. 基于阶段 1 的监督微调模型和阶段 2 的奖励模型,利用强化学习算法对大语言模型进一步训练。

其中阶段 3 是 RLHF 训练的核心部分,OpenAI 采用了强化学习中的近端策略优化算法(PPO),借此引入奖励信号,使得语言模型生成内容更加符合人类评判标准。

RLHF 的三个阶段 

ChatGPT 模型的复杂性在于强化学习的引入会带来更多模型的调用。例如,使用基于 Actor-Critic(AC)结构的 PPO 算法,需要在训练时进行 Actor、Critic 两个模型的前向推理和反向传播,以及监督微调模型、奖励模型的多次前向推理。在 ChatGPT 基础的 InstructGPT 的论文中,Actor 和监督微调模型都使用了 1750 亿参数的 GPT-3 系列模型,Critic 和奖励模型则使用了 60 亿参数的 GPT-3 系列模型。

对于如此多的模型参数,想要启动原始 ChatGPT 训练流程,需要数千 GB 的显存开销,显然远超单张 GPU 的容纳能力,常见的数据并行技术也无能为力。但即使引入张量并行、流水并行对参数进行划分,也仍需至少 64 张 80GB 的 A100 作为硬件基础。并且,其中的流水并行由于 bubble 和调度复杂,效率受限,不适合 AIGC 的生成式任务。阶段 3 涉及 4 个模型的复杂强化学习训练流程,进一步给 ChatGPT 的代码复现带来了困难和挑战。

使用 Colossal-AI 低成本复现 ChatGPT

Colossal-AI 以开源方式复现了 ChatGPT 训练的基本流程,包括阶段 1 预训练,阶段 2 的奖励模型的训练,以及最为复杂的阶段 3 的强化学习训练等。

同时,Colossal-AI 通过 ZeRO,Gemini,  Chunk-based 内存管理等技术,极大地降低 ChatGPT 训练的显存开销,仅需一半硬件资源即可启动 1750 亿参数模型训练(64 卡 ->32 卡),显著降低应用成本。若使用上述相同硬件资源,Colossal-AI 则能以更短时间进行训练,节省训练成本,加速产品迭代。

为了让更多开发者体验复现 ChatGPT 模型,除 1750 亿参数版本外,Colossal-AI 还提供高效的单卡、单机 4/8 卡的类 ChatGPT 版本,以降低硬件限制。


在单机多卡服务器上,即便使用最高端的 A100 80GB 显卡,由于 ChatGPT 的复杂性和内存碎片,PyTorch 最大仅能启动基于 GPT-L(774M)这样的小模型的 ChatGPT。用 PyTorch 原生的 DistributedDataParallel (DDP) 进行多卡并行扩展至 4 卡或 8 卡,性能提升有限。

Colossal-AI 不仅在单卡速度上训练和推理优势明显,随着并行规模扩大还可进一步提升,最高可提升单机训练速度 7.73 倍,单卡推理速度 1.42 倍,还可继续扩展至大规模并行,显著降低 ChatGPT 复现成本。


为了尽可能降低训练成本和上手门槛,Colossal-AI 还提供了在单张 GPU 上即可尝试的 ChatGPT 训练流程。相比于 PyTorch 在约 10 万元的 A100 80GB 上,最大仅能启动 7.8 亿参数模型,Colossal-AI 将单卡容量提升 10.3 倍至 80 亿参数。对于基于 1.2 亿参数小模型的 ChatGPT 训练,最低仅需 1.62GB 显存,任意单张消费级 GPU 即可满足。


此外,Colossal-AI 也致力于降低基于预训练大模型的微调任务成本。以 ChatGPT 可选的开源基础模型 OPT 为例,相比 PyTorch,Colossal-AI 可将提升单卡微调模型容量 3.7 倍(原始计算量显著增大),同时保持高速运行

一行代码快速上手

Colossal-AI 为 Hugging Face 社区的 GPT,OPT 和 BLOOM 等主流预训练模型,提供了开箱即用的 ChatGPT 复现代码。以 GPT 为例,仅需一行代码,指定使用 Colossal-AI 作为系统策略即可快速使用。


Pythonfrom chatgpt.nn import GPTActor, GPTCritic, RewardModelfrom chatgpt.trainer import PPOTrainerfrom chatgpt.trainer.strategies import ColossalAIStrategystrategy = ColossalAIStrategy (stage=3, placement_policy='cuda')with strategy.model_init_context ():    actor = GPTActor ().cuda ()    critic = GPTCritic ().cuda ()    initial_model = deepcopy (actor).cuda ()    reward_model = RewardModel (deepcopy (critic.model)).cuda ()trainer = PPOTrainer (strategy, actor, critic, reward_model, initial_model, ...)trainer.fit (prompts)


使用下列命令,即可快速启动单卡、单机多卡、1750 亿版本训练,并测试各种性能指标(包括最大显存占用、吞吐率和 TFLOPS 等):


Python# 使用单机单卡训练 GPT2-S,使用最小的 batch size,Colossal-AI Gemini CPU 策略torchrun --standalone --nproc_pero_node 1 benchmark_gpt_dummy.py --model s --strategy colossalai_gemini_cpu --experience_batch_size 1 --train_batch_size 1# 使用单机 4 卡训练 GPT2-XL,使用 Colossal-AI Zero2 策略torchrun --standalone --nproc_per_node 4 benchmark_gpt_dummy.py --model xl --strategy colossalai_zero2# 使用 4 机 32 卡训练 GPT-3,使用 Colossal-AI Gemini CPU 策略torchrun --nnodes 4 --nproc_per_node 8 \ --rdzv_id=$JOB_ID --rdzv_backend=c10d --rdzv_endpoint=$HOST_NODE_ADDR \ benchmark_gpt_dummy.py --model 175b --strategy colossalai_gemini_cpu --experience_batch_size 1 --train_batch_size 1


背后优化

核心系统 Colossal-AI

复现 ChatGPT 的背后,依赖面向大模型时代的通用深度学习系统 Colossal-AI,可基于 PyTorch 高效快速部署 AI 大模型训练和推理,降低 AI 大模型应用成本。

自开源以来,Colossal-AI 已经多次在 GitHub 热榜位列世界第一,获得 GitHub Star 超八千颗,并成功入选 SC、AAAI、PPoPP、CVPR 等国际 AI 与 HPC 顶级会议的官方教程。除上述优化外,Colossal-AI 还针对 AI 大模型趋势,提供最多样和高效的大规模多维并行分布式解决方案,此前已在 Stable Diffusion、OPT、AlphaFold 等前沿模型上展现卓越优势。

Colossal-AI 与当今主要开源项目同期开源数据对比

Colossal-AI 由加州伯克利大学杰出教授 James Demmel 和新加坡国立大学校长青年教授尤洋领导。相关解决方案已成功在自动驾驶、云计算、零售、医药、芯片等行业知名厂商落地应用,广受好评。Colossal-AI 已成功帮助某世界 500 强企业,开发具备在线搜索引擎能力增强的类 ChatGPT 聊天机器人模型。

低成本微调的 LoRA

Colossal-AI 支持使用低秩矩阵微调(LoRA)方法进行高效微调。LoRA 方法认为大语言模型是过参数化的,其在微调中的参数改变量是·一个低秩的矩阵,可以将其分解为两个更小的的矩阵的乘积,即在微调时,固定大模型参数,只调整低秩矩阵参数,从而显著减小训练参数量。在微调之后,进行推理部署之前,只需要将参数加回原有矩阵即可,即,不增加模型的推理延迟。


LoRA 示意图,仅需训练 A、B

减少内存冗余的 ZeRO + Gemini

Colossal-AI 支持使用无冗余优化器 (ZeRO) 来优化内存使用,这种方法可以有效减少内存冗余,并且相比传统的数据并行策略,不会牺牲计算粒度和通信效率,同时可以大幅提高内存使用效率。为了进一步提升 ZeRO 的性能,Colossal-AI 引入了自动 Chunk 机制。通过将运算顺序上连续的一组参数存入同一个 Chunk 中(Chunk 是一段连续的内存空间),可以确保每个 Chunk 的大小相同,从而提高内存使用效率。使用 Chunk 方式组织内存可以保证 PCI-e 和 GPU-GPU 之间的网络带宽得到有效利用,减小通信次数,同时避免潜在的内存碎片。

Chunk 机制

此外,Colossal-AI 的异构内存空间管理器 Gemini 支持将优化器状态从 GPU 卸载到 CPU ,以节省 GPU 内存占用。可以同时利用 GPU 内存、CPU 内存(由 CPU DRAM 或 NVMe SSD 内存组成)来突破单 GPU 内存墙的限制,进一步扩展了可训练模型规模。

通过 ZeRO + Gemini 提升硬件的模型容量

开放协作

尽管此次开源包含了复现 ChatGPT 的完整算法流程和必要软件系统,但对于像 ChatGPT 这样的超大 AI 大模型,想要实际落地应用,还需要数据、算力至少 2 方面的努力。毕竟训练一个 1750 亿参数的 GPT-3 就需要数百万美元算力。因此,长期以来预训练大模型都由少数大型私营科技公司垄断。

好在开源社区已成功进行了新的尝试。例如,完全开放代码、数据集、权重的 1760 亿参数的 BLOOM 模型,共有来自全球 60 个国家、超过 250 个机构,以及超过 1000 名研究人员参与其中,其中包括以个人名义参加的 Meta、谷歌等大厂员工。而前段时间大火的开源图文生成模型 Stable Diffusion,也是由 Stability AI、EleutherAI 和 LAION 等组织共同完成的。

借鉴上述成功模式,该项目也在吸引更多的合作者:无论是个人开发者,还是算力、数据、模型等可能合作方,都有机会参与其中,大显身手,以复现 ChatGPT 为起点,拥抱大模型时代!

可通过以下方式联系或参与:

1. 在 GitHub 发布 issue 或提交 PR
2. 加入 Colossal-AI 用户微信或 Slack 群交流
3. 点击阅读原文填写合作提案
4. 发送合作提案到邮箱 contact@hpcaitech.com

开源地址
https://github.com/hpcaitech/ColossalAI
参考链接
https://www.hpc-ai.tech/blog/colossal-ai-chatgpt
产业开源项目潞晨科技ChatGPT
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

SSD技术

一种计算机视觉模型。论文发表于 2015 年(Wei Liu et al.)

线搜索技术

最优化问题中,线搜索是一种寻找目标函数 的局部最小值 的近似方法。 它是最基础的迭代近似方法之一,另一种是置信域方法。 线搜索近似首先找到一个使目标函数 下降的方向,然后计算 应该沿着这个方向移动的步长。 下降方向可以通过多种方法计算,比如梯度下降法,牛顿法和拟牛顿法。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

云计算技术

云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

聊天机器人技术

聊天机器人是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试。 聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。

AlphaFold技术

DeepMind 提出的深度神经网络蛋白质形态预测方法。AlphaFold系统,是DeepMind在2017-2018年中一直在研究的项目,它建立在多年以前使用大量基因组数据来预测蛋白质结构的研究基础之上。 AlphaFold产生的蛋白质3D模型比以往任何一种都精确得多,在生物学的核心挑战之一上取得了重大进展。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

语言模型技术

统计式的语言模型是借由一个几率分布,而指派几率给字词所组成的字串。语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。

推荐文章
暂无评论
暂无评论~