新手第1次走通LLM本地微调(1)
安装ikuuu vpn和Git,从hugging face上下载需要的模型。查看了本地的GPU的所有基础信息,发现GPU确实不够用,需要连接公司的3090服务器。先配置,再输入用户密码,就可以操控远程服务器了。然后在远程服务器创建虚拟环境,在虚拟环境里pip install必要的库,运行程序。1.最开始是在本地运行的程序,初步测试没有基本的问题,只是GPU不够。好在远程3090上的GPU和CUDA
先在本地准备好数据集;初步写一个微调的程序;安装ikuuu vpn和Git,从hugging face上下载需要的模型。一定要启用vpn和Git的代理,不然模型会下载不了!!
本地下载安装WindTerm,进行SSH连接远程3090服务器。先配置,再输入用户密码,就可以操控远程服务器了。
把本地文件(数据集、程序、模型)通过WindTerm上传到远程。
然后在远程服务器创建虚拟环境,在虚拟环境里pip install必要的库,运行程序。
然后就开启了漫长又煎熬的调试过程!
遇到了各种各样的问题:
1.最开始是在本地运行的程序,初步测试没有基本的问题,只是GPU不够。
于是采用命令:
nvidia-smi
nvcc --version
查看了本地的GPU的所有基础信息,发现GPU确实不够用,需要连接公司的3090服务器。
好在远程3090上的GPU和CUDA都好使,就不用再安装配置了。
2.SyntaxWarning: invalid escape sequence '\d'
是因为读取文件的时候,文件名被识别成了转义字符。
解决办法是使用原始字符串(在字符串前加 r):
dataset = load_dataset("json", data_files={"train": r"D:\data.json"})
3.在创建 TrainingArguments 时使用了一个不被支持的关键字参数 evaluation_strategy。
然后去查看了Transformers文档:Trainer
https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments,发现是AI把参数名写错了,应该改成eval_strategy。
4.在使用 Trainer 类时设置了 eval_strategy 为 "epoch",但没有提供 eval_dataset 参数。
解决办法:
需要提供一个评估数据集 (eval_dataset) 给 Trainer 类。
-
准备评估数据集: 确保要有一个评估数据集。可以从数据集中划分一部分作为评估集。
-
更新
Trainer初始化代码: 在初始化Trainer时,添加eval_dataset参数。
from transformers import Trainer
# 划分 10% 的数据作为评估集
dataset = dataset["train"].train_test_split(test_size=0.1)
# ……
# 创建 Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"], # 训练集
eval_dataset=dataset["test"] # 评估集
)
# 开始微调
trainer.train()
5.Warning:在使用 PeftModelForCausalLM 时,Trainer 类无法自动设置 label_names,因为 PeftModel 隐藏了基础模型的输入参数。
AI给的解决办法是显式地设置labels:
# 创建 Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"], # 训练集
eval_dataset=dataset["test"], # 评估集
label_names=["labels"] # 显式设置标签名称
)
但我这样做会报错,就没有采纳。
未完待续……
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)