今天在查看资料的时候发现了某个人写的从零开始预训练模型
最开始以为还需要很大的显存
看了很多人用来很小的模型在发现2 * 4090还是可以的
100%开源大模型OLMo:代码/权重/数据集/训练全过程公开,重定义AI共享 - 掘金 (juejin.cn)
ollama
huggingface模型下载
可以首先
/先不下载大文件
git lfs install
存在的问题
lora微调的两个模型loss值一直不行
其实还是可以换优化器
模型预训练
《OLMo : Accelerating the Science of Language Models》精华摘译 - 知乎 (zhihu.com)
该团队的数据清洗工具得到了公开通过对于方法也进行了分享
一些链接
中文对话0.2B小模型(ChatLM-Chinese-0.2B),
开源所有数据集来源、数据清洗、tokenizer训练、模型预训练、SFT指令微调、RLHF优化等流程的全部代码。支持下游任务sft微调,给出三元组信息抽取微调示例。
使用的是text to text微调
有单独的数据筛选
ChatLM-mini-Chinese为中文对话小模型,模型参数只有0.2B(算共享权重约210M),可以在最低4GB显存的机器进行预训练(batch_size=1
,fp16
或者 bf16
),float16
加载、推理最少只需要512MB显存。
- 公开所有预训练、SFT指令微调、DPO偏好优化数据集来源。
- 使用
Huggingface
NLP框架,包括transformers
、accelerate
、trl
、peft
等。 - 自实现
trainer
,支持单机单卡、单机多卡进行预训练、SFT微调。训练过程中支持在任意位置停止,及在任意位置继续训练。 - 预训练:整合为端到端的
Text-to-Text
预训练,非mask
掩码预测预训练。- 开源所有数据清洗(如规范化、基于mini_hash的文档去重等)、数据集构造、数据集加载优化等流程;
- tokenizer多进程词频统计,支持
sentencepiece
、huggingface tokenizers
的tokenizer训练; - 预训练支持任意位置断点,可从断点处继续训练;
- 大数据集(GB级别)流式加载、支持缓冲区数据打乱,不利用内存、硬盘作为缓存,有效减少内存、磁盘占用。配置
batch_size=1, max_len=320
下,最低支持在16GB内存+4GB显存的机器上进行预训练; - 训练日志记录。
- SFT微调:开源SFT数据集及数据处理过程。
- 自实现
trainer
支持prompt指令微调, 支持任意断点继续训练; - 支持
Huggingface trainer
的sequence to sequence
微调; - 支持传统的低学习率,只训练decoder层的微调。
- 自实现
- RLHF偏好优化:使用DPO进行全量偏好优化。
- 支持使用
peft lora
进行偏好优化; - 支持模型合并,可将
Lora adapter
合并到原始模型中。
- 支持使用
- 支持下游任务微调:finetune_examples给出三元组信息抽取任务的微调示例,微调后的模型对话能力仍在。
Phi2-Chinese-0.2B 从0开始训练自己的Phi2中文小模型,支持接入langchain加载本地知识库做检索增强生成RAG。
从0开始预训练1.4b中文大模型实践 - 知乎 (zhihu.com)
加大数据量全参数微调
六种数据全取10000条共60000条
一轮需要 6w / (8 * 8) = 937.5
那 10epoch保存一次checkpoint