深度学习训练速度的提高的一些浅见(1)gpu,cpu,硬盘等硬件


本文着重于硬件方面的问题,代码方面的问题后续会讨论。

背景


多人使用一台服务器,常常会发生由于某个任务占用某个计算资源(cpu,gpu,内存,硬盘io等)过多,而导致其他任务由于该计算资源过少而训练速度过慢的问题

可能的瓶颈


本身训练代码(软件)可能的问题

  1. 有无多线程多进程输入。
  2. op操作是否有做gpu优化。
  3. 将数据集的预处理过程放入训练过程。
  4. 请参考学习tensorflow以及pytorch的performance guide。

服务器(硬件)的问题

  1. CPU使用。
  2. GPU使用。
  3. 内存使用。
  4. 硬盘使用等等。

硬件可能的问题


1.CPU


CPU的主要问题

  1. pytorch以及tensorflow的多线程输入设定过大,一般推荐较大数据流4线程,较小2线程。具体问题具体分析,要看数据输入是否是训练速度优化的瓶颈。

  2. numpy或者opencv等的多线程操作或者tensorflow以及pytorch在cpu运行上的op。这些模块使用OMP或者MKL进行多线程加速,一般默认为cpu线程总数的一半,十分浪费计算力,推荐使用4线程,详见下表。
    不同线程的benchmark

解决方案

在python文件中加入

import os
os.environ["MKL_NUM_THREADS"] = '4'
os.environ["NUMEXPR_NUM_THREADS"] = 4'
os.environ["OMP_NUM_THREADS"] = '4'

置于顶部,并放在import numpy等的前面,提前声明全局环境变量。

2.GPU


GPU的主要问题

  • 多任务单GPU,但这种情况在所难免。
    gpu处理单元有限,多任务运行一个gpu减慢训练速度,详见下表。
    gpu多任务

3.硬盘io


硬盘io的主要问题

  1. 数据读写过慢,对于计算量小,输入大的模型尤甚。
  2. 训练中的数据处理方式存在大图切小图的步骤(比如模型输入为160x160, 训练读取1080p图片,再实时进行裁剪)。

解决方法

  1. 可以参考<查看硬盘io读写 百度搜索>查看哪些进程io读写过大导致整体硬盘读写速度变慢。
  2. 在训练前将大的图片裁剪好,训练时塞入小的图片,不过有可能会占大量硬盘空间。

4.内存


内存对于训练速度的影响

内存占用过大
交换空间使用过多
cpu负荷大,io读写速度慢

内存的主要问题

  1. 数据并不是实时地读入模型,而是将所有数据先读取到内存,再通过placeholder等方法读取。
  2. 忘记进行垃圾回收。

解决方法

  1. tensorflow的queue runner(python多线程)以及Data(C++多线程)以及tfrecord。
  2. pytorch的DataLoader.
  3. memory_profiler模快+gc模快.

总结


  1. Kunth大神说过的“过早的优化是万恶之源+寻找真正的瓶颈”。
  2. 纯属一点点实验性总结,希望能有一点点帮助。
  3. 思维导图
    思维导图
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值