CV・NLPハマりどころメモ

画像認識と自然言語処理を研究する中でうまくいかなかったことと、その対策をまとめる自分用メモが中心。

MBPとAWSでAE-modelの学習速度比較[ML]

Macbook Pro機械学習のローカル開発環境に使えないかと思ったのだが,学習速度が遅すぎると不便なので,GPU環境と比べてどれくらい遅くなるのかを事前に検証してみた.

検証するにあたって比較したのは,Macbook Pro (2018) とAWS EC2である.

AWS-EC2 g3.8xlarge: 32 CPU, 2 GPU(Tesla M60, Mem 16 GB)

MacBookPro: Intel Core i9(2.4 GHz, 8 core)

並べてみるとAWSのスペックの良さが際立つ.どこまでMacで太刀打ちできるのか楽しみだ.筆者は,速度が1/10くらいには落ちるのでは無いかと予想する.

学習のためのコードとしては,Kerasで書いた12,379枚の画像(224x224)のAuto Encoder Modelするものを使った.

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape, padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Conv2D(8, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Conv2D(8, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(3, kernel_size=(3, 3), activation='sigmoid', padding='same'))

model.compile(loss='binary_crossentropy', optimizer='adadelta', metrics=['accuracy'])

model.fit(X, X, epochs=20, batch_size=128, shuffle=True)

検証の結果,当然の結果ではあるが,圧倒的にAWSが速いということがわかった.

f:id:Vastee:20190602232845p:plain

左がAWSで,右がMacである.AWSの1epochの処理時間がだいたい60秒であるのに対し,Macの方では約800秒もかかっている.比較するとAWSの方が約13倍速い.圧倒的な速度差だ.検証結果をみると,Macのローカル環境でコーディングをするのはかなり効率が悪そうだなと感じた.少ないepoch数であっても,13倍遅いとなるとAWSで直にコーディングを行った方が効率が良さそうだ.

また,Macの7epoch以降の処理時間が3000秒を越えているのは掃除のためにMacから電源を抜いたためである.今回の実験でラップトップだと外因により速度がかなり低下することもわかったので,今後Macで開発を続けることは無いだろう.あと,処理中の熱がすごかった.