Minillm 0.2B WithWudao
MiniLLM是基于bert4torch框架开发的轻量级中文语言模型,覆盖预训练至指令微调全流程,具备基础对话能力
下载量 127
发布时间 : 4/25/2025
模型简介
12层Transformer结构的轻量级中文语言模型,经过预训练和Alpaca指令微调,适用于基础对话场景
模型特点
全流程训练
完整实现预训练→指令微调→奖励建模→强化学习全流程
轻量高效
12层Transformer结构,单卡17G显存即可微调
框架兼容
训练使用bert4torch框架,推理兼容transformers
模型能力
中文文本生成
基础对话交互
指令跟随
使用案例
智能助手
日常问答
回答日常生活相关问题
生成符合常识的简短回答
🚀 MiniLLM项目
本项目致力于构建一个小参数量的大语言模型(LLM),完整经历预训练
-> 指令微调
-> 奖励模型
-> 强化学习
四个阶段,以可控成本打造一个能完成简单聊天任务的聊天模型。
🚀 快速开始
环境安装
pip install bert4torch==0.4.9.post2 # 若找不到则指定 -i https://pypi.org/simple
脚本说明
# 为防止terminal关闭,可以使用nohup, tmux, screen方式来启动
# eg. nohup torchrun --standalone --nproc_per_node=4 pretrain.py --name baby > nohup.log&
# 预训练
cd pretrain
torchrun --standalone --nproc_per_node=4 pretrain.py # 部分反映ddp训到一般会崩,需设置`export NCCL_IB_DISABLE=1`
# 预训练推理(命令行聊天)
cd pretrain
python infer.py # python infer_transformers.py
# 指令微调训练
cd sft
python sft.py
# 指令微调推理(命令行聊天)
cd sft
python infer.py # python infer_transformers.py
# 把ckpt转化成transformers可以运行的格式
cd docs
python convert.py
✨ 主要特性
- 使用bert4torch训练框架,代码简洁高效。
- 训练的checkpoint可以直接使用
transformers
包进行推理。 - 优化了训练时候内存占用。
- 提供了完整训练log供复现比对。
📚 详细文档
预训练
预训练语料(源于baby-llama2-chinese)
中文预训练语料 | 描述 |
---|---|
Wiki中文百科 | 中文Wikipedia的数据 |
BaiduBaiKe 提取码: bwvb | 中文BaiduBaiKe的数据 |
C4_zh:part1 提取码:zv4r;C4_zh:part2 提取码:sb83;C4_zh:part3 提取码:l89d | C4是可用的最大语言数据集之一,收集了来自互联网上超过3.65亿个域的超过1560亿个token。C4_zh是其中的一部分 |
WuDaoCorpora | 中文悟道开源的200G数据 |
shibing624/medical | 源自shibing624的一部分医学领域的预训练数据 |
项目开源了经过ChatGLM2-6B的分词器处理后的预训练语料,共计634亿Tokens的数据量,链接如下:Corpus 提取码:6unr。
预训练权重
预训练权重 | 预训练语料 | 下载地址 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | (140亿 Tokens) Wiki中文百科、BaiduBaiKe、hibing624/medical、C4_zh |
百度网盘, HuggingFace |
MiniLLM-L12_H1024_A8-WithWudao | (640亿 Tokens) Wiki中文百科、BaiduBaiKe、shibing624/medical、C4_zh、WuDaoCorpora |
百度网盘, HuggingFace |
预训练过程
- 训练参数配置和训练时长
权重 | 预训练设置 | 硬件占用和训练时长 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | 140亿 Tokens; btz=32*4gpu; lr=3e-4; warmup_steps=5000 | 4×A800(80G), 单卡占用约60G,耗时20h |
MiniLLM-L12_H1024_A8-WithWudao | 640亿 Tokens; btz=32*4gpu; lr=1.5e-4; warmup_steps=5000 | ✅ 4×A800(80G), 单卡占用约60G,耗时3.79d ✅ baby-llama2项目2×4090,耗时26d ✅ 个人测试单卡btz=8下, gpu占用约17G,时长未知(可配合梯度累计进一步降低占用) |
预训练模型调用
# 以下两句视网络情况添加
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' # 'Tongjilibo/MiniLLM-L12_H1024_A8-NoWudao'
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)
预训练续写效果
- MiniLLM-L12_H1024_A8-NoWudao
用户:小明学习优异、身体健康、是一名
续写:小明学习优异、身体健康、是一名优秀的大连理工大学学生,从大学一年级起,他就对体育十分痴迷,成绩名列前茅,还参加了多项比赛,在全校体育活动中,他成绩名列前茅,被大连理工大学授予“优秀运动员”称号。
2006年,高中二年级,小明的同学杨帆来到大连理工大学,他决心要改变自己的命运。他每天放学后,都会跑到操场上练习篮球,练到下午三点多钟时,小明的篮球技术开始显现出来,他的篮球动作敏捷,力量大,而且,他经常利用空档时间练习跳投
用户:床前明月光,疑是地上霜。举头望明月,
续写:床前明月光,疑是地上霜。举头望明月,低头思故乡……”
我读着这些诗句时也倍感亲切和亲切了!
- MiniLLM-L12_H1024_A8-WithWudao
用户:小明学习优异、身体健康、是一名
续写:小明学习优异、身体健康、是一名优秀的教师。他为人诚实、有责任心。在课堂上,他能认真听讲,积极思考,对每节课都积极举手发言。在课后,他主动要求帮助老师,认真做好作业,按时完成老师布置的作业,受到同学们的好评。
用户:床前明月光,疑是地上霜。举头望明月,
续写:床前明月光,疑是地上霜。举头望明月,低头思故乡。”这诗不仅描述了中秋夜月夜的温馨与宁静,还写出了作者对故土深情的眷恋和思乡之情。“月上柳梢头”一语,是写月下所见。“欲将心事付瑶琴”,指欲诉别情; “举头望明月”,写中秋之夜,月上高挂、皓月当空、群星闪耀的景象;“低头思故乡”,写思念故土的深情厚意。
这首诗在写作手法上,主要运用象征
指令微调
指令微调语料(筛选的可用数据集)
数据集名称 | 介绍 |
---|---|
shibing624/alpaca-zh | 参考Alpaca方法基于GPT4得到的self-instruct数据,约5万条 |
BelleGroup/Belle-0.5M-cn | 包含约50万条由BELLE项目生成的中文指令数据 |
BelleGroup/Belle-1M-cn | 包含约100万条由BELLE项目生成的中文指令数据 |
BelleGroup/Belle-school_math_0.25M | Belle开放的0.25M数学指令数据集 |
BelleGroup/Belle-multiturn_chat_0.8M | Belle开放的0.8M多轮任务对话数据集 |
YeungNLP/firefly-train-1.1M | 流萤23种常见的中文NLP任务的数据,并且构造了许多与中华文化相关的数据,如对联、作诗、文言文翻译、散文、金庸小说等。对于每个任务,由人工书写若干种指令模板,保证数据的高质量与丰富度,数据量为115万 |
fnlp/moss-002-sft-data | MOSS-002所使用的多轮对话数据,覆盖有用性、忠实性、无害性三个层面,包含由text-davinci-003生成的约57万条英文对话和59万条中文对话 |
fnlp/moss-003-sft-data | moss-moon-003-sft所使用的多轮对话数据,基于MOSS-002内测阶段采集的约10万用户输入数据和gpt-3.5-turbo构造而成,相比moss-002-sft-data,moss-003-sft-data更加符合真实用户意图分布,包含更细粒度的有用性类别标记、更广泛的无害性数据和更长对话轮数,约含110万条对话数据 |
shareAI/CodeChat | 主要包含逻辑推理、代码问答、代码生成相关语料样本。 |
shareAI/ShareGPT-Chinese-English-90k | 中英文平行双语优质人机问答数据集,覆盖真实复杂场景下的用户提问。 |
deepctrl/deepctrl-sft-data | 匠数大模型SFT数据集是一个由匠数科技精心搜集整理的高质量数据集,包含10M条数据的中文数据集和包含2M条数据的英文数据集 |
指令微调权重
指令微调权重 | 语料 | 下载地址 |
---|---|---|
MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca | shibing624/alpaca-zh | 百度网盘, HuggingFace |
指令微调训练过程
- 训练参数配置和训练时长
权重 | 预训练设置 | 硬件占用和训练时长 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | shibing624/alpaca-zh数据集; btz=8; lr=2e-5; 5epoch | 单卡4090,显存17G, 耗时45min |
指令微调模型调用
# 以下两句视网络情况添加
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)
指令微调Chat效果
- MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
User:你好
Assistant:你好!很高兴见到你。
User:你能做什么?
Assistant:你好!我是一个人工智能助手,有什么我可以为你做的吗?
User:番茄炒蛋怎么制作?
Assistant:如果你想要制作一个番茄炒蛋,那么下面这些步骤可能会帮助你:
1. 准备食材:准备好鸡蛋、盐、香菜、胡萝卜丝、黄瓜丝等食材。
2. 清洗鸡蛋:在搅拌碗中打散鸡蛋,使其表面可以清洁。
3. 准备材料:准备一个锅,倒入适量的水,将鸡蛋液倒入锅中。
4. 煮鸡蛋:用汤锅或锅煎至鸡蛋表面金黄色,熟透即可。
5. 炒蔬菜:在锅中加入适量的油,将胡萝卜丝和黄瓜丝个人喜欢的,翻炒几下,直到胡萝卜熟透。
6. 加入鸡蛋:从锅中取出鸡蛋,倒入锅中。
7. 调味:将炒好的鸡蛋倒入锅中,与蔬菜一起翻炒几下即可。
注意:想要炒出更丰富的蔬菜味道,可以适当加入适量的盐和香菜,增加风味。
📄 许可证
本项目采用Apache-2.0许可证。
🔄 更新历史
- 20240316:初始提交,预训练模型
MiniLLM-MiniLLM-L12_H1024_A8-NoWudao
和MiniLLM-MiniLLM-L12_H1024_A8-WithWudao
;SFT模型MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
。
⚠️ 重要提示
本实验训练出来的模型,目前只具备简单的聊天功能(受限于语料大小、模型规模、sft语料大小和质量),不具备回答复杂问题的能力。
Phi 2 GGUF
其他
Phi-2是微软开发的一个小型但强大的语言模型,具有27亿参数,专注于高效推理和高质量文本生成。
大型语言模型 支持多种语言
P
TheBloke
41.5M
205
Roberta Large
MIT
基于掩码语言建模目标预训练的大型英语语言模型,采用改进的BERT训练方法
大型语言模型 英语
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基础模型的蒸馏版本,在保持相近性能的同时更轻量高效,适用于序列分类、标记分类等自然语言处理任务。
大型语言模型 英语
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一个多语言大语言模型,针对多语言对话用例进行了优化,在常见的行业基准测试中表现优异。
大型语言模型 英语
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型 支持多种语言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基于Transformer架构的英语预训练模型,通过掩码语言建模目标在海量文本上训练,支持文本特征提取和下游任务微调
大型语言模型 英语
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI发布的开放预训练Transformer语言模型套件,参数量从1.25亿到1750亿,旨在对标GPT-3系列性能,同时促进大规模语言模型的开放研究。
大型语言模型 英语
O
facebook
6.3M
198
1
基于transformers库的预训练模型,适用于多种NLP任务
大型语言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多语言大语言模型系列,包含8B、70B和405B参数规模,支持8种语言和代码生成,优化了多语言对话场景。
大型语言模型
Transformers 支持多种语言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基础版是由Google开发的文本到文本转换Transformer模型,参数规模2.2亿,支持多语言NLP任务。
大型语言模型 支持多种语言
T
google-t5
5.4M
702
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98