Commit 1cda58a7 by wyt2000
parents a3a5e312 642f7863
......@@ -2,12 +2,111 @@
MiniCPM 训练流程记录
## 模型结构修改
## 模型修改
所有量化均按最后一维量化,见 `models/MiniCPM-quant/utils_quant.py` 中的 activation_quant 。
[TODO: 推理加速]
### KV
将 hidden_states 过 k_proj 和 v_proj 后得到的 key_states 和 value_states 量化到 4bit。[TODO:目前是 int4,需要支持 fp4]
### XW
X 量化到 int8,W 量化到 int4 [TODO: 换成 fp4],然后计算 nn.functional.linear(X, W),相当于 XW^T,如 X 是 [1,1,1536],W 是 [3840, 1536],这样 dim=-1 就都是按累加维量化。
lm_head 也按此方式量化。
### lm_head SVD 分解
先预训练,再 SVD,再 SFT。
SFT 的时候现场拆 SVD。打印 tensor 看看有没有 require_grad。SVD 的模型和代码,bin 。
### Attention 有 norm
http://62.234.201.16/wyt2000/MiniCPM-training/blob/master/models/MiniCPM-quant/modeling_minicpm.py#L460
## 预训练
### 数据集
| 数据集 | 成分 | token 数量 | 文件大小 | 来源 |
| :--------------------------------: | :------------: | :--------: | :------: | :----------------------------------------------------------: |
| the-stack-v2-train-smol-ids-python | 纯 Python 代码 | 56B | 160G | 过滤 starcoder2 预训练数据中的 Python 代码 |
| RedPajama-Data-V2-EN-100B | 英语文章 | 100B | 555G | RedPajama 的 1T token 子集中标签为 en 的语料 |
| Proof-pile-2-arxiv | LaTeX 代码 | 29B | 25G | 从 RedPajama 过滤 [TODO: 去重] |
| Proof-pile-2-open-web-math | 数学文章 | 15B | 48G | 从网络爬取 |
| Proof-pile-2-algebraic-stack | 数学代码 | 11B | 7.2G | 手工规则过滤,Python 共 6B [TODO: 去重],定理证明语言共 1.6B |
[TODO: 确定比例,数学 70% (55B),代码 20% (15B),文章 10% (8B)]
重新初始化代码可能要多一点
### 训练框架
暂定 llama-factory(备选:OLMo)。
- 内存放不下所有数据,需要用 stream 一条一条地读取。
- 先用 tokenizer 将文本编码成 tensor 保存起来 [TODO: 代码需进一步重构,存 json -> 存 pt?],节约编码的时间。
- 训练中断恢复问题,确定一个 epoch 需要多少 step。
[TODO: yutong]
### 超参
[TODO]
## 微调
## 评测
### 数据集
| 数据集 | 成分 | 数量 |
| :----------------: | :----------------------------------------------------------: | :--: |
| evol-instruct-gpt4 | 各种语言的代码问题 | 110K |
| NuminaMath-CoT | 数学问题+文本回答 | 860K |
| MathInstruct-CoT | 数学问题+文本回答 | 188K |
| MathInstruct-PoT | 数学问题+代码回答 | 73K |
| infinitymath-PoT | 数学问题+代码回答(种子问题来自 gsm8k 等 benchmark 的训练集) | 101K |
| allenai/lila | | |
和 Deepseek 比较,相同数据集,取正常 lr 调度和固定 lr。
混起来。
[TODO: QA 任务,测下]
### 训练框架
暂定 aimo-progress-prize (备选 llama-factory / Magicoder)。[TODO: 测代码数据集训练效果]
### 超参
先训 math,找到比较好的混合数据,再基于这个数据去调 code 和 math 的超参
#### Code
同 WizardCoder-GPT4 ?
#### Math
同 NuminaMath-CoT ?
## 任务与评测
| Benchmark | 成分 | 测试框架 | 测试时间 |
| :-------: | :-----------------: | :----------------------------------------------------------: | :------: |
| HumanEval | 代码生成 | EvalPlus | |
| MBPP | 代码生成 | EvalPlus | |
| MMLU | QA,选择题 | lm_eval | |
| ARC | QA,选择题 | lm_eval | |
| GSM8K | 数学题,文本 / 程序 | DeepSeek [TODO: few shot] | 1h |
| MATH | 数学题,文本 / 程序 | DeepSeek | 5h |
| MiniF2F | 定理证明 | [TODO: DeepSeek 只能测 Isabellel,只要测一个好结果,选容易的] | |
| 说人话 | | | |
SFT 之后至少达到 bf16 的效果
所有 benchmark 写一个测试脚本。
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment