BiqQuery MLでTensorFlowのモデルをインポートして予測やメタデータの確認などをしてみた

buit-inなモデルでなくTensorFlowモデルをインポートしてBiqQuery上で使えます。
2022.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

皆さん、こんにちは。 クルトンです。

今回のエントリーは『機械学習チームアドベントカレンダー2022』の17日目の記事になります。

前日(12/16)の記事は『Amazon SageMakerのガバナンス機能を使ってみる』でした。re:Invent2022発表の機能について紹介されているのでぜひご覧ください!

今回はチュートリアルの内容であるTensorFlowモデルのインポートやその先のステップとして紹介されているモデルのメタデータ確認、更新などをやってみました。

TensorFlowモデルをインポート

datasetを作成してからモデルをインポートします。

最初にすること

チュートリアルには明記されていませんが、実行にはdatasetが必要です。

モデルの作成時にdatasetがない場合はエラーが出てしまうので、datasetの作成を最初にしておきましょう。やり方が分からない場合は、前回私が執筆した記事前々回に執筆した記事をご参考ください。(bqml_tutorialを作成している所です。) error with no dataset  in creating model

モデルをインポート

モデルのインポートにはCREATE OR REPLACE MODELを実行します。

  CREATE OR REPLACE MODEL <ここに事前に作成したdatasetのIDを入力>.imported_tf_model
   OPTIONS (MODEL_TYPE='TENSORFLOW',
    MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')

ここではチュートリアル通りにimported_tf_modelという名前でモデルの作成を行ないます。

OPTIONS句に注目してください。TensorFlowモデルをインポートするにはMODEL_TYPETENSORFLOWと指定した上で、MODEL_PATHCloud StorageのModelを保存しているPATHを入力します。

今回は、モデルのURIが既に用意されていたのでそちらを使います。インポートするモデルはテキスト分類モデルになります。

インポートしたTensorFlowモデルを使って予測する

モデルで予測するためにML.PREDICT句を使う次のSQL文を実行します。

 SELECT *
   FROM ML.PREDICT(MODEL <ここに事前に作成したdatasetのIDを入力>.imported_tf_model,
     (
      SELECT title AS input
      FROM `bigquery-public-data.hacker_news.stories`
     )
 )

このSQL文では、サンプルとして用意されているデータセットを読み取り、titleというデータ(テキスト)をインプットとしたモデルの予測を表示しています。 インプットに使われているtitleというデータは、Hacker Newsというさまざまな方が自分の経験などを投稿できる海外サイトの一般公開データセットのものです。

データセットの概要についてはこちらをご確認ください。

また、今回触っているデータセットのスキーマは次のようになっています。

[
  {
    "name": "id",
    "mode": "NULLABLE",
    "type": "INTEGER",
    "description": "Unique story ID",
    "fields": []
  },
  {
    "name": "by",
    "mode": "NULLABLE",
    "type": "STRING",
    "description": "Username of submitter",
    "fields": []
  },
  {
    "name": "score",
    "mode": "NULLABLE",
    "type": "INTEGER",
    "description": "Story score",
    "fields": []
  },
  {
    "name": "time",
    "mode": "NULLABLE",
    "type": "INTEGER",
    "description": "Unix time",
    "fields": []
  },
  {
    "name": "time_ts",
    "mode": "NULLABLE",
    "type": "TIMESTAMP",
    "description": "Human readable time in UTC (format: YYYY-MM-DD hh:mm:ss)",
    "fields": []
  },
  {
    "name": "title",
    "mode": "NULLABLE",
    "type": "STRING",
    "description": "Story title",
    "fields": []
  },
  {
    "name": "url",
    "mode": "NULLABLE",
    "type": "STRING",
    "description": "Story url",
    "fields": []
  },
  {
    "name": "text",
    "mode": "NULLABLE",
    "type": "STRING",
    "description": "Story text",
    "fields": []
  },
  {
    "name": "deleted",
    "mode": "NULLABLE",
    "type": "BOOLEAN",
    "description": "Is deleted?",
    "fields": []
  },
  {
    "name": "dead",
    "mode": "NULLABLE",
    "type": "BOOLEAN",
    "description": "Is dead?",
    "fields": []
  },
  {
    "name": "descendants",
    "mode": "NULLABLE",
    "type": "INTEGER",
    "description": "Number of story descendants",
    "fields": []
  },
  {
    "name": "author",
    "mode": "NULLABLE",
    "type": "STRING",
    "description": "Username of author",
    "fields": []
  }
]

authorという誰が書いたかを著者を表すものや、投稿された内容の本文を表すtextなどもあります。textauthorを同時に学習する事で、テキストの内容から誰が書いたか判断するというタスクを実行する事も出来そうですね。

TensorFlowモデルのメタデータ

メタデータの確認から更新まで行ないます。

メタデータの確認

メタデータにはモデルのIDやどのロケーションで作成されたモデルなのかが表示されます。 meta data for model describe

ロケーションについては注意が必要な場合があります。 こちらの公式ドキュメントに書かれている通り、BigQueryとCloud Storageは同じロケーションでないとバケットのデータを転送する事が出来ないです。

そのため、データ転送が最初から上手く出来ない時には確認すると良い項目になります。

他にもスキーマのタブをクリックすると、予測時のデータや出力時のカラムに関するメタデータ(型の情報やNullを許可しているものかどうか)を確認できます。 meta data for model schema

メタデータを更新

コンソール上で更新できるメタデータを紹介します。更新対象としては、モデルの説明とラベルです。 ラベルはkey-value型のもので、コスト計算をするときにリソースをフィルタリングする場合などで使用します。(例えば開発フェーズで分ける場合は、devとprodといった使い分けをします。) 今回、モデルのメタデータを更新してみます。他にも、Compute Engineなどにもラベルをつける事が可能です。

詳しくラベルについて確認してみたい方はこちらの公式ドキュメントをご覧ください。

それでは、モデルのメタデータを更新してみます。次の画像にある箇所をクリックしてみてください。

click button for modifying model label

今回、説明には「チュートリアル用のTensorFlowモデル」と書きます。ラベルに、keyには開発環境の意味でenvironmentを、valueにはtutorialと書きます。 ここまで書き終わったらSaveボタンをクリックします。

update model meta data

Saveが上手くいくと改めてモデルの詳細を表示してみてください。上手く表示できている事が確認できました。 updated model meta data

TensorFlowモデルを削除

それではチュートリアル用として使っていたモデルを最後に削除します。削除をコンソールから行なう場合は、2種類の方法があります。

注意点として、削除したモデルは復元できないため、残しておきたい場合は別の場所への保存などが必要です。

削除方法その1

ナビゲーションペインにあるモデル名のをクリックして削除をクリックしてください。その後、出てくる画面の案内に従い、削除と書いてから削除ボタンをクリックすると削除できます。 navigation pain in BigQuery

削除方法その2

次のSQL文を実行します。

 DROP MODEL <ここに事前に作成したdatasetのIDを入力>.imported_tf_model

これを実行すると、モデルの詳細を確認しようとすると次のような画面になり、削除できている事を確認できます。 model tab after deleted model

終わりに

今回は、TensorFlowモデルをBiqQueryにインポートして予測した後に、モデルのメタデータ確認や更新をしてみました。自分が作ったTensorFlowモデルをCloud Storageに上げておけば、今回と同じ手順を実行する事で、BiqQuery上でも活用できるかと思います。

本記事では行なわなかったのですが、モデルのコピーも可能です。bqコマンドAPIを使うとコピーが可能です。

今回はここまで。

それでは、また!

参考にしたサイト