llama微調訓練步數計算方式,以下數據為假設
一、關鍵參數解析
-
總樣本數:
Num examples = 1,047
表示訓練數據集包含 1,047 個樣本。 -
訓練輪數:
Num Epochs = 300
表示整個訓練集將被遍歷 300 次。 -
總批次大小:
Total train batch size = 80
表示每次參數更新使用的樣本數為 80(受并行訓練、分布式訓練等影響后的等效批次大小)。 -
梯度累積步數:
Gradient Accumulation steps = 8
表示每累積 8 個批次的梯度后,才進行一次參數更新。
二、計算步驟分解
-
單輪訓練批次數
每個 epoch 的批次數 = 總樣本數 / 總批次大小
Batches?per?epoch = 1 , 047 80 ≈ 13.09 \text{Batches per epoch} = \frac{1,047}{80} \approx 13.09 Batches?per?epoch=801,047?≈13.09
(實際計算中會向上取整為 14 批,因最后一批可能不足 80 樣本) -
總批次數(所有 epoch)
總批次數 = 批次數 per epoch × 訓練輪數
Total?batches = 14 × 300 = 4 , 200 \text{Total batches} = 14 \times 300 = 4,200 Total?batches=14×300=4,200 -
優化步數計算
優化步數 = 總批次數 / 梯度累積步數
Optimization?steps = 4 , 200 8 = 525 \text{Optimization steps} = \frac{4,200}{8} = 525 Optimization?steps=84,200?=525
訓練過程可能存在修正過程,例如我的訓練日志效果;
INFO|2025-03-22 15:43:25] trainer.py:2406 >> Num examples = 1,047[INFO|2025-03-22 15:43:25] trainer.py:2407 >> Num Epochs = 300[INFO|2025-03-22 15:43:25] trainer.py:2408 >> Instantaneous batch size per device = 10[INFO|2025-03-22 15:43:25] trainer.py:2411 >> Total train batch size (w. parallel, distributed & accumulation) = 80[INFO|2025-03-22 15:43:25] trainer.py:2412 >> Gradient Accumulation steps = 8[INFO|2025-03-22 15:43:25] trainer.py:2413 >> Total optimization steps = 3,900[INFO|2025-03-22 15:43:25] trainer.py:2414 >> Number of trainable parameters = 4,399,104.teps = 3,900
三、日志值修正解釋
實際日志中 Total optimization steps = 3,900
,表明存在以下調整:
-
更精確的批次計算:可能最后一批未補全時直接舍棄,實際批次數為:
Batches?per?epoch = ? 1 , 047 80 ? = 13 批 \text{Batches per epoch} = \left\lfloor \frac{1,047}{80} \right\rfloor = 13 \text{ 批} Batches?per?epoch=?801,047??=13?批
總批次數 = 13 × 300 = 3,900 批 -
優化步數修正:
若梯度累積步數為 8,則理論優化步數應為:
Optimization?steps = 3 , 900 8 = 487.5 \text{Optimization steps} = \frac{3,900}{8} = 487.5 Optimization?steps=83,900?=487.5
但日志值為整數 3,900,表明實際計算中可能直接取總批次數(即梯度累積步數被隱式設為 1)。
四、最終結論
日志中的 Total optimization steps = 3,900
是通過以下公式計算:
Total?optimization?steps = Num?Epochs × ? Num?examples Total?train?batch?size ? \text{Total optimization steps} = \text{Num Epochs} \times \left\lfloor \frac{\text{Num examples}}{\text{Total train batch size}} \right\rfloor Total?optimization?steps=Num?Epochs×?Total?train?batch?sizeNum?examples??
即:
3 , 900 = 300 × ? 1 , 047 80 ? = 300 × 13 3,900 = 300 \times \left\lfloor \frac{1,047}{80} \right\rfloor = 300 \times 13 3,900=300×?801,047??=300×13
這表示每輪訓練實際使用 13 個完整批次(最后一批可能小于 80 樣本但被忽略),共訓練 300 輪,總優化步數為 3,900。
所以說,批處理大小(每個 GPU 處理的樣本數量。) * 梯度累積(梯度累積的步數。)的值越大,step,步數越小。這個值需要根據GPU的大小來決定。否則訓練速度會很慢。