在 TensorFlow 中打印 GPU 和 CPU 使用率

Posted

技术标签:

【中文标题】在 TensorFlow 中打印 GPU 和 CPU 使用率【英文标题】:Print GPU and CPU usage in TensorFlow 【发布时间】:2020-02-26 14:39:14 【问题描述】:

我正在 Google Colab 上运行一些 TensorFlow 示例(这样我就可以拥有 GPU),like this one.

有没有办法在代码中打印每个训练步骤的 CPU 和 GPU 使用率,以便查看 GPU 的使用情况以及 CPU 和 GPU 之间的性能差异?

标准 环境中,也许我可以使用 nvidia-smi 来跟踪 GPU 使用情况,但使用笔记本时,我一次只能运行一个单元。

谢谢

【问题讨论】:

【参考方案1】:

我从 Internet 上抓取了一个 sn-p 代码。您可以随时运行 printm 函数。

# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
 process = psutil.Process(os.getpid())
 print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
 print("GPU RAM Free: 0:.0fMB | Used: 1:.0fMB | Util 2:3.0f% | Total 3:.0fMB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

这是我的 Google Colab 的输出:

Gen RAM Free: 12.8 GB  | Proc size: 155.7 MB
GPU RAM Free: 11441MB | Used: 0MB | Util   0% | Total 11441MB

【讨论】:

执行过程中好像没有改变值,输出总是一样的【参考方案2】:

您需要启动一个线程来为您打印此内容。当这个线程正在运行时,您只会在其他单元格运行时看到输出。

代码:

!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os, time
import GPUtil as GPU

GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def worker():
  while True:
    process = psutil.Process(os.getpid())
    print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available `enter code here`), " I Proc size: " + humanize.naturalsize( process.memory_info().rss))
    print("GPU RAM Free: 0:.0fMB | Used: 1:.0fMB | Util 2:3.0f% | Total 3:.0fMB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
    time.sleep(6)

import threading
t = threading.Thread(target=worker, name='Monitor')
t.start()

测试:

【讨论】:

以上是关于在 TensorFlow 中打印 GPU 和 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow GPU:cudnn 是可选的吗?无法打开 CUDA 库 libcudnn.so

Keras Gpu:配置

tensorflow只能在装有gpu的机器上运行

如何使用 tensorflow 在 keras 中禁用 GPU?

tensorflow 在 GPU 内存上存储训练数据

在 TensorFlow 中使用共享 GPU 内存?