从0开始学习卷积神经网络(四)—— 神经网络训练时间测试

在经过第一阶段的学习后,我们来看看在不同设备上,训练所需要花费的时间。

numpy架构

不使用批量数据集的numpy架构代码,训练10轮,使用mac m1 pro设置的CPU进行训练,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用mac m1 pro设备的CPU进行计算,不使用批量数据集,使用numpy架构,训练10轮
$ /usr/bin/time -p python3 train_image.py train 1
训练步数:0, 损失值:[...],运行时间:5
训练步数:1, 损失值:[...],运行时间:4
训练步数:2, 损失值:[...],运行时间:4
训练步数:3, 损失值:[...],运行时间:4
训练步数:4, 损失值:[...],运行时间:4
训练步数:5, 损失值:[...],运行时间:5
训练步数:6, 损失值:[...],运行时间:4
训练步数:7, 损失值:[...],运行时间:4
训练步数:8, 损失值:[...],运行时间:4
训练步数:9, 损失值:[...],运行时间:4
real 56.31
user 45.23
sys 2.58

pytorch架构

不使用批量数据集的pytorch架构代码,训练10轮,使用mac m1 pro设置的CPU进行训练,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ /usr/bin/time -p python3 train_image_pytorch.py train 1
use cpu device
训练步数:0, 损失值:32250.6171875,运行时间:5.129971027374268
训练步数:1, 损失值:21791.275390625,运行时间:5.347644090652466
训练步数:2, 损失值:20175.958984375,运行时间:5.3410279750823975
训练步数:3, 损失值:19327.568359375,运行时间:5.338259935379028
训练步数:4, 损失值:18796.841796875,运行时间:5.698091983795166
训练步数:5, 损失值:18416.720703125,运行时间:5.464349269866943
训练步数:6, 损失值:18099.1171875,运行时间:5.541553974151611
训练步数:7, 损失值:17852.349609375,运行时间:5.5420732498168945
训练步数:8, 损失值:17676.14453125,运行时间:5.47119402885437
训练步数:9, 损失值:17503.791015625,运行时间:5.431099891662598
训练结果已保存到 'imageCNN_cpu.pth'
real 60.70
user 82.51
sys 5.72

从这可以看出,在不使用批量数据集的情况下,pytorch本身并没有更优于numpy,并且由于pytorch的代码量更多,所以花费的时间还更长

下面开始使用批量数据集的pytorch架构代码,batch_size=600,训练10轮,使用第一版算法的代码进度训练时间测试,测试情况如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# macbook pro m1 pro设备
$ /usr/bin/time -p python3 train_image_pytorch.py train 1
use cpu device
训练步数:0, 损失值:224.73388671875,运行时间:0.29904794692993164
训练步数:1, 损失值:214.854248046875,运行时间:0.2647390365600586
训练步数:2, 损失值:205.7545166015625,运行时间:0.2815220355987549
训练步数:3, 损失值:197.32948303222656,运行时间:0.29268908500671387
训练步数:4, 损失值:189.51611328125,运行时间:0.3308289051055908
训练步数:5, 损失值:182.26487731933594,运行时间:0.2987101078033447
训练步数:6, 损失值:175.53538513183594,运行时间:0.26985979080200195
训练步数:7, 损失值:169.2897491455078,运行时间:0.26545190811157227
训练步数:8, 损失值:163.49215698242188,运行时间:0.2801511287689209
训练步数:9, 损失值:158.10809326171875,运行时间:0.31236910820007324
训练结束,计算花费时间:2.895369052886963
训练结果已保存到 'imageCNN_cpu.pth'
real 9.95
user 26.84
sys 4.42
# 使用m1 pro设备的GPU进行训练
$ MPS=1 /usr/bin/time -p python3 train_image_pytorch.py train 1
use mps device
训练步数:0, 损失值:224.43067932128906,运行时间:0.5099849700927734
训练步数:1, 损失值:214.4691619873047,运行时间:0.4024388790130615
训练步数:2, 损失值:205.34213256835938,运行时间:0.42064499855041504
训练步数:3, 损失值:196.92031860351562,运行时间:0.4070398807525635
训练步数:4, 损失值:189.12452697753906,运行时间:0.4339001178741455
训练步数:5, 损失值:181.89784240722656,运行时间:0.4336400032043457
训练步数:6, 损失值:175.1947021484375,运行时间:0.39691805839538574
训练步数:7, 损失值:168.97560119628906,运行时间:0.398953914642334
训练步数:8, 损失值:163.20309448242188,运行时间:0.39380717277526855
训练步数:9, 损失值:157.84288024902344,运行时间:0.4296529293060303
训练结束,计算花费时间:4.226980924606323
训练结果已保存到 'imageCNN_mps.pth'
real 11.69
user 19.97
sys 5.32

