1. 概要
このラボでは、Vertex AI Workbench を使用してノートブックの実行を構成、起動する方法について学習します。
学習内容
次の方法を学習します。
- ノートブックでパラメータを使用する
- Vertex AI Workbench UI からノートブックの実行を構成して起動
Google Cloud でこのラボを実行するための総費用は約 $2 です。
2. Vertex AI の概要
このラボでは、Google Cloud で利用できる最新の AI プロダクトを使用します。Vertex AI は Google Cloud 全体の ML サービスを統合してシームレスな開発エクスペリエンスを提供できるプロダクトです。これまで、AutoML でトレーニングしたモデルやカスタムモデルには、個別のサービスを介してアクセスする必要がありました。この新しいサービスは、それらを他の新しいプロダクトとともに 1 つの API へと結合します。既存のプロジェクトを Vertex AI に移行することもできます。ご意見やご質問がありましたら、サポートページからご連絡ください。
Vertex AI には、エンドツーエンドの ML ワークフローをサポートするさまざまなプロダクトが含まれています。このラボでは、Vertex AI Workbench に重点を置きます。
Vertex AI Workbench は、データサービス(Dataproc、Dataflow、BigQuery、Dataplex など)および Vertex AI との緊密な統合を通じて、エンドツーエンドのノートブック ベースのワークフローを迅速に構築します。これを使用することで、データ サイエンティストは GCP データサービスへの接続、データセットの分析、さまざまなモデリング技術の試験運用、トレーニング済みモデルの本番環境へのデプロイ、モデル ライフサイクルを通じた MLOps の管理が可能になります。
3. ユースケースの概要
このラボでは、TensorFlow Datasets の DeepWeeds データセットを使用して、転移学習を使用して画像分類モデルをトレーニングします。使用するTensorFlow Hubさまざまなモデル アーキテクチャから抽出された特徴ベクトル(たとえば、Resnet50 、インセプション、MobileNet (すべて、事前トレーニング済み)ImageNet ベンチマーク データセットをご覧ください。Vertex AI Workbench UI からノートブック エグゼキュータを活用して、これらの事前トレーニング済みモデルを使用するジョブを Vertex AI Training で起動し、最後のレイヤを再トレーニングして DeepWeeds データセットからクラスを認識します。
4.環境の設定
この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順に従ってください。
ステップ 1: Compute Engine API を有効にする
関連項目Compute Engine 、実現] をクリックします。
ステップ 2: Vertex AI API を有効にする
Cloud Console の [Vertex AI] セクションに移動し、[Vertex AI API を有効にする] をクリックします。
ステップ 3: Vertex AI Workbench インスタンスを作成する
Cloud Console の Vertex AI セクションで Workbench をクリックします。
Notebooks API をまだ有効にしていない場合は、有効にします。
有効にしたら、[マネージド ノートブック] をクリックします。
[新しいノートブック] を選択します。
ノートブックに名前を付けて、[Advanced Settings] をクリックします。
[詳細設定] で、アイドル状態でのシャットダウンを有効にし、分数を 60 に設定します。つまり、使用していないときはノートブックが自動的にシャットダウンされるため、不要なコストは発生しません。
その他の詳細設定はすべてそのままで構いません。
次に、[作成] をクリックします。
インスタンスが作成されたら、[JupyterLab を開く] を選択します。
新しいインスタンスを初めて使用するときは、認証を求められます。
Vertex AI Workbench にはコンピューティング互換性レイヤがあるため、TensorFlow、PySpark、R などのカーネルをすべて単一のノートブック インスタンスから起動できます。認証後、使用するノートブックの種類をランチャーで選択できます。
このラボでは、TensorFlow 2 カーネルを選択します。
5. トレーニング コードを作成する
DeepWeeds データセットは、オーストラリア固有の 8 種類の雑草をキャプチャした 17,509 個の画像で構成されています。このセクションでは、DeepWeeds データセットを前処理し、TensorFlow Hub からダウンロードした特徴ベクトルを使用して画像分類モデルを構築してトレーニングするコードを記述します。
ノートブックのセルに次のコード スニペットをコピーする必要があります。セルの実行は任意です。
ステップ 1: データセットをダウンロードして前処理する
まず、必要なライブラリをインポートします。
import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub
TensorFlow Datasets からデータをダウンロードして、クラスの数とデータセットのサイズを抽出します。
data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples
画像関数を 255 にスケーリングする前処理関数を定義します。
def preprocess_data(image, label):
image = tf.image.resize(image, (300,300))
return tf.cast(image, tf.float32) / 255., label
DeepWeeds データセットには、トレーニングと検証の分割は含まれていません。トレーニング データセットのみが含まれています。以下のコードでは、そのデータの 80% をトレーニングに使用し、残りの 20% を検証に使用します。
# Create train/validation splits
# Shuffle dataset
dataset = data['train'].shuffle(1000)
train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)
train_data = dataset.take(train_size)
train_data = train_data.map(preprocess_data)
train_data = train_data.batch(64)
validation_data = dataset.skip(train_size)
validation_data = validation_data.map(preprocess_data)
validation_data = validation_data.batch(64)
ステップ 2: モデルを作成する
トレーニング データセットと検証データセットを作成したら、モデルを構築する準備が整いました。TensorFlow Hub には、トップ分類レイヤのない、事前にトレーニングされたモデルである特徴ベクトルが用意されています。事前トレーニング済みモデルを hub.KerasLayer
でラップして特徴抽出ツールを作成します。これにより、TensorFlow SavedModel が Keras レイヤとしてラップされます。その後、Keras シーケンシャル API を使用して分類レイヤを追加し、モデルを作成します。
まず、パラメータ feature_extractor_model
を定義します。これは、モデルのベースとして使用する TensorFlow Hub 特徴ベクトルの名前です。
feature_extractor_model = "inception_v3"
次に、このセルをパラメータ セルにし、実行時に feature_extractor_model
の値を渡せるようにします。
まず、セルを選択して、右側のパネルでプロパティ インスペクタをクリックします。
タグを使用すると、ノートブックにメタデータを簡単に追加できます。[タグを追加] ボックスに「parameters」と入力し、Enter キーを押します。後で実行を構成する際に、さまざまな値(この例では TensorFlow Hub モデル)を渡します。ノートブックのエグゼキュータはパラメータ化を行うセルを認識するため、他の単語ではなく「parameters」という単語を入力する必要があります。
二重の歯車アイコンをもう一度クリックすると、プロパティ インスペクタを閉じることができます。
新しいセルを作成し、tf_hub_uri
を定義します。ここで、文字列補間を使用して、ノートブックの特定の実行の基本モデルとして使用する事前トレーニング済みモデルの名前に置き換えてください。デフォルトでは feature_extractor_model
は "inception_v3"
に設定されていますが、その他の有効な値は "resnet_v2_50"
または "mobilenet_v1_100_224"
です。その他のオプションについては、TensorFlow Hub カタログをご覧ください。
tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"
次に、hub.KerasLayer
を使用して特徴抽出ツールを作成し、上記で定義した tf_hub_uri
を渡します。trainable=False
引数を設定して変数を凍結し、トレーニング用に加えられる新しい分類レイヤのみがトレーニングで変更されるようにする。
feature_extractor_layer = hub.KerasLayer(
tf_hub_uri,
trainable=False)
モデルを完成させるには、Feature Extractor レイヤを tf.keras.Sequential
モデルでラップし、分類用の完全に接続されたレイヤを追加します。この分類ヘッドのユニット数は、データセット内のクラス数と同じにする必要があります。
model = tf.keras.Sequential([
feature_extractor_layer,
tf.keras.layers.Dense(units=NUM_CLASSES)
])
最後に、モデルのコンパイルと適合を行います。
model.compile(
optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['acc'])
model.fit(train_data, validation_data=validation_data, epochs=20)
6. ノートブックを実行する
ノートブックの上部にあるエグゼキュータ アイコンをクリックします。
ステップ 1: トレーニング ジョブを構成する
実行名を入力し、プロジェクト内でストレージ バケットを指定します。
マシンタイプを [4 CPU、15 GB RAM] に設定します。
NVIDIA GPU を 1 つ追加します。
環境を TensorFlow Enterprise 2.6(GPU)に設定します。
[1 回限りの実行] を選択します。
ステップ 2: パラメータを設定する
[詳細オプション] プルダウンをクリックして、パラメータを設定します。ボックスに「feature_extractor_model=resnet_v2_50
」と入力します。これにより、ノートブックでこのパラメータに設定したデフォルト値の inception_v3
が resnet_v2_50
でオーバーライドされます。
[デフォルトのサービス アカウントを使用] チェックボックスはオンのままにすることができます。
[送信] をクリックします。
ステップ 3: 結果を確認する
コンソール UI の [実行] タブに、ノートブックの実行ステータスが表示されます。
実行名をクリックすると、ノートブックが実行されている Vertex AI Training ジョブに移動します。
ジョブが完了すると、[結果を表示] をクリックして出力ノートブックを確認できます。
出力ノートブックには、実行時に渡された値によって feature_extractor_model
の値が上書きされたことがわかります。
お疲れさまでした
Vertex AI Workbench を使用して以下のことを学習しました。
- ノートブックでパラメータを使用する
- Vertex AI Workbench UI からノートブックの実行を構成して起動
Vertex AI のさまざまな部分について詳しくは、こちらのドキュメントをご覧ください。
7. クリーンアップ
デフォルトでは、マネージド ノートブックは 180 分間操作がないと自動的にシャットダウンします。インスタンスを手動でシャットダウンする場合は、コンソールの Vertex AI Workbench セクションにある [停止] ボタンをクリックします。ノートブックを完全に削除する場合は、[削除] ボタンをクリックします。
ストレージ バケットを削除するには、Cloud Console のナビゲーション メニューで [ストレージ] を探してバケットを選択し、[削除] をクリックします。