Linux GPU的使用


1,nvidia-smi指令解析

 Nvidia自帶了一個nvidia-smi的命令行工具,會顯示顯存使用情況:

nvidia -smi

   如圖,其可以在終端打印出GPU的各種屬性。

解析: 

  第一行Driver Version :384.81  表示我們使用的驅動是384.81

  第二行中:第一行表示GPU序號,名字,Persisitence-M(持續模式狀態),如我中有一個GPU序號為0;名字為 Tesla 系列的P100-PCIE;持續模式的狀態,持續模式雖然耗能大,但是在新的GPU應用啟動時,花費的時間更少,這里顯示的是off的狀態。 

  第一欄Fan:N/A是風扇的轉速,從0到100%之間變動。有的nvidia設備如筆記本,tesla系列不是主動散熱的可能顯示不了轉速
  第二欄Temp:溫度,35攝氏度
  第三欄Perf:是性能狀態,從P0到P12,P0表示最大性能,P12表示最小性能 
  第四欄中Pwr表示能耗,29瓦
  第五欄中Bus-Id是表示GPU總線的東西
  第六欄中Disp.A是DisPlay Active ,表示GPU是否有初始化
  下方的Memory-Usage表示顯存的使用率:共16GB 我已經使用了0MB
  第七欄Volatile GPU-Util表示GPU的利用率
  第八欄Uncorr.ECC是表示ECC的相關東西,ECC即 Error Correcting Code 錯誤檢查和糾正,在服務器和工作站上的內存中才有的技術
  再下面是關於進程的相關GPU使用率,如這邊有三個進程對GPU進行了利用,Xorg,compiz和FireFox和各自調用時顯存的使用量

 

Linux查看顯卡信息:

lspci | grep -i vga

使用nvidia GPU可以

lspci |grep -i nvidia

 有GPU的Linux服務器

 

 

沒有GPU的Linux服務器

 

 

2,GPU的使用

  在用TensorFlow深度學習模型訓練中,假設我們在訓練之前沒有指定具體用哪一塊GPU進行訓練,則默認的是選用第0塊GPU用來訓練我們的模型,如果電腦有多塊GPU的話,其他幾塊GPU的也會顯示被占用。

  有些時候,我們希望可以通過自己指定一塊或者幾塊GPU來訓練我們的模型,而不是用這種系統默認的方法。

  下面代碼是默認指定第0塊GPU訓練,但是我們指定了第二塊進行訓練。

# coding: utf-8
import argparse
import os


os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

flags = argparse.ArgumentParser()
flags.add_argument('--gpu', default=0, type=float, help='gpu number')
FLAGS = flags.parse_args()

# 使用GPU
gpun = FLAGS.gpu
os.environ['CUDA_VISIBLE_DEVICES'] = str(gpun)

  我們發現使用GPU的時候,我們在代碼中通過CUDA_VISIBLE_DEVICES來指定,我們可以不用設定外面參數,直接在Python代碼中加入下面兩行即可:

import os
os.environ['CUDA_VISIBLE_DEVICES']='1'

  使用這種方法,在訓練模型的餓時候,只使用了第“1”塊GPU,並且其他幾塊GPU沒有被占用,這就相當於我們在運行程式的時候,將除第”1“塊以外的其他GPU全部屏蔽了,只有第”1“塊GPU對當前運行的程序是可見的。

  同理,如果要指定第“1,2”兩塊GPU來訓練,則上面的代碼可以修改為:

import os

os.environ['CUDA_VISIBLE_DEVICES']='2,3'

  類似的如果還有更多的GPU要指定,都可以仿照上面的代碼進行添加,——顯卡數字中間使用英文逗號隔開即可。

 

  或者我們可以在終端執行py文件的時候通過CUDA_VISIBLE_DEVICES來指定,與上面類似,只不過在代碼外面而已。

CUDA_VISIBLE_DEVICES=1 python train.py

  

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM