CharacterGLM-6B Transformers部署调用
环境准备
在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch-->2.0.0-->3.8(ubuntu20.04)-->11.8
接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行demo。
pip换源和安装依赖包
#升级pip
python -m pip install --upgrade pip
#更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope
pip install transformers
pip install sentencepiece
模型下载
使用 modelscope 中的snapshot_download函数下载模型,第一个参数为模型名称,参数cache_dir为模型的下载路径。
在 /root/autodl-tmp 路径下新建 download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/autodl-tmp/download.py执行下载,模型大小为 12 GB,下载模型大概需要 10~15 分钟
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('THUCoAI/CharacterGLM-6B', cache_dir='/root/autodl-tmp', revision='master')
代码准备
from transformers import AutoTokenizer,AutoModelForCausalLM
import torch
# 使用模型下载到的本地路径以加载
model_dir = '/root/autodl-tmp/THUCoAI/CharacterGLM-6B'
# 分词器的加载,本地加载,trust_remote_code=True设置允许从网络上下载模型权重和相关的代码
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
# 模型加载,本地加载,使用AutoModelForCausalLM类
model = AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True)
# 将模型移动到GPU上进行加速(如果有GPU的话)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
# 使用模型的评估模式来产生对话
model.eval()
session_meta = {'user_info': '我是陆星辰,是一个男性,是一位知名导演,也是苏梦远的合作导演。我擅长拍摄音乐题材的电影。苏梦远对我的态度是尊敬的,并视我为良师益友。', 'bot_info': '苏梦远,本名苏远心,是一位当红的国内女歌手及演员。在参加选秀节目后,凭借独特的嗓音及出众的舞台魅力迅速成名,进入娱乐圈。她外表美丽动人,但真正的魅力在于她的才华和勤奋。苏梦远是音乐学院毕业的优秀生,善于创作,拥有多首热门原创歌曲。除了音乐方面的成就,她还热衷于慈善事业,积极参加公益活动,用实际行动传递正能量。在工作中,她对待工作非常敬业,拍戏时总是全身心投入角色,赢得了业内人士的赞誉和粉丝的喜爱。虽然在娱乐圈,但她始终保持低调、谦逊的态度,深得同行尊重。在表达时,苏梦远喜欢使用“我们”和“一起”,强调团队精神。', 'bot_name': '苏梦远', 'user_name': '陆星辰'}
# 第一轮对话
response, history = model.chat(tokenizer, session_meta,"你好呀,小苏", history=[])
print(response)
# 第二轮对话
response, history = model.chat(tokenizer, session_meta,"最近对音乐有什么新的想法吗", history=history)
print(response)
# 第三轮对话
response, history = model.chat(tokenizer,session_meta, "那我们商量一下下一部音乐电影的拍摄,好嘛?", history=history)
print(response)
部署
在终端输入以下命令运行trans.py,即实现CharacterGLM-6B的Transformers部署调用
cd /root/autodl-tmp
python trans.py
观察命令行中loading checkpoint表示模型正在加载,等待模型加载完成产生对话,如下图所示
CharacterGLM-6B FastApi部署调用
环境准备
在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch-->2.0.0-->3.8(ubuntu20.04)-->11.8
接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行demo。
pip换源和安装依赖包
# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install fastapi==0.104.1
pip install uvicorn==0.24.0.post1
pip install requests==2.25.1
pip install modelscope==1.9.5
pip install transformers==4.37.2
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1
模型下载
使用 modelscope 中的snapshot_download函数下载模型,第一个参数为模型名称,参数cache_dir为模型的下载路径。
在 /root/autodl-tmp 路径下新建 download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/autodl-tmp/download.py执行下载,模型大小为 12 GB,下载模型大概需要 10~15 分钟
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('THUCoAI/CharacterGLM-6B', cache_dir='/root/autodl-tmp', revision='master')
代码准备
在/root/autodl-tmp路径下新建api.py文件并在其中输入以下内容,粘贴代码后记得保存文件。下面的代码有很详细的注释,大家如有不理解的地方,欢迎提出issue。
from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModelForCausalLM
import uvicorn
import json
import datetime
import torch
# 设置设备参数
DEVICE = "cuda" # 使用CUDA
DEVICE_ID = "0" # CUDA设备ID,如果未设置则为空
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE # 组合CUDA设备信息
# 清理GPU内存函数
def torch_gc():
if torch.cuda.is_available(): # 检查是否可用CUDA
with torch.cuda.device(CUDA_DEVICE): # 指定CUDA设备
torch.cuda.empty_cache() # 清空CUDA缓存
torch.cuda.ipc_collect() # 收集CUDA内存碎片
# 创建FastAPI应用
app = FastAPI()
# 处理POST请求的端点
@app.post("/")
async def create_item(request: Request):
global model, tokenizer # 声明全局变量以便在函数内部使用模型和分词器
json_post_raw = await request.json() # 获取POST请求的JSON数据
json_post = json.dumps(json_post_raw) # 将JSON数据转换为字符串
json_post_list = json.loads(json_post) # 将字符串转换为Python对象
prompt = json_post_list.get('prompt') # 获取请求中的提示
history = json_post_list.get('history') # 获取请求中的历史记录
max_length = json_post_list.get('max_length') # 获取请求中的最大长度
top_p = json_post_list.get('top_p') # 获取请求中的top_p参数
temperature = json_post_list.get('temperature') # 获取请求中的温度参数
session_meta = {'user_info': '我是陆星辰,是一个男性,是一位知名导演,也是苏梦远的合作导演。我擅长拍摄音乐题材的电影。苏梦远对我的态度是尊敬的,并视我为良师益友。', 'bot_info': '苏梦远,本名苏远心,是一位当红的国内女歌手及演员。在参加选秀节目后,凭借独特的嗓音及出众的舞台魅力迅速成名,进入娱乐圈。她外表美丽动人,但真正的魅力在于她的才华和勤奋。苏梦远是音乐学院毕业的优秀生,善于创作,拥有多首热门原创歌曲。除了音乐方面的成就,她还热衷于慈善事业,积极参加公益活动,用实际行动传递正能量。在工作中,她对待工作非常敬业,拍戏时总是全身心投入角色,赢得了业内人士的赞誉和粉丝的喜爱。虽然在娱乐圈,但她始终保持低调、谦逊的态度,深得同行尊重。在表达时,苏梦远喜欢使用“我们”和“一起”,强调团队精神。', 'bot_name': '苏梦远', 'user_name': '陆星辰'}
# 调用模型进行对话生成
response, history = model.chat(
tokenizer,
session_meta,
prompt,
history=history,
max_length=max_length if max_length else 2048, # 如果未提供最大长度,默认使用2048
top_p=top_p if top_p else 0.7, # 如果未提供top_p参数,默认使用0.7
temperature=temperature if temperature else 0.95 # 如果未提供温度参数,默认使用0.95
)
now = datetime.datetime.now() # 获取当前时间
time = now.strftime("%Y-%m-%d %H:%M:%S") # 格式化时间为字符串
# 构建响应JSON
answer = {
"response": response,
"history": history,
"status": 200,
"time": time
}
# 构建日志信息
log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'
print(log) # 打印日志
torch_gc() # 执行GPU内存清理
return answer # 返回响应
# 主函数入口
if __name__ == '__main__':
# 加载预训练的分词器和模型
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/THUCoAI/CharacterGLM-6B", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("/root/autodl-tmp/THUCoAI/CharacterGLM-6B", trust_remote_code=True).to(torch.bfloat16).cuda()
model.eval() # 设置模型为评估模式
# 启动FastAPI应用
# 用6006端口可以将autodl的端口映射到本地,从而在本地使用api
uvicorn.run(app, host='0.0.0.0', port=6006, workers=1) # 在指定端口和主机上启动应用
Api部署调用
在终端输入以下命令启动api服务
cd /root/autodl-tmp
python api.py
默认部署在 6006 端口,通过 POST 方法进行调用,可以使用curl调用,如下所示:
curl -X POST "http://127.0.0.1:6006" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'
调用示例结果如下图所示
也可以使用python中的requests库进行调用,新建api-requests.py文件,写入如下代码:
import requests
import json
def get_completion(prompt):
headers = {'Content-Type': 'application/json'}
data = {"prompt": prompt, "history": []}
response = requests.post(url='http://127.0.0.1:6006', headers=headers, data=json.dumps(data))
return response.json()['response']
if __name__ == '__main__':
print(get_completion('你是谁呀?'))
新开一个终端,输入如下指令
cd /root/autodl-tmp
python api-requests.py
得到的返回值及结果展示如下
{
'response': '嗨,你好,我叫苏梦远。(微笑着向对方走去)',
'history': [['你是谁呀?', '嗨,你好,我叫苏梦远。(微笑着向对方走去)']],
'status': 200,
'time': '2024-03-05 22:44:35'
}
CharacterGLM-6B-chat
环境准备
在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch-->2.0.0-->3.8(ubuntu20.04)-->11.8
接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行demo。
pip换源和安装依赖包
# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope
pip install transformers
模型下载
使用 modelscope 中的snapshot_download函数下载模型,第一个参数为模型名称,参数cache_dir为模型的下载路径。
在 /root/autodl-tmp 路径下新建 download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/autodl-tmp/download.py执行下载,模型大小为 12 GB,下载模型大概需要 10~15 分钟
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('THUCoAI/CharacterGLM-6B', cache_dir='/root/autodl-tmp', revision='master')
代码准备
首先clone代码,打开autodl平台自带的学术镜像加速。学术镜像加速详细使用请看: https://www.autodl.com/docs/network_turbo/
source /etc/network_turbo
然后切换路径, clone代码.
cd /root/autodl-tmp
git clone https://github.com/thu-coai/CharacterGLM-6B
demo运行
修改代码路径,将 /root/autodl-tmp/CharacterGLM-6B/basic_demo/web_demo_streamlit.py中第20行的模型更换为本地的/root/autodl-tmp/THUCoAI/CharacterGLM-6B
修改requirements.txt文件,将其中的torch删掉,环境中已经有了torch,不需要再安装。然后执行下面的命令:
cd /root/autodl-tmp/CharacterGLM-6B
pip install -r requirements.txt
在终端运行以下命令即可启动推理服务,尽量cd到basic_demo文件夹下,防止找不到character.json文件
cd /root/autodl-tmp/CharacterGLM-6B/basic_demo
streamlit run ./web_demo2.py --server.address 127.0.0.1 --server.port 6006
在将 autodl 的端口映射到本地的 http://localhost:6006 后,即可看到demo界面。具体映射步骤参考文档General-Setting文件夹下/02-AutoDL开放端口.md文档。
在浏览器打开 http://localhost:6006 界面,模型加载,即可使用,如下图所示。
命令行运行
修改代码路径,将 /root/autodl-tmp/CharacterGLM-6B/basic_demo/cli_demo.py中的模型路径更换为本地的/root/autodl-tmp/THUCoAI/CharacterGLM-6B
在终端运行以下命令即可启动推理服务
cd /root/autodl-tmp/CharacterGLM-6B/basic_demo
python ./cli_demo.py
04-CharacterGLM-6B-Chat Lora微调
概述
本文简要介绍如何基于transformers、peft等框架,对CharacterGLM-6B-chat模型进行Lora微调。Lora原理可参考博客:知乎|深入浅出Lora 本文代码未使用分布式框架,微调 ChatGLM3-6B-Chat 模型至少需要 21G 及以上的显存,且需要修改脚本文件中的模型路径和数据集路径。
环境配置
在完成基本环境配置和本地模型部署的情况下,还需要安装一些第三方库,可以使用如下命令:
pip install transformers==4.37.2
pip install peft==0.4.0.dev0
pip install datasets==2.10.1
pip install accelerate==0.21.0
指令集构建
LLM微调一般指指令微调过程。所谓指令微调,是说我们使用的微调数据形如:
{
"instruction":"回答用户以下问题,直接给出结果。"
"input":"中国第一个诺贝尔奖得主是谁?"
"output":"莫言"
}
其中instruction是用户指令,告知模型需要完成的任务;input是用户输入,是完成用户指令所必需的输入内容;output是模型应该给出的输出。
即我们的核心训练目标是让模型具有理解并遵循用户指令的能力。因此,在指令集构建时,我们应针对我们的目标任务,针对性构建任务指令集。在本文我们使用由笔者合作开源的Chat-甄嬛项目作为示例,我们的目标是构建一个能够模拟甄嬛对话风格的个性化LLM,因此我们构建的指令形如:
{
"instruction": "",
"input":"你是谁?",
"output":"家父是大理寺少卿甄远道。"
}
我们构造的全部指令数据集在根目录下。
QA和Instruction的区别和联系
QA是指一问一答的形式,通常是用户提问,模型给出回答。而instruction则源自于Prompt Engineering,将问题拆分成两个部分:Instruction用于描述任务,Input用于描述待处理的对象。
问答(QA)格式的训练数据通常用于训练模型执行具体任务。例如,对于问题“请解释INFJ和ENTP两种MBTI性格之间的区别”
*问答(QA)格式:
指令(instruction):
输入(input):INFJ和ENTP这两种MBTI性格之间的区别是什么?
*指令(Instruction)格式:
指令(Instruction):请解释下面两种MBTI性格的区别
输入(input):INFJ和ENTP
数据格式化
Lora训练的数据是需要经过格式化、编码之后再输入给模型进行训练的,我们一般需要将输入文本编码为input_ids,将输出文本编码为labels,编码之后的结果都是多维向量。我们首先定义一个与处理函数,这个函数用于对每一个样本,编码其输入,输出文本并返回一个编码后的字典:
def process_func(example):
MAX_LENGTH = 512
input_ids, labels = [], []
prompt = tokenizer.encode("用户:\n"+"现在你要扮演皇帝身边的女人--甄嬛。", add_special_tokens=False)
instruction_ = tokenizer.encode("\n".join([example["instruction"], example["input"]]).strip(), add_special_tokens=False,max_length=512)
instruction = tokenizer.encode(prompt + instruction_)
response = tokenizer.encode("CharacterGLM-6B:\n:" + example["output"], add_special_tokens=False)
input_ids = instruction + response + [tokenizer.eos_token_id]
labels = [tokenizer.pad_token_id] * len(instruction) + response + [tokenizer.eos_token_id]
pad_len = MAX_LENGTH - len(input_ids)
# print()
input_ids += [tokenizer.pad_token_id] * pad_len
labels += [tokenizer.pad_token_id] * pad_len
labels = [(l if l != tokenizer.pad_token_id else -100) for l in labels]
return {
"input_ids": input_ids,
"labels": labels
}
经过格式化的数据,也就是送入模型的每一条数据,都是一个字典,包含了input_ids、labels两个键值对,其中input_ids是输入文本的编码,labels是输出文本的编码。
加载tokenizer和半精度模型
模型以版精度形式加载,如果显卡比较新,可以用torch.bfloat形式加载,对于自定义的模型一定要指定trust_remote_code参数为True
tokenizer=AutoTokenizer.from_pretrained('/root/autodl-tmp/THUCoAI/CharacterGLM-6B',use_fast=False,trust_remote_code=True)
model=AutoModelForCausalLM.from_pretrained('/root/autodl-tmp/THUCoAI/CharacterGLM-6B',trust_remote_code=True,torch_dtype=torch.half,device_map="auto")
定义LoraConfig
LoraConfig这个类中可以设置很多参数,部分参数展示如下: task_type:模型类型 target——modules:需要训练的模型层的名字,主要就是attention部分的层,不同的模型对应的层的名字不同,可以传入数组,也可以字符串,也可以正则表达式。 r:lora的秩 lora_alpha:Lora alpha modules_to_save:指定的是除了拆成lora的模块,其它的模块可以完整的指定训练
Lora的所方式lora_alpha/r,在这个LoraConfig中缩放就是4倍。这个缩放的本质并没有改变Lora的参数量大小,本质在于将里面的参数数值做广播乘法,进行线性的缩放。
config=LoraConfig(
task_type=TaskType.CAUSAL_LM,
target_modules=["query_key_value"],
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
自定义TraininArguments参数
TrainingArguments这个类的源码也介绍了每个参数的具体作用,常用的参数如下: output_dir:模型的输出路径 per_device_train_batch_size:batch_size gradient_accumulation_steps:梯度累加,如果显存比较小,可以把batch_size设置小一点,梯度累积增大一点 logging_steps:多少步,输出一次log num_train_epochs:顾名思义epoch gradient_chechpointing:梯度检查,这个一旦开启,模型就必须执行 model.enable_input_require_grads()
data_collator=DataCollatorForSeq2Seq(
tokenizer,
model=model,
label_pad_token_id=-100,
pad_to_multiple_of=None,
padding=False
)
args=TrainingArguments(
output_dir="./output/CharacterGLM",
per_device_train_batch_size=4,
gradient_accumulation_steps=2,
logging_steps=10,
num_train_epochs=3,
gradient_checkpointing=True,
save_steps=100,
learning_rate=1e-4,
)
使用Trainer训练
把model放进去,把上面设置的参数放进去,数据集放进去,开始训练
trainer=Trainer(
model=model,
args=args,
train_dataset=tokenized_id,
data_collator=data_collator,
)
trainer.train()
模型推理
model = model.cuda()
ipt = tokenizer("用户:{}\n{}".format("现在你要扮演皇帝身边的女人--甄嬛。你是谁?", "").strip() + "characterGLM-6B:\n", return_tensors="pt").to(model.device)
tokenizer.decode(model.generate(**ipt, max_length=128, do_sample=True)[0], skip_special_tokens=True)
从新加载
通过PEFT所微调的模型,都可以使用下面的方法进行重新加载,并推理:
加载源model与tokenizer; 使用PeftModel合并源model与PEFT微调后的参数
from peft import Peftmodel
model=AutoModelForCausalLM.from_pretrained("/root/autodl-tmp/THUCoAI/CharacterGLM-6B",trust_remote_code=True,low_cpu_mem_usage=True)
tokenizer=AutoTokenizer.from_pretrained("root/autodl-tmp/THUCoAI/CharacterGLM-6B",use_fast=False,trust_remote_code=True)
p_model=PeftModel.from_pretrained(model,model_id="./output/CharatcerGLM/checkpoint-1000/")
ipt = tokenizer("用户:{}\n{}".format("现在你要扮演皇帝身边的女人--甄嬛。你是谁?", "").strip() + "characterGLM-6B:\n", return_tensors="pt").to(model.device)
tokenizer.decode(p_model.generate(**ipt,max_length=128,do_sample=True)[0],skip_special_tokens=True)
CharacterGLM-6B
简介
CharacterGLM-6B 是聆心智能和清华大学 CoAI 实验室联合发布的新一代对话预训练模型。 本文件夹下属文件包含 CharacterGLM-6B 的部署、微调全流程。
01-CharacterGLM-6B Transformer部署调用
这个项目是关于如何使用CharacterGLM-6B模型进行对话生成的部署调用。通过该部署,可以轻松地在Autodl平台中租用一台具有足够显存的显卡机器,然后配置环境、下载模型并运行demo,以实现基于该模型的对话生成功能。
环境准备
在Autodl平台中租用一台具有24G显存的显卡机器。
打开JupyterLab并在其中的终端中进行环境配置、模型下载和运行demo。
模型下载
通过使用modelscope中的snapshot_download函数下载模型,您可以指定模型名称以及下载路径。该模型的下载路径设置为/root/autodl-tmp,并且模型大小为12 GB。
代码准备
在代码准备部分,您需要加载模型和分词器,并将模型移动到GPU上(如果可用)。然后,您可以通过使用模型的评估模式来生成对话。示例代码中包括了三轮对话的示例,展示了模型的使用方法。
部署
通过在终端中运行trans.py文件,即可实现CharacterGLM-6B模型的Transformers部署调用。在命令行中观察loading checkpoint表示模型正在加载,等待模型加载完成后即可开始产生对话。 通过这些步骤,您可以轻松地部署并使用CharacterGLM-6B模型进行对话生成。
02-CharacterGLM-6B FastApi部署调用
这个项目是关于如何使用CharacterGLM-6B模型进行对话生成的FastApi部署调用。通过该部署,可以轻松地在Autodl平台中租用一台具有足够显存的显卡机器,然后配置环境、下载模型并运行demo,以实现基于该模型的对话生成功能。
环境准备
在Autodl平台中租用一台具有24G显存的显卡机器。
打开JupyterLab并在其中的终端中进行环境配置、模型下载和运行demo。
模型下载
通过使用modelscope中的snapshot_download函数下载模型,您可以指定模型名称以及下载路径。该模型的下载路径设置为/root/autodl-tmp,并且模型大小为12 GB。
代码准备
在代码准备部分,您需要加载模型和分词器,并将模型移动到GPU上(如果可用)。
部署
通过在终端中运行api文件,即可实现CharacterGLM-6B模型的FastApi部署调用。在命令行中观察loading checkpoint表示模型正在加载,等待模型加载完成后即可开始产生对话。 通过这些步骤,您可以轻松地部署并使用CharacterGLM-6B模型进行对话生成。
03-CharacterGLM-6B-chat
本文件包含了使用 CharacterGLM-6B 模型进行类似于聊天机器人的推理的代码。CharacterGLM-6B 模型是一个经过微调的大型语言模型,用于在对话场景中生成文本回复。
环境设置
在 autodl 平台上租用具有 24GB GPU 的服务器。
打开租用的服务器上的 JupyterLab,并在终端中开始配置环境、下载模型和运行演示。
更换 pip 源并安装所需的软件包。
模型下载
使用 modelscope 中的 snapshot_download 函数下载模型,并将其缓存在指定的路径中。
代码准备
克隆代码仓库,并根据需要修改代码路径以及配置文件。
demo 运行
修改代码路径并运行演示,通过浏览器或命令行即可与模型进行交互。
04-CharacterGLM-6B Lora微调
环境配置
在完成基本环境配置和本地模型部署的情况下,还需要安装一些第三方库。
指令集构建
LLM 微调一般指指令微调过程。
QA和Instruction的区别和联系
QA 是指一问一答的形式,通常是用户提问,模型给出回答。而 instruction 则源自于 Prompt Engineering,将问题拆分成两个部分:Instruction 用于描述任务,Input 用于描述待处理的对象。
数据格式化
Lora 训练的数据是需要经过格式化、编码之后再输入给模型进行训练的。
加载 tokenizer 和半精度模型
模型以半精度形式加载。
定义 LoraConfig
LoraConfig 这个类中可以设置很多参数。
自定义 TraininArguments 参数
TrainingArguments 这个类的源码也介绍了每个参数的具体作用。
使用 Trainer 训练
把 model 放进去,把上面设置的参数放进去,数据集放进去,开始训练。
模型推理
重新加载
通过 PEFT 所微调的模型,都可以使用下面的方法进行重新加载,并推理。