Vertex AI で BigQuery ML モデルを管理する②
はじめに
本記事は、BigQueryのコスト削減についてです!
前回の記事の続きになります。
改めて、
BigQuery ML で構築された既存の機械学習モデルを Vertex AI に移行し、BigQuery ML の使用をやめることで、BigQuery の料金プランを Enterprise から Standard にダウングレードする取り組みについて紹介します。
実施手順のサンプルも紹介する予定ですが手順がやや長いため、記事を分割し、今回は実施までの経緯と作業の全体像を紹介します。
以下のトピック毎に記事を作成しております。
- 背景、課題、目的、全体構成の整理
- BigQuery ML で作成したモデルを Vertex AI に移行する手順 ※この記事
- BigQuery クエリから Vertex AI を呼び出して推論を実行する手順
検証で使用するテーブル/データ/モデルの準備
この記事に則って作業をすればどなたも手を動かせるよう、データの準備から進めていきます。
ただし、以下を前提とします。
- GoogleCloudのアカウントがあり、BigQueryが使用できる。
- 初期状態ではBigQuery MLの構築・評価・予測がすべて使用できる。
- データセットがある。
テーブルの作成
今回はペンギンのもろもろのデータを管理するテーブルを作成します。(ChatGPTにこういうことをしたいで作ってもらったら、このペンギンのテーブルを返してきました)
CREATE TABLE `PROJECT_ID.DATASET_ID.penguins_sample` (
species STRING,
island STRING,
bill_length_mm FLOAT64,
bill_depth_mm FLOAT64,
flipper_length_mm INT64,
body_mass_g INT64,
sex STRING,
year INT64
);
※PROJECT_ID.DATASET_IDは環境に適した値に置き換えてください。
データをINSERT
学習に必要なサンプルデータをいくつか入れていきます。
INSERT INTO `PROJECT_ID.DATASET_ID.penguins_sample` (
species, island, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g, sex, year
)
VALUES
('Adelie', 'Torgersen', 39.1, 18.7, 181, 3750, 'MALE', 2007),
('Adelie', 'Torgersen', 39.5, 17.4, 186, 3800, 'FEMALE', 2007),
('Adelie', 'Torgersen', 40.3, 18.0, 195, 3250, 'FEMALE', 2007),
('Adelie', 'Torgersen', 36.7, 19.3, 193, 3450, 'FEMALE', 2007),
('Adelie', 'Torgersen', 39.3, 20.6, 190, 3650, 'MALE', 2007),
('Adelie', 'Torgersen', 38.9, 17.8, 181, 3625, 'FEMALE', 2007),
('Adelie', 'Torgersen', 39.2, 19.6, 195, 4675, 'MALE', 2007),
('Adelie', 'Torgersen', 34.1, 18.1, 193, 3475, 'MALE', 2007),
('Adelie', 'Torgersen', 42.0, 20.2, 190, 4250, 'MALE', 2007),
('Adelie', 'Torgersen', 37.8, 17.1, 186, 3300, 'FEMALE', 2007),
('Chinstrap', 'Dream', 46.5, 17.9, 192, 3500, 'FEMALE', 2007),
('Chinstrap', 'Dream', 50.0, 19.5, 196, 3900, 'MALE', 2007),
('Chinstrap', 'Dream', 51.3, 19.2, 193, 3650, 'MALE', 2007),
('Chinstrap', 'Dream', 45.4, 18.7, 188, 3525, 'FEMALE', 2007);
モデル作成
サンプルデータからモデルを作成します。
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.penguin_weight_model`
OPTIONS (
model_type='linear_reg',
input_label_cols=['body_mass_g']
) AS
SELECT
bill_length_mm,
bill_depth_mm,
flipper_length_mm,
sex,
island,
body_mass_g
FROM
`PROJECT_ID.DATASET_ID.penguins_sample`
WHERE
body_mass_g IS NOT NULL;
モデルが作成されるとこの辺りに表示されます。
モデルを評価
こちらを実行すると、作成したモデルの 評価指標(モデルの精度や性能を示すメトリクス) が返ってきます。
SELECT *
FROM ML.EVALUATE(MODEL `PROJECT_ID.DATASET_ID.penguin_weight_model`);
予測
作成したモデルでデータ予測ができるか確認します。
まずは予測させるデータ(一部データが欠損)を登録します。
INSERT INTO `PROJECT_ID.DATASET_ID.penguins_sample` (
species, island, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g, sex, year
)
VALUES
('Adelie', 'Torgersen', 39.1, 18.7, 181, NULL, 'MALE', 2007),
('Adelie', 'Torgersen', 39.5, 17.4, 186, NULL, 'FEMALE', 2007),
('Adelie', 'Torgersen', 40.3, 18.0, 195, NULL, 'FEMALE', 2007),
('Adelie', 'Torgersen', 36.7, 19.3, 193, NULL, 'FEMALE', 2007),
('Adelie', 'Torgersen', 39.3, 20.6, 190, NULL, 'MALE', 2007),
('Adelie', 'Torgersen', 38.9, 17.8, 181, NULL, 'FEMALE', 2007),
('Adelie', 'Torgersen', 39.2, 19.6, 195, NULL, 'MALE', 2007),
('Adelie', 'Torgersen', 34.1, 18.1, 193, NULL, 'MALE', 2007),
('Adelie', 'Torgersen', 42.0, 20.2, 190, NULL, 'MALE', 2007),
('Adelie', 'Torgersen', 37.8, 17.1, 186, NULL, 'FEMALE', 2007),
('Chinstrap', 'Dream', 46.5, 17.9, 192, NULL, 'FEMALE', 2007),
('Chinstrap', 'Dream', 50.0, 19.5, 196, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 51.3, 19.2, 193, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 45.4, 18.7, 188, NULL, 'FEMALE', 2007),
('Chinstrap', 'Dream', 52.7, 19.8, 197, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 45.2, 17.8, 198, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 49.8, 17.3, 198, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 46.4, 18.6, 190, NULL, 'FEMALE', 2007),
('Chinstrap', 'Dream', 48.2, 17.1, 190, NULL, 'MALE', 2007),
('Chinstrap', 'Dream', 46.5, 17.0, 181, NULL, 'FEMALE', 2007),
('Gentoo', 'Biscoe', 46.1, 13.2, 211, NULL, 'MALE', 2008),
('Gentoo', 'Biscoe', 50.0, 16.3, 230, NULL, 'MALE', 2008),
('Gentoo', 'Biscoe', 48.7, 14.1, 210, NULL, 'FEMALE', 2008),
('Gentoo', 'Biscoe', 50.0, 15.2, 218, NULL, 'MALE', 2008),
('Gentoo', 'Biscoe', 47.6, 14.5, 215, NULL, 'FEMALE', 2008),
('Gentoo', 'Biscoe', 46.5, 13.5, 210, NULL, 'MALE', 2008),
('Gentoo', 'Biscoe', 45.4, 14.6, 211, NULL, 'FEMALE', 2008),
('Gentoo', 'Biscoe', 49.3, 15.7, 217, NULL, 'MALE', 2008),
('Gentoo', 'Biscoe', 42.8, 14.2, 209, NULL, 'FEMALE', 2008),
('Gentoo', 'Biscoe', 48.1, 15.1, 209, NULL, 'MALE', 2008);
予測を実行。
学習済みモデルに新しいデータを入力し、ペンギンの体重(body_mass_g)を予測します。
SELECT
*
FROM
ML.PREDICT(MODEL `PROJECT_ID.DATASET_ID.penguin_weight_model`,
(
SELECT
bill_length_mm,
bill_depth_mm,
flipper_length_mm,
sex,
island
FROM
`PROJECT_ID.DATASET_ID.penguins_sample`
WHERE body_mass_g IS NULL
)
);
body_mass_gが空欄のデータに対して、モデルを通して予測したpredicted_body_mass_gを入力したデータが返されます。
Vertex AI モデル移行
作成したモデルをVertex AIに移行します。
基本的にこれの「5. BigQuery ML モデルをエクスポートする」からの手順を実施する流れです。
バケット作成
モデルのエクスポート先になるCloudStrageバケットを作成します。
エクスポート
モデルをエクスポートします。
まずはこちらを押下。
作成したバケットを選択、任意のファイル名を入力。
送信を押下。
作成したバケットの中身を見てエクスポートされていることを確認。
インポート
エクスポートしたモデルを Vertex AI にインポートします。
Vertex AIのコンソール画面から、レジストリ->インポートを押下。
- 新しいモデルとしてインポート
- 任意の名前とリージョンを入力してContinue
- 新しいビルド済みコンテナにモデル アーティファクトをインポートする
- モデル フレームワーク:TensorFlow
- モデル フレームワークのバージョン:2.15
- アクセラレータ タイプ:なし
- モデル アーティファクトの場所(Cloud Storage パス): gs://bigaueryml-to-vertexai/model-assets/
→インポートを押下。
デプロイ
インポートしたモデルをエンドポイントにデプロイします。
インポートしたモデルを選択 -> [デプロイとテスト] -> [エンドポイントにデプロイ]を押下。
- 任意のエンドポイント名を入力
※アクセス方法は、今回は検証のため標準にします。
モデルの設定ではマシンタイプのみ選択、その他はデフォルトの設定とします。
今回は特にモニタリングは設定せずデプロイします。
デプロイステータスがデプロイ済を確認したらゴールです!
おわりに
今回はBigQuery ML で作成したモデルを Vertex AI に移行する手順を紹介しました。
次回は最終回、BigQuery クエリから Vertex AI を呼び出して推論を実行する手順を紹介します!
We're Hiring!
DELTAではチームの一員になっていただける仲間を募集中です!
下記フォームよりお気軽にご連絡ください!
Discussion