license: apache-2.0
1. 项目简介
- 目标:本项目致力于开发一款轻量级语言模型,完整覆盖
预训练
→指令微调
→奖励建模
→强化学习
全流程,以经济高效的方式实现基础对话功能
- 亮点:
- 采用bert4torch训练框架,代码简洁高效;
- 训练所得模型可直接兼容
transformers
推理框架
- 优化训练内存占用效率;
- 提供完整训练日志供复现验证
- 声明: 当前实验模型仅具备基础对话能力(受限于语料规模、模型参数量及SFT数据质量),暂不支持复杂问题解答。
2. 快速入门
pip install bert4torch==0.4.9.post2 # 若安装失败可尝试指定源 -i https://pypi.org/simple
# 建议使用nohup/tmux/screen保持进程
# 示例:nohup torchrun --standalone --nproc_per_node=4 pretrain.py --name baby > nohup.log&
# 预训练
cd pretrain
torchrun --standalone --nproc_per_node=4 pretrain.py # 部分设备需设置`export NCCL_IB_DISABLE=1`避免DDP中断
# 预训练模型测试(交互式对话)
cd pretrain
python infer.py # 或执行 python infer_transformers.py
# 指令微调训练
cd sft
python sft.py
# 指令微调模型测试(交互式对话)
cd sft
python infer.py # 或执行 python infer_transformers.py
# 模型格式转换(适配transformers)
cd docs
python convert.py
3. 版本更新
- 20240316: 初始版本发布,包含预训练模型
MiniLLM-MiniLLM-L12_H1024_A8-NoWudao
、MiniLLM-MiniLLM-L12_H1024_A8-WithWudao
及指令微调模型MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
4. 预训练阶段
项目已开源经ChatGLM2-6B分词器处理的634亿Tokens语料:语料下载 提取码:6unr。
4.2 预训练模型
模型名称 |
训练语料 |
下载地址 |
MiniLLM-L12_H1024_A8-NoWudao |
(140亿 Tokens) 维基百科/百度百科/医学数据/C4中文 |
百度网盘, HuggingFace |
MiniLLM-L12_H1024_A8-WithWudao |
(640亿 Tokens) 含悟道语料的增强版 |
百度网盘, HuggingFace |
4.3 训练详情
模型 |
训练参数 |
硬件配置与耗时 |
MiniLLM-L12_H1024_A8-NoWudao |
140亿Tokens; batch=32*4GPU; 学习率3e-4; 预热5000步 |
4×A800(80G), 单卡显存60G,耗时20小时 |
MiniLLM-L12_H1024_A8-WithWudao |
640亿Tokens; batch=32*4GPU; 学习率1.5e-4; 预热5000步 |
✅ 4×A800(80G), 单卡显存60G,耗时3.79天 ✅ baby-llama2项目2×4090训练26天 ✅ 单卡batch=8时显存17G(可通过梯度累积进一步降低) |
4.4 模型调用示例
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"
from transformers import AutoTokenizer, LlamaForCausalLM
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model_name = 'Tongjilibo/MiniLLM-L12_H1024_A8-WithWudao'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = LlamaForCausalLM.from_pretrained(model_name).to(device)
query = '王鹏是一名'
inputs = tokenizer.encode(query, return_tensors='pt', add_special_tokens=False).to(device)
output_ids = model.generate(inputs)
response = tokenizer.decode(output_ids[0].cpu(), skip_special_tokens=True)
print(response)
4.5 文本续写示例
- MiniLLM-L12_H1024_A8-NoWudao
输入:小明学习优异、身体健康、是一名
续写:小明学习优异、身体健康、是一名优秀的大连理工大学学生,从大学一年级起,他就对体育十分痴迷,成绩名列前茅,还参加了多项比赛,在全校体育活动中,他成绩名列前茅,被大连理工大学授予"优秀运动员"称号。
2006年,高中二年级,小明的同学杨帆来到大连理工大学,他决心要改变自己的命运。他每天放学后,都会跑到操场上练习篮球,练到下午三点多钟时,小明的篮球技术开始显现出来,他的篮球动作敏捷,力量大,而且,他经常利用空档时间练习跳投
输入:床前明月光,疑是地上霜。举头望明月,
续写:床前明月光,疑是地上霜。举头望明月,低头思故乡......"
我读着这些诗句时也倍感亲切和亲切了!
- MiniLLM-L12_H1024_A8-WithWudao
输入:小明学习优异、身体健康、是一名
续写:小明学习优异、身体健康、是一名优秀的教师。他为人诚实、有责任心。在课堂上,他能认真听讲,积极思考,对每节课都积极举手发言。在课后,他主动要求帮助老师,认真做好作业,按时完成老师布置的作业,受到同学们的好评。
输入:床前明月光,疑是地上霜。举头望明月,
续写:床前明月光,疑是地上霜。举头望明月,低头思故乡。"这诗不仅描述了中秋夜月夜的温馨与宁静,还写出了作者对故土深情的眷恋和思乡之情。"月上柳梢头"一语,是写月下所见。"欲将心事付瑶琴",指欲诉别情; "举头望明月",写中秋之夜,月上高挂、皓月当空、群星闪耀的景象;"低头思故乡",写思念故土的深情厚意。
这首诗在写作手法上,主要运用象征
5、指令微调阶段
5.1 微调语料(精选数据集)
5.2 微调模型
5.3 微调训练详情
模型 |
训练参数 |
硬件配置与耗时 |
MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca |
alpaca-zh数据集; batch=8; 学习率2e-5; 5轮训练 |
单卡4090,显存17G, 耗时45分钟 |
5.4 模型调用示例
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"
from transformers import AutoTokenizer, LlamaForCausalLM
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model_name = 'Tongjilibo/MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = LlamaForCausalLM.from_pretrained(model_name).to(device)
query = '你好'
query = f'<human>{query}<robot>'
inputs = tokenizer.encode(query, return_tensors='pt', add_special_tokens=False).to(device)
output_ids = model.generate(inputs)
response = tokenizer.decode(output_ids[0].cpu(), skip_special_tokens=True)[len(query):]
print(response)
5.5 对话示例
- MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
用户:你好
助手:你好!很高兴见到你。
用户:你能做什么?
助手:你好!我是一个人工智能助手,有什么我可以为你做的吗?
用户:番茄炒蛋怎么制作?
助手:如果你想要制作一个番茄炒蛋,那么下面这些步骤可能会帮助你:
1. 准备食材:准备好鸡蛋、盐、香菜、胡萝卜丝、黄瓜丝等食材。
2