从上面可以看出,批量数据集进行训练,能大大加快训练速度,但是我们发现使用GPU训练的时间却比CPU的长。

相同的代码,相同的参数,换一台设备继续进行测试,该设备为:AMD 3900X + Tesla P40,测试情况如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ /usr/bin/time -p python3 train_image_pytorch.py train 1
use cpu device
训练步数:0, 损失值:225.30618286132812,运行时间:0.631533145904541
训练步数:1, 损失值:215.43064880371094,运行时间:0.4684586524963379
训练步数:2, 损失值:206.3062286376953,运行时间:0.4036896228790283
训练步数:3, 损失值:197.8463592529297,运行时间:0.45217275619506836
训练步数:4, 损失值:189.99525451660156,运行时间:0.4035212993621826
训练步数:5, 损失值:182.70700073242188,运行时间:0.4031660556793213
训练步数:6, 损失值:175.9429168701172,运行时间:0.45494532585144043
训练步数:7, 损失值:169.6640167236328,运行时间:0.40424013137817383
训练步数:8, 损失值:163.8365936279297,运行时间:0.45206761360168457
训练步数:9, 损失值:158.42498779296875,运行时间:0.4037144184112549
训练结束,计算花费时间:4.477509021759033
训练结果已保存到 'imageCNN_cpu.pth'
real 13.08
user 59.52
sys 2.33
$ CUDA=1 /usr/bin/time -p python3 train_image_pytorch.py train 1
use cuda device
训练步数:0, 损失值:225.40484619140625,运行时间:0.5851955413818359
训练步数:1, 损失值:215.41485595703125,运行时间:0.46657443046569824
训练步数:2, 损失值:206.2270050048828,运行时间:0.42023801803588867
训练步数:3, 损失值:197.73211669921875,运行时间:0.4637775421142578
训练步数:4, 损失值:189.86203002929688,运行时间:0.41727471351623535
训练步数:5, 损失值:182.5652313232422,运行时间:0.41437840461730957
训练步数:6, 损失值:175.79769897460938,运行时间:0.4645211696624756
训练步数:7, 损失值:169.5205078125,运行时间:0.4140336513519287
训练步数:8, 损失值:163.69593811035156,运行时间:0.47217726707458496
训练步数:9, 损失值:158.28997802734375,运行时间:0.413881778717041
训练结束,计算花费时间:4.532052516937256
训练结果已保存到 'imageCNN_cuda.pth'
real 13.26
user 59.96
sys 2.31

AMD EPYC 7542 + RTX 4090的设备上,测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ /usr/bin/time -p python3 train_image_pytorch.py train 1
use cpu device
训练步数:0, 损失值:223.6919403076172,运行时间:1.2728688716888428
训练步数:1, 损失值:213.8316650390625,运行时间:0.5519564151763916
训练步数:2, 损失值:204.75396728515625,运行时间:0.7232797145843506
训练步数:3, 损失值:196.3562469482422,运行时间:0.8722922801971436
训练步数:4, 损失值:188.57127380371094,运行时间:0.5838665962219238
训练步数:5, 损失值:181.35122680664062,运行时间:0.6159508228302002
训练步数:6, 损失值:174.65574645996094,运行时间:0.5726571083068848
训练步数:7, 损失值:168.4457244873047,运行时间:0.5583467483520508
训练步数:8, 损失值:162.6847381591797,运行时间:0.6569473743438721
训练步数:9, 损失值:157.33804321289062,运行时间:0.5279762744903564
训练结束,计算花费时间:6.936142206192017
训练结果已保存到 'imageCNN_cpu.pth'

