首页 文章

GPU利用率如何在神经网络训练的背景下工作?

提问于
浏览
0

我正在使用带有Deep Learning AMI(DLAMI)的AWS p3.2xlarge实例 . 这个实例有一个Tesla V100(640个Tensor核心和5,120个CUDA核心) . 当我运行PyTorch Seq2Seq Jupyter笔记本时,我注意到只使用了25%的GPU . 我使用以下命令 watch -n 1 nvidia-smi 监控GPU使用情况 .

我的问题是,是什么决定了GPU的使用?或者,为什么GPU使用率不是100%?这个问题背后的原因不仅与代码的低效率有关,还与成本(3.06美元/小时)有关 . 我想知道是否还有更多可以做的事情来最大化GPU使用率 .

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

1 回答

  • 2

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

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

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

    如果您不需要大量并行化,则需要使用Google提供的_18452_中提到的架构,如_18451_ .

    Summary

    并行度分别为 . 模型的GPU加速在很大程度上取决于模型本身的架构 . 对于像RNN这样的一些架构,并行化只能在有限的程度上实现 .

    Edit:

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

    当增加内部单元数量时,应该期望GPU使用率上升,将输入传递到隐藏层的矩阵操作可以很好地并行化 .

    添加图层是不同的,你有相同的问题导致RNN在GPU上变慢 . 要计算下一层,您需要已经拥有上一层的结果 . 所以你需要一个接一个地计算一个层,不可能同时计算所有层 .

    这就是理论 - 实际上,您可能会看到GPU使用方面的一些细微差别,具体取决于框架的实际实现 .

相关问题