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 でトレーニングしたモデルやカスタムモデルには、個別のサービスを介してアクセスする必要がありました。Vertex AI は、これらの個別のサービスを他の新しいプロダクトとともに 1 つの API へと結合します。既存のプロジェクトを Vertex AI に移行することもできます。ご意見やご質問がありましたら、サポートページからお寄せください。

Vertex AI には、エンドツーエンドの ML ワークフローをサポートするさまざまなプロダクトが含まれています。このラボでは、Vertex AI Workbench について詳しく学習します。

Vertex AI Workbench は、データサービス(Dataproc、Dataflow、BigQuery、Dataplex など)や Vertex AI との緊密なインテグレーションを通じて、ノートブック ベースのエンドツーエンドのワークフローをすばやく構築するのに便利です。データ サイエンティストは Vertex AI Workbench を使用して、GCP データサービスへの接続、データセットの分析、各種モデリング手法のテスト、トレーニング済みモデルの本番環境への導入、モデル ライフサイクルを通した MLOps の管理を行うことができます。

3. ユースケースの概要

このラボでは、転移学習を使用して、TensorFlow データセットDeepWeeds データセットで画像分類モデルをトレーニングします。TensorFlow Hub を使用して、ResNet50InceptionMobileNet などのさまざまなモデル アーキテクチャから抽出した特徴ベクトルをテストします。これらはすべて 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 コンソールの [Vertex AI] セクションに移動し、[Vertex AI API を有効にする] をクリックします。

Vertex AI ダッシュボード

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

Cloud Console の [Vertex AI] セクションで [ワークベンチ] をクリックします。

Vertex AI メニュー

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

Notebook_api

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

Notebooks_UI

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

new_notebook

ノートブックに名前を付けて、[詳細設定] をクリックします。

create_notebook

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

idle_timeout

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

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

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

open_jupyterlab

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

authenticate

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

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

tf_kernel

5. トレーニング コードを作成する

DeepWeeds データセットは、オーストラリアに自生する 8 種類の雑草を撮影した 17,509 枚の画像で構成されています。このセクションでは、DeepWeeds データセットの前処理を行うコードを記述し、TensorFlow Hub からダウンロードした特徴ベクトルを使用して画像分類モデルを構築し、トレーニングします。

次のコード スニペットをノートブックのセルにコピーする必要があります。セルの実行は省略可能です。

ステップ 1: データセットをダウンロードして前処理する

まず、TensorFlow データセットのナイトリー バージョンをインストールして、DeepWeeds データセットの最新バージョンを取得します。

!pip install tfds-nightly

次に、必要なライブラリをインポートします。

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 Sequential API を使用してモデルを作成します。

まず、パラメータ feature_extractor_model を定義します。これは、モデルのベースとして使用する TensorFlow Hub 特徴ベクトルの名前です。

feature_extractor_model = "inception_v3"

次に、このセルをパラメータ セルにします。これにより、実行時に feature_extractor_model の値を渡すことができます。

まず、セルを選択し、右側のパネルでプロパティ インスペクタをクリックします。

property_inspector

タグは、メタデータをノートブックに追加する簡単な方法です。「パラメータ」と入力[タグを追加]をクリックして 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)

モデルを完成させるには、特徴エクストラクタ レイヤを 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=3)

6. ノートブックを実行する

ノートブックの上部にある [Executor] アイコンをクリックします。

エグゼキュータ

ステップ 1: トレーニング ジョブを構成する

実行に名前を付け、プロジェクト内のストレージ バケットを指定します。

executor_config

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

1 つの NVIDIA GPU を追加します。

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

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

ステップ 2: パラメータを構成する

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

advanced_options

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

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

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

コンソール UI の [実行] タブで、ノートブックの実行ステータスを確認できます。

executions_UI

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

vertex_training

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

view_result

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

param_cells

お疲れさまでした

Vertex AI Workbench を使用して次のことを行う方法を学びました。

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

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

7. クリーンアップ

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

削除

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

ストレージを削除