real 18.80
user 398.52
sys 20.10
$ CUDA=1 /usr/bin/time -p python3 train_image_pytorch.py train 1
use cuda device
训练步数:0, 损失值:224.0894317626953,运行时间:1.437026023864746
训练步数:1, 损失值:214.13674926757812,运行时间:0.6263303756713867
训练步数:2, 损失值:205.0384979248047,运行时间:0.4542872905731201
训练步数:3, 损失值:196.65078735351562,运行时间:0.5196712017059326
训练步数:4, 损失值:188.88743591308594,运行时间:0.4512619972229004
训练步数:5, 损失值:181.6896514892578,运行时间:0.4485926628112793
训练步数:6, 损失值:175.01129150390625,运行时间:0.5191380977630615
训练步数:7, 损失值:168.8120574951172,运行时间:0.5237691402435303
训练步数:8, 损失值:163.05682373046875,运行时间:0.4736204147338867
训练步数:9, 损失值:157.71092224121094,运行时间:0.47301435470581055
训练结束,计算花费时间:5.926711559295654
训练结果已保存到 'imageCNN_cuda.pth'

real 17.18
user 297.24
sys 17.05

还有两个windows设备的测试结果如下所示:

首先是intel i7-13700kf + RTX 3070ti

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cpu device
训练步数:0, 损失值:225.23609924316406,运行时间:0.3927922248840332
训练步数:1, 损失值:215.17259216308594,运行时间:0.2524113655090332
训练步数:2, 损失值:205.98667907714844,运行时间:0.2533743381500244
训练步数:3, 损失值:197.5244140625,运行时间:0.28456974029541016
训练步数:4, 损失值:189.69676208496094,运行时间:0.2514510154724121
训练步数:5, 损失值:182.44281005859375,运行时间:0.28617382049560547
训练步数:6, 损失值:175.71490478515625,运行时间:0.24938178062438965
训练步数:7, 损失值:169.47268676757812,运行时间:0.24702215194702148
训练步数:8, 损失值:163.6786651611328,运行时间:0.27948617935180664
训练步数:9, 损失值:158.29818725585938,运行时间:0.24564647674560547
训练结束,计算花费时间:2.742309093475342
训练结果已保存到 'imageCNN_cpu.pth'

Days : 0
Hours : 0
Minutes : 0
Seconds : 8
Milliseconds : 880
Ticks : 88800200
TotalDays : 0.000102778009259259
TotalHours : 0.00246667222222222
TotalMinutes : 0.148000333333333
TotalSeconds : 8.88002
TotalMilliseconds : 8880.02
$ $env:CUDA=1
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cuda device
训练步数:0, 损失值:225.6874237060547,运行时间:0.4537363052368164
训练步数:1, 损失值:215.7301483154297,运行时间:0.27559924125671387
训练步数:2, 损失值:206.52639770507812,运行时间:0.26322078704833984
训练步数:3, 损失值:197.99574279785156,运行时间:0.31162238121032715
训练步数:4, 损失值:190.08145141601562,运行时间:0.2745826244354248
训练步数:5, 损失值:182.740478515625,运行时间:0.3010575771331787
训练步数:6, 损失值:175.93301391601562,运行时间:0.2731008529663086
训练步数:7, 损失值:169.61964416503906,运行时间:0.2706129550933838
训练步数:8, 损失值:163.76431274414062,运行时间:0.31513404846191406
训练步数:9, 损失值:158.33143615722656,运行时间:0.26580071449279785
训练结束,计算花费时间:3.004467487335205
训练结果已保存到 'imageCNN_cuda.pth'

Days : 0
Hours : 0
Minutes : 0
Seconds : 9
Milliseconds : 68
Ticks : 90684555
TotalDays : 0.000104958975694444
TotalHours : 0.00251901541666667
TotalMinutes : 0.151140925
TotalSeconds : 9.0684555
TotalMilliseconds : 9068.4555

