在经过第一阶段的学习后,我们来看看在不同设备上,训练所需要花费的时间。
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的好坏,跟显卡无关。排名如下:
- intel i7-13700kf + RTX 3070Ti
- mac m1 pro
- amd 3900x + Tesla P40
- amd 5950x + RTX 4070Ti
- 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的排名,如下所示:
- i7-13700kf
- AMD 5950x
- Mac m1 pro
- AMD EPYC 7542
- AMD 3900x
显卡的排名如下所示:
- RTX 4070Ti
- RTX 3070Ti
- RTX 4090
- Tesla P40
- Mac m1
经过研究发现,在本次测试中,除了4090显卡的使用率只到了50%左右,其他显卡使用率都到达了90%以上,所以我们可以得出结论,在数据量小的情况下,没办法发挥出显卡的性能,这个时候CPU的性能影响的权重就更大。
另一方面,以上的结论也符合我对显卡和CPU的认知。按顺序做题,CPU能力强于GPU,但是同时做N道题,N越大,GPU的能力越强。