1. 程式人生 > >讓keras訓練深度網路時使用多個顯示卡

讓keras訓練深度網路時使用多個顯示卡

1、使用nvidia-smi pmon 檢視linux系統的gpu情況,如下:


顯然是2張顯示卡,如何讓它們都工作呢

2、keras提供了keras.utils import multi_gpu_model使用多個顯示卡的功能:

在原來的model基礎上使用multi_gpu_model函式指定一下gpu個數即可:

model =  multi_gpu_model(model, 2)

完整列子如下(如粗黑色字型描述):

[email protected]:/opt/soft/keras/examples# cat mnist_mlp_multi_gpu.py       

'''Trains a simple deep NN on the MNIST dataset.

Gets to 98.40% test accuracy after 20 epochs
(there is *a lot* of margin for parameter tuning).
2 seconds per epoch on a K520 GPU.
'''

from __future__ import print_function

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
from keras.utils import multi_gpu_model

batch_size = 128
num_classes = 10
epochs = 20

# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')


# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)


model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(num_classes, activation='softmax'))


model = multi_gpu_model(model, 2)
model.summary()


model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])


history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=1,
                    validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

最終執行的結果如下:

[email protected]:/opt/soft/keras/examples# python mnist_mlp_multi_gpu.py 
Using TensorFlow backend.
60000 train samples
10000 test samples
2018-02-17 18:14:41.147652: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-02-17 18:14:41.304376: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2018-02-17 18:14:41.304757: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 
name: Tesla P4 major: 6 minor: 1 memoryClockRate(GHz): 1.1135
pciBusID: 0000:00:07.0
totalMemory: 7.43GiB freeMemory: 7.32GiB
2018-02-17 18:14:41.399113: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2018-02-17 18:14:41.399487: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 1 with properties: 
name: Tesla P4 major: 6 minor: 1 memoryClockRate(GHz): 1.1135
pciBusID: 0000:00:08.0
totalMemory: 7.43GiB freeMemory: 7.32GiB
2018-02-17 18:14:41.399579: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1045] Device peer to peer matrix
2018-02-17 18:14:41.399613: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1051] DMA: 0 1 
2018-02-17 18:14:41.399627: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1061] 0:   Y N 
2018-02-17 18:14:41.399632: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1061] 1:   N Y 
2018-02-17 18:14:41.399650: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla P4, pci bus id: 0000:00:07.0, compute capability: 6.1)
2018-02-17 18:14:41.399663: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:1) -> (device: 1, name: Tesla P4, pci bus id: 0000:00:08.0, compute capability: 6.1)
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
dense_1_input (InputLayer)      (None, 784)          0                                            
__________________________________________________________________________________________________
lambda_1 (Lambda)               (None, 784)          0           dense_1_input[0][0]              
__________________________________________________________________________________________________
lambda_2 (Lambda)               (None, 784)          0           dense_1_input[0][0]              
__________________________________________________________________________________________________
sequential_1 (Sequential)       (None, 10)           669706      lambda_1[0][0]                   
                                                                 lambda_2[0][0]                   
__________________________________________________________________________________________________
dense_3 (Concatenate)           (None, 10)           0           sequential_1[1][0]               
                                                                 sequential_1[2][0]               
