Generative AI support on Vertex AIを徹底解説!

記事タイトルとURLをコピーする

G-gen の又吉です。当記事では、Goolge Cloud (旧称 GCP) の Vertex AI でサポートされた Generative AI を解説します。

Vertex AI での Generative AI サポート

概要

Vertex AI とは、Google Cloud の統合された機械学習プラットフォームです。 Vertex AI に Generative AI がサポートされたことで、従来の機能に加え Model GardenGenerative AI Studio が利用できるようになりました。

Vertex AI の Generative AI コンポーネント

Vertex AI の既存機能 (ML Platform) 部分の概要については、以下の記事をご参照下さい。

blog.g-gen.co.jp

Generative AI とは

Generative AI とは、新しいコンテンツを生成する AI の総称であり、大規模言語モデル (LLM) などの既存のテクノロジーに基づいて構築されています。 また、単に新しいテキストを作成するだけでなく、プログラミングコードや音声、画像なども生成できます。

Google が提供するコンシューマ向け Genarative AI の代表的なサービスとして、Bard があります。

ただし、Bard には API が公開されておりません。そのため、開発者が自社のアプリケーションに Generative AI を組み込むことができず、その他にも業界特有の情報や自社内の知見などを Fine-tuning できない等、エンタープライズで Generative AI を利用する際のハードルがありました。

そこで、エンタープライズに特化したのが Vertex AI での Generative AI サービスです。

Generative AI モデル

Vertex AI で利用可能な Generative AI モデル (基盤モデル) の裏側は、Google の Pathways Language Model 2 (以下、PaLM 2) が利用されております。

PaLM 2 は、Bard の裏側でも使われており、多言語、推論、コーディング機能が強化された最先端の大規模言語モデル (LLM) です。同じような大規模言語モデルとしては、OpenAI 社の GPT-4 が相当します。

Vertex AI では、PaLM 2 のエンドポイントとして Vertex AI PaLM API として公開されています。

開発者は Vertex AI PaLM API を使用することで、自社のアプリケーションで PaLM 2 のテスト、カスタマイズ、デプロイを行うことできます。

Generative AI Studio

概要

Generative AI Studio は、Google Cloud コンソール画面から基盤モデルのプロンプトやパラメータ値を迅速にテストしてプロンプト設計をスムーズに行うことができます。

また、既存の基盤モデルを調整して、独自のユースケースに適した新しい基盤モデルを作成しデプロイすることができます。

コンソール画面上では、「言語」や「音声」などのデータ形式毎にプロンプトが分かれています。

以下は言語モデルのプロンプト設計を行う画面です。

Generative AI Studio のコンソール画面①

画面右上の「< > VIEW CODE」を押すと、コンソール画面で入力したプロンプトとパラメータ値が含まれた形で、Python や Python Colob で実行できる Vertex AI SDK for Python で記述されたサンプルコードや Curl で実行できる REST API のサンプルコードが表示されます。

Generative AI Studio のコンソール画面②

利用可能モデル

概要

Generative AI Studio で利用可能な基盤モデルは順次増えていきます。各基盤モデルは、PaLM 2 モデルを特定のユースケースに合わせて微調整したモデルであり、モデルサイズによって価格帯が異なってきます。 最新情報は以下の公式ドキュメントをご参照下さい。

参考:Foundation models

モデルサイズ

PaLM 2 のモデルサイズは左から昇順で並べると Gecko < Otter < Bison < Unicorn となっており、例えば Gecko は非常に軽量なのでモバイル デバイス上で動作し、オフラインでも十分なパフォーマンスを発揮します。

Google I/O '23 YouTube動画より

モデルのライフサイクル

基盤モデルは定期的に新しいバージョンをリリースします。

基盤モデルの各バージョンは、後続のバージョンがリリースされると 6 ヶ月間後には利用できなくなります。

例えば、text-bison@002 という最新バージョンがリリースされると、その日から 6 ヶ月後に text-bison@001 が使用できなくなります。

また、モデルのバージョンを指定するには、モデルの接尾辞に 3 桁のバージョン番号を追加します。 例えば、text-bisonバージョン 6 のモデルを指定するには、以下のように記述します。

https://us-central1-aiplatform.googleapis.com/v1/projects/my_project/locations/us-central1/publishers/google/models/text-bison@006

尚、モデルのバージョン番号を省略すると、自動的に最新バージョンが指定されます。

参考:Model versioning and lifecycle

言語サポート

PaLM 2 モデルは日本語を含む多くの言語をサポートしています。以下は、一部の抜粋です。最新の情報は公式ドキュメントをご参照ください。

  • Japanese (ja)
  • English (en)
  • Korean (ko)
  • Spanish (es)
  • Chinese (zh)
  • Thai (th)
  • Hindi (hi)
  • Arabic (ar)

参考:Language support

Model Garden

Vertex AI で利用可能な機械学習モデルと API のアセットを Model Garden で一元管理できます。

