这也是一个通用的方案,使用peft微调LLM。
准备自己的数据集
根据情况改就行了,jsonl格式,三个字段:context, answer, question
import pandas as pd
import random
import json
data = pd.read_csv('dataset.csv')
train_data = data[['prompt','Code']]
train_data = train_data.values.tolist()
random.shuffle(train_data)
train_num = int(0.8 * len(train_data))
with open('train_data.jsonl', 'w') as f:
for d in train_data[:train_num]:
d = {
'context':'',
'question':d[0],
'answer':d[1]
}
f.write(json.dumps(d)+'\n')
with open('val_data.jsonl', 'w') as f:
for d in train_data[train_num:]:
d = {
'context':'',
'question':d[0],
'answer':d[1]
}
f.write(json.dumps(d)+'\n')
初始化
from datetime import datetime
import os
import sys
import torch
from peft import (
LoraConfig,
get_peft_model,
get_peft_model_state_dict,
prepare_model_for_int8_training,
)
from transformers import (AutoTokenizer, AutoModelForCausalLM, LlamaForCausalLM,
TrainingArguments, Trainer, DataCollatorForSeq2Seq)
# 加载自己的数据集
from datasets import load_dataset
train_dataset = load_dataset('json', data_files='train_data.jsonl', split='train')
eval_dataset