【问题】当深度学习相关程序正在运行时,GPU利用率较低,并且会有间隔地达到下一个较高的值,但大多数时间为0%。
【分析】
通常,GPU是同等程度的其他动作,主要是数据的加载和CPU上的一些操作(包括数据的预处理等),因此可以按照以下步骤逐一确认瓶颈。
请确认CPU使用率是否高。
确认top #对应的CPU使用率是否已满
如果CPU使用过载,则数据预处理等操作的一步可能已达到机器上限,需要考虑CPU性能是否足够。
更常见的原因是I/O瓶颈。 最常见的情况是数据存储在机械硬盘上。 这意味着CPU利用率也不是很高,GPU利用率也很低。 此时,让我们来看看I/O的状况。
sudo iotop #需要sudo权限
如果只通过一个过程读取数据,无论如何都会慢下来。 在这种情况下,必须考虑多个进程并行读取数据。 在pytorch中,可以在torch.util.data.Dataloader中打包自定义的数据读取函数。 num_worker参数控制读取数据的进程数。
自定义数据读取函数代码隐藏num_workers数量的具体设置由CPU内核数决定,请自行尝试。 无论何时CPU或GPU已满,都足够了。
但是,如果机械硬盘的I/O上限在那里,那无论有多少进程都一定是徒劳的。 这个时候只能感叹固态硬盘的大法好了。
【总结】根据影响程序执行速度的主要三个节点和一般的机器结构,可能限制速度的大小关系如下。
数据读取(I/O速度)数据预处理等) CPU )网络前馈(GPU ) )。
在不改变硬件条件的情况下,最能努力的是增加数据读取过程,以及能够将数据预处理操作尽可能移动到GPU的所有内容都移动到GPU。
这是从宏观角度来看的,当然还有其他精细的黑色技术,因此需要根据特定的步骤寻找有针对性的优化方法。
快三技巧准确率100p>
自定义数据读取函数代码隐藏num_workers数量的具体设置由CPU内核数决定,请自行尝试。 无论何时CPU或GPU已满,都足够了。
但是,如果机械硬盘的I/O上限在那里,那无论有多少进程都一定是徒劳的。 这个时候只能感叹固态硬盘的大法好了。
【总结】根据影响程序执行速度的主要三个节点和一般的机器结构,可能限制速度的大小关系如下。
数据读取(I/O速度)数据预处理等) CPU )网络前馈(GPU ) )。
在不改变硬件条件的情况下,最能努力的是增加数据读取过程,以及能够将数据预处理操作尽可能移动到GPU的所有内容都移动到GPU。
这是从宏观角度来看的,当然还有其他精细的黑色技术,因此需要根据特定的步骤寻找有针对性的优化方法。