如何检查 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?的主要内容,如果未能解决你的问题,请参考以下文章