Model Garden で利用できるモデルカテゴリは以下のとおりです。

No モデルカテゴリ 説明
1 Foundation models Generative AI Studio、Vertex AI API、Vertex AI SDK を使用して、特定のタスクに合わせて調整またはカスタマイズできる、事前トレーニングされた基盤モデル
2 Fine-tunable models カスタムノートブックまたはパイプラインを使用して微調整できるモデル
3 Task-specific solutions すぐに使用可能な事前構築済みモデル

Model Garden のコンソール画面

言語モデル

プロンプト設計

プロンプトとは

プロンプトとは、簡単に言うと言語モデルに送信するリクエストのことです。

プロンプトには、質問だけでなく、コンテキストや指示、例などを含めることができ、モデルはプロンプトを受け取ると、テキストやコード、画像等を生成しユーザーにレスポンスします。

特に、大規模言語モデルは膨大な量のテキストデータから単語間のパターンと関係を学習しており、プロンプトの設計がうまくできればモデルの精度を向上させることができます。

以下は、本文から感情を分類したいときのあまり良くないプロンプト例です。

この場合、指示の中で「ツイート」と「感情」という 2 つの用語が使われていますが、接頭辞には「本文:」と「回答:」となっているため曖昧なレスポンスを生成してしまいう可能性が上がります。

次のツイートの感情をポジティブまたはネガティブに分類します。
本文:チョコレートが大好きです。
回答:

次に良いプロンプト例を記載します。

ここでは、指示の中で「本文」と「感情」という 2 つの用語が使われており、接頭辞も指示の中で使われている「本文:」と「感情:」に一致しています。

次の本文の感情をポジティブまたはネガティブに分類します。
本文:チョコレートが大好きです。
感情:

その他、一般的なプロンプトの設計戦略については、以下をご参照下さい。

参考:General prompt design strategies

参考:Overview of text prompt design

パラメータ値

モデルに送信するリクエストには、モデルのレスポンスを制御するパラメータ値を含めることができます。 代表的なパラメータ値を以下に記載します。

No パラメータ値 概要
1 Max output tokens モデルが生成できるトークンの最大数です。参考値として、1 トークンは約 4 文字、100 トークンは約 60 ~ 80 英単語に相当。
2 Top-K モデルが最適なトークンを選択する際、最も確率の高い上位 K 個のトークンがサンプリングされます。
3 Top-P 確率の高い順にトークンを並べ、確率の合計が上位 P の値に等しくなるまでフィルタリングされます。Top-P は 0.0 ~ 1.0 の値をとります。
4 Temperature Temperature は、トークン選択のランダム性を制御し、0.0 ~ 1.0 の値を取ります。Temperature が低い (0.0 に近い) と、確率の高いトークン、つまり、より真実または正しいレスポンスが生成されます。逆に Temperature が高い (1.0 に近い) と、より多様な結果や予期しない結果を得ることができます。

モデルに送信されるリクエストに対して、最適なトークンを選択するステップは以下のとおりです。

  1. Top-K により最も高い確率を持つ上位 K 個のトークンがサンプリング
  2. Top-K でサンプリングされた K 個のトークンから、Top-P に基づいてフィルタリング
  3. Top-P でフィルタリングされたトークンから、Temperature に基づいて最終的にトークンが選択される

例えば、アイディア出しを行いたい場合、予期しない結果を得たいため Top-K と Top-P、Temperature を上げてみるといいでしょう。

参考:Experiment with different parameter values

プロンプトのサンプル

公式ドキュメントにプロンプトのサンプルが提供されているので、まずはこちらのサンプルからニーズにあうプロンプトがあるか探してみることをおすすめします。

参考:Generative AI prompt samples

アクセス制御

Vertex AI で Generative AI 機能を使用するにはユーザーまたはグループに適切な権限が付与されている必要があります。

以下の事前定義されたロールを付与することで、Vertex AI で Generative AI 機能へのアクセスを許可できます。

  • Vertex AI 管理者 (roles/aiplatform.admin)
  • Vertex AI ユーザー (roles/aiplatform.user)

参考:Access control

料金

概要

Vertex AI での Generative AI の課金体系は、入力 (プロンプト) 1,000 文字単位、および出力 (レスポンス) 1,000 文字単位で課金が発生します。

尚、文字数は UTF-8 コードでカウントされ、空白はカウントされず、また、安全フィルタ等でフィルタリングされたレスポンスを含む場合、入力に対してのみ課金されます。

2023 年 7 月現在、プレビュー段階のモデルには課金が発生しません。

モデルと単価については、最新の 公式ドキュメント をご参照下さい。

試算例

PaLM Text Bison モデル (入力、出力ともに 1,000文字あたり $0.001) に 5 つのリクエストを送信し、各リクエストに 200 文字の入力と 400 文字の出力がある場合、合計料金は次のように計算されます。

# 入力コスト
200 characters × 5 prompts = 1,000 characters
1,000 characters × ($0.001 / 1,000) = $0.001

