Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)

スポンサーリンク
Python

仕事の関係で、機械学習の物体検知を行うプロジェクトがあり、少しばかりお手伝いをすることになりそうなので、少し環境設定など、備忘録的に残しておきます。

機械学習やAIについて勉強したいけれども環境構築の段階で躓いてしまい、本来はやりたかった&時間をかけるべきプログラミングなどまで到達できない!という方のお役に立てるようであればと思います。

実際にやりたいこと

まずはとっかかりとしてこんな感じです。

YouTubeではこちら。

Object Detection(物体検出)でいろいろ機械学習させるのが短期的な目標です。長期ではARグラスに表示させたりして、いろいろあるのですが、それは、また今度。。

事前準備・環境

今回は自宅のCPUのみのPCと、GPUのあるPC、それとGoogle ColabのCPUとGPUで比較を行いました。自宅PCの環境は以下の通りです。

自宅PC環境を紹介します!(ゲームコントローラでエクセル操作してます)|TF
有料記事となっていますが、全文無料で読めます。 備忘録も兼ねて、自分が現在使用しているPC環境を紹介します。 これを買えとか、おススメというものでもないですが、 Twitterにて「#ブロガーの作業部屋晒し」 なるものもあったりするぐらいのなので、ご紹介までに。 残念ながら子供の勉強机と並んでて雑多なので、写真は無...

同じコードでハードウェアだけ違うという環境になります。

GPUなし
Windows10 Pro 64ビット

以前の記事では古いNVIDIAのグラフィックスカードが刺さっていたのですが、今回の実験のために抜いて、CPUのみバージョンの環境を新規に作りました。

GPUあり
Windows10 Pro 64ビット


Tensorflowは2.6になり、以下のコードを使ってハードウェアCPU,GPUの認識の確認をします。

import tensorflow as tf
from tensorflow.python.client import device_lib

print(tf.__version__)
#2021_10_29 : 2.6.0

device_lib.list_local_devices()

GPUなし

GPUあり

Google Colab CPU

Google Colab GPU

環境構築手順

ノートPCのDell XPS 15 の NVIDIA GeoForce GTX 1650をWindows10のPython3.7から使えるようにするためにいろいろ手順を踏む必要があります。

・NVIDIA GPUドライバのインストール
・CUDA Toolkitのインストール
・cuDNNのインストール
・pip にてTensorflowの2.6をインストール

する必要があります。

詳細については

NVIDIA CUDA toolkit on Windows - Qiita
この記事の内容Windows環境でGPUを利用した機械学習環境を整備します。自分のPCの設定メモですので、内容のほとんどは最後に紹介する参考サイトの焼き直しです。CUDA Toolkitインス…

を参考にさせていただきました。

私の2021/10/29時点では
NVIDIA GPUドライバ :496
CUDA:11.5.0_496.13
cuDNN:11.4

を利用させていただきました。

CUDAとはCUDA(Compute Unified Device Architecture)の事で、グラフィックス表示用途以外にその高い処理性能を活用できるようにNVIDIA社が開発した技術です。

CUDA - Wikipedia

cuDNNはcuDNN(CUDA Deep Neural Network library )でニューラルネットワーク計算用のライブラリーとなります。CUDA での処理を高速化するためにインストールします。

NVIDIAとCUDAはインストールキットで配布されて、cuDNNはzipを展開したものを

C:\tools\cuda

において、Windowsのパスを通すという手順を踏みました。

また、Google Colab GPUについては、Edit>Notebook setting でGPUを選択しました。

実際に行ったこと

以下のサイトにあったように小さいプログラムと、もう少し時間のかかるものと二つ行いました。

ゲーミングPCで機械学習をして、CPU/GPUの性能の違いをColaboとも比較してみた話【Windowsの機械学習環境構築手順決定版。TF2.0対応】 - Qiita
ひとことで言うと格安ゲーミングPC(Windows)を購入して、Anacondaの仮想環境でCPU/GPUを切り替えられるようにして、Tensorflow-GPU(v2.0)のコードを動かして、ColaboratoryのCPU/GPUも含めた4パターンで…

