コピペワールド

hirooka.pro

TensorFlow

tensorflow-gpu と tensorflow の速度差

投稿日:

1 ケースのみ、備忘として、です。

ノート PC の Intel Core i7 と NVIDIA GeForce GTX 1050 (2GB) との比較です。GeForce は MSI の GTX 1050 2GT LP です。

比較したハードウェアは下記の通りです。

  1. MacBook Pro (15-inch, 2016) / macOS High Sierra 10.13.6 / Intel Core i7 2.6GHz / 16GB Memory
  2. Linux PC / Ubuntu 18.04.1 / Intel Core i3-4170 3.70GHz / 16GB Memory / NVIDIA GeForce GTX 1050 (2GB)

MacBook Pro には、下記の手順で tensorflow をインストールしました。

Ubuntu には、下記の手順で tensorflow-gpu をインストールしました。

比較に使用した Python のコードは下記の通りです。書籍「現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法」の Chapter 8 の「CAE を使ったノイズ除去」です。Keras を使用します。

[highlight_python]import os
import glob
import math
import random
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.python import keras
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import Model, Sequential
from tensorflow.python.keras.layers import Conv2D, Dense, Input, MaxPooling2D, UpSampling2D, Lambda
from tensorflow.python.keras.preprocessing.image import load_img, img_to_array, array_to_img, ImageDataGenerator
from tensorflow.python.keras.datasets import mnist

(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
x_train = x_train / 255.
x_test = x_test / 255.

def make_masking_noise_data(data_x, percent = 0.1):
size = data_x.shape
masking = np.random.binomial(n = 1, p = percent, size = size)
return data_x * masking

x_train_masked = make_masking_noise_data(x_train)
x_test_masked = make_masking_noise_data(x_test)

def make_gaussian_noise_data(data_x, scale = 0.8):
gaussian_data_x = data_x + np.random.normal(loc = 0, scale = scale, size = data_x.shape)
gaussian_data_x = np.clip(gaussian_data_x, 0, 1)
return gaussian_data_x

x_train_gauss = make_gaussian_noise_data(x_train)
x_test_gauss = make_gaussian_noise_data(x_test)

autoencoder = Sequential()

# Encoder
autoencoder.add(
Conv2D(
16,
(3, 3),
1,
activation = 'relu',
padding = 'same',
input_shape = (28, 28, 1)
)
)
autoencoder.add(
MaxPooling2D(
(2, 2),
padding = 'same'
)
)
autoencoder.add(
Conv2D(
8,
(3, 3),
1,
activation = 'relu',
padding = 'same'
)
)
autoencoder.add(
MaxPooling2D(
(2, 2),
padding = 'same'
)
)

# Decoder
autoencoder.add(
Conv2D(
8,
(3, 3),
1,
activation = 'relu',
padding = 'same'
)
)
autoencoder.add(UpSampling2D((2, 2)))
autoencoder.add(
Conv2D(
16,
(3, 3),
1,
activation = 'relu',
padding = 'same'
)
)
autoencoder.add(UpSampling2D((2, 2)))
autoencoder.add(
Conv2D(
1,
(3, 3),
1,
activation = 'sigmoid',
padding = 'same'
)
)
autoencoder.compile(
optimizer = 'adam',
loss = 'binary_crossentropy'
)
initial_weights = autoencoder.get_weights()

autoencoder.summary()

autoencoder.fit(
x_train_gauss,
x_train,
epochs = 10,
batch_size = 20,
shuffle = True
)[/highlight_python]

結果は下記の通りでした。

  1. tensorflow (1.10.0) ... 10 分 11 秒 (611 秒)
  2. tensorflow-gpu (1.10.0) ... 2 分 24 秒 (144 秒)

単純に割ると 4.2 倍でした。

1050 は、GeForce GTX 10 シリーズの中でもローエンドですし。

-TensorFlow

Copyright© hirooka.pro , 2018 All Rights Reserved.