如何检查 dlib 是否使用 GPU?

rah*_*ddy 5 face-recognition python-3.x dlib tensorflow

我的机器有 Geforce 940mx GDDR5 GPU。

我已经安装了运行 GPU 加速 dlib(具有 GPU 支持)的所有要求:

  1. CUDA 9.0 工具包,包含来自https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal 的所有 3 个补丁更新

  2. cuDNN 7.1.4

然后我在 Github 上克隆 dlib/davisKing 存储库以编译具有 GPU 支持的 dlib 后,我执行了以下所有命令:

$ git clone https://github.com/davisking/dlib.git
$ cd dlib
$ mkdir build
$ cd build
$ cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .
$ cd ..
$ python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA
Run Code Online (Sandbox Code Playgroud)

现在我怎么可能检查/确认 dlib(或其他库依赖于 dlib,如 Adam Geitgey 的 face_recognition)是否在 python shell/Anaconda(jupyter Notebook)中使用 GPU?

小智 9

除了使用命令的先前答案,

dlib.DLIB_USE_CUDA
Run Code Online (Sandbox Code Playgroud)

有一些替代方法可以确保 dlib 是否确实在使用您的 GPU。

检查它的最简单方法是检查 dlib 是否识别您的 GPU。

import dlib.cuda as cuda
print(cuda.get_num_devices())
Run Code Online (Sandbox Code Playgroud)

如果设备数量 >= 1,则 dlib 可以使用您的设备。

另一个有用的技巧是运行您的 dlib 代码并同时运行

$ nvidia-smi
Run Code Online (Sandbox Code Playgroud)

这应该为您提供完整的 GPU 利用率信息,您可以在其中分别查看总利用率和每个进程的内存使用情况。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48                 Driver Version: 410.48                    |
|-------------------------------+----------------------+----------------------+
| 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 1070    Off  | 00000000:01:00.0  On |                  N/A |
|  0%   52C    P2    36W / 151W |    763MiB /  8117MiB |      5%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1042      G   /usr/lib/xorg/Xorg                            18MiB |
|    0      1073      G   /usr/bin/gnome-shell                          51MiB |
|    0      1428      G   /usr/lib/xorg/Xorg                           167MiB |
|    0      1558      G   /usr/bin/gnome-shell                         102MiB |
|    0      2113      G   ...-token=24AA922604256065B682BE6D9A74C3E1    33MiB |
|    0      3878      C   python                                       385MiB |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

在某些情况下,进程框可能会显示“不支持进程”之类的内容,这并不意味着您的 GPU 无法运行代码,但它不仅支持此类日志记录。

  • 出于某种原因,我发现即使在没有 GPU 的机器上,`print(cuda.get_num_devices())` 也会返回 1。奇怪的是,`dlib.DLIB_USE_CUDA` 在非 GPU 框 (False) 和 GPU 框 (True) 上返回预期的默认值。 (3认同)

Dav*_*ing 4

如果 dlib.DLIB_USE_CUDA 为 true 则它正在使用 cuda,如果为 false 则不是。

顺便说一句,这些步骤没有任何作用,并且不需要使用 python:

$ mkdir build
$ cd build
$ cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .
Run Code Online (Sandbox Code Playgroud)

只需运行 setup.py 即可。