日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

batchsize和数据量设置比例_Keras - GPU ID 和显存占用设定步骤

發(fā)布時(shí)間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 batchsize和数据量设置比例_Keras - GPU ID 和显存占用设定步骤 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

服務(wù)器上的多張 GPU 都占滿, 有點(diǎn)浪費(fèi)性能.

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

實(shí)際中發(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 顯存自動(dòng)調(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)練所需實(shí)際顯存占用超過該比例, 仍能正常訓(xùn)練, 類似于了按需分配.

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

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

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

import os

import tensorflow as tf

import keras.backend.tensorflow_backend as ktf

# GPU 顯存自動(dòng)分配

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)送到顯存中進(jìn)行運(yùn)算

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()

補(bǔ)充知識:Keras+Tensorflow指定運(yùn)行顯卡以及關(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

程序開頭指定程序運(yùn)行的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%

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

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

cuda.select_device(1) # 方法二:選擇GPU1

cuda.close() #關(guān)閉選擇的GPU

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

總結(jié)

以上是生活随笔為你收集整理的batchsize和数据量设置比例_Keras - GPU ID 和显存占用设定步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。