Zero-Chatgpt 是一个开源项目,旨在从零开始,将 ChatGPT 的技术路线完整跑一遍。项目覆盖了从数据收集到强化学习的完整流程,主要目的是把代码和流程跑通,效果调优可在后续进行。
用途
该项目用于学习和复现大语言模型(LLM)的完整训练流程,包括预训练、指令微调(SFT)和基于人类反馈的强化学习(RLHF,PPO)。适合希望深入理解 ChatGPT 技术路线的研究者和开发者。
主要能力
项目提供了完整的数据处理和训练代码,具体包括:
- 数据收集:收集了约 10B 中文训练语料,来源包括中文维基百科、中文百度百科和 SkyPile-150B 的随机抽样部分。
- 数据清洗与去重:对中文百度百科进行了清洗和去重,去除人物介绍、产品介绍及过短数据,并进行严格去重,最终从 563 万条数据减少到 140 多万条。代码位于 data_process 文件夹。
- 词表训练:词表大小设置为 32000(参考 llama),special_tokens 参考 qwen 设置。代码位于 train_tokenizer 文件夹。
- 语言模型预训练:模型结构参考 llama,代码参考 huggingface。模型大小设计为 0.1B,预训练数据生成代码、训练脚本和训练代码位于 pretrain 文件夹。
- 指令微调:使用 firefly-train-1.1M 和 ruozhiout_qa_cn.jsonl 数据,经过清洗和去重后剩余 40 多万条,实际使用 30 万条进行训练。脚本和代码位于 sft 文件夹。
- 强化学习(RLHF,PPO):基于 SFT 未使用的数据生成 RLHF 数据,共 10 万条。其中 5 万条用于训练 Reward Model(step 2),1 个 epoch 后分类准确率可达 92%;全部 10 万条用于训练 RLHF(step 3)。代码参考 DeepSpeed-Chat 并做了修改,位于 rlhf 文件夹。
使用方式
项目环境涉及 cuda 12.1、pytorch、transformers、deepspeed 等,requirements.txt 列出了运行环境依赖。计算资源为 2 块 A40,预训练耗时约 2 天。训练数据、模型权重和训练镜像文件已提供,模型权重去掉前缀名后(修改为 model.safetensors 或 pytorch_model.bin)与模型代码、配置文件放在一起(model 文件夹下)即可加载。预训练数据、训练镜像因体积较大后续上传。
适用场景
适用于学习大语言模型全流程训练、进行小规模模型实验、以及在此基础上通过调整配置进行 scaling up 的研究场景。项目经验表明,更大的模型和更多的数据对效果提升十分明显。
限制
项目当前模型规模为 0.1B,实际效果有限。SFT 阶段使用 30 万条数据后效果仍不理想,可能需要更多数据。RLHF 阶段效果不佳,随着训练步数增加,模型能力反而下降,拒绝回答频率增加但复读机频率降低;降低学习率有一定缓解但效果仍不好,可能源于数据质量较差。项目主要目标是跑通流程,效果调优有待后续进行。
项目还介绍了另一个开源图文多模态项目 Zero-Qwen-VL,从 0 开始训练一个对中文支持更友好的图文大模型,使用 qwen-vl 的图片编码器和 Qwen2-0.5B-Instruct 的语言模型,计算资源足够时可替换为更大模型。