ニューラルネットの訓練段階において莫大な訓練データに対して、GPUで並列・平行実行によって訓練時間短縮を図れますが、テスト段階(推論段階)では
入力データが一つしかないので、それでもGPUを使って実行時間が短縮できるのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/11 08:06 編集
2022/06/11 12:06
回答2件
0
ベストアンサー
学習と推論で(体感的に)どれくらい違うか?
ニューラルネットワークの計算には大きく分けて以下の2つがあります。
- 学習
- 推論
学習のフェーズでは、多くの場合、ご察しの通り膨大なデータを処理させて都合のいい重みデータを形成させていきますし、推論のフェーズでは、こうして鍛えられた都合のいい重みデータにごく少量のデータだけを流すことになります。もとになるデータの大きさやネットワークの構造にもよると思いますが、学習時には1ステップにCPUでは数分かかるのがGPUなら数秒とかそれくらいの高速化が図れます。
こういう意味では、推論時にはご察しの通りデータ量は格段に少ないですし、計算量も少ないので「学習の時に短縮できたような莫大な時間の短縮」は図れません。こういう都合から、学習はサーバで行い、推論はエッジデバイス(スマホだったり、RasbperryPiだったり)というやり方が主流です。
なので、Q.推論時も学習時のような莫大な時間が節約できるか?の答えはNoになります。
実際問題、推論時にGPUはいらないか?
とはいえ、推論時にGPUはいらない?というとそうでもありません。
場合によるとは思いますが、推論時に「1秒かかってもいい」なのか、「一秒もかかっては困る」なのか、でだいぶ意味合いが変わってきます。一秒くらい大したことないという用途であれば(例えば)CPUで推論させても全く問題ないと思いますし、動画に対するリアルタイム画像認識であれば「一秒どころか0.1秒でも遅すぎる、0.0x秒でないと使い物にならない」であればGPUが望ましいです。
ですので、Q.推論時にGPUなしでも良い?の答えは、どこまでリアルタイム性が求められるか次第、になります。
工夫次第で何とかなる場合もある
姿勢認識のネットワークにOpenPoseというものがあり、これはGPUがないとカクカクしてしまうような処理でした。がGoogleが本気を出してMediapipeというものを公開しました。詳しいことは分かりませんが、精度にほとんど影響しないような計算は端折る、計算自体を最適化して短時間に済ませられるようにする等の最適化を図ったため、普通のノートPCやスマホでもサクサク動くようになっています。
買うのはちょっと…
既にご存じかもしれませんが、Google Colabを使うとGPU付きのサーバーを無料で使えるようになります。もちろんGPU無効のオプションもPython側で選べるので、どんなもんかな、とやってみるのはいかがでしょうか?
回答漏れの部分
一つのデータを入力して、前後順番に計算結果を継承して計算処理をして行かなければならないので、どの辺GPU有利でしょうか
ニューラルネットワークの図を描くと〇から線を引いた図がよく使われます。あの丸と線の一つ一つがax + bを表しています。これが何万何十万と連なっているのがニューラルネットワークです。推論時であっても簡単な計算(ax + b)がものすごく必要なためGPUはどうしても有利になります。GPUは簡単な計算(ax + b)を同時に数千個以上並べて計算できるシステムなためです。
投稿2022/06/11 07:42
編集2022/06/11 09:49退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/11 13:26
退会済みユーザー
2022/06/11 21:32 編集
2022/06/15 12:54
0
深層学習プログラミング体験編(犬種識別AI)
から引用して、ちょっと手を加えた下記コードで、google colabのCPU, GPUで、1枚の画像の「model.predict」の実行時間を測ってみました
python
1# Google Colabで実行の際に、下記のコードにて、このプログラムをTensorFlow バージョン1系で動作させるためのコマンドです。 2%tensorflow_version 1.x 3 4# TensorFlow バージョン2系で実行したい場合は下記のColab(URL)をご確認ください。 5# https://colab.research.google.com/notebooks/tensorflow_version.ipynb 6 7# 必要なモジュールをインポート 8from keras.applications.vgg16 import VGG16, decode_predictions,preprocess_input 9from keras.preprocessing import image 10from PIL import Image 11import numpy as np 12import urllib.request as urllib 13import time 14 15# 手元の環境で実行させたい場合は下記2つも読み込んでください。 16# import tensorflow 17# import keras 18 19 20""" 21filename: 判定したい画像ファイル 22size: 予測した結果を何件まで表示させたいか(初期値5件) 23""" 24def predict(filename, size=5): 25 # 画像ファイルとして保存 26 filename = urllib.urlretrieve(filename, "sample.png") 27 img = image.load_img(filename[0], target_size=(224, 224)) # 画像を読み込み 28 x = image.img_to_array(img) # 画像ファイルを数値に変換 29 x = np.expand_dims(x, axis=0) # 次元を増やす 30 31 ''' 32 事前学習済みのモデルを使う際にはpreprocess_input()という関数を呼び出して 33 画像に対して前処理を行う ことでより良い性能が出ますので、そのため以下のpreprocess_input()を使っています。 34 ''' 35 x = preprocess_input(x) # 一律に画像の正規化や平均値を引いている前処理 36 start = time.time() 37 pred = model.predict(x) 38 elapsed_time = time.time() - start 39 print ("elapsed_time:{0}".format(elapsed_time) + "[sec]") 40 results = decode_predictions(pred, top=size)[0] # VGG16の1000クラスはdecode_predictions()で文字列に変換 41 return results 42 43# VGG16を使用 44model = VGG16(weights="imagenet") 45 46# 犬の判定処理 47filename = "https://aiacademy.jp/dataset/dog1.jpg" 48results = predict(filename, 10) 49for result in results: 50 print(result)
1回目の実行はモデルをダウンロードしたりいろいろやってるので、2回目の実行の時間です
[CPU] elapsed_time:0.7016515731811523[sec]
[GPU] elapsed_time:0.0678093433380127[sec]
何回か測定して平均したりはしてませんので、あまり正確な見積もりでは無いですが、この場合はGPUの方が10倍くらい速くなりました
使うAIによっても当然結果は変わりますし、google colabで割り当てられたGPUの機種によっても変わると思いますので、あくまでも参考程度に
投稿2022/06/15 01:11
編集2022/06/15 01:30総合スコア7651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/15 01:40 編集
2022/06/15 08:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。