机器之心发布
机器之心编辑部
以 ChatGPT、GPT4 为代表的 AI 应用和大模型火爆全球,被视为开启了新的科技工业革命和 AGI (通用人工智能)的新起点。不仅科技巨头间你追我赶,争相推出新品,许多学术界、工业界的 AI 大佬也纷纷投入投身相关创业浪潮。生成式 AI 正以 “天” 为单位,快速迭代,持续狂飙!
然而,OpenAI 并未将其开源,它们背后的技术细节有哪些?如何快速跟进、追赶并参与到此轮技术浪潮中?如何降低 AI 大模型构建和应用的高昂成本?如何保护核心数据与知识产权不会因使用第三方大模型 API 外泄?
作为当下最受欢迎的开源 AI 大模型解决方案,Colossal-AI 率先建立了包含 监督数据集收集 -> 监督微调 -> 奖励模型训练 -> 强化学习微调的完整 RLHF 流程 ,以 LLaMA 为基础预训练模型,推出 ColossalChat, 是目前最接近 ChatGPT 原始技术方案的实用开源项目!
开源地址:https://github.com/hpcaitech/ColossalAI
包含以下内容:
1. Demo: 可直接在线体验模型效果,无需注册或 waitinglist
2. 训练代码: 开源完整 RLHF 训练代码,已开源至含 7B 和 13B 两种模型
3. 数据集: 开源 104K 中、英双语数据集
4. 推理部署: 4bit 量化推理 70 亿参数模型仅需 4GB 显存
5. 模型权重: 仅需单台服务器少量算力即可快速复现
6. 更大规模模型、数据集、其他优化等将保持高速迭代添加
平价模型,强大能力
ColossalChat 仅需不到百亿参数,在大语言模型的基础上进行 RLHF 微调,即可掌握中、英双语能力,达到与 ChatGPT 和 GPT-3.5 类似的效果。
例如常识问答:
中文应答:
写一封邮件:
写个算法:
完整 ChatGPT 克隆方案
尽管 ChatGPT 和 GPT-4 等 GPT 系列模型非常强大,但是它们不太可能被完全开源。幸运的是,开源社区一直在不断努力。
例如 Meta 开源了 LLaMA 模型,该模型的参数量从 70 亿到 650 亿不等,130 亿参数即可胜过 1750 亿的 GPT-3 模型在大多数基准测试的表现。但是由于没有被指令微调(instruct tuning),因此实际生成效果不够理想。
斯坦福的 Alpaca 通过调用 OpenAI API,以 self-instruct 方式生成训练数据,使得仅有 70 亿参数的轻量级模型以极低成本微调后,即可获得媲美 GPT-3.5 这样千亿参数的超大规模语言模型的对话效果。
但是 现有开源方案都可以被视为只得到了人类反馈强化学习(RLHF)中第一步的监督微调模型 ,没有进行后续的对齐和微调工作。同时 Alpaca 的训练数据集过小,语料只有英文,也在一定程度上限制了模型的性能。
而 ChatGPT 和 GPT-4 的惊艳效果,还在于将 RLHF 引入训练过程,使得生成内容更加符合人类价值观。
RLHF 的三个阶段
基于 LLaMA 模型,Colossal-AI 首个开源包含完整 RLHF 流程的类 Chat 模型复现方案 ColossalChat,是目前 最接近 ChatGPT 原始技术路线 的实用开源项目!
训练数据集开源
ColossalChat 开源了包含约 10 万条问答的中、英双语数据集。该数据集收集并清洗了社交平台上人们的真实提问场景作为种子数据集,利用 self-instruct 技术扩充数据,花费约 900 美元进行标注。对比其他 self-instruct 方法生成的数据集,该数据集的种子数据更加真实、丰富,生成的数据集涵盖的话题更多。该数据可以同时用于微调和 RLHF 训练。通过高质量的数据,ColossalChat 能进行更好地对话交互,同时支持中文。
ColossalChat 数据集收集流程
RLHF 算法复现
RLHF-Stage1 是 supervised-fintuning,即使用上文提到的数据集进行模型微调。
RLHF-Stage2 训练了奖励模型,它通过对于同一个 prompt 的不同输出进行人工排序,得到对应分数,监督训练奖励模型。
RLHF-Stage3 使用了强化学习算法,是训练流程中最复杂的一部分:
RLHF-Stage3 算法流程图
在 PPO 部分,ColossalChat 分为两个阶段进行:首先是 Make Experience 部分,利用 SFT 、Actor、RM、Critic 模型计算生成 Experience 存入 buffer 中;之后是参数更新部分,利用 Experience 计算策略损失和价值损失。
在 PTX 部分,ColossalChat 计算 Actor 输出 response 和输入语料的回答部分的交叉熵损失函数,用来在 PPO 梯度中加入预训练梯度,以保持语言模型原有性能防止遗忘。最后将策略损失、价值损失和 PTX 损失加和进行反向传播和参数更新。
快速上手
ColossalChat 开源了基于 LLaMA 模型,复现训练 ChatGPT 三个阶段的完整代码。
第一阶段,训练 SFT 模型:
# Training with a 4-GPU servers
colossalai run --nproc_per_node=4 train_sft.py \
--pretrain "/path/to/LLaMa-7B/" \
--model 'llama' \
--strategy colossalai_zero2 \
--log_interval 10 \
--save_path /path/to/Coati-7B \
--dataset /path/to/data.json \
--batch_size 4 \
--accimulation_steps 8 \
--lr 2e-5
第二阶段,训练奖励模型:
# Training with a 4-GPU servers
colossalai run --nproc_per_node=4 train_reward_model.py \
--pretrain "/path/to/LLaMa-7B/" \
--model 'llama' \
--strategy colossalai_zero2 \
--dataset /path/to/datasets
第三阶段,使用 RL 训练:
# Training with a 8-GPU servers