20200630のTensorFlowに関する記事は4件です。

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"というプロジェクトを作成済み)。

pict1.png
詳細は忘れたがここまでは戸惑うところはなかった。

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が一番安いし。
東京か大阪かは各位の住まいによる。

pict2.png

初期状態では、上図右端の「上限」はどちらも”0”となっている。左2つのチェックボックスにチェックを入れて「割り当てを編集」を押すと、「2件の割り当てを選択」ペインが現れる。

pict3.png

左上図で名前とメアドはデフォルトのまま、電話番号(+81はなくてもOK)のみ記入し「次へ」を押す。
右上図で”GPUs (all regions)”と”NVIDIA T4 GPUs - asia-northeast1”にそれぞれ”1”と入力し、リクエストの説明を簡単に(例えば、”Need this for DNN training.”くらい)記入して「完了」→「リクエストを送信」を押す。
2営業日ほどで申請時のメアドに下記のような返信が来る。

pict4.png

このメールにもあるようにGPUは申請したプロジェクトに対し割り付けられる。
プロジェクト内で作成されるVMインスタンすべてでシェアすることが可能。
ここまでが今回キモであった前準備

環境の作成

承認を待っている間、GCPを弄っていると3つくらいの方法がありそう。

  1. VMインスタンスを作成し、そこにCUDAやTFやAnacondaを入れる。
  2. Marketplaceにある設定済みVMからVMインスタンスを作成する。
  3. ノートブック専用の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のバージョンは所望のものを選択する。

pict5.png

「新しいノートブック インスタンス」画面でノートブック用VMインスタンスの設定を行う。
インスタンス名は適当に、「リージョン」にリクエストした時の”asia-northeast1 (Tokyo)”、「ゾーン」に” asia-northeast1-a”か、”…-c”を選択する。今現在”…-b”にはGPUが割り当たらない。
ML後進国の日本人にはGPUはそんなに必要ないのだろうと…

pict6.png

2,3分待つとVMインスタンスが作成されるので一旦ホッとして、目的のGPUが割りついていることを確認し、”JUPYTERLABを開く”を押すとブラウザの別タブでJupyterが起動する。

pict7.png

Jupyter動作確認

最初のセルでGPUが認識されているか確認する。

pict8.png

import tensorflow as tf
print(tf.__version__)               #2.2.0が表示されること
tf.config.list_physical_devices(GPU)  #'/physical_device:GPU:0'的なことが表示されること

“File”から”Shut Down”を選択しブラウザのこのタブを閉じる。
VMインスタンスが停止するわけではないので、インスタンスが選択されている状態で「停止」を押す。
「停止」を押さなければずっと課金されるので注意。

pict10.png

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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"というプロジェクトを作成済み)。

pict1.png
詳細は忘れたがここまでは戸惑うところはなかった。

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が一番安いし。
東京か大阪かは各位の住まいによる。

pict2.png

初期状態では、上図右端の「上限」はどちらも”0”となっている。左2つのチェックボックスにチェックを入れて「割り当てを編集」を押すと、「2件の割り当てを選択」ペインが現れる。

pict3.png

左上図で名前とメアドはデフォルトのまま、電話番号(+81はなくてもOK)のみ記入し「次へ」を押す。
右上図で”GPUs (all regions)”と”NVIDIA T4 GPUs - asia-northeast1”にそれぞれ”1”と入力し、リクエストの説明を簡単に(例えば、”Need this for DNN training.”くらい)記入して「完了」→「リクエストを送信」を押す。
2営業日ほどで申請時のメアドに下記のような返信が来る。

pict4.png

このメールにもあるようにGPUは申請したプロジェクトに対し割り付けられる。
プロジェクト内で作成されるVMインスタンすべてでシェアすることが可能。
ここまでが今回キモであった前準備

環境の作成

承認を待っている間、GCPを弄っていると3つくらいの方法がありそう。

  1. VMインスタンスを作成し、そこにCUDAやTFやAnacondaを入れる。
  2. Marketplaceにある設定済みVMからVMインスタンスを作成する。
  3. ノートブック専用の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のバージョンは所望のものを選択する。

pict5.png

「新しいノートブック インスタンス」画面でノートブック用VMインスタンスの設定を行う。
インスタンス名は適当に、「リージョン」にリクエストした時の”asia-northeast1 (Tokyo)”、「ゾーン」に” asia-northeast1-a”か、”…-c”を選択する。今現在”…-b”にはGPUが割り当たらない。
ML後進国の日本人にはGPUはそんなに必要ないのだろうと…

pict6.png

2,3分待つとVMインスタンスが作成されるので一旦ホッとして、目的のGPUが割りついていることを確認し、”JUPYTERLABを開く”を押すとブラウザの別タブでJupyterが起動する。

pict7.png

Jupyter動作確認

最初のセルでGPUが認識されているか確認する。

pict8.png

import tensorflow as tf
print(tf.__version__)               #2.2.0が表示されること
tf.config.list_physical_devices(GPU)  #'/physical_device:GPU:0'的なことが表示されること

“File”から”Shut Down”を選択しブラウザのこのタブを閉じる。
VMインスタンスが停止するわけではないので、インスタンスが選択されている状態で「停止」を押す。
「停止」を押さなければずっと課金されるので注意。

pict10.png

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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も、実際の学習動作も)

参考サイト

https://github.com/tensorflow/tensorflow/issues/35749

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Concatenateの理解

はじめに

KerasのF.Cholletの本を読むと、Concatenate Layerの説明がされている部分がある。下記の絵で表現されているが、この中でどんな演算が行われているかさっぱりしたまなであった。

image.png

ところで、U-NET, ResnetなどにConcatenate Layerが重要な役割をしていることから、これ以上にConcatenate Layerを理解せず放置することは良くない判断で、簡単なテンソルを利用し、Concatenate Layerの挙動を確認することにした。

image.png
図 U-Net アーキテクチャー
image.png
図 ResNetブロック

理解

Excelで、文字列結合の時に、Concatenate関数を使ったことがあったので、何となく複数の配列を何の演算もせず、くっつけるイメージは持っていたが、Teratailにわかりやすい図があったので、ここで紹介する。

ここで、青と緑二つの行列がある。
これらの行列は2次元(2D)テンソルで、これらの行列のShapeは(3,3)である。
axisとは、テンソルの次元(Dimension)を言う。[テンソル(Tensor)の理解(2) : Shape]image.png

axisは、テンソルの次元の軸も指す。(物理でのモーメントを表記するときのベクトルを考えるといいかもしれない。)

2次元テンソルの場合、axis = 0が垂直方向、 axis = 1が水平方向を意味する。

ただし、axis = -1とした場合は、一番最後の軸を意味する。Pythonのリストのスライスを考えるといい。

そして、Concatenate Layerの時、結合方向を指定することが可能である。

(1) axis = 0の場合、垂直方向に結合する。

(2) axis = 1の場合、水平方向に結合する。(ただし、2次元の場合、axis = -1も同じ意味)

image.png

プログラムコード

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のスペリングがなかなか頭に入らない。(涙)

参考資料

  1. axis=-1の意味がわかりません(Python・Keras)
  2. tf.keras.layers.Concatenate
  3. kerasで頭に描いたネットワーク構造を実現するためのTips ~ Lambda 編 ~
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む