先在本地准备好数据集;初步写一个微调的程序;安装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文档:Trainerhttps://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments,发现是AI把参数名写错了,应该改成eval_strategy。

4.在使用 Trainer 类时设置了 eval_strategy"epoch",但没有提供 eval_dataset 参数。

解决办法:

需要提供一个评估数据集 (eval_dataset) 给 Trainer 类。

  1. 准备评估数据集: 确保要有一个评估数据集。可以从数据集中划分一部分作为评估集。

  2. 更新 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"]           # 显式设置标签名称
)

但我这样做会报错,就没有采纳。

未完待续……

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