==================================================================================================
Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
__________________________________________________________________________________________________
Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 4s 61us/step - loss: 0.2460 - acc: 0.9234 - val_loss: 0.1110 - val_acc: 0.9647
Epoch 2/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.1018 - acc: 0.9693 - val_loss: 0.0804 - val_acc: 0.9766
Epoch 3/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0742 - acc: 0.9776 - val_loss: 0.0745 - val_acc: 0.9771
Epoch 4/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0599 - acc: 0.9820 - val_loss: 0.0698 - val_acc: 0.9793
Epoch 5/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0514 - acc: 0.9844 - val_loss: 0.0761 - val_acc: 0.9793
Epoch 6/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0425 - acc: 0.9872 - val_loss: 0.0775 - val_acc: 0.9800
Epoch 7/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0390 - acc: 0.9886 - val_loss: 0.0840 - val_acc: 0.9813
Epoch 8/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0334 - acc: 0.9903 - val_loss: 0.0890 - val_acc: 0.9805
Epoch 9/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0310 - acc: 0.9904 - val_loss: 0.0909 - val_acc: 0.9818
Epoch 10/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0277 - acc: 0.9920 - val_loss: 0.0877 - val_acc: 0.9825
Epoch 11/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0264 - acc: 0.9924 - val_loss: 0.0905 - val_acc: 0.9832
Epoch 12/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0257 - acc: 0.9926 - val_loss: 0.0868 - val_acc: 0.9836
Epoch 13/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0232 - acc: 0.9936 - val_loss: 0.0944 - val_acc: 0.9837
Epoch 14/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0217 - acc: 0.9941 - val_loss: 0.1022 - val_acc: 0.9834
Epoch 15/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0223 - acc: 0.9938 - val_loss: 0.0952 - val_acc: 0.9816
Epoch 16/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0190 - acc: 0.9949 - val_loss: 0.1015 - val_acc: 0.9840
Epoch 17/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0197 - acc: 0.9946 - val_loss: 0.1161 - val_acc: 0.9848
Epoch 18/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0210 - acc: 0.9945 - val_loss: 0.1078 - val_acc: 0.9822
Epoch 19/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0190 - acc: 0.9950 - val_loss: 0.1235 - val_acc: 0.9832
Epoch 20/20
60000/60000 [==============================] - 3s 49us/step - loss: 0.0185 - acc: 0.9954 - val_loss: 0.0980 - val_acc: 0.9843
Test loss: 0.0980480428516
Test accuracy: 0.9843

相關推薦

keras訓練深度網路使用顯示

1、使用nvidia-smi pmon 檢視linux系統的gpu情況,如下:顯然是2張顯示卡,如何讓它們都工作呢2、keras提供了keras.utils import multi_gpu_model使用多個顯示卡的功能:在原來的model基礎上使用multi_gpu_mo

使用網路列印任務,停頓幾分鐘然後再打

c#設定outlook選項問題BackgroundWorker類每次呼叫呼叫RunWorkerAsync方法都開新執行緒嗎c#設定outlook選項問題BackgroundWorker類每次呼叫呼叫RunWorkerAsync方法都開新執行緒嗎 C#呼叫dll函式指標問題~請

怎麽線條快速選中並組合形狀

頁面 mage tps 傳統 點擊 下拉 註意事項 jpg album 如圖,需要繪制一個流程圖,其中有很多的文本框和圖像線條。已經完成,先需要將其各元素進行組合。 按照傳統的操作模式需要按住CTRL鍵的同時點擊一個個的文本框,不但耗時而且容易點錯。

一個 csproj 項目指定開發框架[轉]

-- intro studio 條件編譯 種類型 直接 href configure 裏的 原貼:https://walterlv.gitee.io/post/configure-projects-to-target-multiple-platforms.html 可移植

SQL寫update語句欄位合在一起的寫法

今天寫了個update語句更新兩個欄位,使用了and連線。結果一直保錯,一直沒發現原因,果真還是sql基礎語法沒記住! 正確的寫法是兩個欄位之間使用,連線  : update t_city t set t.prov_name = '安徽', t.city_name

訓練深度網路的梯度彌散及梯度膨脹問題

  在深度網路中,不同層的學習速度差異很大。尤其是在網路後面層學習的情況很好的時候,先前的層常常會在訓練時停止不變,基本上學不到東西,這些原因是與基於梯度的學習方法有關。我們用MNIST數字分類問題作為研究和實驗的物件:這個網路有784個輸入神經元,對應於圖片28*28=7

引入jqueryjs庫的衝突解決

當一個專案中引入多個第三方庫的時候,由於沒有名稱空間的約束(名稱空間就好比同 一個目錄下的資料夾一樣,名字相同就會產生衝突),庫與庫之間發生衝突在所難免。 那麼,既然有衝突的問題,為什麼要使用多個庫呢?原因是jQuery 只不過是DOM 操 作為主的庫,方便我們日常