另一个设备为AMD 5950x + RTX 4070Ti

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cpu device
训练步数:0, 损失值:226.03390502929688,运行时间:0.5911438465118408
训练步数:1, 损失值:216.13670349121094,运行时间:0.44499969482421875
训练步数:2, 损失值:206.98776245117188,运行时间:0.48199892044067383
训练步数:3, 损失值:198.5037841796875,运行时间:0.481151819229126
训练步数:4, 损失值:190.62847900390625,运行时间:0.5409998893737793
训练步数:5, 损失值:183.31564331054688,运行时间:0.542905330657959
训练步数:6, 损失值:176.5263214111328,运行时间:0.4818413257598877
训练步数:7, 损失值:170.22305297851562,运行时间:0.4068763256072998
训练步数:8, 损失值:164.3709716796875,运行时间:0.4140293598175049
训练步数:9, 损失值:158.93556213378906,运行时间:0.3620007038116455
训练结束,计算花费时间:4.7479472160339355
训练结果已保存到 'imageCNN_cpu.pth'


Days : 0
Hours : 0
Minutes : 0
Seconds : 14
Milliseconds : 244
Ticks : 142442731
TotalDays : 0.000164864271990741
TotalHours : 0.00395674252777778
TotalMinutes : 0.237404551666667
TotalSeconds : 14.2442731
TotalMilliseconds : 14244.2731
$ $env:CUDA=1
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cuda device
训练步数:0, 损失值:225.4466552734375,运行时间:0.7948179244995117
训练步数:1, 损失值:215.37847900390625,运行时间:0.40688228607177734
训练步数:2, 损失值:206.16546630859375,运行时间:0.37399983406066895
训练步数:3, 损失值:197.6641387939453,运行时间:0.509000301361084
训练步数:4, 损失值:189.79319763183594,运行时间:0.5790700912475586
训练步数:5, 损失值:182.49725341796875,运行时间:0.5939998626708984
训练步数:6, 损失值:175.73060607910156,运行时间:0.5450000762939453
训练步数:7, 损失值:169.45358276367188,运行时间:0.5638546943664551
训练步数:8, 损失值:163.62974548339844,运行时间:0.6528525352478027
训练步数:9, 损失值:158.22389221191406,运行时间:0.5898571014404297
训练结束,计算花费时间:5.609334707260132
训练结果已保存到 'imageCNN_cuda.pth'


Days : 0
Hours : 0
Minutes : 0
Seconds : 15
Milliseconds : 361
Ticks : 153618038
TotalDays : 0.000177798655092593
TotalHours : 0.00426716772222222
TotalMinutes : 0.256030063333333
TotalSeconds : 15.3618038
TotalMilliseconds : 15361.8038

从上面的数据中,我们可以看出GPU训练的时间都比CPU的长,并且排名都是取决于CPU的好坏,跟显卡无关。排名如下:

  1. intel i7-13700kf + RTX 3070Ti
  2. mac m1 pro
  3. amd 3900x + Tesla P40
  4. amd 5950x + RTX 4070Ti
  5. AMD EPYC 7542 + RTX 4090

除了第三和第四,其他基本都符号CPU的排名,为什么5950x和弱于3900x呢?猜测其实两个CPU的性能接近,可能由于Windows上python的性能弱于Linux,这部分差距大于CPU之间的差距。

从上面的数据中,我们能得出结论:第一版算法的测试数据不具有任何参考价值,由于计算量太过简单,CPU和GPU之间进行计算无法拉开差距,并且CPU花费在处理代码的循环,数据的传输上的时间远大于运算时间。

下面,我们对最后一版的算法进行测试,为了更多的测试计算能力,把batch_size改成6000。