小さいほうのプログラムは以下のものになります。

%%time 

import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

predictions = model(x_train[:1]).numpy()
predictions

tf.nn.softmax(predictions).numpy()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss_fn(y_train[:1], predictions).numpy()

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

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)

probability_model = tf.keras.Sequential([
  model,
  tf.keras.layers.Softmax()
])

probability_model(x_test[:5])

この処理にかかった時間は以下の通りです。
CPU:9.58 s

GPU: 1min 4s

Google Colab CPU: 42.9 s

Google Colab GPU: 23.9 s

なんと、自宅デスクトップのCPUが一番早いです、、もしかして、すごい!・・・ではないです、
いわゆる「近所のコンビニ行くのにジェット機つかっていくようなもの」状態です。

コンビニ行くには自転車が便利、長距離移動にはジェット機、、と目的に応じて使い分けが必要です。

もう少し時間のかかるコードは以下になります。

#参考:https://github.com/tensorflow/tensorflow/issues/34888
import tensorflow as tf
#UnknownError回避用
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

import numpy as np
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist
#ダウンロード終了後からの実行時間計測のために追加します。
import time
start_time = time.time()

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images = train_images / 255.0
test_images = test_images / 255.0
train_images = np.expand_dims(train_images, axis=3)
test_images = np.expand_dims(test_images, axis=3)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=2))
model.add(tf.keras.layers.Dropout(0.3))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.summary()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(train_images, train_labels, batch_size=64, epochs=10, validation_data=(test_images, test_labels))

# 計測した結果を出力
tat_time = time.time() - start_time
print ("実行時間:{0}".format(tat_time) + "[秒]")

この処理にかかった時間は以下の通りです。
CPU:360 s

GPU:174 s

Google Colab CPU: 864 s

Google Colab GPU: 110 s

Google Colab GPUはやはり早いですね。Google Colab CPUについてはログインセッションでのあたりはずれもあるとの話も聞きます。時間のかかる単純にGPUやCPUパワー勝負のジョブだと、結構な差が出てくるようです。

まとめ

環境小規模中規模
CPU HP Prodesk Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz 約 9秒 約 360秒
GPU XPS v15 GTX1650 約 64秒 約 174秒
Google Colab CPU 約 42秒 約 864秒
Google Colab GPU 約 24秒 約 110秒

分かったこと

Google ColabのGPUを無料で、かつ手軽に使えるのは素晴らしいことですね。

簡単な設定ですぐに使えるというのはコード作成に集中できるので、ありがたいことです。

12時間を超えると切断という部分もありますが、ほとんどのユーザーにはこれ以上ない環境なのではないでしょうか。

参考にしたサイト

今回確認を行うにあたり、以下のサイトを参考にさせていただきました。
ありがとうございました。

ゲーミングPCで機械学習をして、CPU/GPUの性能の違いをColaboとも比較してみた話【Windowsの機械学習環境構築手順決定版。TF2.0対応】 - Qiita
ひとことで言うと格安ゲーミングPC(Windows)を購入して、Anacondaの仮想環境でCPU/GPUを切り替えられるようにして、Tensorflow-GPU(v2.0)のコードを動かして、ColaboratoryのCPU/GPUも含めた4パターンで…
NVIDIA CUDA toolkit on Windows - Qiita
この記事の内容Windows環境でGPUを利用した機械学習環境を整備します。自分のPCの設定メモですので、内容のほとんどは最後に紹介する参考サイトの焼き直しです。CUDA Toolkitインス…
Windows 10 で YOLOv3 を自前画像で学習させる(環境構築編)【機械学習】 - 株式会社ライトコード
物体検出モデル YOLOv3 を自前画像で学習させよう「YOLOv3」とは、物体検出(画像から物体の位置と

Pythonに関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
Pythonを使ってTwitterに自動投稿。APIの設定など。(Twitter API v2とAPI v1.1の併用)
ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析
TradingViewを使ってポートフォリオ運用(複数銘柄運用・配当込み) 日本株 2019年末に約1000万円投資していたらどうなった?【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント