系统面板中的图表在 Wandb (PyTorch) 中表示啥

Posted

技术标签:

【中文标题】系统面板中的图表在 Wandb (PyTorch) 中表示啥【英文标题】:What do the charts in the System Panels signify in Wandb (PyTorch)系统面板中的图表在 Wandb (PyTorch) 中表示什么 【发布时间】:2021-05-07 09:38:51 【问题描述】:

我最近开始在我的 PyTorch 脚本中使用 wandb 模块,以确保 GPU 高效运行。但是,我不确定图表的具体含义。

我一直在关注这个链接中的教程,https://lambdalabs.com/blog/weights-and-bias-gpu-cpu-utilization/,被这个情节弄糊涂了:

我不确定 GPU % 和 GPU 内存访问 % 图表。博客中的描述如下:

GPU %:这张图可能是最重要的一张。它跟踪过去采样周期中一个或多个内核在 GPU 上执行的时间百分比。基本上,您希望这接近 100%,这意味着 GPU 一直忙于处理数据。上图有两条曲线。这是因为有两个 GPU,并且只有其中一个(蓝色)用于实验。 Blue GPU 大约 90% 忙,这意味着它还不错,但仍有一些改进的空间。这种次优利用的原因是由于我们在本实验中使用的小批量 (4)。 GPU 经常从其内存中获取少量数据,并且不会使内存总线或 CUDA 内核饱和。稍后我们将看到仅通过增加批量大小来增加这个数字是可能的。

GPU 内存访问百分比:这是一个有趣的问题。它测量过去采样期间读取或写入 GPU 内存的时间百分比。我们应该将这个百分比保持在较低水平,因为您希望 GPU 将大部分时间花在计算上,而不是从其内存中获取数据。在上图中,繁忙的 GPU 有大约 85% 的正常运行时间访问内存。这是非常高的,并导致了一些性能问题。在这里降低百分比的一种方法是增加批量大小,因此数据获取变得更加高效。

我有以下问题:

    上述值的总和不是 100%。看起来我们的 GPU 可以要么花时间在计算上,要么花时间在读/写内存上。这两个值之和怎么会大于100%? 为什么增加批量大小会减少访问 GPU 内存所花费的时间?

【问题讨论】:

2.当你得到一个大批量大小(例如 batch_size=1000,dataset_length=10000)时,GPU 必须在每个 epoch 重新分配内存 10 次。当您的批量大小为 10 时,它必须访问内存 1000 次。而 1000 次的分配时间比 10 次要长。 1. 我猜一个 gpu 可以同时分配和运行内核,但我不确定,这就是为什么我不会把这个作为答案和评论发布 关于问题 1:为什么您认为 GPU 利用率 % 和 GPU 内存访问 % 应该加起来为 100%? 【参考方案1】:

    如果硬件按顺序执行这两个过程,那么 GPU 利用率和 GPU 内存访问应该加起来 100% 是正确的。但是现代硬件不会做这样的操作。 GPU 将在访问内存的同时忙于计算数字。

    GPU% 实际上是 GPU 利用率百分比。我们希望这是 100%。因此,它将在 100% 的时间内完成所需的计算。 GPU 内存访问百分比是 GPU 读取或写入 GPU 内存的时间量。我们希望这个数字很低。如果 GPU 内存访问百分比很高,则在 GPU 可以使用数据进行计算之前可能会有一些延迟。这并不意味着它是一个连续的过程。

    W&B 允许您监控这两个指标并根据它们做出决策。最近我使用tf.data.Dataset 实现了一个数据管道。 GPU 利用率接近 0%,而内存访问也接近 0%。我正在阅读三个不同的图像文件并将它们堆叠起来。这里 CPU 是瓶颈。为了解决这个问题,我通过堆叠图像创建了一个数据集。 ETA 从每 epoch 1 小时缩短到 3 分钟。

从图中可以推断,GPU 的内存访问增加了,而 GPU 利用率接近 100%。 CPU 利用率下降,这是瓶颈。

    这是 Lukas 回答此问题的 nice article。

【讨论】:

以上是关于系统面板中的图表在 Wandb (PyTorch) 中表示啥的主要内容,如果未能解决你的问题,请参考以下文章

wandb(w&b)(weights and biases): 深度学习轻量级可视化工具入门教程

wandb不可缺少的机器学习分析工具

wandb不可缺少的机器学习分析工具

wandb不可缺少的机器学习分析工具

GPU版本pyTorch安装教程(实测,特别详细)

GPU版本pyTorch安装教程(实测,特别详细)