欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Keras - GPU ID 和顯存占用設(shè)定步驟

 更新時間:2020年06月22日 10:36:28   作者:AIHGF  
這篇文章主要介紹了Keras - GPU ID 和顯存占用設(shè)定步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

初步嘗試 Keras (基于 Tensorflow 后端)深度框架時, 發(fā)現(xiàn)其對于 GPU 的使用比較神奇, 默認竟然是全部占滿顯存, 1080Ti 跑個小分類問題, 就一下子滿了. 而且是服務(wù)器上的兩張 1080Ti.

服務(wù)器上的多張 GPU 都占滿, 有點浪費性能.

因此, 需要類似于 Caffe 等框架的可以設(shè)定 GPU ID 和顯存自動按需分配.

實際中發(fā)現(xiàn), Keras 還可以限制 GPU 顯存占用量.

這里涉及到的內(nèi)容有:

GPU ID 設(shè)定

GPU 顯存占用按需分配

GPU 顯存占用限制

GPU 顯存優(yōu)化

1. GPU ID 設(shè)定

#! -- coding: utf-8 --*--
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

這里將 GPU ID 設(shè)為 1.

GPU ID 從 0 開始, GPUID=1 即表示第二塊 GPU.

2. GPU 顯存占用按需分配

#! -- coding: utf-8 --*--
import tensorflow as tf
import keras.backend.tensorflow_backend as ktf

# GPU 顯存自動調(diào)用
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
session = tf.Session(config=config)
ktf.set_session(session)

3. GPU 顯存占用限制

#! -- coding: utf-8 --*--
import tensorflow as tf
import keras.backend.tensorflow_backend as ktf

# 設(shè)定 GPU 顯存占用比例為 0.3
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
session = tf.Session(config=config)
ktf.set_session(session )

這里雖然是設(shè)定了 GPU 顯存占用的限制比例(0.3), 但如果訓(xùn)練所需實際顯存占用超過該比例, 仍能正常訓(xùn)練, 類似于了按需分配.

設(shè)定 GPU 顯存占用比例實際上是避免一定的顯存資源浪費.

4. GPU ID 設(shè)定與顯存按需分配

#! -- coding: utf-8 --*--
import os
import tensorflow as tf
import keras.backend.tensorflow_backend as ktf

# GPU 顯存自動分配
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
#config.gpu_options.per_process_gpu_memory_fraction = 0.3
session = tf.Session(config=config)
ktf.set_session(session)

# 指定GPUID, 第一塊GPU可用
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

5. 利用fit_generator最小化顯存占用比例/數(shù)據(jù)Batch化

#! -- coding: utf-8 --*--

# 將內(nèi)存中的數(shù)據(jù)分批(batch_size)送到顯存中進行運算
def generate_arrays_from_memory(data_train, labels_train, batch_size):
  x = data_train
  y=labels_train
  ylen=len(y)
  loopcount=ylen // batch_size
  while True:
    i = np.random.randint(0,loopcount)
    yield x[i*batch_size:(i+1)*batch_size],y[i*batch_size:(i+1)*batch_size]

# load數(shù)據(jù)到內(nèi)存
data_train=np.loadtxt("./data_train.txt")
labels_train=np.loadtxt('./labels_train.txt')
data_val=np.loadtxt('./data_val.txt')
labels_val=np.loadtxt('./labels_val.txt')

hist=model.fit_generator(generate_arrays_from_memory(data_train,
                           labels_train,
                           batch_size),
             steps_per_epoch=int(train_size/bs),
             epochs=ne,
             validation_data=(data_val,labels_val),
             callbacks=callbacks )

5.1 數(shù)據(jù) Batch 化

#! -- coding: utf-8 --*--

def process_line(line): 
  tmp = [int(val) for val in line.strip().split(',')] 
  x = np.array(tmp[:-1]) 
  y = np.array(tmp[-1:]) 
  return x,y 

def generate_arrays_from_file(path,batch_size): 
  while 1: 
    f = open(path) 
    cnt = 0 
    X =[] 
    Y =[] 
    for line in f: 
      # create Numpy arrays of input data 
      # and labels, from each line in the file 
      x, y = process_line(line) 
      X.append(x) 
      Y.append(y) 
      cnt += 1 
      if cnt==batch_size: 
        cnt = 0 
        yield (np.array(X), np.array(Y)) 
        X = [] 
        Y = [] 
  f.close() 

