【问题标题】:Does Theano actually use 100% of the CPU when it is configured to use the GPU?当 Theano 配置为使用 GPU 时,它是否真的使用了 100% 的 CPU?
【发布时间】:2017-04-21 16:56:17
【问题描述】:

我注意到,当我将 Theano 配置为使用 GPU 并运行一些脚本时,CPU 的使用率约为 100%:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5927 jjjjjj    20   0  0.259t 0.025t  83228 R 100.2 20.2  33025:42 python
 8259 jjjjjj    20   0  0.239t 5.303g 102876 R 100.2  4.2   8209:45 python
 7791 jjjjjj    20   0  0.239t 5.086g 102872 R  99.8  4.0   8209:36 python
 7761 jjjjjj    20   0  0.239t 5.193g 104604 R  99.5  4.1   7267:47 python

这是否意味着 CPU 是瓶颈?即,我是否应该推断如果我用频率更高的 CPU 替换 CPU,脚本会运行得更快?或者可能是瓶颈在其他地方并且 CPU 正在积极等待?如果两者都有可能,我怎么知道哪一个是瓶颈?

这是nvidia-smi的输出:

Tue Sep 27 13:55:13 2016
+------------------------------------------------------+
| NVIDIA-SMI 352.63     Driver Version: 352.63         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX TIT...  Off  | 0000:02:00.0     Off |                  N/A |
| 32%   73C    P2    95W / 250W |    207MiB / 12287MiB |     45%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX TIT...  Off  | 0000:03:00.0     Off |                  N/A |
| 32%   72C    P2    94W / 250W |    182MiB / 12287MiB |     40%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX TIT...  Off  | 0000:82:00.0     Off |                  N/A |
| 33%   73C    P2    93W / 250W |    207MiB / 12287MiB |     43%      Default |
+-------------------------------+----------------------+----------------------+
|   3  GeForce GTX TIT...  Off  | 0000:83:00.0     Off |                  N/A |
| 42%   81C    P2   148W / 250W |  11872MiB / 12287MiB |     79%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      8259    C   python                                         157MiB |
|    1      7791    C   python                                         157MiB |
|    2      7761    C   python                                         157MiB |
|    3      5927    C   python                                       11847MiB |
+-----------------------------------------------------------------------------+

【问题讨论】:

    标签: theano


    【解决方案1】:

    Theano 异步执行所有 GPU 操作,这意味着函数调用不会等待操作完成。在主机和 GPU 之间传输数据之前需要同步。默认情况下,同步是通过在繁忙循环中轮询 GPU 来执行的。因此,操作系统将始终显示 100 % 的 CPU 使用率,即使程序受 GPU 限制。

    设置gpuarray.sched=multi 标志会导致CPU 线程在等待GPU 完成计算时进入睡眠状态。您可以使用它来检查您的程序是否实际上受 CPU 或 GPU 限制。唤醒需要多一点时间,但在等待 GPU 时,您的 CPU 可用于其他进程。

    请注意,ps 显示了进程整个生命周期内的 CPU 使用率。因此,如果您的程序在使用 Theano 之前首先在 CPU 上执行某些操作,则显示的 CPU 使用率会很高。您可以使用top -p <PID> 获取当前值。

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 2015-12-24
      • 2017-02-06
      • 1970-01-01
      • 2016-06-11
      • 2021-05-02
      • 2017-10-28
      • 1970-01-01
      • 2013-08-12
      相关资源
      最近更新 更多