卷積神經網路實現數字識別

from keras.models import Modelfrom keras.layers import *import tensorflow as tf# This returns a tensorinputs = Input(shape=(28, 140, 1))conv_11 = Conv2D(fi

訓練一次得到模型做整合的方法

參考論文 SNAPSHOT ENSEMBLES: TRAIN 1, GET M FOR FREE 解決的問題 多個分類器整合可以獲得超過單個分類器的效果,但整合分類器就要求有多個分類器,在訓練速度和測試速度方面不佔優勢。本文提出的方法可以提高整合學習的訓練速度,通過一次訓練,

linux——alsa中音效裝置開啟某一指定音效的PCM裝置

前言   最近除錯板子上的3個ADAU1761音訊介面,使用pocketsphinx語音庫呼叫alsa庫的API介面開啟指定的Mic進行錄入語音時出現異常,預設情況只能開啟第一個ADAU1761音訊介面,想開啟第二個或第三個ADAU1761音訊介面時卻出現錯誤

SQL更新資料欄位合在一起的寫法

作者:iamlaosong Oracle正常更新一個表中多個欄位時,欄位是分開寫的,例如: update tb_county t set t.prov_name = '安徽', t.city_

單網綁定ip, 綁定成一塊虛擬網

0ms 模塊 通過 ip地址 ifcfg-eth script img 毫秒 外部 Linux網卡配置與綁定 Redhat Linux的網絡配置,基本上是通過修改幾個配置文件來實現的,雖然也可以用ifconfig來設置IP,用route來配置默認網關,用hostna

小程式選項切換(商品評論)

選項卡的功能用途有很多地方:例如商品評論的切換,還有文章分類還有各種各樣的切換功能需要用到。這個實現是通過for迴圈,取數值下標的方式來實現切換 test.wxml <view class='content'> <view class='tab {{idx == in

Android : WebView無網路的圖片顯示解決方案

需求場景:必須在已經構建快取的基礎之上,否則資料都無法正常顯示,何談圖片呢? 接下來直接上程式碼嘍,小夥伴們如果有更好的解決方式可以隨時聯絡我哦! <WebView

iOS知識---針對顯示內容空間不定內容長度的顯示問題Content Hugging 和 Content Compression Resistance

       在開發中有的時候回遇到一些比較操蛋的資料長度不定,但是需要用多個lable在同一行顯示的問題,有的內容必須要顯示全,有些則在到達一定長度之後剩餘內容允許以...的形式省略顯示。針對這樣的問題需要藉助Autolayout來完成。為了便利操作可以採用Masonr

深度學習環境配置——檢視顯示資訊和對應NVDIA驅動

檢視顯示卡資訊 可以看到你的顯示卡資訊,比如我的就是 product: GM107GL [Quadro K620] [10DE:13BB]。 以上是推薦驅動,為了再次確認一遍,還可以使用以下命令檢視可以使用的驅動: ubuntu-drivers devic

解決安裝Ubuntu16.04因NVIDIA顯示造成的卡在開機logo介面的問題

安裝Ubuntu16.04LTS系統時,安裝一路順利但重啟時卡在開機logo介面,是NVIDIA顯示卡的問題 解決方法: 安裝成功之後,重啟,在引導頁按e進入grub編輯頁面 倒數第二段  quiet splash 後面,也是還有別的,反正這段的最後,加上nomodeset

fedora配置一(開機關閉獨立顯示

#echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch(3) 切換到整合顯示卡:# echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch(4) 關閉不用的顯示卡電源:# echo OFF > /s

Fragment 切換不重新例項化

在專案中需要進行Fragment的切換,一直都是用replace()方法來替換Fragment: 1 2 3 4 5 6 7 8 9 public void s

迴圈神經網路訓練引數注意點的筆記

1、詞嵌入維度引數(embedding_size)     詞嵌入維度刻畫了模型表達詞彙的能力,對於翻譯任務,一般需與資料集的詞彙量大小保持一致。在詞嵌入維度較小的時候,詞彙容易被對映到相近的區域,互