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 を使用して、ResNet50、Inception、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 コンソールの [Vertex AI] セクションに移動し、[Vertex AI API を有効にする] をクリックします。
ステップ 3: Vertex AI Workbench インスタンスを作成する
Cloud Console の [Vertex AI] セクションで [ワークベンチ] をクリックします。
Notebooks API をまだ有効にしていない場合は、有効にします。
有効にしたら、[マネージド ノートブック] をクリックします。
[新しいノートブック] を選択します。
ノートブックに名前を付けて、[詳細設定] をクリックします。
[詳細設定] で、アイドル状態でのシャットダウンを有効にして、シャットダウンまでの時間(分)を 60 に設定します。これにより、使用されていないノートブックが自動的にシャットダウンされるため、不要なコストが発生しません。
詳細設定のその他の設定はそのままで構いません。
[作成] をクリックします。
インスタンスが作成されたら、[JUPYTERLAB を開く] を選択します。
新しいインスタンスを初めて使用するときに、認証が求められます。
Vertex AI Workbench にはコンピューティング互換性レイヤがあり、単一のノートブック インスタンスから TensorFlow、PySpark、R などのカーネルを起動できます。認証後、使用するノートブックの種類をランチャーから選択できるようになります。
このラボでは、TensorFlow 2 カーネルを選択します。
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
の値を渡すことができます。
まず、セルを選択し、右側のパネルでプロパティ インスペクタをクリックします。
タグは、メタデータをノートブックに追加する簡単な方法です。「パラメータ」と入力[タグを追加]をクリックして 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)
モデルを完成させるには、特徴エクストラクタ レイヤを 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: トレーニング ジョブを構成する
実行に名前を付け、プロジェクト内のストレージ バケットを指定します。
マシンタイプを [4 CPUs, 15 GB RAM] に設定します。
1 つの NVIDIA GPU を追加します。
環境を TensorFlow Enterprise 2.6(GPU)に設定します。
[1 回限りの実行] を選択します。
ステップ 2: パラメータを構成する
[詳細オプション] プルダウンをクリックして、パラメータを設定します。ボックスに「feature_extractor_model=resnet_v2_50
」と入力します。これにより、ノートブックでこのパラメータに設定したデフォルト値 inception_v3
が resnet_v2_50
でオーバーライドされます。
[デフォルトのサービス アカウントを使用する] チェックボックスはオンのままにできます。
[送信] をクリックします。
ステップ 3: 結果を確認する
コンソール UI の [実行] タブで、ノートブックの実行ステータスを確認できます。
実行名をクリックすると、ノートブックが実行されている Vertex AI Training ジョブが表示されます。
ジョブが完了すると、[VIEW RESULT] をクリックして出力ノートブックを表示できます。
出力ノートブックで、feature_extractor_model
の値が実行時に渡された値によって上書きされていることがわかります。
お疲れさまでした
Vertex AI Workbench を使用して次のことを行う方法を学びました。
- ノートブックでパラメータを使用する
- Vertex AI Workbench UI でノートブックの実行を構成して起動する
Vertex AI のさまざまな機能の詳細については、こちらのドキュメントをご覧ください。
7. クリーンアップ
デフォルトでは、180 分間操作がないと、マネージド ノートブックは自動的にシャットダウンします。インスタンスを手動でシャットダウンする場合は、コンソールで [Vertex AI] の [ワークベンチ] セクションにある [停止] ボタンをクリックします。ノートブックを完全に削除する場合は、[削除] ボタンをクリックします。
ストレージ バケットを削除するには、Cloud Console のナビゲーション メニューで [ストレージ] を移動してバケットを選択し、[削除] をクリックします。