Amazon ec2 GPU在神经网络训练中是如何使用的?

Amazon ec2 GPU在神经网络训练中是如何使用的?,amazon-ec2,neural-network,nvidia,pytorch,tensor,Amazon Ec2,Neural Network,Nvidia,Pytorch,Tensor,我正在将AWS实例与(DLAMI)一起使用。该实例有一个单一的(640个Tensor核和5120个CUDA核)。当我运行Jupyter笔记本时,我注意到只有25%的GPU被使用。我使用以下命令监视GPU的使用情况watch-n 1 nvidia smi 我的问题是,什么决定了GPU的使用?或者,为什么GPU的使用率不是100%?这个问题背后的原因不仅与代码导致的效率低下有关,还与成本(3.06美元/小时)有关。我想知道是否还有什么我可以做的,以最大限度地利用GPU 当然,这是一个正在学习的深度学

我正在将AWS实例与(DLAMI)一起使用。该实例有一个单一的(640个Tensor核和5120个CUDA核)。当我运行Jupyter笔记本时,我注意到只有25%的GPU被使用。我使用以下命令监视GPU的使用情况
watch-n 1 nvidia smi

我的问题是,什么决定了GPU的使用?或者,为什么GPU的使用率不是100%?这个问题背后的原因不仅与代码导致的效率低下有关,还与成本(3.06美元/小时)有关。我想知道是否还有什么我可以做的,以最大限度地利用GPU


当然,这是一个正在学习的深度学习模型,培训代码通过网络一次发送一个样本进行学习。我认为小批量学习可能不合适(例如,在反向传播之前发送两个样本)。我还想知道网络架构(层的数量、它们的参数、它们的输入张量尺寸等)是否限制了GPU的使用。例如,如果我添加了更多的层或添加了更多的隐藏节点,我是否应该期望GPU的使用率会上升?

GPU超过CPU的能力是同时运行许多操作。然而,归档这种高水平的并行化并不总是容易的。Tensorflow或PyTorch等框架尽其所能优化GPU和并行化的所有功能,但这并不适用于所有情况

LSTM和RNN中的计算通常只能在非常有限的程度上进行并行。问题在于它们的顺序结构,LSTM和RNN一次只处理一个输入,并且它们需要按时间顺序处理所有内容(要计算n+1,您以前总是需要计算n),否则就没有意义了

因此,RNNs中处理数据的自然方式与并行化完全相反,使用小型批处理确实有很大帮助,但不能解决LSTM的根本问题

如果你不想要大量的并行化,你需要使用像Google在论文中提出的“Transformer”这样的架构

摘要

并行化程度分别为。模型的GPU加速在很大程度上取决于模型本身的体系结构。 对于某些体系结构,如RNNs,并行化只能在有限的程度上实现

编辑:

例如,如果我添加了更多的层或添加了更多的隐藏节点,我应该期望GPU的使用率上升吗

当增加GPU的使用量时,矩阵操作(如将输入传递到隐藏层)可以很好地并行化

添加层是不同的,在这里你有相同的问题是什么导致RNN是缓慢的GPU。要计算下一层,您需要已有上一层的结果。所以你需要一层接一层地计算,不可能同时计算所有的


这是理论-在实践中,您可能会看到GPU使用上的一些细微差异,这取决于框架的实际实现。

GPU对CPU的强大作用是同时运行多个操作。然而,归档这种高水平的并行化并不总是容易的。Tensorflow或PyTorch等框架尽其所能优化GPU和并行化的所有功能,但这并不适用于所有情况

LSTM和RNN中的计算通常只能在非常有限的程度上进行并行。问题在于它们的顺序结构,LSTM和RNN一次只处理一个输入,并且它们需要按时间顺序处理所有内容(要计算n+1,您以前总是需要计算n),否则就没有意义了

因此,RNNs中处理数据的自然方式与并行化完全相反,使用小型批处理确实有很大帮助,但不能解决LSTM的根本问题

如果你不想要大量的并行化,你需要使用像Google在论文中提出的“Transformer”这样的架构

摘要

并行化程度分别为。模型的GPU加速在很大程度上取决于模型本身的体系结构。 对于某些体系结构,如RNNs,并行化只能在有限的程度上实现

编辑:

例如,如果我添加了更多的层或添加了更多的隐藏节点,我应该期望GPU的使用率上升吗

当增加GPU的使用量时,矩阵操作(如将输入传递到隐藏层)可以很好地并行化

添加层是不同的,在这里你有相同的问题是什么导致RNN是缓慢的GPU。要计算下一层,您需要已有上一层的结果。所以你需要一层接一层地计算,不可能同时计算所有的

这就是理论——在实践中,您可能会看到GPU使用方面的一些细微差异,这取决于框架的实际实现