caffe (c++接口) 多gpu操作函数 及一些坑的记录

本文记录了在Ubuntu 16.04系统中,使用Caffe进行多GPU操作的步骤,包括如何查看GPU状态、设置GPU模式以及避免GPU内存分配错误。在Caffe::set_mode(Caffe::GPU)后,需要使用Caffe::SetDevice(int gpuid)指定GPU设备,注意setdevice应在setmode之后,并且在多线程环境下要确保每个线程正确设置GPU ID,防止错误。ffmpeg的-loglevel error选项用于减少不必要的输出。

记录一下。

软硬环境 : ubuntu 16.04, Nvidia GTX 1080Ti *2

查看gpu(需要先安装驱动):nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| 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 108...  Off  | 00000000:06:00.0 Off |                  N/A |
| 70%   85C    P2    89W / 250W |   9667MiB / 11170MiB |     75%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:09:00.0 Off |                  N/A |
| 50%   83C    P2   253W / 250W |   5031MiB / 11172MiB |     70%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1204      C   ./build/tools/caffe                         9657MiB |
|    1      1204      C   ./build/tools/caffe                         5021MiB |
+-----------------------------------------------------------------------------+

gpuid:从0开始递增, 我环境里是 0和1

 

gpu模式:  Caffe::set_mode(Caffe::GPU)

gpu选择:Caffe::SetDevice(int gpuid)

此外,上面两条命令 setmode 以及setdevice 在运行后,会自动占用一些显存,所以setdevice 一定是在setmode 之前,不然会默认占用GPUid0的一部分内存。具体原因不明。

此外在多线程下,setdevice 需要特别仔细的检查,每个线程里面设置后一定要归零,调整到想要的gpuid,一不小心就会出错。

 

此外ffmpeg -loglevel error 可以去掉一些多余的输出。

 

ps: www.jonaspku.com

不知道放啥好。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值