当配置为使用GPU时,Theano实际上是否使用了100%的CPU?

时间:2016-09-27 18:02:09

标签: theano

我注意到当我配置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 |
+-----------------------------------------------------------------------------+

1 个答案:

答案 0 :(得分:0)

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

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

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