讨论个人GPU的训练时间
在某平台上租了2台机器,控制内存CPU等变量的一致性,测试不同GPU的训练时间
个人认为 [3060~2080Ti~3090~4090] 这个区间包含了大部分AI从业者手头的显卡规格,具有很强的代表性
其它桌面GPU,例如3060的算力略弱于2080Ti,可以参考上图换算
-
2080Ti单卡(11G显存)
pretrain
batchsize=48,预计7小时1个epochroot@autodl-container-908d479a1c-1697cfd8:~/autodl-tmp/minimind# python 1-pretrain.py LLM总参数量:26.878 百万 Epoch:[0/20](0/111769) loss:8.879 lr:0.0002000 epoch_Time:2618.0min: Epoch:[0/20](100/111769) loss:7.438 lr:0.0002000 epoch_Time:442.0min: Epoch:[0/20](200/111769) loss:6.899 lr:0.0002000 epoch_Time:431.0min: Epoch:[0/20](300/111769) loss:6.576 lr:0.0002000 epoch_Time:426.0min:full_sft
batchsize=48,预计5.4小时1个epochroot@autodl-container-908d479a1c-1697cfd8:~/autodl-tmp/minimind# python 3-full_sft.py LLM总参数量:26.878 百万 Epoch:[0/19](0/82267) loss:8.876 lr:0.0001000 epoch_Time:2011.0min: Epoch:[0/19](100/82267) loss:6.302 lr:0.0001000 epoch_Time:335.0min: Epoch:[0/19](200/82267) loss:5.667 lr:0.0001000 epoch_Time:327.0min: Epoch:[0/19](300/82267) loss:5.193 lr:0.0001000 epoch_Time:324.0min: -
4090单卡(24G显存)
pretrain
batchsize=96,预计3.3小时1个epochroot@autodl-container-36164ea3cd-3ac722f7:~/autodl-tmp/minimind# python 1-pretrain.py LLM总参数量:26.878 百万 Epoch:[0/20](0/55885) loss:8.876 lr:0.0002000 epoch_Time:2049.0min: Epoch:[0/20](100/55885) loss:7.401 lr:0.0002000 epoch_Time:212.0min: Epoch:[0/20](200/55885) loss:6.958 lr:0.0002000 epoch_Time:201.0min: Epoch:[0/20](300/55885) loss:6.460 lr:0.0002000 epoch_Time:197.0min:full_sft
batchsize=96,预计2.5小时1个epochroot@autodl-container-36164ea3cd-3ac722f7:~/autodl-tmp/minimind# python 3-full_sft.py LLM总参数量:26.878 百万 Epoch:[0/19](0/41134) loss:5.676 lr:0.0001000 epoch_Time:1086.0min: Epoch:[0/19](100/41134) loss:4.872 lr:0.0001000 epoch_Time:156.0min: Epoch:[0/19](200/41134) loss:4.446 lr:0.0001000 epoch_Time:152.0min:
如果您手头的机器 < 3060算力/纯CPU/Intel显卡/MAC等等,当然同样可以训练 minimind,这没什么问题。
但是 时间开销「也许」需要几十个小时乃至数天时间,这背离了您上手 minimind 的初衷,恐难以接受。
因此,更推荐这部分朋友在云平台上租用GPU服务器完成训练任务。
- 以4090为例,每1小时价格为1.88人民币,训练1 epoch pretrain +1 epoch full_sft 共约6小时,即总花费为11.28元
- 以2080Ti为例,每1小时价格为0.88人民币,训练1 epoch pretrain +1 epoch full_sft 共约12.4小时,即总花费为10.91元
如果需要训练更多轮次获得更佳效果,一杯奶茶钱同样可以cover,同时容器化实例省去了配置环境的繁琐步骤
算力平台推荐(无任何推广和商业目的,仅个人分享):
如果您有其他型号的显卡参与MiniMind训练,欢迎分享训练时长,以便为他人提供参考,这将非常有意义,谢谢。
此外,如果您有其他更优算力平台的推荐,也欢迎在评论区补充,谢谢。
补充:
本人设备为单机双卡3090,≈3小时训练1 epoch pretrain +1 epoch full_sft
以上所有讨论均基于26M大小的模型版本展开
单卡4060ti 16g为啥比你的2080Ti差那么多,我这个时间是正常的吗
单卡4060ti 16g为啥比你的2080Ti差那么多,我这个时间是正常的吗
半精度确实比2080Ti慢,如果数据准确的话,大约4060Ti是2080Ti 77%的性能
因此4060Ti相同batchsize理论epoch时间换算下来可能是550~580 min
但实际运行时间比理论值再慢100秒+,差异应该体现在CPU和内存上
单卡4060ti 16g为啥比你的2080Ti差那么多,我这个时间是正常的吗
我的4060Ti 16G 64batch,一个epoch678min,之前试32batch也是这样。应该就是算力差了比较多
可以使用这个脚本测试算力
import torch
import torch.cuda.amp as amp
def benchmark_with_cuda_events(size, dtype=torch.float16, iterations=100):
torch.cuda.init()
torch.backends.cudnn.benchmark = True
# 创建 CUDA events
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
a = torch.randn(size, size, dtype=dtype, device='cuda').contiguous()
b = torch.randn(size, size, dtype=dtype, device='cuda').contiguous()
# 预热
with amp.autocast():
for _ in range(10):
c = torch.matmul(a, b)
# 测试
start_event.record()
with amp.autocast():
for _ in range(iterations):
c = torch.matmul(a, b)
end_event.record()
# 等待完成
torch.cuda.synchronize()
# 获取时间(毫秒)
elapsed = start_event.elapsed_time(end_event) / 1000.0 # 转换为秒
flops = 2 * size * size * size * iterations
tflops = flops / (elapsed * 1e12)
return tflops
def main():
print(f"Testing on: {torch.cuda.get_device_name()}\n")
print("Running optimized benchmark with CUDA events...")
sizes = [1024, 2048, 4096, 8192,16384]
for size in sizes:
try:
tflops = benchmark_with_cuda_events(size)
print(f"Matrix size: {size}x{size}, TFLOPS: {tflops:.2f}")
except RuntimeError as e:
print(f"Size {size} failed: {e}")
if __name__ == "__main__":
main()
某云平台的B1.gpu.large GPU算力和3090差不多:
最近刷到篇关于估算训练时间的文章模型计算量估计,训练时间预测 ,于是对B1.gpu.large4090的FP16算力进行了估算,并尝试根据训练时间的公式 (6ND/S) 来计算训练时间。以下是计算过程和结果:
minimind预训练数据token数量约10B:
-
B1.gpu.large GPU
- FP16算力:约75 TFlops
- 参数量 (N):26M
- Tokens数量 (D):10B
- 计算公式:
$$ \text{训练时间} = \frac{6 \times N \times D}{S} = \frac{6 \times 26 \times 10^6 \times 10 \times 10^9}{75 \times 10^{12}} \approx 20800 \text{ secs} \approx 346 \text{ min} $$
- 实际预训练1个epoch时间:约300分钟。
-
4090 GPU
- FP16算力:约165 TFlops
- 计算公式:
$$ \text{训练时间} = \frac{6 \times N \times D}{S} = \frac{6 \times 26 \times 10^6 \times 10 \times 10^9}{165 \times 10^{12}} \approx 9455 \text{ secs} \approx 157 \text{ min} $$
- 实际训练时间:约200分钟。
实际上的结果和估计结果有出入,可能是GPU利用率的不同导致的。 欢迎大家分享自己的看法和经验,谢谢。
a750 8g用户满意的路过
24 batch
Macbook Pro M4 Max MPS 后端
Pretrain: 一个 Epoch 提示耗时 400min,实际耗时 9 个小时,差不多是 540 分钟。 GPU 利用率几乎占满了 内存占用大概是 20G+,只关注了初期的内存占用,不知道后面随着训练会不会涨
LLM总参数量:25.830 百万
Epoch:[1/1](0/44160) loss:8.932 lr:0.000550000000 epoch_Time:5711.0min:
Epoch:[1/1](100/44160) loss:6.438 lr:0.000549993674 epoch_Time:420.0min:
Epoch:[1/1](200/44160) loss:6.290 lr:0.000549974695 epoch_Time:402.0min:
Epoch:[1/1](300/44160) loss:6.842 lr:0.000549943065 epoch_Time:396.0min:
Epoch:[1/1](400/44160) loss:5.889 lr:0.000549898786 epoch_Time:402.0min:
Epoch:[1/1](500/44160) loss:6.158 lr:0.000549841859 epoch_Time:409.0min:
Epoch:[1/1](600/44160) loss:5.948 lr:0.000549772287 epoch_Time:413.0min:
Epoch:[1/1](700/44160) loss:5.391 lr:0.000549690074 epoch_Time:417.0min:
Epoch:[1/1](800/44160) loss:5.308 lr:0.000549595224 epoch_Time:416.0min:
Epoch:[1/1](900/44160) loss:5.239 lr:0.000549487743 epoch_Time:415.0min:
Full sft: 一个 Epoch 提示耗时 370min,实际耗时不到 7 个小时,差不多是 400 分钟。 GPU 利用率几乎占满了 内存占用大概是 20G+
LLM总参数量:25.830 百万
Epoch:[1/1](0/37961) loss:5.093 lr:0.000055000000 epoch_Time:6586.0min:
Epoch:[1/1](100/37961) loss:4.725 lr:0.000054999144 epoch_Time:374.0min:
Epoch:[1/1](200/37961) loss:4.855 lr:0.000054996576 epoch_Time:344.0min:
Epoch:[1/1](300/37961) loss:4.856 lr:0.000054992295 epoch_Time:332.0min:
date
Epoch:[1/1](400/37961) loss:4.987 lr:0.000054986303 epoch_Time:325.0min:
Epoch:[1/1](500/37961) loss:4.783 lr:0.000054978600 epoch_Time:322.0min:
Epoch:[1/1](600/37961) loss:4.780 lr:0.000054969186 epoch_Time:320.0min:
Epoch:[1/1](700/37961) loss:4.649 lr:0.000054958062 epoch_Time:320.0min:
Epoch:[1/1](800/37961) loss:4.600 lr:0.000054945228 epoch_Time:321.0min:
Epoch:[1/1](900/37961) loss:4.758 lr:0.000054930686 epoch_Time:321.0min:
单卡4060ti 16g为啥比你的2080Ti差那么多,我这个时间是正常的吗
单卡4060ti 16g为啥比你的2080Ti差那么多,我这个时间是正常的吗