首先是mac m1 pro,测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ /usr/bin/time -p python3 train_image_pytorch2.py train 1
use cpu device
训练步数:0, 损失值:19.07152557373047,运行时间:15.966458797454834
训练步数:1, 损失值:7.911937713623047,运行时间:16.480289697647095
训练步数:2, 损失值:4.479128360748291,运行时间:15.133854866027832
训练步数:3, 损失值:3.482635021209717,运行时间:15.290619850158691
训练步数:4, 损失值:2.8676095008850098,运行时间:14.432899951934814
训练步数:5, 损失值:2.4401471614837646,运行时间:14.397577285766602
训练步数:6, 损失值:2.0994482040405273,运行时间:14.376698970794678
训练步数:7, 损失值:1.8364131450653076,运行时间:14.156056880950928
训练步数:8, 损失值:1.5836421251296997,运行时间:14.815199136734009
训练步数:9, 损失值:1.3963086605072021,运行时间:14.230156898498535
训练结束,计算花费时间:149.27981233596802
训练结果已保存到 'imageCNN_cpu.pth'
real 158.12
user 1015.64
sys 157.45
$ MPS=1 /usr/bin/time -p python3 train_image_pytorch2.py train 1
use mps device
训练步数:0, 损失值:19.894386291503906,运行时间:2.282158851623535
训练步数:1, 损失值:9.282439231872559,运行时间:1.873964786529541
训练步数:2, 损失值:4.771589756011963,运行时间:1.9231181144714355
训练步数:3, 损失值:3.6305501461029053,运行时间:1.86375093460083
训练步数:4, 损失值:2.9197962284088135,运行时间:1.8654141426086426
训练步数:5, 损失值:2.4060003757476807,运行时间:1.9269700050354004
训练步数:6, 损失值:2.050339698791504,运行时间:1.8618948459625244
训练步数:7, 损失值:1.760815143585205,运行时间:1.8853628635406494
训练步数:8, 损失值:1.5145314931869507,运行时间:1.9045109748840332
训练步数:9, 损失值:1.3286300897598267,运行时间:1.857635736465454
训练结束,计算花费时间:19.244781255722046
训练结果已保存到 'imageCNN_mps.pth'
real 30.32
user 34.16
sys 5.72

AMD 3900X + Tesla P40设备的测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ /usr/bin/time -p python3 train_image_pytorch2.py train 1
use cpu device
训练步数:0, 损失值:19.29987907409668,运行时间:14.470006704330444
训练步数:1, 损失值:7.913486957550049,运行时间:14.326431035995483
训练步数:2, 损失值:4.3706183433532715,运行时间:14.382113695144653
训练步数:3, 损失值:3.28579044342041,运行时间:14.373379468917847
训练步数:4, 损失值:2.6453282833099365,运行时间:14.387059926986694
训练步数:5, 损失值:2.2182412147521973,运行时间:14.333259344100952
训练步数:6, 损失值:1.8778373003005981,运行时间:14.430665969848633
训练步数:7, 损失值:1.6076687574386597,运行时间:14.355809211730957
训练步数:8, 损失值:1.3914400339126587,运行时间:14.41654372215271
训练步数:9, 损失值:1.2252235412597656,运行时间:14.359193086624146
训练结束,计算花费时间:143.83446216583252
训练结果已保存到 'imageCNN_cpu.pth'
real 153.20
user 629.88
sys 518.03
$ CUDA=1 /usr/bin/time -p python3 train_image_pytorch2.py train 1
use cuda device
训练步数:0, 损失值:18.761730194091797,运行时间:1.69771409034729
训练步数:1, 损失值:7.2918381690979,运行时间:1.2395594120025635
训练步数:2, 损失值:4.204300880432129,运行时间:1.3140349388122559
训练步数:3, 损失值:3.2394468784332275,运行时间:1.2319941520690918
训练步数:4, 损失值:2.6045384407043457,运行时间:1.2325098514556885
训练步数:5, 损失值:2.2080237865448,运行时间:1.2342596054077148
训练步数:6, 损失值:1.886049509048462,运行时间:1.2310535907745361
训练步数:7, 损失值:1.6201437711715698,运行时间:1.2314598560333252
训练步数:8, 损失值:1.4131437540054321,运行时间:1.2314331531524658
训练步数:9, 损失值:1.2360808849334717,运行时间:1.2311131954193115
训练结束,计算花费时间:12.875131845474243
训练结果已保存到 'imageCNN_cuda.pth'
real 23.61
user 35.75
sys 2.66

