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

keras 多gpu并行運行案例

 更新時間:2020年06月10日 15:07:16   作者:xingkongyidian  
這篇文章主要介紹了keras 多gpu并行運行案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一、多張gpu的卡上使用keras

有多張gpu卡時,推薦使用tensorflow 作為后端。使用多張gpu運行model,可以分為兩種情況,一是數據并行,二是設備并行。

二、數據并行

數據并行將目標模型在多個設備上各復制一份,并使用每個設備上的復制品處理整個數據集的不同部分數據。

利用multi_gpu_model實現

keras.utils.multi_gpu_model(model, gpus=None, cpu_merge=True, cpu_relocation=False)

具體來說,該功能實現了單機多 GPU 數據并行性。 它的工作原理如下:

將模型的輸入分成多個子批次。

在每個子批次上應用模型副本。 每個模型副本都在專用 GPU 上執(zhí)行。

將結果(在 CPU 上)連接成一個大批量。

例如, 如果你的 batch_size 是 64,且你使用 gpus=2, 那么我們將把輸入分為兩個 32 個樣本的子批次, 在 1 個 GPU 上處理 1 個子批次,然后返回完整批次的 64 個處理過的樣本。

參數

model: 一個 Keras 模型實例。為了避免OOM錯誤,該模型可以建立在 CPU 上, 詳見下面的使用樣例。

gpus: 整數 >= 2 或整數列表,創(chuàng)建模型副本的 GPU 數量, 或 GPU ID 的列表。

cpu_merge: 一個布爾值,用于標識是否強制合并 CPU 范圍內的模型權重。

cpu_relocation: 一個布爾值,用來確定是否在 CPU 的范圍內創(chuàng)建模型的權重。如果模型沒有在任何一個設備范圍內定義,您仍然可以通過激活這個選項來拯救它。

返回

一個 Keras Model 實例,它可以像初始 model 參數一樣使用,但它將工作負載分布在多個 GPU 上。

例子

import tensorflow as tf
from keras.applications import Xception
from keras.utils import multi_gpu_model
import numpy as np

num_samples = 1000
height = 224
width = 224
num_classes = 1000

# 實例化基礎模型(或者「模版」模型)。
# 我們推薦在 CPU 設備范圍內做此操作,
# 這樣模型的權重就會存儲在 CPU 內存中。
# 否則它們會存儲在 GPU 上,而完全被共享。
with tf.device('/cpu:0'):
 model = Xception(weights=None,
   input_shape=(height, width, 3),
   classes=num_classes)

# 復制模型到 8 個 GPU 上。
# 這假設你的機器有 8 個可用 GPU。
parallel_model = multi_gpu_model(model, gpus=8)
parallel_model.compile(loss='categorical_crossentropy',
   optimizer='rmsprop')

# 生成虛擬數據
x = np.random.random((num_samples, height, width, 3))
y = np.random.random((num_samples, num_classes))

# 這個 `fit` 調用將分布在 8 個 GPU 上。
# 由于 batch size 是 256, 每個 GPU 將處理 32 個樣本。
parallel_model.fit(x, y, epochs=20, batch_size=256)

# 通過模版模型存儲模型(共享相同權重):
model.save('my_model.h5')

注意:

要保存多 GPU 模型,請通過模板模型(傳遞給 multi_gpu_model 的參數)調用 .save(fname) 或 .save_weights(fname) 以進行存儲,而不是通過 multi_gpu_model 返回的模型。

即要用model來保存,而不是parallel_model來保存。

使用ModelCheckpoint() 遇到的問題

使用ModelCheckpoint()會遇到下面的問題:

TypeError: can't pickle ...(different text at different situation) objects

這個問題和保存問題類似,ModelCheckpoint() 會自動調用parallel_model.save()來保存,而不是model.save(),因此我們要自己寫一個召回函數,使得ModelCheckpoint()用model.save()。

修改方法:

class ParallelModelCheckpoint(ModelCheckpoint):
 def __init__(self,model,filepath, monitor='val_loss', verbose=0,
   save_best_only=False, save_weights_only=False,
   mode='auto', period=1):
 self.single_model = model
 super(ParallelModelCheckpoint,self).__init__(filepath, monitor, verbose,save_best_only, save_weights_only,mode, period)

 def set_model(self, model):
 super(ParallelModelCheckpoint,self).set_model(self.single_model)

