SuperAPI AI 工具集

MINI_LLM

MINI_LLM 是一个个人实践项目,用于实验和复现小参数量中文大语言模型的预训练流程。项目基座模型选用 QWEN,训练了一个参数量约 1.4B 的预训练模型,训练 token 数量约 8B。仓库涵盖预训练、SFT 指令微调、DPO(直接偏好优化)的完整流程,并包含 DeepSpeed 分布式训练技术;PPO 部分标注为待做。项目提供了预训练、SFT、DPO 各阶段的模型权重下载链接,并使用 SwanLab 查看训练日志。适用于希望学习或复现中文大模型训练流程的开发者。

访问官网

工具介绍

MINI_LLM 是作者个人关于一个小参数量中文大模型实践复现的代码仓库,用于实验和复现 LLM 的预训练过程。项目参考了 Phi2-mini-Chinese、baby-llama2-chinese、ChatLM-mini-Chinese 等开源项目。

用途与流程 仓库构建了包含预训练、SFT 指令微调、DPO 的完整 LLM 代码流程,并包含 DeepSpeed 分布式训练技术。PPO 部分标注为待做。训练了一个参数量约 1.4B 的预训练模型,基座模型选用 QWEN,训练 token 数量约 8B。

模型底座 模型的底座使用 QWEN 模型,原因包括:1. 它是一个成熟的中文大模型开源项目;2. 作者直接使用了 QWEN 的 tokenizer,因其压缩率较好,并因此也直接使用了其模型。

预训练语料 预训练使用了以下数据集:

  • Wiki中文百科:wikipedia-cn-20230720-filtered
  • BaiduBaiKe:百度网盘 提取码: bwvb
  • 天工数据集:https://huggingface.co/datasets/Skywork/SkyPile-150B/tree/main/data 数据预处理采取 QWEN 的通用做法,在末尾加上结束符号 <|im_end|>,与下一篇文章区分开。若文章超过规定长度则截断,截断部分作为下个样本。

SFT 微调 微调目的是将预训练模型中的知识引导出来。项目主要针对两类 SFT 语料进行微调:

  • 日常问答 SFT 数据:alpaca-zh,参考 Alpaca 方法基于 GPT4 得到的 self-instruct 数据,约 5 万条;bell,源自 BelleGroup 的一部分 SFT 数据,包含约 300 万条由 BELLE 项目生成的中文指令数据。 由于 SFT 语料一般较小,不提前分词,而是在构建 Dataloader 时分词构建 batch 送给模型,参考 sft.py。

DPO DPO 全称直接偏好优化(Direct Preference Optimization),代码参考了中文对话0.2B小模型 ChatLM-Chinese-0.2B。流程包括: 第一步,针对 SFT 阶段不太合适的指令,构建待优化的指令数据集(也可直接使用 alpaca 和 bell 等 SFT 语料),并给出数据结构。 第二步,合并输入部分,生成目标数据集 chosen,并给出数据结构。 第三步,通过第二步的 SFT 模型,输入 prompt(如“描述原子结构。”),得到结果“一个原子由质子、中子和电子组成,它们以特定的方式排列成一个原子核。”,从而构建 rejected 数据集,并给出数据结构。 第四步,合并第二步和第三步的输入结果,并给出数据结构。 使用方式:第一步,使用 dpo_train 文件,修改其中的 DpoConfig 类,设置好对应的 SFT 路径和训练数据集路径;第二步,执行 dpo_train。

训练日志查看 可以通过 SwanLab 方便地查看训练日志变化,使用命令开启本地看板。若希望将训练过程保存在云端查看,可以在 callback 调用处将 swanlab_callback = SwanLabCallback(..., mode="local") 的 mode 变量设置为 "cloud"。

模型权重下载

  • 预训练权重:https://huggingface.co/Lil2J/mini_llm/tree/main
  • SFT 模型权重:https://huggingface.co/Lil2J/mini_llm_sft/tree/main
  • DPO 模型权重:https://huggingface.co/wtxfrancise/mini_llm_dpo/tree/main 另提供 DPO 数据和待优化的 SFT 模型下载链接:https://pan.baidu.com/s/1GYeR6qrUhjsmpgh8-ABDpQ 提取码:dba9

训练数据使用情况 作者先跑了 Wiki中文百科 + BaiduBaiKe 预训练语料,然后再跑天工数据集前 20 个文件作为预训练语料;微调语料使用 alpaca 数据 + bell 的 train_2M_CN、train_1M_CN 和 train_0.5M_CN;DPO 语料使用 alpaca 数据 + bell 的 train_1M_CN。

适用场景与限制 该项目适合希望学习或复现中文大模型预训练、SFT、DPO 流程的个人开发者。限制在于:PPO 尚未完成;部分数据集需要通过百度网盘获取;未提供具体训练硬件要求、训练时长、完整环境依赖安装命令等信息,暂未提供。