- 投稿日:2020-06-30T22:02:01+09:00
Google Cloud Platform + GPU設定 備忘録
概要
Google Cloud PlatformにGPU付きのTensorFlow環境を設定する手順を備忘録として残す。
- 実施期間: 2020年7月
- 環境:GCP
- Python3 + TF2.2.0
- GPU: NVIDIA Tesla T4背景
Google ColaboratoryのGPUを使わせていただきDNNモデルをいじくっているが、やはり無料ということもあって、連続でTraining させるにはつらいシーンもある。
GCPは初めの$300分まで無料利用できるので、どんな感じか試してみたのだが、GPUの割付に手間取った。それがこの備忘録を残す理由である。
GCPの手順書をくまなく読めば理解できるのであろうが、とても分かりづらく読む気が起きない。
いくつかサイトを見つけたが、基本がわかっていないせいなのか、その通りにやってもうまくいかない。ユーザ登録と最初のプロジェクト作成
まず、使っているOSがWin10の場合、デフォルトブラウザをIEからChromeに変更しておくこと。
GCPのサイトに行きユーザ登録する。$300を超過した分が自動的に徴収されるので、登録にはクレジットカードが必須。
自分のトップページから「新しいプロジェクト」を作成しておく(キャプチャをとった時点ではすでに"GPU-VM-test01"というプロジェクトを作成済み)。GPUの申請
GCPはAWSと違いデフォルトでGPUはついていない。そのため以下の手順でGPUを申請する必要あり。
GCPの手順書をよ~っく読むとそれらしいことが書いてあるが、よほど根気強くなければその手順書まで辿り着けないと思う。「Compute Engine システムとユーザーを保護するため、新しいプロジェクトにはグローバル GPU 割り当てが設定されます。この割り当ては、サポート対象のすべてのゾーンで作成できる GPU の総数を制限するものです。GPU 割り当てをリクエストするときは、各リージョンで作成する GPU モデルに対する割り当てに加え、すべてのゾーンにおけるすべてのタイプの GPU の総数に対するグローバル割り当てもリクエストする必要があります。」
[IAMと管理]→[割り当て]を選択する。割り当て画面で「場所」に”asia-northeast1”と”グローバル”の2つを選択、「指標」に”GPUs (all regions)”、”NVIDIA T4 GPUs”の2つを選択する。
asia-northeast1(Tokyo)/2(Osaka)ではTesla T4しか選択できない。米国のどこかにするとGPU全種が選択可能となるが、大きなファイルのUploadがあるため近場を選択する。T4が一番安いし。
東京か大阪かは各位の住まいによる。初期状態では、上図右端の「上限」はどちらも”0”となっている。左2つのチェックボックスにチェックを入れて「割り当てを編集」を押すと、「2件の割り当てを選択」ペインが現れる。
左上図で名前とメアドはデフォルトのまま、電話番号(+81はなくてもOK)のみ記入し「次へ」を押す。
右上図で”GPUs (all regions)”と”NVIDIA T4 GPUs - asia-northeast1”にそれぞれ”1”と入力し、リクエストの説明を簡単に(例えば、”Need this for DNN training.”くらい)記入して「完了」→「リクエストを送信」を押す。
2営業日ほどで申請時のメアドに下記のような返信が来る。このメールにもあるようにGPUは申請したプロジェクトに対し割り付けられる。
プロジェクト内で作成されるVMインスタンすべてでシェアすることが可能。
ここまでが今回キモであった前準備環境の作成
承認を待っている間、GCPを弄っていると3つくらいの方法がありそう。
- VMインスタンスを作成し、そこにCUDAやTFやAnacondaを入れる。
- Marketplaceにある設定済みVMからVMインスタンスを作成する。
- ノートブック専用のVMインスタンスを作成する。
おいらの用途で使えるのは3のみ。
1,2はそもそも環境構築後、どのように使うかイメージできない。VMインスタンスの操作はローカルPCのCUIからだけで、それでTF開発はきつい。
VMインスタンスには外部IPアドレスが割り振られ、ゲートウェイを設定するとVMにインストールしたAnacondaのJupyterにローカルからアクセスできることは確認したが、GCPの手順通りにCUDAをインストールしても入ってくれず諦めた。たとえできたとしても、それって結局3のことだもの。ノートブック用GPU付きVMインスタンスを作成する。
[AI Platform]→[ノートブック]を選択する。「新しいインスタンス」を押し、「TensorFlow 2.2」→「With 1 NVIDIA Tesla T4」を選択する。
TFのバージョンは所望のものを選択する。「新しいノートブック インスタンス」画面でノートブック用VMインスタンスの設定を行う。
インスタンス名は適当に、「リージョン」にリクエストした時の”asia-northeast1 (Tokyo)”、「ゾーン」に” asia-northeast1-a”か、”…-c”を選択する。今現在”…-b”にはGPUが割り当たらない。
ML後進国の日本人にはGPUはそんなに必要ないのだろうと…2,3分待つとVMインスタンスが作成されるので一旦ホッとして、目的のGPUが割りついていることを確認し、”JUPYTERLABを開く”を押すとブラウザの別タブでJupyterが起動する。
Jupyter動作確認
最初のセルでGPUが認識されているか確認する。
import tensorflow as tf print(tf.__version__) #2.2.0が表示されること tf.config.list_physical_devices(‘GPU’) #'/physical_device:GPU:0'的なことが表示されること“File”から”Shut Down”を選択しブラウザのこのタブを閉じる。
VMインスタンスが停止するわけではないので、インスタンスが選択されている状態で「停止」を押す。
「停止」を押さなければずっと課金されるので注意。以上
- 投稿日:2020-06-30T22:02:01+09:00
Google Cloud Platform設定 備忘録
概要
Google Cloud PlatformにGPU付きのTensorFlow環境を設定する手順を備忘録として残す。
- 実施期間: 2020年7月
- 環境:GCP
- Python3 + TF2.2.0
- GPU: NVIDIA Tesla T4背景
Google ColaboratoryのGPUを使わせていただきDNNモデルをいじくっているが、やはり無料ということもあって、連続でTraining させるにはつらいシーンもある。
GCPは初めの$300分まで無料利用できるので、どんな感じか試してみたのだが、GPUの割付に手間取った。それがこの備忘録を残す理由である。
GCPの手順書をくまなく読めば理解できるのであろうが、とても分かりづらく読む気が起きない。
いくつかサイトを見つけたが、基本がわかっていないせいなのか、その通りにやってもうまくいかない。ユーザ登録と最初のプロジェクト作成
まず、使っているOSがWin10の場合、デフォルトブラウザをIEからChromeに変更しておくこと。
GCPのサイトに行きユーザ登録する。$300を超過した分が自動的に徴収されるので、登録にはクレジットカードが必須。
自分のトップページから「新しいプロジェクト」を作成しておく(キャプチャをとった時点ではすでに"GPU-VM-test01"というプロジェクトを作成済み)。GPUの申請
GCPはAWSと違いデフォルトでGPUはついていない。そのため以下の手順でGPUを申請する必要あり。
GCPの手順書をよ~っく読むとそれらしいことが書いてあるが、よほど根気強くなければその手順書まで辿り着けないと思う。「Compute Engine システムとユーザーを保護するため、新しいプロジェクトにはグローバル GPU 割り当てが設定されます。この割り当ては、サポート対象のすべてのゾーンで作成できる GPU の総数を制限するものです。GPU 割り当てをリクエストするときは、各リージョンで作成する GPU モデルに対する割り当てに加え、すべてのゾーンにおけるすべてのタイプの GPU の総数に対するグローバル割り当てもリクエストする必要があります。」
[IAMと管理]→[割り当て]を選択する。割り当て画面で「場所」に”asia-northeast1”と”グローバル”の2つを選択、「指標」に”GPUs (all regions)”、”NVIDIA T4 GPUs”の2つを選択する。
asia-northeast1(Tokyo)/2(Osaka)ではTesla T4しか選択できない。米国のどこかにするとGPU全種が選択可能となるが、大きなファイルのUploadがあるため近場を選択する。T4が一番安いし。
東京か大阪かは各位の住まいによる。初期状態では、上図右端の「上限」はどちらも”0”となっている。左2つのチェックボックスにチェックを入れて「割り当てを編集」を押すと、「2件の割り当てを選択」ペインが現れる。
左上図で名前とメアドはデフォルトのまま、電話番号(+81はなくてもOK)のみ記入し「次へ」を押す。
右上図で”GPUs (all regions)”と”NVIDIA T4 GPUs - asia-northeast1”にそれぞれ”1”と入力し、リクエストの説明を簡単に(例えば、”Need this for DNN training.”くらい)記入して「完了」→「リクエストを送信」を押す。
2営業日ほどで申請時のメアドに下記のような返信が来る。このメールにもあるようにGPUは申請したプロジェクトに対し割り付けられる。
プロジェクト内で作成されるVMインスタンすべてでシェアすることが可能。
ここまでが今回キモであった前準備環境の作成
承認を待っている間、GCPを弄っていると3つくらいの方法がありそう。
- VMインスタンスを作成し、そこにCUDAやTFやAnacondaを入れる。
- Marketplaceにある設定済みVMからVMインスタンスを作成する。
- ノートブック専用のVMインスタンスを作成する。
おいらの用途で使えるのは3のみ。
1,2はそもそも環境構築後、どのように使うかイメージできない。VMインスタンスの操作はローカルPCのCUIからだけで、それでTF開発はきつい。
VMインスタンスには外部IPアドレスが割り振られ、ゲートウェイを設定するとVMにインストールしたAnacondaのJupyterにローカルからアクセスできることは確認したが、GCPの手順通りにCUDAをインストールしても入ってくれず諦めた。たとえできたとしても、それって結局3のことだもの。ノートブック用GPU付きVMインスタンスを作成する。
[AI Platform]→[ノートブック]を選択する。「新しいインスタンス」を押し、「TensorFlow 2.2」→「With 1 NVIDIA Tesla T4」を選択する。
TFのバージョンは所望のものを選択する。「新しいノートブック インスタンス」画面でノートブック用VMインスタンスの設定を行う。
インスタンス名は適当に、「リージョン」にリクエストした時の”asia-northeast1 (Tokyo)”、「ゾーン」に” asia-northeast1-a”か、”…-c”を選択する。今現在”…-b”にはGPUが割り当たらない。
ML後進国の日本人にはGPUはそんなに必要ないのだろうと…2,3分待つとVMインスタンスが作成されるので一旦ホッとして、目的のGPUが割りついていることを確認し、”JUPYTERLABを開く”を押すとブラウザの別タブでJupyterが起動する。
Jupyter動作確認
最初のセルでGPUが認識されているか確認する。
import tensorflow as tf print(tf.__version__) #2.2.0が表示されること tf.config.list_physical_devices(‘GPU’) #'/physical_device:GPU:0'的なことが表示されること“File”から”Shut Down”を選択しブラウザのこのタブを閉じる。
VMインスタンスが停止するわけではないので、インスタンスが選択されている状態で「停止」を押す。
「停止」を押さなければずっと課金されるので注意。以上
- 投稿日:2020-06-30T21:43:08+09:00
ML-agents(Release3) で「ImportError: DLL load failed: 指定されたモジュールが見つかりません。」というエラーが出る場合の対処
概要
ML-agentsのRelease3をインストールした後に
importError: DLL load failed
というエラーが出る原因は、TensorFlowのバージョン問題です。環境
- Windows10 64bit
- Python 3.6.1 (Anaconda 5.3.0)
- Unity 2019.1.0f2
起きたこと
https://github.com/Unity-Technologies/ml-agents/blob/release_3_docs/docs/Readme.md
上記ページに従い、
Anaconda PromptでML-agentsをpip3でインストール後に
mlagents-learn --help
を実行した後に、下記のようなエラーが出る。ImportError: DLL load failed: 指定されたモジュールが見つかりません。
原因
詳細な原因は不明。
TensorFlowバージョン2.1.1と実行環境(WindowsかAnacondaか)との相性が悪かったと思われる。対策
TensorFlowバージョンを2.0まで落とす。
そうすると、正常に動作しました。
(--helpも、実際の学習動作も)参考サイト
- 投稿日:2020-06-30T18:01:16+09:00
Concatenateの理解
はじめに
KerasのF.Cholletの本を読むと、Concatenate Layerの説明がされている部分がある。下記の絵で表現されているが、この中でどんな演算が行われているかさっぱりしたまなであった。
ところで、U-NET, ResnetなどにConcatenate Layerが重要な役割をしていることから、これ以上にConcatenate Layerを理解せず放置することは良くない判断で、簡単なテンソルを利用し、Concatenate Layerの挙動を確認することにした。
理解
Excelで、文字列結合の時に、Concatenate関数を使ったことがあったので、何となく複数の配列を何の演算もせず、くっつけるイメージは持っていたが、Teratailにわかりやすい図があったので、ここで紹介する。
ここで、青と緑二つの行列がある。
これらの行列は2次元(2D)テンソルで、これらの行列のShapeは(3,3)である。
axisとは、テンソルの次元(Dimension)を言う。[テンソル(Tensor)の理解(2) : Shape]axisは、テンソルの次元の軸も指す。(物理でのモーメントを表記するときのベクトルを考えるといいかもしれない。)
2次元テンソルの場合、axis = 0が垂直方向、 axis = 1が水平方向を意味する。
ただし、axis = -1とした場合は、一番最後の軸を意味する。Pythonのリストのスライスを考えるといい。
そして、Concatenate Layerの時、結合方向を指定することが可能である。
(1) axis = 0の場合、垂直方向に結合する。
(2) axis = 1の場合、水平方向に結合する。(ただし、2次元の場合、axis = -1も同じ意味)
プログラムコード
import tensorflow as tf import numpy as np #2D Tensorの準備 x1 = np.array([[1,3,3], [5,2,1], [0,9,5]]) x2 = np.array([[3,2,3], [8,7,4], [0,1,1]]) print('x1=',x1) print('x2=',x2)Concatenate Layer
垂直結合
#Concantenate Layer # axis = 0, 垂直方向結合 y1 = tf.keras.layers.Concatenate(axis=0)([x1,x2]) print('y1=',y1)垂直結合結果y1= tf.Tensor( [[1 3 3] [5 2 1] [0 9 5] [3 2 3] [8 7 4] [0 1 1]], shape=(6, 3), dtype=int32)水平結合
# axis = 1 (or axis = -1) 水平方向結合 y2 = tf.keras.layers.Concatenate(axis=-1)([x1,x2]) print('y2=',y2)水平結合結果y2= tf.Tensor( [[1 3 3 3 2 3] [5 2 1 8 7 4] [0 9 5 0 1 1]], shape=(3, 6), dtype=int32)まとめ
やっとConcatenate Layerの動作を理解した。(気がする。)
ただし、Concatenateのスペリングがなかなか頭に入らない。(涙)参考資料