checkpoint = ParallelModelCheckpoint(original_model)

ParallelModelCheckpoint調用的時候,model應該為原來的model而不是parallel_model。

EarlyStopping 沒有此類問題

二、設備并行

設備并行適用于多分支結構,一個分支用一個gpu。

這種并行方法可以通過使用TensorFlow device scopes實現,下面是一個例子:

# Model where a shared LSTM is used to encode two different sequences in parallel
input_a = keras.Input(shape=(140, 256))
input_b = keras.Input(shape=(140, 256))

shared_lstm = keras.layers.LSTM(64)

# Process the first sequence on one GPU
with tf.device_scope('/gpu:0'):
 encoded_a = shared_lstm(tweet_a)
# Process the next sequence on another GPU
with tf.device_scope('/gpu:1'):
 encoded_b = shared_lstm(tweet_b)

# Concatenate results on CPU
with tf.device_scope('/cpu:0'):
 merged_vector = keras.layers.concatenate([encoded_a, encoded_b],
      axis=-1)

三、分布式運行

keras的分布式是利用TensorFlow實現的,要想完成分布式的訓練,你需要將Keras注冊在連接一個集群的TensorFlow會話上:

server = tf.train.Server.create_local_server()
sess = tf.Session(server.target)

from keras import backend as K
K.set_session(sess)

以上這篇keras 多gpu并行運行案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • anaconda如何查看并管理python環(huán)境

    anaconda如何查看并管理python環(huán)境

    這篇文章主要介紹了anaconda如何查看并管理python環(huán)境,Anaconda是Python的一個開源發(fā)行版本,主要面向科學計算,預裝了豐富強大的庫。使用Anaconda可以輕松管理多個版本的Python環(huán)境,需要的朋友可以參考下
    2019-07-07
  • Python?return函數返回值類型和幫助函數使用教程

    Python?return函數返回值類型和幫助函數使用教程

    這篇文章主要為大家介紹了Python?return函數返回值類型和幫助函數使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python利用yield?form實現異步協(xié)程爬蟲

    Python利用yield?form實現異步協(xié)程爬蟲

    這篇文章主要為大家詳細介紹了Python如何利用yield?form實現異步協(xié)程爬蟲。其實這是很古老的用法了,現在大多用的aiohttp庫實現,這篇記錄僅僅用做個人的協(xié)程底層實現的學習,希望對大家有所幫助
    2022-11-11
  • Pandas實現DataFrame按行求百分數(比例數)

    Pandas實現DataFrame按行求百分數(比例數)

    今天小編就為大家分享一篇Pandas實現DataFrame按行求百分數(比例數),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 遍歷字典的8種方法總結

    Python 遍歷字典的8種方法總結

    遍歷字典是Python中常見的操作,可以很方便的訪問字典中的鍵和值,以執(zhí)行各種任務,本文將介紹Python中遍歷字典的8種方法,包括for循環(huán)、字典方法和推導式等,需要的朋友可以參考下
    2023-10-10
  • python中np.where的用法

    python中np.where的用法

    np.where() 是 NumPy 庫中的一個函數,用于根據條件從多個選擇中選擇元素,本文主要介紹了python中np.where的用法,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Python操作csv文件實例詳解

    Python操作csv文件實例詳解

    這篇文章主要為大家詳細介紹了Python操作csv文件的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Python在線和離線安裝第三方庫的方法

    Python在線和離線安裝第三方庫的方法

    這篇文章主要介紹了Python在線和離線安裝第三方庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • PyQT5之使用QT?Designer創(chuàng)建基本窗口方式

    PyQT5之使用QT?Designer創(chuàng)建基本窗口方式

    這篇文章主要介紹了PyQT5之使用QT?Designer創(chuàng)建基本窗口方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • pygame學習筆記(5):游戲精靈

    pygame學習筆記(5):游戲精靈

    這篇文章主要介紹了pygame學習筆記(5):游戲精靈,本文講解了什么是精靈、sprite中主要且常用的變量、建立一個簡單的精靈、學習精靈組、動畫等內容,需要的朋友可以參考下
    2015-04-04

最新評論