这三个参数都是 控制训练数据如何被处理 的,它们的作用和区别如下:
定义:限制每个数据集最多使用多少条数据。
作用:控制 总共参与训练的数据量,减少 max_samples
可以加快训练速度。
你的代码示例:
max_samples=300 # 每个数据集最多用 300 条样本
解释:假设你的 dataset
里包含:
identity
数据集有 10,000 条数据alpaca_en_demo
数据集有 5,000 条数据alpaca_zh_demo
数据集有 6,000 条数据但 因为 max_samples=300
,所以每个数据集最多只用 300 条,训练总共使用:
300 × 3 = 900 条数据。
定义:每次 GPU 训练时,取出多少条数据作为一个批次(batch)。
作用:影响 每一步训练时同时处理的样本数,batch 越大,显存占用越高,但训练可能更快。
你的代码示例:
per_device_train_batch_size=2 # 每个 batch 里包含 2 个样本
解释:
max_samples
里取出 batch_size
条数据,送入模型进行计算。max_samples=300
,batch_size=2
,那么训练会分成: 定义:让模型计算多步再更新参数,而不是每一步都更新。
作用:节省显存,允许在小 batch 下模拟更大的 batch 训练。
你的代码示例:
gradient_accumulation_steps=4 # 让模型计算 4 步后才更新一次参数
解释:
batch_size=2
,每一步训练 2 条数据。gradient_accumulation_steps=4
,表示 累积 4 步,也就是 2 × 4 = 8 条数据后,才真正更新一次参数。batch_size=8
的效果,但显存占用还是 batch_size=2
的水平。参数 | 作用 | 影响 |
---|---|---|
max_samples | 控制 总数据量 | 限制训练时间和数据规模 |
batch_size | 控制 每次送入模型的样本数 | 影响计算效率和显存占用 |
gradient_accumulation_steps | 多个 batch 后才更新参数 | 允许 小 batch 训练 但仍能模拟大 batch 的效果 |
每次真正更新参数时,使用的 总样本数 计算方式如下:
[
\text{总样本数} = \text{batch_size} \times \text{gradient_accumulation_steps}
]
你的代码:
per_device_train_batch_size=2
gradient_accumulation_steps=4
计算:
[
2 \times 4 = 8
]
也就是说,每次 真正更新参数时,相当于用了 8 个样本。
目标 | 调整方法 |
---|---|
减少训练时间 | 减少 max_samples |
减少显存占用 | 降低 batch_size ,增加 gradient_accumulation_steps |
加快训练速度(如果显存允许) | 增大 batch_size ,减少 gradient_accumulation_steps |
如果你的训练速度慢,可以尝试调整 batch_size 和 gradient_accumulation_steps,让 GPU 计算更高效!