社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

GitHub 又一黑科技项目诞生,成功复现 ChatGPT 完整流程!

GitHubDaily • 1 年前 • 478 次点击  

公众号关注 “GitHubDaily”

设为 “星标”,每天带你逛 GitHub!


大家好,我是小 G。

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

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

GitHub 知名开源项目 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 等多种预训练大模型;

  • 收敛验证正在进行中,该项目也在吸引合作者共建生态

GitHub 项目地址: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 作为系统策略即可快速使用。

from chatgpt.nn import GPTActor, GPTCritic, RewardModel
from chatgpt.trainer import PPOTrainer
from chatgpt.trainer.strategies import ColossalAIStrategy

strategy = 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 等):

# 使用单机单卡训练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

GitHub 地址:https://github.com/hpcaitech/ColossalAI

参考链接:https://www.hpc-ai.tech/blog/colossal-ai-chatgpt


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152191
 
478 次点击