激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费一区二区三区 | 91精品国| 久久精品99久久久久久2456 | 欧美中文字幕一区二区三区亚洲 | 久久久免费观看完整版 | 亚洲一区二区在线 | 国产亚洲精品yxsp | 双性精h调教灌尿打屁股的文案 | 美女扒开胸罩给男生看视频 | 精品一区二区三区在线观看视频 | 国人精品视频在线观看 | 国产精品久久久久久久av | 一级做a爱片性色毛片 | 欧美激情性色生活片在线观看 | 夜夜夜操操操 | 国产精品视频海角社区88 | 亚洲第一成人在线视频 | 免费啪视频在线观看 | 久久久久久片 | 天天干天天透 | 久久综合一区二区 | www国产成人免费观看视频,深夜成人网 | 蜜桃91麻豆 | 久久成人动漫 | 成人精品一区二区三区中文字幕 | 欧美成人精品一区 | 视频一区 在线 | 欧美福利视频一区二区三区 | 黄色片快播 | 久久伊 | 成人久久久久久久久 | 国产91精品一区二区麻豆亚洲 | 免费看污视频在线观看 | 国产一区二区三区四区波多野结衣 | hdhdhd79xxxxх | 精品在线一区二区三区 | 13一14毛片免费看 | 中文字幕精品在线观看 | 一日本道久久久精品国产 | 亚洲网站一区 | 丰满年轻岳中文字幕一区二区 |