🛠️

Vertex AI と仲良くなろうとしたら生成系 AI と仲良くなれた

2023/07/13に公開

最近の流行りについていけず、こんなもやもやが・・・

  • Vertex AI って凄そうだけど、よくわからんなー
  • この記事で Generative AI が大々的にサポートされているけど、何できんだろー
  • ChatGPT とかどうやってチューニングしたり取り入れているのか知りたいなー

そこで意を決して Vertex AI を触ってみたら、予想以上に Generative AI Support on Vertex AI が素晴らしく、データサイエンスがわからない自分でも簡単に LLM で遊ぶことができこれらのもやもやを解決してくれました!

Generative AI Support on Vertex AI の基本的な情報や使い方はこちらの記事が非常にわかりやすくまとまっているのでおすすめです。

最後には LLM を利用できる API を駆使して超簡単にアイディアを実装してみました!異なるロールを与えた LLM を使っている & 得られた回答を質問に使っているあたりが工夫ポイントですね。

実装イメージ

Overview

Generative AI support on Vertex AI について検証

  • コンソール画面からプロンプト設計がしやすい UI で LLM を利用できました
    • コンテキストや質問と回答例を入力することで期待する結果をより得やすくなっていました
  • LLM の API を利用できる & 利用したプロンプトやチャット履歴が Python コードになって表示されて、コピペで実行可能でした(さくっと使えて感動しました!)
    • コピペでとりあえず使えるようになることでイメージがわきやすかったです
  • Notebook 上で異なるロールを与えた LLM に同一の質問を投げて比較するといった簡単なアイディアを数十分で実装できました

キーワード

記事の内容を Bard 君で要約

Vertex AIは最近、最大のアップデートをしました。Vertex AIのGenerative AIサポートは、チームがさまざまな生成モデルを活用するための最も簡単な方法を提供します。これで、エンドツーエンドの機械学習プラットフォームに直接組み込まれたGenerative AIの全機能を活用できます。

どうやら生成系 AI を利用するハードルを低くしてくれそうです。

生成AIは、非常に強力な技術です。しかし、扱いが難しいという問題がありました。Vertex AIのGenerative AIサポートは、この問題を解決し、誰もが簡単に生成AIを活用できるようにします。Model GardenとGenerative AI Studioは、この技術を活用するための強力なツールです。

ふむふむ、利用するハードルを低くするツールとして Model Garden と Generative AI Studio が提供されているんですね。

5つの方法でVertex AIの基本モデルと対話する
Vertex AIは、Googleの基本モデルをAPIとして使用できるようにし、アプリケーションに生成機能を組み込むためのツールを提供しています。また、ユーザーが基礎モデルをカスタマイズしたり、微調整したり、コストを最適化したりするためのツールも提供しています。

  1. 基本モデルをAPIとして使用して、アプリケーションに生成機能を組み込む。
  2. プロンプト設計ツールを使用して、基礎モデルにテキスト入力またはプロンプトを手動で作成する。
  3. プロンプト最適化ツールを使用して、基礎モデルを再トレーニングせずにカスタマイズする。
  4. 微調整ツールを使用して、基礎モデルを新しいデータでさらにトレーニングし、モデルの重みを変更する。
  5. コスト最適化ツールを使用して、推論をコストで最適化する。

手軽に API でモデルを利用できて、プロンプト設計がしやすくなっていて、プロンプトも最適化できてカスタマイズできると。やってみたいことが実現できそうな匂いがします!

Generative AI Studio で遊んでみる

プロンプト設計/最適化ツール

まずは 2 のプロンプト設計ツールを触ってみたいと思います。「Vertex AI」→「GENERATIVE AI STUDIO:言語」 を選択します。

テキストプロンプト

テキストプロンプトを開いてみると、下記の画面になります。どうやら選択した右のモデルでワンショットのプロンプトによってどんな結果が得られるかを確認できそうです。(自由形式と構造化の 2 パターン選べそうです。)

言語は英語のみに対応しており、自由形式だとこんな感じです。

構造化だとこんな感じ。Context でロールだったり回答方法を指定したりとプロンプトをより設計しやすくなっていそうです。

