指令微调
有监督的指令微调
过程
-
检查安装包情况,使用的
-
准备数据集
- instruction
- input(可选)
- output
-
数据条目整理成大模型可用的输入文本
- Alpaca
- Phi-3

-
划分数据集(85%,10%,5%)
-
数据组织成训练批次
- 预分词
- 补齐输入和目标(50256):不同batch不同长度,同一batch相同长度
- 50256替换为-100
所得结果,与只用前两个样本计算得到的损失是一样的。说明忽略了-100的这个样本。
cross_entropy默认就带有ignore_index=-100的设置,会自动跳过标签为-100的位置。留一个方便知道收尾的位置,即回答结束的时候。 -
数据加载器
- 数据移到目标设备
.device() - 预先固定函数的部分参数
- 数据移到目标设备
-
加载预训练大语言模型(这次使用中等规模的版本
gpt2-medium (355M))-
from gpt_download import download_and_load_gpt2 -
from previous_chapters import GPTModel,load_weights_into_gptBASE_CONFIGmodel_configsBASE_CONFIG.update(CHOOSE_MODEL)download_and_load_gpt2(model_size)GPTModelload_weights_into_gpt
-
from previous_chapters import ( generate, text_to_token_ids, token_ids_to_text ) <!--code0-->
-
数据组织成训练批次(5)
过程
1 | """ |
使用
1 | # 目标:查看替换为 -100的效果 |
数据加载器(6.2)
1 | # 预先固定好 device参数,后续调用无需重复传入 |
微调(8)
1 | from previous_chapters import( |
保存(9)
1 | """ |
评估(10)
开放式文本回答的好坏往往有灰度空间,既涉及事实是否正确,也涉及表述是否完整、是否贴合指令、是否有细微概念偏差等。实际中,指令微调后的大模型通常会用多种方式评估。
采用类似 AlpacaEval 的思路,用另一个大模型来评估我们模型的回答质量,不过我们不会使用公开基准数据集,而是使用我们自己划分出来的测试集。
使用 Meta AI 的指令微调版 Llama 3(80 亿参数)模型,并通过 ollama(https://ollama.com) 在本地运行它来完成评审工作。
Ollama 是一款用于高效运行大语言模型的应用程序,本质上是对 llama.cpp的封装。llama.cpp 用纯 C/C++ 实现了大模型推理,Ollama 主要用于让大模型生成文本(推理),并不用于训练或微调大模型。
1 | """ |