查看GPU占用率以及指定GPU加速程序

我的linux下查看方式:

[root@localhost bonelee]# ./hello2 &
[1] 139743
[root@localhost bonelee]# Hello World from CPU!
!nvHello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!

nvidia-smi 就是这个命令
Mon Jun 27 16:59:23 2022
+-----------------------------------------------------------------------------+
| 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  Tesla P100-PCIE...  Off  | 00000000:3B:00.0 Off |                    0 |
| N/A   48C    P0    31W / 250W |      0MiB / 16276MiB |      3%(占用率)      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
[1]+  Done                    ./hello2

 

为了测试GPU占用率,我写了一个代码:

[root@localhost bonelee]# vi hello2.cu
[root@localhost bonelee]# cat hello2.cu
#include <stdio.h>

__global__ void helloFromGPU (void)
{
    printf("Hello World from GPU!\n");
    while(1) {
        int a = 999;
        int b = 999;
        int c;
        c = a+b*a+a>>b;
    }
}

int main(void)
{
// hello from cpu
printf("Hello World from CPU!\n");

helloFromGPU <<<1, 10>>>();

cudaDeviceReset();

return 0;
}

[root@localhost bonelee]# nvcc hello2.cu  -o hello2
hello2.cu(9): warning: variable "c" was set but never used

hello2.cu(9): warning: variable "c" was set but never used

[root@localhost bonelee]# ./hello2
Hello World from CPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
^Z
[1]+  Stopped                 ./hello2
[root@localhost bonelee]# nvidia-smi
Mon Jun 27 17:12:18 2022
+-----------------------------------------------------------------------------+
| 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  Tesla P100-PCIE...  Off  | 00000000:3B:00.0 Off |                    0 |
| N/A   49C    P0    37W / 250W |    299MiB / 16276MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0    145325      C   ./hello2                                     289MiB |
+-----------------------------------------------------------------------------+

  

可以看到GPU占用率是100%。

注:代码说明,上面一行三对尖括号中的1和10 表明了该function将有10个线程

  

查看GPU占用率以及指定GPU加速程序

GPU占用率查看:

方法一:任务管理器

如图,GPU0和GPU1的占用率如下显示。

 

 

 

方法二:GPU-Z软件

      

下面两个GPU,上面是GPU0,下面是GPU1

sensors会话框里的GPU Load就是占用率

大家可以查看GPU0和GPU1的使用与否和使用率

 

方法三:终端查看

在运行中输入cmd,打开终端

输入cd C:\Program Files\NVIDIA Corporation\NVSMI

回车

输入nvidia-smi

输出为

 

其中GPU下的0和1 指不同GPU,Memory-Usage为占用率

 

为了实时查看,可以输入nvidia-smi.exe -l 3

这样就可以每3秒刷新一次,实时显示了。

 

指定GPU运行程序方法:

第一步:

在程序里写出指定GPU(有两种分配方法):

1、

import os
os.environ["CUDA_VISIBLE_DEVICES"]=‘0’

这样就指定在GPU0下运行程序,如果要指定多个,可以写成os.environ["CUDA_VISIBLE_DEVICES"]=‘0’,‘1’

 

2、(需得是tensorflow)

import tensorflow as tf

tf.device('/gpu=0')

这样就指定在GPU0下运行程序,如果要指定GPU利用率,就添加如下代码: 

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)

sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

 意思是在GPU0下以30%利用率运行程序(实际会偏高一点,但会有控制效果)

 

第二步:

打开新的console,分别在不同console下用不同GPU运行,实现两个程序同时跑。

注意:如果程序不大,也可以在新的console下用同一个GPU运行程序,具体的视GPU占用率而定。

posted @ 2022-06-24 14:49  bonelee  阅读(1305)  评论(0编辑  收藏  举报