AutoMLで始めるVertex AIの基本的な使い方

こんにちは、小澤です。

Vertex AIは機械学習に関連する様々な仕組みを提供してくれています。 今回は、その中でも手軽に利用可能な表形式のデータに対するAutoMLをコンソール上から実行してみることで、 利用方法の基本的な流れを確認していきます。

全体の流れ

Vertex AIでAutoMLを利用するときの全体の流れとしては以下のようになります。

  1. 対象となるデータをデータセットに登録する
  2. データセットを指定してAutoMLの学習処理を実行する
  3. 学習済みモデルを使ってエンドポイントの作成またはバッチ予測を行う

実施する内容はこの3ステップのみとなります。

データを「1」で利用可能な形式に変換するまでの前処理は事前に行われている前提となりますが、 AutoMLを利用すると、機械学習の難しい部分を意識することなく利用可能な状態できることがわかります。

では、具体的な流れを見ていきましょう

データをデータセットの登録

まず最初にやることはAutoMLで利用するデータをVertex AIのデータセットに登録することです。

Vertex AIのデータセットはデータそのものを内部で保持するわけでありません。 Cloud StorageやBigQueryといった場所にデータを保存しておき、 AIのデータセットではどこにあるデータをVertex AIで利用するのかを紐づけます。

データセットは以下の2つのステップで行います

  1. データセットの作成
  2. データセットにデータを登録

データセットの作成はVertex AIのメニューから「データセット」を選択して、上部にある「作成」を押します。

作成画面では、「データセット名」と「データタイプと目標の選択」を設定します。 データセット名は任意の名前で問題ありません。

データタイプは項目にある通り「画像」や「テキスト」などのデータの種類、目標は「回帰/分類」などの機械学習でどのような予測を行うかの種類を選択します。 コンソールではそれぞれ表示されているものから選択する形式となっているため、どのような種類のデータに対してどのようなタスクが実行可能なのかの確認にも使えます。 今回は、「表形式」のデータタイプに対して「回帰/分類」を行うためのデータセットを作成します。

これで、データセットの作成が完了します。 次にこのデータセットに対してどのデータを紐づけるかを設定します。

表形式のデータの場合、Cloud Storageに保存されたCSVファイルかBigQueryをデータソースと選択できます。 また、コンソール上ではローカルのCSVファイルを指定してCloud Storageにアップロードしたのち、それをデータソースとすることも可能です。 上記画像では、Cloud Storage上にサンプルデータとして公開されているカリフォルニアの地価のデータを選択しています。

データソースの設定完了後は列に関する情報などが確認できる状態になります。

これでAutoMLから利用可能なデータセットの準備は完了です。

AutoMLの学習処理の実行

作成したデータセットを使ってAutoMLの処理を実行します。

メニューのトレーニングから作成します。

最初に「トレーニング方法」でいくつかの項目を設定します。

  • Dataset : 先ほど作成したデータセット
  • Objective : 実行するタスク(今回は地価の数値予測なので回帰)
  • Model training metohd: AutoML

次の「モデルの詳細」でトレーニングの作成と目的変数の設定を行います。 Vertex AIでは新規に学習をするほかに、既存の学習済みモデルの新しいバージョンを作成できます。 これはデータを更新して新しいモデルを作成する際など、モデルを更新しつつ旧バージョンも残しておくのに有用です。

今回は新たに作成するもののため、「新しいモデルのトレーニング」を選択します。 Target columnでは、目的変数となる列名を選択します。

Vertex AIでデータセットを利用する際には、学習時に自動的にtrain, valid, testの3つのデータに分けてくれます。 この際「Export test dataset to BigQuery」にチェックを入れて出力先を設定しておくことでテストデータをBigQueryに保存しておくことも可能です。 なお、分割されたデータはCloud Storageに出力されますので、そちらから直接利用することも可能です。

続いての「トレーニングオプション」では説明変数に関する設定を行います。 各列の項目にチェックを入れることで、その列を利用します。 また、データの型を明示的に設定することも可能です。

詳細オプションは任意で設定するものとなりますが、重みづけや評価指標の変更が可能です。

最後に「コンピューティングと料金」で最大でどのくらい学習を行うかの設定をします。 ここで設定した値が最大で発生する料金となります。

AutoMLでは精度向上のための様々な学習が行われますが、 より精度が向上する余地があってもここで設定したノード時間で処理を中断させることで結果とコストのトレードオフをユーザが設定できます。 この設定は"最大"ノード時間となっています。 「Enable early stopping」オプションを有効にすることで、これ以上の向上が見込めないと判断された場合は途中で処理を終了することが可能なため、余分なコストは発生しません。

なお、ここで設定したものはノード時間という内部の単位であるため、実際の処理にかかる現実の時間ではありません。 「1時間以内にモデル作って」などの指示ではないのでご注意ください。

機械学習のモデリングは時間がかかるので、学習処理を実行したら暫くは別なことをします。 Vertex AIのAutoMLは完了したらメールでお知らせしてくれるので、一度完全に忘れてしまっても問題ありません。

学習が完了したら、モデルを使った推論が可能になります。 学習済みモデルはModel Registryに登録されるのでそこから確認できます。

Model Registryに登録されたものはバージョンごとに学習済みモデルのファイルの他、学習時の情報や推論の際に利用するコンテナに関する情報が含まれています。

Vertex AIでは2種類の方法で推論が可能ですので、この後はそれぞれ見ていきましょう。

エンドポイントの作成

