模型训练时间的估算 您所在的位置:网站首页 spark预测模型跑多久 模型训练时间的估算

模型训练时间的估算

2023-07-21 08:47| 来源: 网络整理| 查看: 265

模型训练时间的估算

昨天群里一个朋友训练一个BERT句子对模型,使用的是CPU来进行训练,由于代码是BERT官方代码,并没有显示训练需要的总时间,所以训练的时候只能等待。他截图发了基本的信息,想知道训练完整个模型需要多久。

最开始跑BERT模型的时候,我也碰到这个问题,当时没有深入研究, 不过后来换成keras,bert4keras等框架,可以直接输出时间,比较直观,也就忽略了这个问题。这次回过头来重新理一理,也算温故知新。

话不多说,截图如下: 在这里插入图片描述 在这里插入图片描述

基础量

先整理一下截图中已知的量:

global_step/sec = 0.204125 表示每秒训练多少个batch批次;

examples/sec = 3.26599 表示每秒可以训练的样本数量 ;

Num examples = 40127 表示样本的总数量

Batch size = 16 表示一批次有多少个样本;

Num steps = 25079 表示总共有多少步(批次)

Epoch = 10 迭代次数,即所有样本训练的次数

迭代次数Epoch没有在截图里,但是可以这样推算:

Epoch = Num steps * Batch size / Num examples = 25079 * 16 / 40127 = 10 次 推理公式

以下是推理出来的其它公式:

Num steps = Num examples * Epoch / Batch size 25079 = 40127 * 10 / 16 一个迭代训练用时 = Num examples / (examples/sec) = 40127 / 3.26599 = 12286秒 = 3小时 24分 46秒 训练总用时(秒) = Num examples * Epoch / (examples/sec) (秒) = 40127 * 10 / 3.26599 = 122863 秒 = 34小时 7分 43秒 或者: 训练总用时(秒) = Num steps / (global_step/sec) (秒) = 25079 / 0.204125 = 122861 秒 = 34小时 7分 41秒

** 附带一个时间长度的转换方法,可用于把秒数变成时间长度 **:

''' # 经过的秒数 转成 时间长度 测试样例: >>> getSpanTimes(122891234,unit='') '3Y 10M 22D 08:27:14;' >>> getSpanTimes(122891234,unit='en') '3 Years 10 Months 22 Days 08 Hour 27 Minute 14 Second' >>> getSpanTimes(122891234,unit='zh') '3年 10个月 22天 08小时 27分 14秒' ''' def getSpanTimes (lngTimeSpan, unit=''): import time unit_sim = 'Y |M |D |:|:|;' unit_en = ' Years | Months | Days | Hour | Minute | Second' unit_zh = '年 |个月 |天 |小时 |分 |秒' if unit=='en': unit_list = unit_en.split('|') elif unit=='zh': unit_list = unit_zh.split('|') else: unit_list = unit_sim.split('|') t = time.gmtime(float(round(lngTimeSpan,3))) #print(t) total_time = '' total_time += ('%d%s' % (t.tm_year-1970, unit_list[0])) if t.tm_year>1970 else '' total_time += ('%d%s' % (t.tm_mon-1, unit_list[1])) if t.tm_mon>1 else '' total_time += ('%d%s' % (t.tm_mday-1, unit_list[2])) if t.tm_mday>1 else '' tm = "%%H%s%%M%s%%S%s" % tuple(unit_list[3:]) total_time += time.strftime(tm, t) return total_time 最终结论

最终得到的结果:总训练时间可以这样计算:

** 训练总用时(秒) = Num examples * Epoch / (examples/sec) (秒) **

** 训练总用时(秒) = Num steps / (global_step/sec) (秒) **

ps: 看来使用CPU训练模型确实是非常慢,跑一个迭代要接受三个半小时。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有