Vertex AI を使用して Google Cloud で TensorFlow Hub モデルを提供する
Google Cloud Japan Team
※この投稿は米国時間 2021 年 6 月 4 日に、Google Cloud blog に投稿されたものの抄訳です。
優れた芸術家は模倣し、偉大な芸術家は盗む。そして、賢いソフトウェア デベロッパーは他人の機械学習モデルを使用します。
これまでに ML モデルのトレーニングを行ったことがある方なら、プロセスの中で最も時間のかかる面倒な部分として、モデルをトレーニングするためのデータの収集とキュレーションが挙げられることをご存じのはずです。しかし多くの場合、スパムの検出、音声入力、画像内のオブジェクトのラベル付けなど、必要なことを行うようにすでにトレーニングされている他の誰かのモデルを使用することで、そのステップをスキップできます。そのモデルが、機械学習の専門知識を有する人々により、大きなデータセットと強力なトレーニング ツールを使って構築、維持されているものであれば、メリットはさらに大きくなります。
このような「事前トレーニング済み」モデルを探すのにおすすめの場所として、TensorFlow Hub があります。Google Research によって構築された膨大な量の最先端モデルがホストされており、無料でダウンロードして使用できるようになっています。画像のセグメンテーション、超解像、質問応答、テキスト エンベディングをはじめ、さまざまなタスクを実行するためのモデルをここで見つけられます。うれしいことに、こうしたモデルを使用するためのトレーニング データセットは必要ありません。ここには大規模なデータセットでトレーニングされた巨大なモデルもあるからです。ただし、大きなモデルをアプリで使用しようとする場合、速さ、信頼性、スケーラビリティを確保するためにどこでホストするか(たいていはクラウド上)という点が課題になります。
この課題は、Google の新しい Vertex AI のプラットフォームで解決できます。この投稿では、TensorFlow Hub からモデルをダウンロードし、それを Vertex の予測サービスにアップロードします。この予測サービスを使用することで、クラウドでモデルをホストし、そのモデルでの予測を REST エンドポイントを介して行うことができます。これは、サーバーレスに機械学習モデルを実行する方法で、アプリ開発が容易になるだけでなく、GPU などのハードウェアや、Vertex に組み込まれたモデル モニタリング機能の活用も可能になります。では早速始めましょう。
Jupyter ノートブックのコードですべての工程を行う場合は、こちらの colab をご確認ください。
TensorFlow Hub からモデルをダウンロードする


https://tfhub.dev/ では、音声、テキスト、動画、画像を処理するための多数のフリーモデルを見つけることができます。この投稿では、Hub モデルの中でも特に人気の高い Universal Sentence Encoder を取り上げます。このモデルは、文または段落を入力として受け取り、ベクトル、つまりテキストを空間内のポイントにマッピングする「エンベディング」を返します。このエンベディングは、文の類似性からスマート検索、chatbot の構築まで、あらゆる用途に使用できます(詳細についてはこちらをご覧ください)。


上に示している Universal Sentence Encoder ページで、[Download] をクリックして TensorFlow の SavedModel 形式のモデルを入手します。次のような形式のディレクトリを含む zip ファイルがダウンロードされます。
-universal-sentence-encoder_4
-assets
-saved_model.pb
-variables
- variables.data-00000-of-00001
- variables.index
ここで、saved_model.pb ファイルには保存されたニューラル ネットワークの構造が記述されており、variables フォルダ内のデータにはネットワークの学習済みの重みが保存されています。
モデルのハブページで、使用例を確認できます。


モデルに文の配列をフィードすると、モデルはベクトルの配列を出力します。
この例以外にも、モデルがサポートする入力と出力については、TensorFlow の SavedModel CLI で確認できます。TensorFlow がパソコンにインストールされている場合は、ダウンロードした Hub モデルのディレクトリで次のコマンドを実行します。
このモデルでは、コマンドによる出力は次のようになります。
このことから、モデルは文字列の 1 次元配列を入力として想定していることがわかります。このモデルをこの後すぐに使用します。
Vertex AI を使ってみる
Vertex AI は、今年の Google I/O で発表された機械学習モデルのトレーニング、デプロイ、モニタリングのための新しいプラットフォームです。

このプロジェクトでは、モデルを便利な REST エンドポイントでラップする予測サービスを使用してみましょう。
そのためにまず、Google Cloud アカウントとセットアップされた GCP プロジェクトを用意します。次に、TensorFlow Hub モデルをアップロードする Cloud Storage バケットを作成する必要があります。この操作は gsutil を使用してコマンドラインから行うことができます。
モデルが大きい場合、この手順には時間がかかることがあります。
サイドメニューで、Vertex AI API を有効にします。
Hub モデルを Cloud Storage にアップロードし終えたら、その後はドキュメントまたは以下の概略に沿ってモデルを簡単に Vertex AI にインポートできます。
1. Vertex AI の [モデル] タブで、[インポート] をクリックします。


2. モデルの名前を選択します。


3. モデルで使用する互換性のある TensorFlow バージョンを選択します(新しいモデルには、2.0 以上が使用できるはずです)。予測時間を高速化するため、課金して GPU を使用する場合は、「GPU」を選択します。


4. [モデル アーティファクトの場所] で Cloud Storage にアップロードしたモデルフォルダを指定します。


5. [インポート] をクリックします。
6. モデルがインポートされると、[モデル] タブから直接試すことができます。モデルの名前をクリックします。


7. これがモデルページです。この UI でモデルを直接テストできます。前のセクションで、saved_model_cli を使用してモデルを検査し、モデルが文字列の配列を入力として受け入れることを確かめました。その入力を使って、下図のようにモデルを呼び出せます。


8. UI でモデルが機能することを確認したら、アプリから呼び出すことができるように、モデルをエンドポイントにデプロイします。[エンドポイント] タブで [エンドポイントの作成] をクリックし、インポートしたモデルを選択します。


9. 必要な操作は以上です。TensorFlow Hub モデルがデプロイされ、使用する準備ができました。任意のウェブ クライアントから POST リクエストを介して、または Python クライアント ライブラリを使用して、モデルを呼び出せます。
これで、TensorFlow Hub モデルを Vertex に設定できたので、本番環境で大規模な機械学習モデルを使用する際のパフォーマンスとオペレーションの問題を(ほとんど)気にすることなく、アプリでモデルを使用できます。これは、AI を組み込んだ構築をすばやくサーバーレスに行う優れた方法です。みなさんの成功をお祈りします。
-AI 応用エンジニア Dale Markowitz




