Vertex AI Workbench: 転移学習とノートブック エグゼキュータによる画像分類モデルの構築

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 DatasetsDeepWeeds データセットを使用して、転移学習を使用して画像分類モデルをトレーニングします。使用する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 を有効にする] をクリックします。

Vertex AI ダッシュボード

ステップ 3: Vertex AI Workbench インスタンスを作成する

Cloud Console の Vertex AI セクションで Workbench をクリックします。

Vertex AI メニュー

Notebooks API をまだ有効にしていない場合は、有効にします。

ノートブック ID

有効にしたら、[マネージド ノートブック] をクリックします。

Notebooks_UI

[新しいノートブック] を選択します。

new_notebook

ノートブックに名前を付けて、[Advanced Settings] をクリックします。

create_notebook

[詳細設定] で、アイドル状態でのシャットダウンを有効にし、分数を 60 に設定します。つまり、使用していないときはノートブックが自動的にシャットダウンされるため、不要なコストは発生しません。

idle_timeout

その他の詳細設定はすべてそのままで構いません。

次に、[作成] をクリックします。

インスタンスが作成されたら、[JupyterLab を開く] を選択します。

open_jupyterlab

新しいインスタンスを初めて使用するときは、認証を求められます。

認証

Vertex AI Workbench にはコンピューティング互換性レイヤがあるため、TensorFlow、PySpark、R などのカーネルをすべて単一のノートブック インスタンスから起動できます。認証後、使用するノートブックの種類をランチャーで選択できます。

このラボでは、TensorFlow 2 カーネルを選択します。

tf_kernel

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」という単語を入力する必要があります。

add_tag [タグ]

二重の歯車アイコンをもう一度クリックすると、プロパティ インスペクタを閉じることができます。

新しいセルを作成し、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: トレーニング ジョブを構成する

実行名を入力し、プロジェクト内でストレージ バケットを指定します。

executor_config

マシンタイプを [4 CPU、15 GB RAM] に設定します。

NVIDIA GPU を 1 つ追加します。

環境を TensorFlow Enterprise 2.6(GPU)に設定します。

[1 回限りの実行] を選択します。

ステップ 2: パラメータを設定する

[詳細オプション] プルダウンをクリックして、パラメータを設定します。ボックスに「feature_extractor_model=resnet_v2_50」と入力します。これにより、ノートブックでこのパラメータに設定したデフォルト値の inception_v3resnet_v2_50 でオーバーライドされます。

詳細オプション

[デフォルトのサービス アカウントを使用] チェックボックスはオンのままにすることができます。

[送信] をクリックします。

ステップ 3: 結果を確認する

コンソール UI の [実行] タブに、ノートブックの実行ステータスが表示されます。

executions_UI

実行名をクリックすると、ノートブックが実行されている Vertex AI Training ジョブに移動します。

頂点トレーニング

ジョブが完了すると、[結果を表示] をクリックして出力ノートブックを確認できます。

表示結果

出力ノートブックには、実行時に渡された値によって feature_extractor_model の値が上書きされたことがわかります。

param_cells

お疲れさまでした

Vertex AI Workbench を使用して以下のことを学習しました。

  • ノートブックでパラメータを使用する
  • Vertex AI Workbench UI からノートブックの実行を構成して起動

Vertex AI のさまざまな部分について詳しくは、こちらのドキュメントをご覧ください。

7. クリーンアップ

デフォルトでは、マネージド ノートブックは 180 分間操作がないと自動的にシャットダウンします。インスタンスを手動でシャットダウンする場合は、コンソールの Vertex AI Workbench セクションにある [停止] ボタンをクリックします。ノートブックを完全に削除する場合は、[削除] ボタンをクリックします。

削除

ストレージ バケットを削除するには、Cloud Console のナビゲーション メニューで [ストレージ] を探してバケットを選択し、[削除] をクリックします。

ストレージを削除