如何验证GPU的使用情况?

How to verify the usage of the GPU?

如何验证 CNTK 是否正在使用 GPU?我已经在我的机器上安装了 CNTK-2-0-beta7-0-Windows-64bit-GPU-1bit-SGD 二进制文件。但是,当我尝试 运行 从 Python:

from cntk.device import set_default_device, gpu
set_default_device(gpu(0))

我得到:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-8-eca77b3090be> in <module>()
      1 from cntk.device import set_default_device, gpu
----> 2 set_default_device(gpu(0))

C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py34\lib\site-packages\cntk\device.py in gpu(device_id)
     74         :class:`~cntk.device.DeviceDescriptor`: GPU device descriptor
     75     '''
---> 76     return cntk_py.DeviceDescriptor.gpu_device(device_id)
     77 
     78 def use_default_device():

ValueError: Specified GPU device id (0) is invalid.

今天补充一些信息:

这是运行宁NVidia_smi.exe

的结果
C:\Program Files\NVIDIA Corporation\NVSMI>nvidia-smi.exe
Thu Jan 12 20:38:30 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 369.61                 Driver Version: 369.61                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GPU        WDDM  | 0000:01:00.0     Off |                  N/A |
| N/A   51C    P0     2W /  N/A |    864MiB /  1024MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

在 Jupyter Notebook 中重启内核后,我得到:

import cntk as C
if C.device.default().type() == 0:
    print('running on CPU')
else:
    print('running on GPU')

running on CPU

然而今天我能够运行:

from cntk.device import set_default_device, gpu
set_default_device(gpu(0))

import cntk as C
if C.device.default().type() == 0:
    print('running on CPU')
else:
    print('running on GPU')

running on GPU

GPU 应该是 GPU 机器上的默认值,还是需要明确设置?

这听起来像是间歇性故障。这可能发生在某些笔记本电脑上,例如 Surface Book,它有两个 GPU,一个来自 NVIDIA,一个集成的,并且笔记本电脑关闭了 NVIDIA GPU 以节省能源,例如当电池 运行 时。

关于默认行为,默认情况下 CNTK 将选择最佳可用设备,如果它是 GPU,它将锁定它,因此其他进程无法使用它。如果您明确使用 set_default_device(gpu(0)),则 GPU 不会被锁定,其他进程可以使用它。