AMD EPYC 7542 + RTX 4090设备的测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ /usr/bin/time -p python3 train_image_pytorch2.py train 1
use cpu device
训练步数:0, 损失值:19.84352684020996,运行时间:13.785109996795654
训练步数:1, 损失值:8.91077995300293,运行时间:13.576667785644531
训练步数:2, 损失值:4.8927531242370605,运行时间:13.54626727104187
训练步数:3, 损失值:3.68062686920166,运行时间:13.414278507232666
训练步数:4, 损失值:2.970458984375,运行时间:13.536256074905396
训练步数:5, 损失值:2.4683945178985596,运行时间:13.580097436904907
训练步数:6, 损失值:2.110508441925049,运行时间:13.328282117843628
训练步数:7, 损失值:1.7912464141845703,运行时间:13.509858131408691
训练步数:8, 损失值:1.528149127960205,运行时间:13.550743818283081
训练步数:9, 损失值:1.3289828300476074,运行时间:13.614829540252686
训练结束,计算花费时间:135.4423906803131
训练结果已保存到 'imageCNN_cpu.pth'
real 151.29
user 2244.57
sys 1688.98
$ CUDA=1 /usr/bin/time -p python3 train_image_pytorch2.py train 1
use cuda device
训练步数:0, 损失值:61.467185974121094,运行时间:2.925949811935425
训练步数:1, 损失值:14.22904109954834,运行时间:0.6696975231170654
训练步数:2, 损失值:8.087360382080078,运行时间:0.575188159942627
训练步数:3, 损失值:5.925327301025391,运行时间:0.5410959720611572
训练步数:4, 损失值:4.800480842590332,运行时间:0.652106761932373
训练步数:5, 损失值:4.0963873863220215,运行时间:0.7243118286132812
训练步数:6, 损失值:3.587590456008911,运行时间:0.6504130363464355
训练步数:7, 损失值:3.134571075439453,运行时间:0.7690508365631104
训练步数:8, 损失值:2.8102245330810547,运行时间:0.5683856010437012
训练步数:9, 损失值:2.450228452682495,运行时间:0.574857234954834
训练结束,计算花费时间:8.65105676651001
训练结果已保存到 'imageCNN_cuda.pth'

real 24.20
user 100.12
sys 308.70

intel i7-13700kf + RTX 3070ti设备的测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cpu device
训练步数:0, 损失值:54.18650436401367,运行时间:6.291917562484741
训练步数:1, 损失值:12.196166038513184,运行时间:6.450972080230713
训练步数:2, 损失值:7.744004249572754,运行时间:6.410454273223877
训练步数:3, 损失值:5.967677593231201,运行时间:6.468387603759766
训练步数:4, 损失值:4.671255588531494,运行时间:6.415809154510498
训练步数:5, 损失值:3.9020285606384277,运行时间:6.36336612701416
训练步数:6, 损失值:3.413954257965088,运行时间:6.382065773010254
训练步数:7, 损失值:2.97802734375,运行时间:6.538836240768433
训练步数:8, 损失值:2.534611701965332,运行时间:6.465012311935425
训练步数:9, 损失值:2.43080997467041,运行时间:6.4524359703063965
训练结束,计算花费时间:64.23925709724426
训练结果已保存到 'imageCNN_cpu.pth'


Days : 0
Hours : 0
Minutes : 1
Seconds : 11
Milliseconds : 178
Ticks : 711782965
TotalDays : 0.000823822876157407
TotalHours : 0.0197717490277778
TotalMinutes : 1.18630494166667
TotalSeconds : 71.1782965
TotalMilliseconds : 71178.2965
$ $env:CUDA=1
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cuda device
训练步数:0, 损失值:19.130483627319336,运行时间:2.6264848709106445
训练步数:1, 损失值:7.807053089141846,运行时间:0.5154345035552979
训练步数:2, 损失值:4.463947772979736,运行时间:0.5095677375793457
训练步数:3, 损失值:3.4601473808288574,运行时间:0.5318410396575928
训练步数:4, 损失值:2.810361385345459,运行时间:0.5017638206481934
训练步数:5, 损失值:2.32816481590271,运行时间:0.5430760383605957
训练步数:6, 损失值:1.9799805879592896,运行时间:0.5300400257110596
训练步数:7, 损失值:1.7096493244171143,运行时间:0.49857425689697266
训练步数:8, 损失值:1.4899307489395142,运行时间:0.5509631633758545
训练步数:9, 损失值:1.3119804859161377,运行时间:0.5213744640350342
训练结束,计算花费时间:7.329119920730591
训练结果已保存到 'imageCNN_cuda.pth'


