如何提高炼丹速度?

1.并发程序——善用multiprocessing

原因:对一百万张照片进行预处理/进行分析/进行裁切,可以利用并发进行加速

Ps:因为python内部解释器PID锁的原因,因此多线程在python当中并不可以得到加速

也可以采用异步等写出非常复杂的逻辑,总之,善用并发,可以大幅提高工作效率。

参考资料:[1]https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000 (廖雪峰python教程)

 2 https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/ (莫烦python)

 

2.优化IO

模型训练速度上不去的罪魁祸首就是IO,图片读取的速度是有物理极限的

方法:

  • 换用固态硬盘
  • 优化读取流程,把分散的文件进行打包

1  .就不多说了,有固态硬盘就尽量用固态,或者直接把所有的图片都读到内存中,再送到GPU中进行训练。(后者缺点,就是字大数据集情况下,试错成本提高,大量数据读入内存需要消耗启动训练的大量时间和大量内存(导致小内存服务器只能试训练一路))

2  .使用深度学习平台自带的数据打包工具进行打包

比如mxnet框架可以提将讲数据打包成以下数据格式,多次训练时直接读取,加速喜人(实测GPU利用率从60%上升到100%)

 faces_ms1m_112x112/
       train.idx
       train.rec
       property
       lfw.bin
       cfp_ff.bin
       cfp_fp.bin
       agedb_30.bin

关于打包,代码可以参考demo代码,善用多进程,如https://github.com/deepinsight/insightface/blob/master/src/data/dir2rec.py效率高低的评价标准即为IO是否占满

 

3.善用函数——挖掘框架本身性能

在框架当中,已经有了一些可以加速的点,以pytorch框架为例

cifarLoader = torch.utils.data.DataLoader(cifarSet, batch_size= 10, shuffle= False, num_workers= 2)

诸如此类的num_workers,就可以指定多线程加速。

并且在训练当中,能用原生函数的,就不要自己实现,尤其是numpy当中的数组操作,慎用for循环,多用列表表达式,效率往往是千倍的差距。

 

4.慎用多卡——多卡不一定加速

 

多卡就一定加速吗?不一定,因为卡之间的通信也大量消耗成本!因此加速比需要考虑,8卡训练模型的速度往往不是8倍,而是6倍,同理,四卡训练的加速也不一定是4倍,而是3倍,不要迷信卡多就一定能大幅加速,在性价比面前可能并不划算。

 

5.炼丹不一定非要开很多个run——可以用bash来自动调参

例如:将重复训练的命令写到一个脚本当中,运行这个脚本就可以依次训练

 

 

 

6.望闻问切——善用brain++ graph分析当前机器性能

  CPU占用时断时续,说明IO瓶颈/代码预处理逻辑耗时十分严重,因此可以考虑打包 进行加速,另外在此任务当中,作者使用了4张卡,但其实多卡的效率不一定就比单卡要搞,GPU不是越多越好。

 

标准范式,GPU占用长期处于100%。

 

7.常见Linux性能检测命令

查看cpu占用率:top http://www.cnblogs.com/zhoug2020/p/6336453.html

查看gpu占用率:nvidia-smi https://blog.csdn.net/s_sunnyy/article/details/78547516?locationNum=4&fps=1

查看磁盘IO:iostat https://blog.csdn.net/xusensen/article/details/73080887

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值