1. ホーム
  2. ディープラーニング

[ディープ・アプリケーション】 ・ディープラーニングの主流ハードウェアの速度比較(CPU、GPU、TPU)

2022-02-23 05:51:07

ディープラーニングの主流ハードウェアの速度比較(CPU、GPU、TPU)

<ブロッククオート

個人ホームページ->  http://www.yansongsong.cn

Xiao Songさんをフォローするのは歓迎です。 最小限のAI ディープラーニングを学ぶためにあなたを連れて行く:。

ディープラーニングをベースとした理論的な学習やアプリケーションの開発手法が共有され、ディープラーニングの辛口コンテンツもよく紹介しますし、ディープラーニングの学習や応用でどんな問題があるのか、トップでコミュニケーションすることも可能です。

から CSDNブログエキスパート & 志水ディープラーニングコラムニスト 歌(@song)はどうですか?

関連する読み物

[Dev Tips] - PyTorchのGPUアクセラレーションの使い方(CPUとGPUのデータの相互変換)。

[Dev Tips]-TensorFlow&Kerasについて  GPU

CNNに基づくCifar10データセットの分類を実装し、この同じコードを異なる主流の深層学習でテストし、学習速度に関する比較データを得ました。

ディープラーニングの主流ハードウェアの速度比較

(Colab TPU) 速度 382s/epoch

(i5 8250u) 速度320s/epoch

(i7 9700k) 速度 36s/epoch

(GPU MX150) 速度 36s/epoch

(Colab GPU) 速度 16s/epoch

(GPU GTX 1060) 速度 9s/epoch

(GPU GTX1080ti) 速度 4s/epoch

比較すると、エントリークラスのグラフィックカード(GPU MX150)は通常の比較対象のノートパソコン(i5 8250u)のCPUと比較して約8倍、高性能グラフィックカード(GPU GTX1080ti)は約80倍となり、複数のGPUを使用すればより速くなるので、頻繁にトレーニングを行う場合はGPUを推奨しています。

また、以下のコードをご自分のパソコンで実行して、速度を比較することも歓迎します。私のコンピュータはCPUが320s/epochです。
コードセクション


from tensorflow import keras

from keras.datasets import cifar10

import numpy as np

batch_size = 100
num_classes = 10
epochs = 10

# Data loading
(x_train, train_labels), (x_test, test_labels) = cifar10.load_data()

print(x_train.shape)

train_images = x_train.reshape([-1,32,32,3]) / 255.0
test_images = x_test.reshape([-1,32,32,3]) / 255.0


model = keras.Sequential([
    #(-1,32,32,3)->(-1,32,32,16)
    keras.layers.Conv2D(input_shape=(32, 32, 3),filters=32,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,32,32,32)->(-1,32,32,32)
    keras.layers.Conv2D(filters=32,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,32,32,32)->(-1,16,16,32)
    keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
    #(-1,16,16,32)->(-1,16,16,64)
    keras.layers.Conv2D(filters=64,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,16,16,64)->(-1,16,16,64)
    keras.layers.Conv2D(filters=64,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,16,16,64)->(-1,8,8,64)
    keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
    #(-1,8,8,64)->(-1,8*8*128)
    keras.layers.Conv2D(filters=128,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,8,8,128)->(-1,8*8*128)
    keras.layers.Conv2D(filters=128,kernel_size=3,strides=1,padding='same'), # Padding method),
    #(-1,8,8,128)->(-1,8*8*128)
    keras.layers.Flatten(),
    #(-1,8*8*128)->(-1,256)
    keras.layers.Dropout(0.3),
    keras.layers.Dense(128, activation="relu"),
    #(-1,256)->(-1,10)
    keras.layers.Dense(10, activation="softmax")
])

print(model.summary())

model.compile(optimizer="adam",
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_images, train_labels, batch_size = batch_size, epochs=epochs,validation_data=[test_images[:1000],test_labels[:1000]])

test_loss, test_acc = model.evaluate(test_images, test_labels)

print(np.argmax(model.predict(test_images[:20]),1),test_labels[:20])



出力結果(GPU gtx 1080 ti)

python demo.py
Using TensorFlow backend.
(50000, 32, 32, 3)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 32, 32, 32) 896
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 32) 9248
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 64) 18496
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 64) 36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 8, 8, 128) 73856
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 128) 147584
_________________________________________________________________
flatten (Flatten) (None, 8192) 0
_________________________________________________________________
dropout (Dropout) (None, 8192) 0
_________________________________________________________________
dense (Dense) (None, 128) 1048704
_________________________________________________________________
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 1,337,002
Trainable params: 1,337,002
Non-trainable params: 0
_________________________________________________________________
Train on 50,000 samples, validate on 1000 samples
Train on 50,000 samples, validate on 1000 samples
Epoch 1/10
2019-03-15 17:07:34.477745: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-03-15 17:07:34.552699: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-