# 出力コスト
400 characters × 5 prompts = 2,000 characters
2,000 characters × ($0.001 / 1,000) = $0.002

# 合計コスト
$0.001 + $0.002 = $0.003

Google のスタンス

責任ある AI

概要

PaLM API は Google の AI 原則 に従って設計されておりますが、初期段階には不快なテキスト、事実に反するテキスト等の意図しないまたは予期しない結果が生じる可能性があります。

開発者は、これらのリスクを考慮しつつ、安全かつ責任を持ってテスト / デプロイすることが重要です。

参考:Responsible AI practices

安全フィルタ

Generative AI Studio では、安全フィルタのしきい値を設定することで、基盤モデルから有害なレスポンスが返ってくる可能性を調整できます。 安全フィルタのしきい値の低い順で、Block fewBlock someBlock most の 3 つのオプションから選択できます。

尚、入力、出力のいずれかが安全フィルタに該当する場合、「I'm not able to help with that, as I'm only a language model,」のようなレスポンスが返ってきます。

安全属性の信頼スコアリング

Vertex AI PaLM API を通して処理された場合、レスポンスに安全属性のリストに照らして 0.0 ~ 1.0 の信頼スコアで評価されます。

レスポンス例を以下に記載します。

{
  "predictions": [
    {
      "safetyAttributes": {
        "categories": [
          "Derogatory",
          "Toxic",
          "Violent",
          "Sexual",
          "Insult",
          "Obscene",
          "Death, Harm & Tragedy",
          "Firearms & Weapons",
          "Public Safety",
          "Health",
          "Religion & Belief",
          "Drugs",
          "War & Conflict",
          "Politics",
          "Finance",
          "Legal"
        ],
        "scores": [
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
        ],
        "blocked": false
      },
      "content": "<>"
    }
  ]
}

信頼スコアに対して、開発者はビジネスに適した信頼しきい値を定義することで違反するコンテンツを検出し、適切な措置を講じることができます。

詳細については以下をご参照下さい。

参考:Safety filters and attributes

データガバナンス

概要

Google は業界初の AI/ML Privacy Commitment を公表した企業であり、クラウドに保存されているデータに対し最高レベルのセキュリティと制御を実装しています。

参考:Data Governance and Generative AI

プロンプト設計時のガバナンス

プロンプトを含むリクエストが基盤モデルに送信される際、顧客データは転送中に暗号化されます。

また、顧客データを、顧客の明示的な同意なしにモデルのトレーニングに使用することはありません。

モデル調整時のガバナンス

モデル調整時に入力された顧客データは、保存中および転送中は暗号化され安全に保存されます。

尚、顧客管理の暗号鍵 (CMEK) にも対応しており、顧客データ (プロンプト、入力データなど) は、顧客の許可なしにログに記録されたり、基盤モデルの改善に使用されたりすることはありません。

Azure OpenAI から PaLM API への移行

概要

Azure OpenAI も Vertex AI PaLM API 同様に、クラウドベースで大規模言語モデルが利用できるサービスです。

移行においては、Azure OpenAI のモデルと同等の PaLM API モデルを使用することが推奨されており、モデルの対応表は以下のとおりです。

No モデルタイプ 概要 Azure OpenAI モデル Vertex AI PaLM モデル
1 Text 自然言語の指示に従うように Fine-tuned されており、さまざまな言語タスクに対応 text-davinci-003 text-bison@001
2 Chat マルチターン チャット向けに Fine-tuned されている text-curie-001 chat-bison@001
3 Embedding 入力テキストの embeddings を返すよう Fine-tuned されている text-ada-001 textembedding-gecko@001

移行例

概要

基本的には対応しているパラメータを置換していきます。 以下は、Azure OpenAI の text-davinci-003 モデルから Vertex AI PaLM への移行例を、Vertex AI SDK for Python を使用して以下に記載します。

Azure OpenAI コード

import os
  
import openai
  
  
openai.api_key = os.getenv("OPENAI_API_KEY")
  
response = openai.Completion.create(
    prompt="Hello",
    max_tokens=256,
    temperature=0.3,
    engine="text-davinci-003",)
print(f"Response from Model: {response['choices'][0]['text']}")

Vertex AI PaLM コード

from vertexai.preview.language_models import TextGenerationModel
  
  
model = TextGenerationModel.from_pretrained("text-bison@001")
  
response = model.predict(
    "Hello",
    max_output_tokens=256,
    temperature=0.3,)

print(f"Response from Model: {response.text}")

参考:Migrate to PaLM API from Azure OpenAI

又吉 佑樹(記事一覧)

クラウドソリューション部

はいさい、沖縄出身のクラウドエンジニア!

セールスからエンジニアへ転身。Google Cloud 全 11 資格保有。Google Cloud Champion Innovator (AI/ML)。Google Cloud Partner Top Engineer 2024。Google Cloud 公式ユーザー会 Jagu'e'r でエバンジェリスト。好きな分野は生成 AI。