如何检查 dlib 是不是正在使用 GPU?

Posted

技术标签:

【中文标题】如何检查 dlib 是不是正在使用 GPU?【英文标题】:How to check if dlib is using GPU or not?如何检查 dlib 是否正在使用 GPU? 【发布时间】:2019-01-12 19:31:35 【问题描述】:

我的机器有 Geforce 940mx GDDR5 GPU。

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

    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 个补丁更新

    cuDNN 7.1.4

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

$ 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

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

【问题讨论】:

【参考方案1】:

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

dlib.DLIB_USE_CUDA

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

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

import dlib.cuda as cuda
print(cuda.get_num_devices())

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

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

$ nvidia-smi

这应该为您提供完整的 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 |
+-----------------------------------------------------------------------------+

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

【讨论】:

出于某种原因,我发现 print(cuda.get_num_devices()) 即使在没有 GPU 的机器上也会返回 1。奇怪的是,dlib.DLIB_USE_CUDA 在非 GPU 盒 (False) 和 GPU 盒 (True) 上返回预期的默认值。【参考方案2】:

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

顺便说一句,这些步骤什么都不做,也不需要使用 python:

$ mkdir build
$ cd build
$ cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .

只需运行 setup.py 即可。

【讨论】:

dlib.DLIB_USE_CUDA 返回 False,这意味着它没有使用 GPU。那么我在上述步骤中做错了什么,为什么它没有使用 GPU。 @Davis King,你有什么暗示这可能是什么问题 而且你提到的命令(上面)不是必需的,为什么我们不需要在编译setup.py之前构建dlib的c++文件(使用cmake) 这些命令是否足以编译(重建)python API: git clone github.com/davisking/dlib.git cd dlib python install setup.py --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA --clean 是的。 setup.py 做所有事情。这就是它的工作。阅读它的输出。它会告诉你它在做什么以及为什么。【参考方案3】:

以下 sn-ps 已被简化为使用或检查 dlib 是否使用 GPU。

首先,检查 dlib 是否识别您的 GPU。 import dlib.cuda as cuda; print(cuda.get_num_devices());

其次,dlib.DLIB_USE_CUDA 如果它是 false,只需通过以下方式允许它使用 GPU 支持 dlib.DLIB_USE_CUDA = True.

【讨论】:

你确定dlib.DLIB_USE_CUDA = True 足以让 dlib 使用 GPU 支持吗?你能提供一个关于这个的链接吗? 我怀疑dlib.DLIB_USE_CUDA是否可以显式设置

以上是关于如何检查 dlib 是不是正在使用 GPU?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 keras 是不是使用 gpu 版本的 tensorflow?

如何安装dlib gpu版本

如何检查我的系统上是不是有可用的 NVIDIA GPU?

如何使用 gpu 运行 dlib 人脸识别

使用 GPU 支持安装 dlib 时出错

为啥我在安装 dlib 时收到此错误“检查日志以获取完整的命令输出”?