補充知識:Keras+Tensorflow指定運行顯卡以及關(guān)閉session空出顯存

Step1: 查看GPU

watch -n 3 nvidia-smi #在命令行窗口中查看當(dāng)前GPU使用的情況, 3為刷新頻率

Step2: 導(dǎo)入模塊

導(dǎo)入必要的模塊

import os
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
from numba import cuda

Step3: 指定GPU

程序開頭指定程序運行的GPU

os.environ['CUDA_VISIBLE_DEVICES'] = '1' # 使用單塊GPU,指定其編號即可 (0 or 1or 2 or 3)
os.environ['CUDA_VISIBLE_DEVICES'] = '1,2,3' # 使用多塊GPU,指定其編號即可 (引號中指定即可)

Step4: 創(chuàng)建會話,指定顯存使用百分比

創(chuàng)建tensorflow的Session

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.1 # 設(shè)定顯存的利用率
set_session(tf.Session(config=config))

Step5: 釋放顯存

確保Volatile GPU-Util顯示0%

程序運行完畢,關(guān)閉Session

K.clear_session() # 方法一:如果不關(guān)閉,則會一直占用顯存

cuda.select_device(1) # 方法二:選擇GPU1
cuda.close() #關(guān)閉選擇的GPU

以上這篇Keras - GPU ID 和顯存占用設(shè)定步驟就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用Pytorch完成圖像分類任務(wù)詳解

    如何使用Pytorch完成圖像分類任務(wù)詳解

    如果你剛剛開始學(xué)習(xí) PyTorch,并想學(xué)習(xí)如何做一些基本的圖像分類,可以看看本文,這篇文章主要給大家介紹了關(guān)于如何使用Pytorch完成圖像分類任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 關(guān)于Tensorflow 模型持久化詳解

    關(guān)于Tensorflow 模型持久化詳解

    今天小編就為大家分享一篇關(guān)于Tensorflow 模型持久化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 基于Python編寫一個根據(jù)姓名測性別的小程序

    基于Python編寫一個根據(jù)姓名測性別的小程序

    這篇文章主要為大家介紹了如何利用Python編寫一款根據(jù)中文名能猜測性別的一款界面化的小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03
  • Python如何使用logging為Flask增加logid

    Python如何使用logging為Flask增加logid

    這篇文章主要介紹了Python如何使用logging為Flask增加logid,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python實現(xiàn)批量nii文件轉(zhuǎn)換為png圖像

    python實現(xiàn)批量nii文件轉(zhuǎn)換為png圖像

    這篇文章主要介紹了python實現(xiàn)批量nii文件轉(zhuǎn)換為png圖像,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 7個關(guān)于Python的經(jīng)典基礎(chǔ)案例

    7個關(guān)于Python的經(jīng)典基礎(chǔ)案例

    這篇文章主要給大家分享 7個關(guān)于Python的經(jīng)典基礎(chǔ)案例,列表排序、調(diào)換字典鍵值、刪除列表中的重復(fù)元素、輸出質(zhì)數(shù)、判斷是一年中第幾天、猜數(shù)字、進制轉(zhuǎn)換;,需要的朋友可以參考一下
    2021-11-11
  • Python基礎(chǔ)之語法錯誤和異常詳解

    Python基礎(chǔ)之語法錯誤和異常詳解

    Python有兩種錯誤很容易辨認:語法錯誤和異常.本文就給大家詳細介紹一下Python錯誤和異常,對正在學(xué)習(xí)python的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • 盤點Python中讀取和提取JSON文件的4種方法

    盤點Python中讀取和提取JSON文件的4種方法

    JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,Python中提供了多種方式來讀取和處理JSON文件,本文將詳細介紹四種常見的方法,希望對大家有所幫助
    2024-03-03
  • Python基礎(chǔ)之高級變量類型實例詳解

    Python基礎(chǔ)之高級變量類型實例詳解

    這篇文章主要介紹了Python基礎(chǔ)之高級變量類型,結(jié)合實例形式詳細分析了Python元組、字典、字符串、公共方法以及遍歷、切片等常見操作技巧,需要的朋友可以參考下
    2020-01-01
  • python 檢測圖片是否有馬賽克

    python 檢測圖片是否有馬賽克

    這篇文章主要介紹了python 如何檢測圖片是否有馬賽克,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下
    2020-12-12

最新評論