ChatGPT、GPT-4等大型AI模型和应用在全球范围内风靡一时,成为技术产业革命和AGI(Artificial General Intelligence)发展的基础。 不仅科技巨头竞相发布新品,许多来自学术界和产业界的人工智能专家也加入了相关的创业浪潮。 生成式 AI 每天都在快速迭代,不断完善!
然而,OpenAI 并没有将其模型开源,这让许多人对它们背后的技术细节感到好奇。
- 我们如何才能跟上潮流并参与这一技术发展浪潮?
- 如何降低构建和应用大型人工智能模型的高成本?
- 如何保护核心数据和IP不被第三方大模型API泄露?
作为当今领先的开源大型人工智能模型解决方案,Colossal-AI 率先开源了完整的 RLHF 流水线,包括监督数据收集、监督微调、奖励模型训练和强化学习微调,基于 LLaMA预训练模型,分享最实用的开源项目ColossalChat,最接近ChatGPT原技术方案!
开源地址:https://github.com/hpcaitech/ColossalAI
它包括以下内容:
Demo:无需注册或加入等候名单即可在线试用的交互式演示。
训练代码:开源完整的RLHF训练代码,包括7B和13B模型。
数据集:开源的104K中英文双语数据集。
推理:70 亿参数模型的 4 位量化推理,仅需要 4GB GPU 内存。
模型权重:在单台服务器上仅需少量算力即可实现快速复现。
将快速更新和添加其他更大的模型、数据集和其他优化。
可用模型,强大的功能(Affordable models, powerful capabilities)
ColossalChat只需要不到100亿个参数就可以达到中英文双语能力,通过在大语言模型基础上的RLHF微调,达到了与ChatGPT和GPT-3.5相当的效果。
例如,
一般知识测验
用中文回答
写邮件
写一个算法
完整的 ChatGPT 克隆解决方案
虽然 GPT 系列中的模型,例如 ChatGPT 和 GPT-4,非常强大,但它们不太可能完全开源。 幸运的是,开源社区一直在努力解决这个问题。
例如,Meta 开源了 LLaMA 模型,它提供的参数大小从 70 亿到 650 亿不等。 在大多数基准测试中,一个 130 亿参数的模型可以胜过 1750 亿个 GPT-3 模型。 但是由于没有instruct tuning stage,实际生成的结果并不尽如人意。
斯坦福的AIpaca通过调用 OpenAI 的 API 以自我指导的方式生成训练数据。 这个轻量级模型只有 70 亿个参数,可以用一小部分成本进行微调,以实现类似于具有 1750 亿个参数的超大型语言模型(如 GPT-3.5)的会话性能。
然而,现有的开源解决方案在 RLHF(人类反馈强化学习)的第一阶段只能被视为有监督的微调模型,而不会执行后续的对齐和微调阶段。 此外,Alpaca 的训练数据集仅限于英语,这在一定程度上限制了模型的性能。
然而,ChatGPT 和 GPT-4 令人印象深刻的效果是由于在训练过程中引入了 RLHF,这增加了生成内容与人类价值观的一致性。
RLHF的三个阶段
ColossalChat基于LLaMA模型,是第一个包含完整RLHF过程复制ChatGPT-like模型的实用开源项目,是最接近ChatGPT原技术路线的项目!
训练数据集开源
ColossalChat 发布了一个双语数据集,其中包含大约 100,000 个中英文问答对。 该数据集是从社交媒体平台上的真实问题场景中收集和清理的,作为种子数据集,并使用自指导技术进行扩展,注释成本约为 900 美元。 与其他自我指导方法生成的数据集相比,该数据集包含更真实和多样化的种子数据,涵盖更广泛的主题。 该数据集适用于微调和 RLHF 训练。 在提供优质数据的情况下,ColossalChat 可以实现更好的对话交互,同时也支持中文。
ColossalChat 数据集收集过程
RLHF 算法fux
RLHF 算法复制涉及三个阶段:
在 RLHF-Stage1 中,使用前面提到的数据集进行监督指令微调以微调模型。
在 RLHF-Stage2 中,奖励模型被训练为通过手动对同一提示的不同输出进行排序来分配相应的分数,然后监督奖励模型的训练。
在 RLHF-Stage3 中,使用了强化学习算法,这是训练过程中最复杂的部分:
在PPO部分,ColossalChat遵循两个阶段的过程:首先是make experience阶段,使用SFT(Supervised Fine-Tuning)、Actor、RM(Reward Model)和Critic模型计算生成的体验并存储在 缓冲。 然后是参数更新阶段,利用经验计算策略损失和价值损失。
在 PTX 部分,ColossalChat 计算了 Actor 的输出响应与输入语料库的响应部分之间的交叉熵损失。 这个loss用来在PPO梯度上加入预训练梯度,保持语言模型原有的性能,防止遗忘。 最后,将策略损失、价值损失和 PTX 损失相加用于反向传播和参数更新。
快速开始
ColossalChat开源了基于LLaMA模型分三阶段低成本复制ChatGPT的完整代码。
ColossalChat开源了基于LLaMA模型分三阶段低成本复制ChatGPT的完整代码。
在第 1 阶段,训练 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
在第 2 阶段,RM 被训练:
# 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
一旦得到微调后的模型权重,就可以通过量化降低推理的硬件成本,并可以推出在线推理服务,仅需单GPU约4GB显存即可部署70亿参数模型推理服务。第 3 阶段,使用 RL 算法进行训练:
# Training with a 8-GPU servers
colossalai run — nproc_per_node=8 train_prompts.py prompts.csv \
— strategy colossalai_zero2 \
— pretrain “/path/to/Coati-7B” \
— model ‘llama’ \
— pretrain_dataset /path/to/dataset
一旦得到微调后的模型权重,就可以通过量化降低推理的硬件成本,并可以推出在线推理服务,仅需单GPU约4GB显存即可部署70亿参数模型推理服务。
python server.py /path/to/pretrained — quant 4bit — gptq_checkpoint /path/to/coati-7b-4bit-128g.pt — gptq_group_size 128
系统性能优化与开发加速
ColossalChat能够快速跟进ChatGPT复制的完整RLHF流程,很大程度上得益于Colossal-AI的基础设施和相关优化技术的底层支持。 在同等条件下,ColossalChat 的训练速度与 Alpaca 使用的 FSDP(Fully Sharded Data Parallel)相比可以提升近三倍。
系统基础设施Colossal-AI
AI大模型开发系统Colossal-AI为该项目提供了基础支持。 可高效快速部署基于PyTorch的AI大模型训练和推理,降低AI大模型应用成本。 Colossal-AI 是基于加州大学伯克利分校特聘教授 James Demmel 教授和新加坡国立大学校长青年教授杨佑教授的专业知识开发的。 自开源以来,Colossal-AI以约20000个GitHub star多次登上GitHub Trending榜首,并成功被SC、AAAI、PPoPP、CVPR、 和国际学习中心。
零+Gemini 减少内存冗余
Colossal-AI 支持 ZeRO(零冗余优化器)以提高内存使用效率,能够以更低的成本容纳更大的模型,同时不影响计算粒度和通信效率。 自动分块机制可以通过提高内存使用效率、降低通信频率、避免内存碎片,进一步提升ZeRO的性能。 异构内存空间管理器Gemini支持将优化器状态从GPU内存卸载到CPU内存或硬盘空间,以克服GPU内存容量的限制,扩大可训练模型的规模,降低大型AI模型应用的成本。
LoRA的低成本微调
Colossal-AI 包括用于对大型模型进行低成本微调的低秩适应 (LoRA) 方法。 LoRA 方法假设大型语言模型是过度参数化的,并且微调期间的参数变化是一个低秩矩阵。 因此,这个矩阵可以分解为两个更小的矩阵的乘积。 fine-tuning时固定大模型的参数,只调整低秩矩阵的参数,显着减少训练所需的参数数量,降低成本。
Low-cost Quantized Inference
GPTQ quantization
为了降低推理部署的成本,Colossal-AI 使用 GPTQ 4 位量化推理。 在 GPT/OPT/BLOOM 模型上,它可以获得比传统 RTN(round-to-nearest)量化技术更好的 Perplexity 结果。 与普通的 FP16 推理相比,它可以减少 75% 的内存消耗,同时只牺牲少量的吞吐速度和 Perplexity 性能。
例如,使用ColossalChat-7B,使用4位量化推理,70亿参数模型只需要大约4GB的GPU内存就可以完成短序列(128长度生成)推理,这可以在普通的消费级GPU上完成 就像只有一行代码的 RTX 3060。
if args.quant == ‘4bit’:
model = load_quant(args.pretrained, args.gptq_checkpoint, 4, args.gptq_group_size)
ColossalChat 与Alpaca
ColossalChat 是第一个开源完整的 RLHF 流水线的,而斯坦福大学的 Alpaca 还没有实现 RLHF,这意味着他们不包括 Stage 2 和 Stage 3。
ColossalChat 展示了卓越的性能和更广泛的会话覆盖范围。 它的显着改进是由于使用了更大和更高质量的数据集,以及实施强化学习以使响应更接近于类人答案。
ColossalChat 的训练过程结合了 Colossal-AI 的各种系统优化,在使用相同的数据集和模型大小时,训练时间比 Alpaca 快约三倍。 这使研究人员和中小型企业能够独立训练和部署自己的聊天机器人。
ColossalChat 团队收集了一个更大的训练数据集,包括大约 2400 万个英文词条和 3000 万个中文词条,总共约 5400 万个词条。 值得注意的是,ColossalChat 独立收集了 600 万个英文代币和 1800 万个中文代币。
以下是 ColossalChat 和 Alpaca 在语言对话方面的一些性能对比。
写一封电子邮件给教授以获得推荐信
局限性
虽然进一步引入了RLHF,但受限于算力和数据集,在某些场景下实际性能仍有提升空间。