GPUすげ~ってだけ
ついに念願のデスクトップPCが届いたので、GPU使った計算とか試してみて~~~!ってなったのでやってみました。
PCの中身
・CPU:11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz
・GPU:NVIDIA GeForce RTX 3070
・メモリ:32GB
学割のおかげでそれなりに安くなりました。学生最高!w
何を計算するのか
ゼロ作とか読んでて、GPU使った並列処理で行列とかはやく計算できるよ!みたいに紹介されていて、どんなもんなんや~って気になっていたので、それをやってみる。
GPUをなんかいろいろするためにいろいろ入れて、(ここが分かりやすいというか便利すぎて神過ぎた)あとはPythonとかTensorFlowとかをとりあえず入れて、計測するためのコードをこことかここあたりを参考に(というかほぼコピペして)計算開始!(申し訳程度に貼っときます。TensorFlowのバージョンは2.5.0です。)
import os
#os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # GPU を使うときはコメントアウト
import tensorflow as tf
import numpy as np
# Check if its a CPU or GPU
device_name = tf.test.gpu_device_name()
if device_name != '/device:GPU:0':
print('GPU device not found')
else:
print('Found GPU at: {}'.format(device_name))
cifar = tf.keras.datasets.cifar10
(x_train, y_train),(x_test, y_test) = cifar.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), padding='same', input_shape=x_train.shape[1:]),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(64, (3, 3), padding='same'),
tf.keras.layers.Activation('relu'),
tf.keras.layers.Conv2D(64, (3, 3)),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.summary()
import datetime
# start training
st_time = datetime.datetime.now()
model.fit(x_train, y_train, epochs=10)
# record time after training
end_time = datetime.datetime.now()
print('Training time = %s'%(end_time-st_time))
結果
結果として信用してもらえるか微妙ですが、実行時のタスクマネージャーの様子と出力を載せときます。(省略したところもありますがRTX3070が見つかったよ!これ使うね!的な出力が多分あったので比較できてそう。)
・CPUを使ってるとき
~略~
GPU device not found
~略~
Epoch 1/10
1563/1563 [==============================] - 47s 30ms/step - loss: 1.4811 - accuracy: 0.4641
Epoch 2/10
1563/1563 [==============================] - 51s 33ms/step - loss: 1.0984 - accuracy: 0.6113
Epoch 3/10
1563/1563 [==============================] - 51s 33ms/step - loss: 0.9474 - accuracy: 0.6664
Epoch 4/10
1563/1563 [==============================] - 51s 33ms/step - loss: 0.8466 - accuracy: 0.7022
Epoch 5/10
1563/1563 [==============================] - 52s 33ms/step - loss: 0.7749 - accuracy: 0.7282
Epoch 6/10
1563/1563 [==============================] - 50s 32ms/step - loss: 0.7080 - accuracy: 0.7490
Epoch 7/10
1563/1563 [==============================] - 48s 31ms/step - loss: 0.6588 - accuracy: 0.7676
Epoch 8/10
1563/1563 [==============================] - 48s 31ms/step - loss: 0.6169 - accuracy: 0.7820
Epoch 9/10
1563/1563 [==============================] - 49s 31ms/step - loss: 0.5669 - accuracy: 0.7983
Epoch 10/10
1563/1563 [==============================] - 49s 31ms/step - loss: 0.5342 - accuracy: 0.8117
Training time = 0:08:16.227004
・GPUを使ってるとき
~略~
Found GPU at: /device:GPU:0
~略~
Epoch 1/10
1563/1563 [==============================] - 11s 5ms/step - loss: 1.4538 - accuracy: 0.4733
Epoch 2/10
1563/1563 [==============================] - 7s 5ms/step - loss: 1.0806 - accuracy: 0.6161
Epoch 3/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.9193 - accuracy: 0.6743
Epoch 4/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.8253 - accuracy: 0.7122
Epoch 5/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.7453 - accuracy: 0.7373
Epoch 6/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.6786 - accuracy: 0.7618
Epoch 7/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.6147 - accuracy: 0.7816
Epoch 8/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.5604 - accuracy: 0.8012
Epoch 9/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.5216 - accuracy: 0.8155
Epoch 10/10
1563/1563 [==============================] - 7s 5ms/step - loss: 0.4842 - accuracy: 0.8270
Training time = 0:01:16.232398
はえ~~~~~~
おわりに
実はTensorFlowなんにも分からないので、とりあえずどこかのタイミングで習得したい・・・
まずは積んであるゼロ作②あたりから読み進めていこうかな。夏休みにやりたいことがさらに増えちゃって困るな~。
(主に実験レポートとか大学の課題に追われているせいでだいぶ適当な記事になってしまっていますが許してください。というか中身なんも理解していないのでいろいろ違っても責任は取りません。)