一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Keras - GPU ID 和顯存占用設定步驟

Keras - GPU ID 和顯存占用設定步驟

2020-06-22 11:27AIHGF Python

這篇文章主要介紹了Keras - GPU ID 和顯存占用設定步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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

實際中發現, Keras 還可以限制 GPU 顯存占用量.

這里涉及到的內容有:

GPU ID 設定

GPU 顯存占用按需分配

GPU 顯存占用限制

GPU 顯存優化

1. GPU ID 設定

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

這里將 GPU ID 設為 1.

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

2. GPU 顯存占用按需分配

?
1
2
3
4
5
6
7
8
9
#! -- coding: utf-8 --*--
import tensorflow as tf
import keras.backend.tensorflow_backend as ktf
 
# GPU 顯存自動調用
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
session = tf.Session(config=config)
ktf.set_session(session)

3. GPU 顯存占用限制

?
1
2
3
4
5
6
7
8
9
#! -- coding: utf-8 --*--
import tensorflow as tf
import keras.backend.tensorflow_backend as ktf
 
# 設定 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 )

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

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

4. GPU ID 設定與顯存按需分配

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#! -- 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最小化顯存占用比例/數據Batch化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! -- coding: utf-8 --*--
 
# 將內存中的數據分批(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數據到內存
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 數據 Batch 化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#! -- 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指定運行顯卡以及關閉session空出顯存

Keras - GPU ID 和顯存占用設定步驟

Step1: 查看GPU

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

Step2: 導入模塊

導入必要的模塊

?
1
2
3
4
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: 創建會話,指定顯存使用百分比

創建tensorflow的Session

?
1
2
3
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.1 # 設定顯存的利用率
set_session(tf.Session(config=config))

Step5: 釋放顯存

確保Volatile GPU-Util顯示0%

程序運行完畢,關閉Session

?
1
2
3
4
K.clear_session() # 方法一:如果不關閉,則會一直占用顯存
 
cuda.select_device(1) # 方法二:選擇GPU1
cuda.close() #關閉選擇的GPU

Keras - GPU ID 和顯存占用設定步驟

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

原文鏈接:https://blog.csdn.net/zziahgf/article/details/80226129

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产性tv国产精品 | 美女脱小内内给男生摸j | 亚洲精品影视 | 国产乱子伦真实china | 国产91无毒不卡在线观看 | 日韩视频第二页 | 精品图区 | 欧美最猛性xxxxx短视频 | 娇小异类videos | 99精品国产自在现线观看 | 处女呦呦 | 免费在线观看伦理片 | 很很草| 亚洲AV无码A片在线观看蜜桃 | 国产毛片在线高清视频 | 国产美女久久精品香蕉69 | 91私密保健女子养生spa | 美女任你模 | 国产日韩欧美在线一区二区三区 | 欧美成人免费草草影院视频 | 日本色淫| 天天色天天综合网 | 免费国产成人 | 免费亚洲一区 | 506070老熟肥妇bbwxx视频 500第一精品 | 97色伦在线观看 | 国产女主播在线播放一区二区 | 亚洲欧美色综合图小说 | 精品国产一区二区三区在线观看 | 亚洲 欧美 中文 日韩 视频 | 国产va欧美va在线观看 | 艹出白浆 | 高清免费毛片 | 亚洲国产精品网 | 精品久久久久久亚洲 | 我和岳的性事小说 | 国产老熟 | 天天做天天爰夜夜爽 | 18日本人 | 国产一级特黄在线播放 | 色综合视频一区二区三区 |