小西秀和です。
今回は2023-09-28にGeneral Availability(GA)になったAmazon Bedrockの基本情報、Runtime APIの実行例についてまとめました。また、トークンやパラメータのイメージをつかむための必要最小限の用語説明も所々入れています。
※本記事および当執筆者のその他の記事で掲載されているソースコードは自主研究活動の一貫として作成したものであり、動作を保証するものではありません。使用する場合は自己責任でお願い致します。また、予告なく修正することもありますのでご了承ください。
今回の記事の内容は次のような構成になっています。
Amazon Bedrockの基本情報
Amazon Bedrockの参考資料・学習リソース
Amazon Bedrockの理解に役立つ主な参考資料・学習リソースには次のものが挙げられます。
この記事の内容はこれらの参考資料・学習リソースにある情報を基としています。
- What's New: Amazon Bedrock is now generally available
- AWS Blog: Amazon Bedrock Is Now Generally Available – Build and Scale Generative AI Applications with Foundation Models
- モデルごとの価格: Amazon Bedrock Pricing
- Workshop: GitHub - aws-samples/amazon-bedrock-workshop: This is a workshop designed for Amazon Bedrock a foundational model service.
- AWS Documentation(User Guide): What is Amazon Bedrock? - Amazon Bedrock
- AWS Documentation(API Reference): Bedrock API Reference - Amazon Bedrock
- AWS SDK for Python(Boto3) Documentation(Bedrock): Bedrock - Boto3 documentation
- AWS SDK for Python(Boto3) Documentation(BedrockRuntime): BedrockRuntime - Boto3 documentation
- AWS CLI Command Reference(bedrock): bedrock — AWS CLI Command Reference
- AWS CLI Command Reference(bedrock-runtime): bedrock-runtime — AWS CLI Command Reference
- AWS Management Console(Amazon Bedrock Model Providers): Amazon Bedrock Model Providers - AWS Management Console
Amazon Bedrockとは
Amazon BedrockはAI21 LabsのJurassic-2, AmazonのTitan, AnthropicのClaude, CohereのCommand, MetaのLlama 2, Stability AIのStable Diffusionといった基盤モデル(Foundation Models:FMs)を使用するためのAPI経由のアクセスや独自データを使用してFMsをプライベートにカスタマイズする機能を提供するサービスです。
テキスト生成、チャットボット、検索、テキスト要約、画像生成、パーソナライズしたレコメンデーションなどのユースケースに応じて基盤モデルを選択してGenerative AIアプリケーションの構築や拡張ができます。
テキストを扱うGenerative AIにおけるトークン(tokens)とは
Amazon Bedrockのモデル一覧や価格表を見ていく前に制限や課金の単位となっているトークン(tokens)について簡単に説明します。
ただし、ここではイメージのしやすさを重視したため厳密な定義とは異なる可能性があることをご承知おきください。
テキストを扱うGenerative AIにおけるトークン(tokens)とは、テキストを意味のある部分に分割した単位のことです。
トークンは単語に該当する場合もありますが、必ずしも単語と同義ではなく文字、サブワードなどに分割される場合もあります。
例えばAmazon Bedrock is amazing!
という文字列を単語ベースにトークン化すると次のようになります。
["Amazon", "Bedrock", "is", "amazing", "!"]
しかし、単語ベースではない別のトークン化手法(Tokenization)を使用すると次のようにスペースも含めて分割される場合があります。
["Amazon", " ", "Bedrock", " ", "is", " ", "amazing", "!"]
トークン化手法には単語ベース以外にUnigram Tokenization、WordPiece、SentencePiece、Byte Pair Encoding(BPE)など高度なものがあり、モデルごとに採用している手法は様々なので、その点は意識しておく必要があります。
特に、トークンベースの料金計算を行う際には、対象となるモデルのトークン化手法に従って、実際に使用する条件に近いシナリオでトークン数を算出するのが最良だと思います。
しかし個人的には、自分が利用しているGenerative AIサービスの月額予算を考えるときなどトークン数の詳しい予測に時間と作業量をかけたくない場合には、Generative AIそのものを使用して計算したり、計算しやすいように1文字=1トークンとして高めに料金を見積もったりしています。
用意されているモデルの一覧
製品ページのAmazon Bedrock – AWSまたはAWS Management ConsoleのAmazon Bedrock Model Providersを参考に本記事執筆時点のデータをまとめました。
※Meta Llama-2-13b-chat、Meta Llama-2-70b-chatはAmazon Bedrock Is Now Generally Available – Build and Scale Generative AI Applications with Foundation Modelsによると近日公開予定となっています。
※Amazon Titan Text G1 - Expressではベースモデルを独自のデータでFine-tuningしたカスタムモデルの作成がサポートされています。
※Amazon Titan Embeddings G1 - Textはテキスト入力(単語、フレーズ、大きなテキスト単位など)をテキストの意味内容を含む数値表現(Embedding: 埋め込み)に変換するモデルです。
Model Provider | Model | Model ID | Max tokens | Modality (Data Type) |
Languages | Supported use cases |
---|---|---|---|---|---|---|
AI21 Labs | Jurassic-2 Ultra (v1) |
ai21.j2-ultra-v1 | 8191 | Text | English Spanish French German Portuguese Italian Dutch |
Open book question answering summarization draft generation information extraction ideation |
AI21 Labs | Jurassic-2 Mid (v1) |
ai21.j2-mid-v1 | 8191 | Text | English Spanish French German Portuguese Italian Dutch |
Open book question answering summarization draft generation information extraction ideation |
Amazon | Titan Embeddings G1 - Text (v1.2) |
amazon.titan-embed-text-v1 | 8k | Embedding | 100+ languages | Translate text inputs (words, phrases or possibly large units of text) into numerical representations (known as embeddings) that contain the semantic meaning of the text. |
Amazon | Titan Text G1 - Express (v1 - preview) |
amazon.titan-text-express-v1 | 8k | Text | English | Open ended text generation brainstorming summarization code generation table creation data formatting paraphrasing chain of though rewrite extraction Q&A chat |
Anthropic | Claude v1.3 | anthropic.claude-v1 | 100k | Text | English and multiple other languages | Question answering information extraction removing PII content generation multiple choice classification Roleplay comparing text summarization document Q&A with citation |
Anthropic | Claude v2 | anthropic.claude-v2 | 100k | Text | English and multiple other languages | Question answering information extraction removing PII content generation multiple choice classification Roleplay comparing text summarization document Q&A with citation |
Anthropic | Claude Instant v1.2 | anthropic.claude-instant-v1 | 100k | Text | English and multiple other languages | Question answering information extraction removing PII content generation multiple choice classification Roleplay comparing text summarization document Q&A with citation |
Cohere | Command (v14.6) |
cohere.command-text-v14 | 4096 | Text | English | Text generation text summarization |
Stability AI | Stable Diffusion XL (v0.8 - preview) |
stability.stable-diffusion-xl-v0 | 8192 | Image | English | image generation image editing |
Meta | Llama-2-13b-chat (* Coming Soon) |
(* Unknown) | 4k | Text | English | Assistant-like chat |
Meta | Llama-2-70b-chat (* Coming Soon) |
(* Unknown) | 4k | Text | English | Assistant-like chat |
用意されているモデルの価格
Amazon Bedrock Pricingを参考に本記事執筆時点のデータをまとめました。
価格が記載されていないモデルの項目はその価格オプションが提供されていない、またはモデルのカスタマイズの機能そのものがサポートされていないことを示しています。
※Meta Llama-2-13b-chat、Meta Llama-2-70b-chatは近日公開予定で本記事執筆時点で価格については記載がありませんでした。
テキストを扱うモデルの価格
テキストを扱うモデルの価格は次の項目で価格が設定されています。
- On-Demand
On-Demandは1,000ごとの入力トークンと1,000ごとの出力トークンで価格計算されます(時間ベースの支払いではありません)。 - Provisioned Throughput
Provisioned Throughputは指定した期間における時間ベースの支払いを確約(commitment)することで、大規模利用など要件を満たすための十分なスループットをプロビジョニングします。
commitmentの期間には、無し、1ヶ月、6ヶ月があり長期間であるほど割引がされます。 - Model customization(Fine-tuning)
Fine-tuningを使用したカスタムモデルを作成する場合は、1,000トークンごとのトレーニング料金、カスタムモデルごとの月額保存料金が発生します。
Model Provider | Model | On-Demand (per 1000 input tokens) |
On-Demand (per 1000 output tokens) |
Provisioned Throughput (per hour per model) |
Model customization through Fine-tuning |
---|---|---|---|---|---|
AI21 Labs | Jurassic-2 Ultra | 0.0188 USD | 0.0188 USD | - | - |
AI21 Labs | Jurassic-2 Mid | 0.0125 USD | 0.0125 USD | - | - |
Amazon | Titan Embeddings G1 - Text | 0.0001 USD | N/A | no commitment: N/A 1-month commitment: 6.40 USD 6-month commitment: 5.10 USD |
- |
Amazon | Titan Text G1 - Express | 0.0013 USD | 0.0017 USD | no commitment: 20.50 USD 1-month commitment: 18.40 USD 6-month commitment: 14.80 USD |
Train(per 1000 tokens): 0.0008 USD Store each custom model(per month): 1.95 USD |
Anthropic | Claude v1.3 | 0.01102 USD | 0.03268 USD | no commitment: N/A 1-month commitment: 63.00 USD 6-month commitment: 35.00 USD |
- |
Anthropic | Claude v2 | 0.01102 USD | 0.03268 USD | no commitment: N/A 1-month commitment: 63.00 USD 6-month commitment: 35.00 USD |
- |
Anthropic | Claude Instant v1.2 | 0.00163 USD | 0.00551 USD | no commitment: N/A 1-month commitment: 39.60 USD 6-month commitment: 22.00 USD |
- |
Cohere | Command | 0.0015 USD | 0.0020 USD | - | - |
Meta | Llama-2-13b-chat (* Coming Soon) |
(* Unknown) | (* Unknown) | (* Unknown) | (* Unknown) |
Meta | Llama-2-70b-chat (* Coming Soon) |
(* Unknown) | (* Unknown) | (* Unknown) | (* Unknown) |
画像を扱うモデルの価格
テキストを扱うStability AIのStable Diffusion XLモデルはv0.8
が画像ごとの画像品質と解像度によって価格設定され、v1.0
がProvisioned Throughputで価格設定されています。
Model Provider | Model | Standard quality(<51 steps) (per image) |
Premium quality(>51 steps) (per image) |
Provisioned Throughput (per hour per model) |
Model customization through Fine-tuning |
---|---|---|---|---|---|
Stability AI | Stable Diffusion XL (v0.8) |
512x512 or smaller: 0.018 USD Larger than 512x512: 0.036 USD |
512x512 or smaller: 0.036 USD Larger than 512x512: 0.072 USD |
- | - |
Stability AI | Stable Diffusion XL (v1.0) |
- | - | no commitment: N/A 1-month commitment: 49.86 USD 6-month commitment: 46.18 USD |
- |
Amazon Bedrockの基本的な使い方
Amazon Bedrockの始め方・準備
Amazon Bedrockを始めるにはAWS Management ConsoleでAmazon BedrockのModel access画面に遷移し、Edit
をクリックしして使用するモデルを選択し、Save changes
でモデルへのアクセスをリクエストします。
Amazon Bedrock > Model access - AWS Management Console
※Anthropicのモデルは会社情報や目的などを入力してリクエストする必要があります。
リクエストが承認されるとモデルのアクセスが有効になり使用できるようになります。
Amazon Bedrock Runtime APIのInvokeModel、InvokeModelWithResponseStreamとパラメータ
実際にAmazon Bedrockを使用するためのAPIについて説明します。
Amazon Bedrockに関するAPIには大きく分けてBedrock APIとBedrock Runtime APIがあります。
Bedrock APIはFine-tuningによるカスタムモデルの作成やモデルのProvisioned Throughputの購入などAWSリソースの操作に使用します。
一方のBedrock Runtime APIはベースモデルやカスタムモデルを指定して入力データ(Prompt)をリクエストし、レスポンスから出力データ(Completions)を取得する実際の実行に使用します。
Amazon Bedrock Runtime APIには実際にモデルを呼び出して使用するためのInvokeModelとInvokeModelWithResponseStreamがあります。
Amazon Bedrock Runtime APIのInvokeModelはリクエストに対するレスポンスの内容を一度にすべて取得するAPIです。
一方でAmazon Bedrock Runtime APIのInvokeModelWithResponseStreamはリクエストに対するレスポンスの内容を少量の文字ずつ徐々にストリームとして取得するAPIです。
すでにチャット形式のGenerative AIサービスを使ったことがある方はPromptに対する結果が数文字ずつ表示される画面を見たことがあると思いますが、その表示方法に使用できるのがInvokeModelWithResponseStreamです。
Amazon Bedrock Runtime APIのInvokeModelとInvokeModelWithResponseStreamのリクエストで指定するパラメーターは共通で次のものを使用します。
accept: レスポンスの推論BodyのMIMEタイプ。(Default: application/json) contentType: リクエストの入力データのMIMEタイプ。(Default: application/json) modelId: [Required]モデルの識別子。(例: ai21.j2-ultra-v1) body: [Required]contentTypeで指定した形式の入力データ。各モデルでサポートされている推論パラメーターにあわせてbodyのフィールドのフォーマットを指定する。
一般的な推論パラメータの意味
以降ではAmazon Bedrock Runtime APIの実行例を紹介しますが、その前にモデルへのリクエストのBody内でよく使用する一般的な推論パラメーターについて簡単に説明します。
ただし、ここではイメージのしやすさを重視したため厳密な定義とは異なる可能性があることをご承知おきください。
- temperature
モデルの出力確率分布のランダム性と多様性を調整するパラメータで、値が大きいとランダム性と多様性の高い意外な回答を返す傾向になり、値が小さいとより高い確率で推定される回答を返す傾向になります。temperatureの通常の範囲は0 - 1
の間ですが、1を超える値を設定できるモデルもあります。例えば、temperature=1.0
とtemperature=0.1
ではtemperature=1.0
の方がランダム性と多様性が高い回答を、temperature=0.1
の方がより高い確率で推定される回答を返す傾向になります。 - topK
モデルが考慮するトークンの上位K個を制限することでランダム性と多様性を調整するパラメータです。topKの最適な範囲は使用するモデルによって異なります。この値をセットすると出力トークンはこの上位Kの中から選択されます。例えば、topK=10
の場合はモデルが回答生成時に確率の高い上位10のトークンのみを考慮するようになります。簡単に言えば、topKは選択可能なトークンの範囲を出力トークンの数で制限し、その結果として多様性も調整します。 - topP
トークンの累積確率が指定したPを超える前のトークンの集合からサンプリングすることでランダム性と多様性を調整するパラメータです。通常のtopPの範囲は0 - 1
の間です。例えばtopP=0.9
の場合はモデルが回答生成時に確率が高いトークンから順に累計確率が0.9を超える前のトークンまでを考慮するようになります。簡単に言えば、topPは選択可能なトークンの範囲を出力トークンの確率の累計に基づいて制限し、その結果としてランダム性と多様性も調整します。 - maxTokens
生成されるトークンの最大数を制限し、生成されるテキストの長さをコントロールするためのパラメータです。例えばmaxTokens=800
の場合はモデルが800トークンを超えるテキストを生成しないようになります。
APIへのリクエストではtemperature、topK、topPのパラメータを組み合わせて確信度と多様性のバランスを調整し、maxTokensで出力されるトークン数を制限します。
Amazon Bedrockにある各モデルの詳細な推論パラメータについては「Inference parameters for foundation models - Amazon Bedrock」を参照してください。
AWS SDK for Python(Boto3)によるAmazon Bedrock Runtimeのinvoke_model実行例
ここではAWS SDK for Python(Boto3)によるAmazon Bedrock Runtimeのinvoke_modelをAWS Lambda関数で実行した例を紹介します。
本記事執筆時点ではAWS Lambda関数のデフォルトのAWS SDK for Python(Boto3)ではbedrock
、bedrock-runtime
のClientがまだ呼び出せませんでした。
そのため、以下は最新のAWS SDK for Python(Boto3)をLambda Layerに追加してbedrock-runtime
のClientを使用した例です。
・実行例(AWS Lambda関数)
import boto3 import json import os region = os.environ.get('AWS_REGION') bedrock_runtime_client = boto3.client('bedrock-runtime', region_name=region) def lambda_handler(event, context): modelId = 'ai21.j2-ultra-v1' contentType = 'application/json' accept = 'application/json' body = json.dumps({ "prompt": "Please tell us all the states in the U.S.", "maxTokens": 800, "temperature": 0.7, "topP": 0.95 }) response = bedrock_runtime_client.invoke_model( modelId=modelId, contentType=contentType, accept=accept, body=body ) response_body = json.loads(response.get('body').read()) return response_body
・実行結果例(上記AWS Lambda関数の返却値)
{ "id": 1234, "prompt": { "text": "Please tell us all the states in the U.S.", "tokens": [ 〜省略〜 ] }, "completions": [ { "data": { "text": "\nUnited States of America is a federal republic consisting of 50 states, a federal district (Washington, D.C., the capital city of the United States), five major territories, and various minor islands. The 50 states are Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, and Wyoming.", "tokens": [ 〜省略〜 ] }, "finishReason": { "reason": "endoftext" } } ] }
※本記事執筆時点で最新のAWS SDK for Python(Boto3)にはAmazon Bedrock Runtimeのinvoke_model_with_response_streamコマンドが用意されています。
ただ、別記事で詳細について説明する予定のため、今回の記事では割愛します。
AWS CLIによるAmazon Bedrock Runtimeのinvoke-model実行例
ここでは、AWS CLIによるAmazon Bedrock Runtimeのinvoke-model実行例を紹介します。
本記事執筆時点ではAmazon Bedrock Runtime APIはAWS CLI Version 2系にはまだ対応していませんでした。
そのため、以下はAmazon Bedrock Runtime APIが対応していたAWS CLI Version 1系を別途インストールして実行した例です。
・フォーマット
aws bedrock-runtime invoke-model \ --region [Region] \ --model-id "[modelId]" \ --content-type "[contentType]" \ --accept "[accept]" \ --body "[body]" [Output FileName]
・実行例
aws bedrock-runtime invoke-model \ --region us-east-1 \ --model-id "ai21.j2-ultra-v1" \ --content-type "application/json" \ --accept "application/json" \ --body "{\"prompt\": \"Please tell us all the states in the U.S.\", \"maxTokens\": 800,\"temperature\": 0.7,\"topP\": 0.95}" invoke-model-output.txt
・レスポンス例
* 画面表示 {"contentType": "application/json"} * ファイル内容(invoke-model-output.txt) {"id": 1234,"prompt": {"text": "Please tell us all the states in the U.S.","tokens": [〜省略〜]},"completions": [{"data": {"text": "\nUnited States of America is a federal republic consisting of 50 states, a federal district (Washington, D.C., the capital city of the United States), five major territories, and various minor islands. The 50 states are Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, and Wyoming.","tokens": [〜省略〜]},"finishReason": {"reason": "endoftext"}}]}
※本記事執筆時点でAWS CLIにAmazon Bedrock Runtimeのinvoke-model-with-response-streamコマンドは用意されていません。
まとめ
今回はAmazon Bedrockの参考資料、モデル一覧、価格、使い方、トークンやパラメータの用語説明、Runtime APIの実行例について紹介しました。
情報をまとめていく中でAmazon Bedrockは様々な種類のモデルからユースケースに応じたものを選択でき、他のAWSサービスと親和性の高いAWS SDKやAWS CLIのインタフェースで呼び出すせることがわかりました。
これからもAmazon Bedrockをアップデート、実装方法、他のサービスとの組み合わせなどの観点でウォッチしていきたいと思います。