プロンプトとともにモデルへのパラメータをチューニングできるようにもなっています。色々なパターンでどのように出力が変化するかを画面操作でさくっと試せそうですね。

コードプロンプトの方も似た画面でモデル選択が 「code-bison」 となっていました。

テキストチャット

続いて、テキストチャットを開いてみます。上記の構造化を選択した画面に似ているようですが、レスポンス部分が会話形式になっています。よくみる Bard を利用する時の画面に似た雰囲気ですね。

こちらもテキストプロンプト同様に画面操作でコンテキストやモデル/パラメーターをいじってどのように出力が変化するかを確認できそうです。

Model Garden との関係性

Generative AI Studio とともに提供されている Model Garden にも触れておきます。「Vertex AI」→「TOOLS:Model Garden」 を選択すると下記のような画面になります。

上記で言う基本モデルが並んでいて、「PaLM 2 for Text」は「text-bison@001」「PaLM 2 for Chat」は「chat-bison@001」 と Generative AI Studio のプロンプト画面の右に表示されていたモデルはここに表示されているもののようです。

さらにこの基盤モデルの下にスクロールすると微調整可能なモデルがでてきます。これらを使うことが 4. に記載されていた内容のようですね。

微調整ツールを使用して、基礎モデルを新しいデータでさらにトレーニングし、モデルの重みを変更する。

言語から API を叩いて遊んでみる

  • ChatGPT とかどうやってチューニングしたり取り入れているのか知りたいなー

このもやもやはどうやって解決できるのか・・と思っているとプロンプト画面の右側にこんなボタンが!

基本モデルの API 利用

モデルを「chat-bison@001」の「Multi-turn conversation」を選択しているとこんなコードが出てきます。これを Notebook で実行しただけで期待する結果が得られたらかなり嬉しいですね。

ちなみにモデルを「chat-bison(latest)」に変更するとコードが少し変わります。


よく見ると import されているライブラリが latest の方は google.cloud.aiplatform で Multi-turn conversation の方は vertextai が中心となっていますね。

ちなみに vertexai ライブラリについては下記のような説明が公式にありました。

Vertex AI 用 Python クライアント ライブラリは、Vertex AI SDK for Python という名前に変わりました。バージョン 0.7(プレビュー)のリリースに伴い、Vertex AI SDK for Python は 2 つのレベルのサポートを提供します。

Notebook 上で実行

ワークベンチから Notebook インスタンスを立ち上げます。
とりあえずコピペしてそのまま実行してみます。コードはプロンプトの情報やモデルのパラメーターなどが記述されていますね。

たったこれだけで、UI で実行していた内容をコード上でも取得することができました!!個人的に結構感動した部分です(笑)

これだけでも良いと言えば良いのですが、コードで API をさくっと扱えるようになったので何かアイディアを実装したいと思いました!

マルチクラウドエンジニアへの道のりを助ける君

近年、マルチクラウドが熱いみたいな話がありますよね。複数クラウド扱えれば自身が活きるフィールドも増えますし、複数クラウドを知っていることで見えてくるものがあったりと。

こんなエンジニアを目指すために、各クラウドのサービスを比較してメリット・デメリットを教えてくれる人がいたら助かるなと思いました。

LLM を API から簡単に利用できるので、コンソールでは 1 対 1 での対話だったものを 1 つの質問に対して別のロールを割り当てられたモデルからの回答を出力させてみたら面白いと思いました。

2人のプロフェッショナル

たとえば、コンテキストとして異なるクラウドのプロフェッショナルを用意してみます。

notebook
import vertexai
from vertexai.preview.language_models import ChatModel, InputOutputTextPair

vertexai.init(project="****", location="us-central1")
chat_model = ChatModel.from_pretrained("chat-bison@001")
parameters = {
    "temperature": 0.2,
    "max_output_tokens": 256,
    "top_p": 0.8,
    "top_k": 40
}

google_chat = chat_model.start_chat(
    context="""You are a professional Google Cloud Engineer.""",
)

aws_chat = chat_model.start_chat(
    context="""You are a professional AWS Engineer.""",
)