Days : 0
Hours : 0
Minutes : 0
Seconds : 14
Milliseconds : 775
Ticks : 147752293
TotalDays : 0.00017100959837963
TotalHours : 0.00410423036111111
TotalMinutes : 0.246253821666667
TotalSeconds : 14.7752293
TotalMilliseconds : 14775.2293

AMD 5950x + RTX 4070Ti设备的测试结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cpu device
训练步数:0, 损失值:55.098045349121094,运行时间:9.027056217193604
训练步数:1, 损失值:12.346261024475098,运行时间:8.771396160125732
训练步数:2, 损失值:7.545897960662842,运行时间:8.864960432052612
训练步数:3, 损失值:5.816414833068848,运行时间:8.778243064880371
训练步数:4, 损失值:4.666250228881836,运行时间:8.78200364112854
训练步数:5, 损失值:4.009121417999268,运行时间:8.779641151428223
训练步数:6, 损失值:3.5059008598327637,运行时间:8.870949029922485
训练步数:7, 损失值:3.273005247116089,运行时间:8.736048221588135
训练步数:8, 损失值:2.936157703399658,运行时间:8.864691495895386
训练步数:9, 损失值:2.44046688079834,运行时间:8.736886024475098
训练结束,计算花费时间:88.21187543869019
训练结果已保存到 'imageCNN_cpu.pth'


Days : 0
Hours : 0
Minutes : 1
Seconds : 38
Milliseconds : 821
Ticks : 988218436
TotalDays : 0.00114377133796296
TotalHours : 0.0274505121111111
TotalMinutes : 1.64703072666667
TotalSeconds : 98.8218436
TotalMilliseconds : 98821.8436
$ $env:CUDA=1
$ Measure-Command {python .\train_image_pytorch.py train 1 | Out-Host}
use cuda device
训练步数:0, 损失值:19.23763656616211,运行时间:1.1209995746612549
训练步数:1, 损失值:7.7971038818359375,运行时间:0.58217453956604
训练步数:2, 损失值:4.211529731750488,运行时间:0.5050301551818848
训练步数:3, 损失值:3.2266297340393066,运行时间:0.623999834060669
训练步数:4, 损失值:2.581773281097412,运行时间:0.6179993152618408
训练步数:5, 损失值:2.144932985305786,运行时间:0.5300002098083496
训练步数:6, 损失值:1.8252092599868774,运行时间:0.6000003814697266
训练步数:7, 损失值:1.5518724918365479,运行时间:0.620999813079834
训练步数:8, 损失值:1.3407659530639648,运行时间:0.5259997844696045
训练步数:9, 损失值:1.1703611612319946,运行时间:0.6192200183868408
训练结束,计算花费时间:6.346423625946045
训练结果已保存到 'imageCNN_cuda.pth'


Days : 0
Hours : 0
Minutes : 0
Seconds : 17
Milliseconds : 575
Ticks : 175755758
TotalDays : 0.000203421016203704
TotalHours : 0.00488210438888889
TotalMinutes : 0.292926263333333
TotalSeconds : 17.5755758
TotalMilliseconds : 17575.5758

增大了计算量后,我们再来看看CPU的排名,如下所示:

  1. i7-13700kf
  2. AMD 5950x
  3. Mac m1 pro
  4. AMD EPYC 7542
  5. AMD 3900x

显卡的排名如下所示:

  1. RTX 4070Ti
  2. RTX 3070Ti
  3. RTX 4090
  4. Tesla P40
  5. Mac m1

经过研究发现,在本次测试中,除了4090显卡的使用率只到了50%左右,其他显卡使用率都到达了90%以上,所以我们可以得出结论,在数据量小的情况下,没办法发挥出显卡的性能,这个时候CPU的性能影响的权重就更大。

另一方面,以上的结论也符合我对显卡和CPU的认知。按顺序做题,CPU能力强于GPU,但是同时做N道题,N越大,GPU的能力越强。

从0开始学习卷积神经网络(四)—— 神经网络训练时间测试

https://nobb.site/2025/02/26/0x92/

Author

Hcamael

Posted on

2025-02-26

Updated on

2025-02-26

Licensed under