AWS入門ブログリレー2024〜Amazon Bedrock編〜
こんにちは、つくぼし(tsukuboshi0755)です!
当エントリは弊社AWS事業本部による『AWS入門ブログリレー 2024』の28日目のエントリです。
このブログリレーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2024年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。今回のテーマは『Amazon Bedrock』です。
基本情報
Amazon Bedrockについて、まず初めに知っておくべき基本情報を説明します。
概要
Amazon Bedrockとは、主要な生成AIの基盤モデル(FM)を、AWS上で利用できるフルマネージド型サービスです。
直接生成AIを利用する場合と比較して、Amazon Bedrockから基盤モデルを利用すると以下のようなメリットを得られます。
- 有名なAI企業が提供する、テキスト生成/埋め込み/画像生成等の様々な基盤モデルを、同一のAPIで使用可能
- プライバシーとセキュリティを維持しながら、生成AIアプリケーションを構築可能
- RAG、AIエージェント、AIワークフローといった生成AIに関する各種機能を提供
- 使い慣れたAWSサービスとのスムーズな統合が可能
Bedrockの始め方
Bedrockを初めて利用する際は、事前に以下のマネジメントコンソールのモデルアクセスより、基盤モデルへのアクセスリクエストが必要になります。
詳細は以下のブログをご確認ください。
注意点として、通常Bedrockにおける最新の基盤モデルは、バージニア(us-east-1)及びオレゴン(us-west-2)のリージョンから先にリリースされる一方で、東京(ap-northeast-1)等のリージョンには遅れてリリースされる傾向にあります。
そのためBedrockの一部の基盤モデル及び機能が、東京リージョンで利用できない場合があります。
ただバージニア及びオレゴンのBedrockを利用する場合でも比較的レスポンスは早い傾向にあり、また通信もAWS内部で閉じるためセキュリティも担保されています。
そのため生成AIアプリ基盤をAWSで構築する場合は、他のリソースについては自国のリージョンを利用しつつ、Bedrockのみバージニアやオレゴンのリージョンを指定し利用するパターンが多いです。
本記事でも、基本的にバージニア及びオレゴンリージョンにおけるBedrockの利用を前提として解説します。
Bedrockの使い方
Bedrockの使い方について、GUIとAPIの2つの観点から説明します。
GUIでの利用
プレイグラウンドを利用する事で、以下の通りマネジメントコンソールから簡単にAmazon Bedrockの基盤モデルを選択し呼び出す事ができます。
各々の基盤モデルがどのような出力を返すかを検証する際に便利です。
APIでの利用
まずAmazon Bedrock APIのうち、ListFoundationModels
アクションを利用する事で、該当リージョンで利用可能な基盤モデルの一覧を取得できます。
AWS CLIからListFoundationModels
を実行する場合のコマンド例は、以下の通りです。
aws bedrock list-foundation-models --region us-east-1
上記アクションの結果に含まれるmodelIdを、基盤モデルを呼び出す際に指定する必要があります。
次にAmazon Bedrock Runtime APIの内、以下4つのアクションのいずれかを利用する事で、アプリケーションのプログラムからAmazon Bedrockの基盤モデルを呼び出す事ができます。
API名 | リクエスト内容 | レスポンス取得方法 |
---|---|---|
InvokeModel | 基盤モデルにより異なる | 一度にすべて取得 |
InvokeModelWithResponseStream | 基盤モデルにより異なる | 少量の文字ずつで徐々に取得 |
Converse | 基盤モデルに関わらず共通 | 一度にすべて取得 |
ConverseStream | 基盤モデルに関わらず共通 | 少量の文字ずつで徐々に取得 |
上記は大まかに、InvokeModel APIとConverse APIで分かれています。
現状はConverse APIの方が、同じリクエスト内容で異なる基盤モデルを呼び出せる点で汎用性に優れています。
なお両者とも、APIを実行する際はbedrock:InvokeModel
アクションに対する権限が必要です。
AWS CLIからConverse APIを実行する場合のコマンド例は、以下の通りです。
aws bedrock-runtime converse \
--model-id "anthropic.claude-3-sonnet-20240229-v1:0" \
--messages '[{"role": "user", "content": [{"text": "日本の偉人の名言を1つ教えてください。"}]}]' \
--inference-config '{"maxTokens": 512, "temperature": 0.5, "topP": 0.9}' \
--region us-east-1
Boto3(Python)からConverse APIを実行する場合のコード例は、以下の通りです。
import boto3
modelRegion = "us-east-1"
modelId = "anthropic.claude-3-sonnet-20240229-v1:0"
br = boto3.client(service_name="bedrock-runtime", region_name=modelRegion)
prompt = "日本の偉人の名言を1つ教えてください"
messages = [
{
"role": "user",
"content": [{"text": prompt}],
}
]
inferenceConfig = {
"maxTokens": 512,
"temperature": 1,
"topP": 0.9,
}
response = br.converse(
modelId=modelId ,
messages=messages,
inferenceConfig=inferenceConfig
)
response_output=response["output"]["message"]["content"][0]["text"]
print(response_output)
InvokeModel APIとConverse APIの違いについては、以下のブログも合わせてご確認ください。
料金体系
Bedrockには様々な料金体系があり、用途に応じて各々の料金体系を選択できます。
詳細は以下の料金表をご確認ください。
以下では、主要な2種類の料金体系について簡単に紹介します。
オンデマンド
使用した分のみ課金される、スタンダードな料金体系です。
モデルの種類により、以下の形で従量課金されます。
- テキスト生成モデル:入力トークンの処理および出力トークンの生成ごとに課金
- 埋め込みモデル:入力トークンの処理ごとに課金
- 画像生成モデル:画像の生成ごとに課金
プロビジョンドスループット
特定のベースモデルまたはカスタムモデルについて、モデルユニットという単位で購入する料金体系です。
モデルユニットは、1分あたりに処理される入力トークンまたは出力トークンの最大数によって測定される特定のスループットを表します。
こちらの料金体系の場合、1か月または6か月の契約期間を選択し、課金する形になります。
プロビジョンドスループットの詳細については、以下のブログも合わせてご確認ください。
関連用語
Amazon Bedrockでは、生成AI独自の用語が多く出てきます。
以下の公式ドキュメントで説明があるため、一通りご確認ください。
以下では、本記事の説明に必要な関連用語を簡単に説明します。
モダリティ
基盤モデルが扱うデータの種類を指します。
2024/4現在、Amazon Bedrockでは以下4種類のモダリティが利用可能です。
- Text:入力されたテキストを解釈し、テキストを出力するモデル
- Vision:入力された画像を解釈し、テキストを出力するモデル
- Image:入力されたテキストを解釈し、画像を出力するモデル
- Embedding:入力されたテキストを解釈し、埋め込みベクトルを出力するモデル
埋め込み
テキストや画像などのデータを、数値ベクトルに変換する事を指します。
埋め込みモデル(Embedding)を利用することで、テキストや画像を数値ベクトルに変換する事ができ、その数値ベクトルを元に様々な処理を行う事が可能になります。
トークン
テキストや画像などのデータを、生成AIが処理するために最小単位で分割したものを指します。
トークン数は、基盤モデルが処理できるデータの最大量を表します。
テキスト生成モデル
Amazon Bedrockで利用可能なテキスト生成モデルは、以下の表の通りです。
なお価格については、バージニアリージョンまたはオレゴンリージョンでのオンデマンド料金モデルを参照します。
基盤モデル | プロバイダー | モダリティ | 最大トークン | 対応言語 | 入力トークン 1,000 個あたりの価格 | 出力トークン 1,000 個あたりの価格 |
---|---|---|---|---|---|---|
Claude 3.5 Sonnet | Anthropic | Text & Vision | 200k | 英語、スペイン語、日本語、他の複数の言語 | 0.00300 USD | 0.01500 USD |
Claude 3 Opus | Anthropic | Text & Vision | 200k | 英語、スペイン語、日本語、その他複数の言語 | 0.01500 USD | 0.07500 USD |
Claude 3 Haiku | Anthropic | Text & Vision | 200k | 英語、スペイン語、日本語、その他複数の言語 | 0.00025 USD | 0.00125 USD |
Claude 3 Sonnet | Anthropic | Text & Vision | 200k | 英語、スペイン語、日本語、その他複数の言語 | 0.00300 USD | 0.01500 USD |
Claude v2.1/2.0 | Anthropic | Text | 200k | 英語と他の複数の言語 | 0.00800 USD | 0.02400 USD |
Claude Instant | Anthropic | Text | 100k | 英語と他の複数の言語 | 0.00080 USD | 0.00240 USD |
Command | Cohere | Text | 4k | 英語 | 0.00150 USD | 0.00200 USD |
Command Light | Cohere | Text | 4k | 英語 | 0.00030 USD | 0.00060 USD |
Command R | Cohere | Text | 128k | ※1 | 0.00050 USD | 0.00150 USD |
Command R+ | Cohere | Text | 128k | ※1 | 0.00300 USD | 0.01500 USD |
Jurassic-2 Mid | AI21 Labs | Text | 8k | ※2 | 0.01250 USD | 0.01250 USD |
Jurassic-2 Ultra | AI21 Labs | Text | 8k | ※2 | 0.01880 USD | 0.01880 USD |
Jamba-Instruct | AI21 Labs | Text | 8k | 英語 | 0.00050 USD | 0.00070 USD |
Llama 3.1 Instruct (8B) | Meta | Text | 128k | 英語 | 0.00030 USD | 0.00060 USD |
Llama 3.1 Instruct (70B) | Meta | Text | 128k | 英語 | 0.00265 USD | 0.00350 USD |
Llama 3.1 Instruct (405B) | Meta | Text | 128k | 英語 | 0.00532 USD | 0.01600 USD |
Llama 3 Instruct (8B) | Meta | Text | 8k | 英語 | 0.00030 USD | 0.00060 USD |
Llama 3 Instruct(70B) | Meta | Text | 8k | 英語 | 0.00265 USD | 0.00350 USD |
Mistral 7B Instruct | Mistral AI | Text | 32k | 英語 | 0.00015 USD | 0.00020 USD |
Mixtral 8x7B Instruct | Mistral AI | Text | 32k | ※3 | 0.00045 USD | 0.00070 USD |
Mistral Small | Mistral AI | Text | 32k | ※3 | 0.00100 USD | 0.00300 USD |
Mistral Large | Mistral AI | Text | 32k | ※3 | 0.00400 USD | 0.01200 USD |
Mistral Large 2 | Mistral AI | Text | 128k | ※4 | 0.00400 USD | 0.01200 USD |
Titan Text Premier | Amazon | Text | 32k | 英語 | 0.00050 USD | 0.00150 USD |
Titan Text Lite | Amazon | Text | 4k | 英語 | 0.00015 USD | 0.00020 USD |
Titan Text Express | Amazon | Text | 8k | ※5 | 0.00020 USD | 0.00060 USD |
※1英語、フランス語、スペイン語、イタリア語、ドイツ語、ポルトガル語、日本語、韓国語、アラビア語、中国語
※2英語、スペイン語、フランス語、ドイツ語、ポルトガル語、イタリア語、オランダ語
※3英語、フランス語、イタリア語、ドイツ語、スペイン語
※4英語、フランス語、ドイツ語、スペイン語、イタリア語、中国語、日本語、韓国語、ポルトガル語、オランダ語、ポーランド語、アラビア語、ヒンディー語等数十の言語
※5英語 (GA)、100以上の言語での多言語 (プレビュー)
テキスト生成モデルでは、Anthropic社、Cohere社、AI21 Labs社、Meta社、Mistral AI社、Amazon社が提供するモデルを利用できます。
なお種類が多いため、以下では代表的なテキスト生成モデルに絞って紹介します。
Claude
Claudeシリーズは、Anthropic社が提供するテキスト生成モデルです。
特にClaude 3は、日本語対応が明記されており、最大トークンも多いため、Bedrockでテキスト生成するのであればまず検討したいモデルです。
Claude 3はモダリティとして、Textの他にVisionが搭載されており、画像を入力し認識した上で回答を生成できます。
BedrockにおけるClaude 3の画像認識については、以下の記事も合わせてご確認ください。
またClaude 3では、Haiku/Sonnet/Opusの3つのモデルが提供されており、価格と性能に応じて選択できるようになっています。
特にHaikuは、現状の基盤モデルの中では非常に安く利用できるテキスト生成モデルであり、コストを抑えたい場面では有力な選択肢になります。
BedrockにおけるClaude 3 Haikuについては、以下の記事も合わせてご確認ください。
逆にOpusは、Anthoropic社の検証によるとGPT-4を超えるトップレベルのベンチマークを持ち、性能が求められる場面では有力な選択肢になります。
BedrockにおけるClaude 3 Opusについては、以下の記事も合わせてご確認ください。
さらに最新モデルとして、Claude 3.5 Sonnetが提供されています。
こちらはClaude 3 Opusに匹敵し、かつ5分の1の価格で利用できるため、コストを抑えつつ性能を求める場面では有力な選択肢になります。
BedrockにおけるClaude 3.5 Sonnetについては、以下の記事も合わせてご確認ください。
Command
Commandシリーズは、Cohere社が提供するテキスト生成モデルです。
特にCommand R及びCommand R+は、日本語対応が明記されている高性能モデルとして注目を集めています。
BedrockにおけるCommand Rについては、以下の記事も合わせてご確認ください。
Llama
Llamaシリーズは、Meta社が提供するテキスト生成モデルです。
現状提供されているLlama 3は、クローズドモデルであるGPT-4及びClaudeとは異なるオープンソースモデルであるため、無償で研究及び商用利用ができるという特徴があります。
BedrockにおけるLlama 3については、以下の記事も合わせてご確認ください。
Mistral
Mistralシリーズは、Misral AI社が提供するテキスト生成モデルです。
特にMistral Large 2は、日本語対応が明記されている高性能モデルとして注目を集めています。
BedrockにおけるMistral Large 2については、以下の公式ブログも合わせてご確認ください。
Titan Text
Titan Textシリーズは、Amazon社が提供するテキスト生成モデルです。
特にExpressは、2024/4現在はプレビュー版ですが100以上の言語での多言語も提供されており、今後日本語でも利用できるようになる事が期待されています。
BedrockにおけるTitan Textについては、以下の記事も合わせてご確認ください。
埋め込みモデル
Amazon Bedrockで利用可能な埋め込みモデルは、以下の表の通りです。
なお価格については、オレゴンリージョンでのオンデマンド料金モデルを参照します。
基盤モデル | プロバイダー | モダリティ | 最大トークン | 言語 | 入力トークン 1,000 個あたりの価格 | 入力画像1枚あたりの価格 |
---|---|---|---|---|---|---|
Embed English | Cohere | Embedding | 5k | 英語 | 0.00010 USD | 該当なし |
Embed Multilingual | Cohere | Embedding | 5k | 108 の言語 | 0.00010 USD | 該当なし |
Titan Embeddings | Amazon | Embedding | 8k | ※6 | 0.00010 USD | 該当なし |
Titan Text Embeddings V2 | Amazon | Embedding | 8k | 英語 (GA)、100 以上の言語での多言語 (プレビュー) | 0.00002 USD | 該当なし |
Titan Multimodal Embeddings G1 | Amazon | Embedding | 128k | 英語 | 0.00080 USD | 0.00006 USD |
※6英語、アラビア語、中国語 (簡体字)、フランス語、ドイツ語、ヒンディー語、日本語、スペイン語、チェコ語、フィリピン語、ヘブライ語、イタリア語、韓国語、ポルトガル語、ロシア語、スウェーデン語、トルコ語、中国語 (繁体字)、オランダ語、カンナダ語、マラヤーラム語、マラーティー語、ポーランド語、タミル語、テルグ語など。
埋め込みモデルでは、Cohere社とAmazon社が提供するモデルを利用できます。
以下では各々の埋め込みモデルについて簡単に紹介します。
Embed
Embedシリーズは、Cohere社が提供する埋め込みモデルです。
埋め込みに関して優れた性能を持つと言われており、Bedrockで埋め込みベクトルを生成するのであればまずこちらから検討すると良いかもしれません。
特にEmbed Multilingualは日本語に対応しているため、日本語のテキストを埋め込みベクトルに変換できます。
Titan Embeddings
Titan Embeddingsシリーズは、Amazon社が提供する埋め込みモデルです。
Titan Embeddingsは日本語に対応しており、かつV2であれば価格が安いという特徴を持つため、埋め込みモデルをより安価に使用したい場面では有力な選択肢になります。
またTitan Multimodal Embeddingsは、テキストと画像の組み合わせで埋め込みベクトルを生成する事ができます。
BedrockにおけるTitan Multimodal Embeddingsについては、以下の記事も合わせてご確認ください。
画像生成モデル
Amazon Bedrockで利用可能な画像生成モデルは、以下の表の通りです。
なお価格については、オレゴンリージョンでのオンデマンド料金モデルを参照します。
基盤モデル | プロバイダー | モダリティ | 最大トークン | 言語 | 画像解像度 | 標準画質で生成された画像1枚あたりの価格 | 高品質で生成された画像1枚あたりの価格 |
---|---|---|---|---|---|---|---|
SDXL 1.0 | Stability AI | Image | 77 | 英語 | 1024 x 1024 | 0.040 USD | 0.080 USD |
Titan Image Generator G1 | Amazon | Image | 77 | 英語 | 512 x 512 | 0.008 USD | 0.010 USD |
Titan Image Generator G1 | Amazon | Image | 77 | 英語 | 1024 x 1024 | 0.010 USD | 0.012 USD |
画像生成モデルでは、Stability AI社とAmazon社が提供するモデルを利用できます。
以下では各々の画像生成モデルについて簡単に紹介します。
SDXL(Stable Diffusion XL)
SDXLシリーズは、Stability AI社が提供する画像生成モデルです。
高画質な画像を生成する事ができるため、Bedrockで画像生成するのであればまずこちらから検討すると良いかもしれません。
BedrockにおけるSDXLについては、以下の記事も合わせてご確認ください。
Titan Image Generator
Titan Image Generatorシリーズは、Amazon社が提供する画像生成モデルです。
現状SDXLより低価格な画像生成モデルとして利用できるため、コストを抑えたい場面では有力な選択肢になります。
BedrockにおけるTitan Image Generatorについては、以下の記事も合わせてご確認ください。
セーフガード機能
Amazon Bedrockの基盤モデルをより安全に活用するためのセーフガード機能について紹介します。
ガードレール
ガードレールは、責任あるAIポリシーに基づいて、ユースケース毎にカスタマイズされた保護手段を実装できる機能です。
特定のコンテンツ、トピック、単語、機密情報をフィルタリングする事で、安全に生成AIを使用する事ができます。
Bedrockのガードレールについては、以下の記事も併せてご確認ください。
ウォーターマーク検出
ウォーターマークとは、著作権表示のため画像に写し込まれる小さな図案や文字を指します。
ウォーターマーク検出を用いる事で、画像に写し込まれたウォーターマークを検出し、コンテンツが不正に変更されていないかを確認する事ができます。
Bedrockのウォーターマーク検出については、以下の公式ドキュメントも合わせてご確認ください。
オーケストレーション機能
Amazon Bedrockの基盤モデルをより便利に活用するためのオーケストレーション機能について紹介します。
ナレッジベース
ナレッジベースは、Bedrockの基盤モデルと関連サービスを活用し、AWSマネージドなRAG(Retrieval-Augmented Generation)を構築できる機能です。
データソースに存在するドキュメントについて、埋め込みモデルを用いてエンベディングを生成した後、ベクトルデータベースに保存し、そのデータを元にテキスト生成モデルが回答します。
Bedrockのナレッジベースについては、以下の記事も合わせてご確認ください。
エージェント
エージェントは、Bedrockの基盤モデルと関連サービスを活用し、AWSマネージドなAIエージェントを構築できる機能です。
アクショングループで定義されたアクションを自動的に呼び出して実行すると共に、ナレッジベースを呼び出してこれらのアクションの情報を補足し、テキスト生成モデルが回答を生成します。
Bedrockのエージェントについては、以下の記事も合わせてご確認ください。
プロンプトマネジメント
プロンプトマネジメントは、独自のプロンプトをテンプレート化できる、AWSマネージドなプロンプト管理機能です。
プロンプトの作成、テスト、バージョン管理に対応しており、特定のプロンプトの再利用を効率化できます。
Bedrockのプロンプトマネジメントについては、以下の記事も合わせてご確認ください。
プロンプトフロー
プロンプトフローは、Bedrockの基盤モデルと関連サービスを活用し、AWSマネージドなAIワークフローを構築できる機能です。
単純な「質問への回答」「文章の生成」から、「条件分岐」や「繰り返し」を含むものまで、様々なロジックを用いたワークフローをGUI上で構成できます。
Bedrockのプロンプトフローについては、以下の記事も合わせてご確認ください。
モデル関連機能
Amazon Bedrockの基盤モデル自体を調整・評価する機能について紹介します。
カスタムモデルインポート
カスタムモデルインポートは、基盤モデルに対してトレーニングデータを提供し、モデルをカスタマイズできる機能です。
基盤モデルに対してファインチューニングや継続的な事前トレーニングを実施する事で、特定のユースケースに合わせたパフォーマンスを向上させる事ができます。
Bedrockのカスタムモデルインポートについては、以下の公式ブログも合わせてご確認ください。
モデル評価
モデル評価を用いる事で、モデルの性能を評価し、モデルの改善を行う事ができます。
自動モデル評価、またはヒューマンワーカーによるモデル評価ジョブのいずれかを作成し、使用するモデル、推論パラメータ、モデルが実行するタスクのタイプ、およびジョブで使用されるプロンプトデータを定義できます。
Bedrockのモデル評価については、以下の公式ブログも合わせてご確認ください。
プライバシー・セキュリティ情報
Amazon Bedrockのプライバシーやセキュリティに関する設定/情報について紹介します。
ログ記録
以下のマネジメントコンソールにおけるBedrockの設定から、モデル呼び出しのログ記録を有効にする事ができます。
ログ記録を有効にする事で、Bedrockの基盤モデル呼び出しに関するログをCloudWatch LogsまたはS3に送信できます。
特にCloudWatch Logsに出力する事で、各種CloudWatch機能と組み合わせてモデル呼び出しを監視する事も可能になります。
Bedrockのモデル呼び出しのログ記録については、以下の記事も合わせてご確認ください。
またBedrockはCloudTrailと統合されているため、BedrockにおけるAPI呼び出しはCloudTrailによって記録されます。
閉域網アクセス
PrivateLinkを併せて利用する事で、Bedrockの基盤モデルを閉域網からのみ呼び出すように設定する事もできます。
Bedrockへのアクセスを閉域網のみに制限する事で、プライベートな生成AIアプリの構築が可能になります。
Bedrockの閉域網アクセスについては、以下の記事も合わせてご確認ください。
利用規約
生成AIサービスを利用する際にプライバシーを保障されるかどうかを確かめるには、利用規約の確認が重要です。
Bedrockの利用規約には、「入力されたプロンプト情報はモデルの学習に利用しない」「不正な利用については自動検出する仕組みが備わっている」等の記載があり、プライバシー保護にも配慮されています。
Bedrockの利用規約については、以下の記事も合わせてご確認ください。
最後に
以上、『AWS入門ブログリレー 2024』の28日目のエントリ『Amazon Bedrock』編でした。
次回、4/22は弊社たかくにによる『Knowledge bases for Amazon Bedrock』編の予定です!