def output_answer(cloud, question):
    if cloud == 'Google Cloud':
        response = google_chat.send_message(question, **parameters)
    elif cloud == 'AWS':
        response = aws_chat.send_message(question, **parameters)
    print(f"Response from Model:\n {response.text}")

下記の質問を投げてみます。

what database services does you recommend when You have to analyze big data ?

それぞれの回答はこうでした。

output_answer('Google Cloud', question)

Response from Model:
When you have to analyze big data, I recommend using Cloud Bigtable. Cloud Bigtable is a NoSQL database that is designed for high-volume data processing. It's a good choice for applications that need to store large amounts of data and process it quickly.

Cloud Bigtable is a distributed database that stores data in tables. Each table is divided into rows and columns, and each row can have multiple columns. The columns can be of different types, such as strings, numbers, or dates.

Cloud Bigtable is designed to be scalable and fault-tolerant. It can handle large amounts of data and can continue to operate even if some of its nodes fail.

Cloud Bigtable is also a fast database. It can process data quickly, even for large datasets.

If you need to analyze big data, I recommend using Cloud Bigtable. It's a powerful and scalable database that can handle large amounts of data and process it quickly.

output_answer('AWS', question)

Response from Model:
Amazon Redshift is a fully managed, petabyte-scale data warehouse service that offers fast performance, scalability, and cost-effectiveness. It is designed to handle large amounts of data and complex analytical queries.

2人の意見を比較させる

情報量に差があるのは気になりますが、それぞれの観点で意見をくれています。
次にあっちはこう言っているけど、そっちはどこがいいの?という比較をしてもらいます。
(長くなりそうなので Google 側だけ載せます)

You answered this way.

(先ほどの Google Cloud のプロフェッショナルの回答)

In response, an AWS professional asserted the following

(先ほどの AWS のプロフェッショナルの回答)

What makes your Google Cloud service superior to the AWS professional's answer?

output_answer('Google Cloud', question)

Both Cloud Bigtable and Amazon Redshift are powerful data warehouse services that can handle large amounts of data and complex analytical queries. However, there are some key differences between the two services.

  • Cloud Bigtable is a NoSQL database, while Amazon Redshift is a relational database. This means that Cloud Bigtable is more flexible and can store data in a variety of formats, while Amazon Redshift is more structured and requires data to be stored in a specific format.
  • Cloud Bigtable is more scalable than Amazon Redshift. Cloud Bigtable can scale to petabytes of data, while Amazon Redshift is limited to terabytes of data.
  • Cloud Bigtable is more cost-effective than Amazon Redshift. Cloud Bigtable is a pay-as-you-go service, while Amazon Redshift requires a long-term commitment.

Overall, Cloud Bigtable is a more powerful and flexible data warehouse service than Amazon Redshift. However, Amazon Redshift is a good choice for businesses that need a more structured and cost-effective data warehouse.

なんかそれっぽいことを言っているのでよさそうです(笑)

もちろん、2 つのタブを開いて行ったり来たりすればできる話ですが、質問を変えて何度も繰り返したいとなったらコードに落とし込んで質問文だけ変えるっての方が楽ですよね。状況設定などの質問の仕方を工夫すれば比較の精度も上がりそうです。

なによりデータサイエンスのことをわからない自分でもアイディアが浮かべば 20 分くらいで実装できてしまうのが超重要なポイントです!!これはすごいし、面白い!!

まとめ

Generative AI support on Vertex AI を触ってみました。

コンソールから簡単にプロンプトを入力して結果を取得できますし、コードをコピペで使えるようになるので簡単なアイディアなら数十分で実装できそうです!

また、学習データを追加してチューニングもできるということで利用の幅が広がりそうです。

冒頭のもやもやも解決・・・したものもありますが、Vertex AI 周りはまた今度頑張りたいと思います。

さいごに

AWS と Google Cloud で構築したデータ基盤の開発・運用に携わっていた元データエンジニアです。この業務がきっかけで Google Cloud が好きになりました。

現在はソフトウェア開発に携わっているフロントエンジニアです。

Google Cloud 関連の情報を発信をしています。

https://twitter.com/chanp_dcm

Discussion