エンドポイントの作成では、REST APIでリクエストが可能なインスタンスを立ち上げてリアルタイムに推論する仕組みを提供します。 この仕組みは対象となるデータは1~数件に対して、低レイテンシで推論結果を返すような必要があるシステムに組み込む際に利用します。

メニューのエンドポイントから「エンドポイントの作成」を選択します。

「エンドポイントの定義」ではエンドポイント名を指定します。

「モデル定義」ではこのエンドポイントで利用するモデルや動作環境となるコンピューティングリソースに関する設定を行います。

「モデルを追加」で利用するモデルとそのバージョンをModel Registryにある項目の中から選択します。 単一のエンドポイントに複数のモデルを紐づけることも可能です。 「トラフィック分割」ではそういった使い方をする際にリクエストの何パーセントをこのモデルを使った推論に割り当てるかを設定します。

「コンピューティングリソース」ではエンドポイントに紐づける際に、このモデルで利用するコンピュートの設定を行います。 マシンタイプで指定したコンピュートノードが最小ノード数に指定した数だけデプロイされます。 トラフィックに応じてオートスケールさせる機能もあるため、最大ノード数を指定することも可能です。

「ロギング」はログ出力の設定となります。 ここで設定したものがCloud Logging屁の出力対象となります。 アクセスロギングはタイムスタンプやレイテンシなどエンドポイントへのリクエストに関する情報となります。 コンテナロギングはコンテナ内の処理で標準出力や標準エラー出力に出力したものを対象にしていますので、カスタムコンテナを利用する際などにはあわせて利用できます。

「説明可能性のオプション」は特徴量ごとの推論への影響度合いなどの情報を取得するものです。

「モデルのモニタリング」では、エンドポイントへのリクエストの変化を監視します。 入力される特徴量が学習時や時間経過によって変化していないかを統計的に確認し閾値以上の変化が発生している場合にアラートを出す設定ができます。 今回は、この機能を使用していませんが、使う場合はそれらに関連した設定が必要になります。

全ての設定を終えて「作成」を選択すると、エンドポイントのデプロイが開始されます。 デプロイ完了までは数分程度の時間がかかるので、ここで一旦休憩してお茶でも飲みましょう。

デプロイが完了したら、推論が可能な状態になります。 試しにリクエストを投げてみましょう。 サンプルリクエストの投げ方は、「リクエストの例」からも確認できます。 今回は、以下のように設定してリクエストを発行します。

ENDPOINT_ID="<作成されたエンドポイントのID>"
PROJECT_ID="<利用しているプロジェクトのID>"
REGION="<エンドポイントをデプロイしたリージョン>"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/endpoints/$ \
-d '{
  "instances": [
    {
        "longitude": "-122.24",
        "latitude": "37.85",
        "housing_median_age": "52",
        "total_rooms": "1467",
        "total_bedrooms": "190",
        "population": "496",
        "households": "177",
        "median_income": "7.2574",
        "median_house_value": "352100"
    }
  ]
}'

以下のような結果が返ってくれば成功です。

{
  "predictions": [
    {
      "upper_bound": 463628.5625,
      "value": 386459.125,
      "lower_bound": 15578.5302734375
    }
  ],
  ... (利用したモデルに関する情報が続く)
}

エンドポイントは作成後は常時リクエストが受付可能な状態になっているため、利用しない場合は削除しておきます。

紐づいているモデルがあるエンドポイントは削除できません。 まずはエンドポイントを選択肢して、詳細画面から紐づいているモデルの右にあるメニューの「エンドポイントからモデルのデプロイ解除」を選択し、モデルが紐づいていない状態にします。

その後エンドポイント一覧に戻って「エンドポイントの削除」を行います。

バッチ予測

エンドポイントの作成とは別な方法として、バッチ予測では、大量のデータに対してまとめて推論を行う仕組みを提供します。 これは、あらかじめ推論対象の範囲がわかっている場合に、夜間バッチなどで一括処理するために便利な仕組みとなります。

メニューのバッチ予測から作成を選択します。

「バッチ予測の定義」では利用するモデルと入出力先の情報を設定します。 入力・出力はそれぞれBigQueryかCloud Storageを設定できます。

「モデルのモニタリング」ではエンドポイントと同様、特徴量が学習時と異なる場合に検出する設定が可能です。 オプショナルとなるため、今回は割愛しています。

バッチ予測も終わるとメールでお知らせしてくれるため、一旦忘れて乾杯しちゃいましょう。

バッチ推論が完了すると、指定した出力先に推論結果が出力されます。 Cloud Storageを選択した場合、複数ファイルに分割されていることも確認できます。 以下はCSV形式でCloud Storageに出力した結果です。 入力に使ったデータの各行の最後に推論結果が付与されているのが確認できます。

longitude,latitude,housing_median_age,total_rooms,total_bedrooms,population,households,median_income,median_house_value,predicted_median_house_value
-122.33,37.57,20,2126,643,1112,597,3.625,283300,323547.46875
-117.1,32.83,16,1049,154,467,160,6.2047,248100,229818.234375
...
...

おわりに

今回は、表形式のデータに対してAutoMLを実行することでVertex AIを使う際の基本的な流れを見ていきました。 選択可能な要素や設定項目を確認しながら、実施していくにはコンソールから実施してみるのが便利です。 AutoMLは実施するのもかなり手軽に実用的なモデルを発見するのに役立ちますので、 適用可能なタスクの範囲ではどんどん使っていきましょう!