tensorflowを動かすGPUクラウドサーバ性能について質問させて頂きます。
AWSのGPUインスタンスを利用して性能を見ていますが、GPUコア数の高いインスタンスを利用しても処理時間が上がりません。
なぜ、インスタンスでGPU数を多くしても処理速度に変化がないのか理解できていませんが、一つのGPUしか利用できていないかとも考えています。
利用方法についてご意見、アドバイスなども含めてご教授ください。
●AWS-g4dn.2xlarge
1 2019-12-21 21:20:45.724076
1 0 2019-12-21 21:20:45.725365
1 1000 2019-12-21 21:22:10.905428
1 2000 2019-12-21 21:27:49.926334
1 3000 2019-12-21 21:37:48.248926【17分】
●AWS-g4dn.8xlarge
1 2019-12-21 23:23:20.350477
1 0 2019-12-21 23:23:20.351867
1 1000 2019-12-21 23:24:44.001723
1 2000 2019-12-21 23:30:19.057467
1 3000 2019-12-21 23:40:09.601611【17分】
●AWS-p2.xlarge
1 2019-12-21 22:02:09.613107
1 0 2019-12-21 22:02:09.615015
1 1000 2019-12-21 22:03:37.300308
1 2000 2019-12-21 22:09:24.594682
1 3000 2019-12-21 22:19:36.657834【17分】
●プログラムについて
プログラムは以下のような物をJupiterNotebookで動かしています。
Python
1# -*- coding: utf-8 -*- 2import math 3import numpy as np 4import datetime 5import keras 6from keras.models import Sequential 7from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D 8import matplotlib.pyplot as plt 9 10# 過去半日分の履歴で計算 (1分足データなので、60*12 = 720/半日) 11#n = 1 * 60 * 3 12n = 160 #16の10倍 13 14# keras用のパラメータ 15batch_size = 5000 # 1000データ単位に学習 16epochs = 3 17# 0:温度以上, 1:温度以上変動なし, 2:温度以下の3クラス 18n_classes = 3 19# 何分までに 20inMinG = 15 21 22datafile = '../jupyter_files/xdata/srcCreate.txt' 23testfile = '../jupyter_files/xdata/tstCreate.txt' 24savefile = '../jupyter_files/x_ai.hdf5' 25 26class xDataGenerator(object): 27 def __init__(self, datafile, l_n): 28 self.l_n = l_n 29 self.reset() 30 # データ[温度,湿度,照度,臭度]の4値分足データのCSV形式 31 # 上記4値の3部屋分のデータ、+ 4個の[建物,曜日,月日,時分] = 16項目 を2時間40分[n=160] 32 # 常に最新160個のデータを保存 33 self.xparam = np.zeros(l_n*4*4) 34 # LabelEncode(classをint型に変換)するためのdict 35 with open(datafile) as f: 36 self.srcd = f.readlines() 37 38 def reset(self): 39 self.xdatas = np.empty((0, 1, self.l_n, 4*4), int) 40 self.ylabels = np.array([], int) 41 42 def flow_from_datafile(self, batch_size, datalen): 43 ###### 44 # 何分までに 45 inMin = 15 46 # 期待温度 47 goodVal = 100 48 # 反対温度 49 badVal = 50 50 51 while True: 52 # 読み込んだファイルの行数 53 for i in range( ( datalen - inMin ) ): 54 # 末尾に新しいデータをいれる(160行の最新データにする) 55 self.srcd[i] = self.srcd[i].strip() 56 spltDataArr = self.srcd[i].split(",") 57 if(len(spltDataArr) != 16): 58 continue 59 self.xparam = np.append(self.xparam[16:], spltDataArr) 60 61 # l_n個以上になるとAIに学習させる(720個分で学習させる) 62 if ( i >= self.l_n ): 63 64 # inMin分以内にlosscut(pips)以内にhopeVal(pips)が取れるか判定(クラス分) 65 curClass = 1 # 初期値は中間 66 curVal = 0 67 maxVal = 0 68 minVal = 0 69 for j in range( i, (i + inMin) ): 70 spltCheckArr = self.srcd[j].split(",") 71 if (j == i): 72 curVal = int(spltCheckArr[7]) 73 maxVal = int(spltCheckArr[5]) 74 minVal = int(spltCheckArr[6]) 75 lastRate = int(spltCheckArr[7]) 76 else: 77 lastRate = int(spltCheckArr[7]) 78 if ( maxVal < int(spltCheckArr[5]) ): 79 maxVal = int(spltCheckArr[5]) 80 if ( minVal > int(spltCheckArr[6]) ): 81 minVal = int(spltCheckArr[6]) 82 83 # クラス判定 最終値が期待温度を上下で超えているか(反対向けは単体温度以内)で判定 84 if ( (lastRate - curVal) > goodVal ): 85 if ( (curVal - minVal) < badVal ): 86 curClass = 0 87 elif ( (curVal - lastRate) > goodVal ): 88 if ( (maxVal - curVal) < badVal ): 89 curClass = 2 90 91 # 学習用データの格納 92 self.xdatas = np.append(self.xdatas, self.xparam.reshape(1, 1, self.l_n, 4*4), axis=0) 93 self.ylabels = np.append(self.ylabels, curClass) 94 95 # batch_sizeに達すれば一度学習する 96 if ( len(self.ylabels) == batch_size or i == (datalen - inMin - 1) ): 97 print ("") 98 print (i,(datalen - inMin - 1),len(self.ylabels),datalen,"shape0:",self.xparam.shape[0], 99 self.xdatas.shape[0],self.xdatas.shape[1],self.xdatas.shape[2],self.xdatas.shape[3]) 100 # 現在の日付と日時 101 nowdate = datetime.datetime.now() 102 print(":::", len(self.ylabels), nowdate) 103 # ターゲットyをkeras用の形式に変換 104 #y_keras = keras.utils.to_categorical(self.ylabels, 3) 105 y_keras = np.asarray(keras.utils.to_categorical(self.ylabels, 3)) 106 # データ返答 107 #yield self.xdatas, self.ylabels 108 inputs = np.asarray(self.xdatas) 109 #targets = np.asarray(self.ylabels) 110 self.reset() 111 yield inputs, y_keras 112 113 114# 現在の日付と日時 115nowdate = datetime.datetime.now() 116print(1, nowdate) 117 118# データXをCNN用の形式に変換 (X.shape[0]はデータ[行]数) 119#X = X.reshape(X.shape[0], n,4,4) #既にこの形で入力しているのでreshape不要 120#input_shape = (n,4,4) 121input_shape = (1,n,4*4) 122#input_shape = (n,16) 123 124# 畳み込みニューラルネットワークを定義 125model = Sequential() 126model.add(Conv2D(filters=32, kernel_size=(3,3), activation='relu', input_shape=input_shape)) 127model.add(Conv2D(filters=64, kernel_size=(3,3), activation='relu')) 128model.add(MaxPooling2D(pool_size=(2, 2))) 129model.add(Dropout(0.25)) 130model.add(Flatten()) 131model.add(Dense(units=128, activation='relu')) 132model.add(Dropout(0.5)) 133model.add(Dense(units=n_classes, activation='softmax')) 134 135# モデルのコンパイル 136model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy']) 137 138train_datagen = xDataGenerator(datafile,n) 139srcdlen = len(open(datafile).readlines()) 140test_datagen = xDataGenerator(testfile,n) 141tstdlen = len(open(testfile).readlines()) 142 143# steps_per_epochはその名のとおり、1epochのstep数で、基本はデータ数 / バッチサイズ = int(srcdlen / batchsize) 144history = model.fit_generator( 145 generator=train_datagen.flow_from_datafile(batch_size, srcdlen), 146 steps_per_epoch=int(np.ceil(srcdlen / batch_size)), 147 #steps_per_epoch=int(np.floor(srcdlen / batch_size)), 148 epochs=epochs, 149 verbose=1) 150 #validation_data=test_datagen.flow_from_datafile(batch_size, tstdlen), 151 #validation_steps=int(np.ceil(tstdlen / batch_size))) 152 153 154# 学習結果を保存 155model.save(savefile) 156 157#現在の日付と日時 158nowdate = datetime.datetime.now() 159print(3, nowdate) 160 161# 損失関数のグラフの軸ラベルを設定 162plt.xlabel('time step') 163plt.ylabel('loss') 164 165# グラフ縦軸の範囲を0以上と定める 166plt.ylim(0, max(np.r_[history.history['val_loss'], history.history['loss']])) 167 168# 損失関数の時間変化を描画 169val_loss, = plt.plot(history.history['val_loss'], c='#56B4E9') 170loss, = plt.plot(history.history['loss'], c='#E69F00') 171 172# グラフの凡例(はんれい)を追加 173plt.legend([loss, val_loss], ['loss', 'val_loss']) 174 175# 描画したグラフを表示 176plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/22 09:21