0. 碎碎念环节
托实验室老师的福,寒假弄过llama2-7B的微调,本来想趁着这个时间再深入学习,但是因为时间关系,模型微调深入研究只能留着开学后再弄了。当前还是一个人捣鼓着Hoshino的雏形,哎,慢慢来吧。
1. LLM微调原理
1.1 大致流程
模型微调,是一个很关键的步骤(废话)。依照我自己的想法,给它总结了以下几步:
- 评估加载: 选择一个好模型至关重要(最近我有点对某C9国产Gxxx模型走火入魔了)
- 数据处理:收集目标相关的数据集,再进行预处理(清洗、改格式标准化)等工序。
- 微调设参:批处理大小、训练轮次等等参数要根据目标模型来设定。
- 微调训练:Training
- 评估调优:测试,根据反馈结果或再进行进一步微调。
下面我直接调一些重点。
1.2 数据处理
这里直接定义了一种函数process_func
。process_func
函数通过处理输入和输出文本,将它们转换为适合Transformer模型处理的格式,并考虑了中文分词的特性以及模型对输入长度的限制。
def process_func(example):
MAX_LENGTH = 384
instruction = tokenizer(f"{example['input']}<sep>")
response = tokenizer(f"{example['output']}<eod>")
input_ids = instruction["input_ids"] + response["input_ids"]
attention_mask = [1] * len(input_ids)
labels = [-100] * len(instruction["input_ids"]) + response["input_ids"] # instruction 不计算loss
if len(input_ids) > MAX_LENGTH: # 做一个截断
input_ids = input_ids[:MAX_LENGTH]
attention_mask = attention_mask[:MAX_LENGTH]
labels = labels[:MAX_LENGTH]
return {
"input_ids": input_ids,
"attention_mask": attention_mask,
"labels": labels
}
2. Hoshino编程助手环节
AI跑云端,用的python。本地拿electron-vue简单搭建了下。
Github:https://github.com/Xiaoqiuu/hoshino