Amazon Bedrockでできることが増えたことにより、InvokeModel APIやConverse APIで指定できるモデルが複雑になってきました。
わかりやすくするため、図にしてみました。
ベースモデル(Base model)
普通の呼び出しです。
ベースモデルのモデル一覧を取得
ListFoundationModels APIでモデル一覧が取得できますが、ベースモデル以外の情報も含まれています。
ベースモデルのモデル一覧を取得するためにjq
を使ってフィルタリングします。
aws bedrock list-foundation-models | \
jq -r '.modelSummaries[] | select(.inferenceTypesSupported[] == "ON_DEMAND") | [
.modelName,
.providerName,
.modelId,
.modelArn,
(.inputModalities | join(" ")),
(.outputModalities | join(" ")),
.modelLifecycle.status
] | @tsv' | column -t -s $'\t'
Titan Text G1 - Express Amazon amazon.titan-text-express-v1 arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-text-express-v1 TEXT TEXT ACTIVE
Titan Embeddings G1 - Text Amazon amazon.titan-embed-text-v1 arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-embed-text-v1 TEXT EMBEDDING ACTIVE
Claude Instant Anthropic anthropic.claude-instant-v1 arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-instant-v1 TEXT TEXT ACTIVE
Claude Anthropic anthropic.claude-v2:1 arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-v2:1 TEXT TEXT ACTIVE
Claude 3 Haiku Anthropic anthropic.claude-3-haiku-20240307-v1:0 arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0 TEXT IMAGE TEXT ACTIVE
Claude 3.5 Sonnet Anthropic anthropic.claude-3-5-sonnet-20240620-v1:0 arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0 TEXT IMAGE TEXT ACTIVE
Embed English Cohere cohere.embed-english-v3 arn:aws:bedrock:ap-northeast-1::foundation-model/cohere.embed-english-v3 TEXT EMBEDDING ACTIVE
Embed Multilingual Cohere cohere.embed-multilingual-v3 arn:aws:bedrock:ap-northeast-1::foundation-model/cohere.embed-multilingual-v3 TEXT EMBEDDING ACTIVE
呼び出し例
modelIdは、モデルIDまたはモデルARNを指定します。
- モデルID(例): anthropic.claude-3-5-sonnet-20240620-v1:0
- モデルARN(例): arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0
AWSアカウント固有ではないので、アカウントIDはARNに含まれていません。
import boto3
client = boto3.client("bedrock-runtime")
client.converse(
modelId="anthropic.claude-3-5-sonnet-20240620-v1:0",
# modelId="arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0",
messages=[
{
"role": "user",
"content": [
{
"text": "Hello, how are you?",
}
],
}
],
)
クロスリージョン推論(Cross-region inference)
2024/8に追加された機能です。
ベースモデルを使用する場合、単一のリージョンへリクエストを行います。クロスリージョン推論を使用すると、リクエストしたリージョン(プライマリリージョン)で処理できない場合、2つ目以降のリージョン(セカンダリリージョン)で処理を行います。
クロスリージョン推論の推論プロファイル一覧を取得
クロスリージョン推論の推論プロファイルはListInferenceProfiles APIを使用して取得します。ListInferenceProfilesでは、アプリケーション推論プロファイル(後述)も含まれるので、「--type-equals SYSTEM_DEFINED」を指定します。
aws bedrock list-inference-profiles --type-equals SYSTEM_DEFINED | \
jq -r '.inferenceProfileSummaries[] | [
.inferenceProfileName,
.inferenceProfileId,
.inferenceProfileArn,
.status
] | @tsv' | column -t -s $'\t'
APAC Anthropic Claude 3 Sonnet apac.anthropic.claude-3-sonnet-20240229-v1:0 arn:aws:bedrock:ap-northeast-1:123456789012:inference-profile/apac.anthropic.claude-3-sonnet-20240229-v1:0 ACTIVE
APAC Anthropic Claude 3.5 Sonnet apac.anthropic.claude-3-5-sonnet-20240620-v1:0 arn:aws:bedrock:ap-northeast-1:123456789012:inference-profile/apac.anthropic.claude-3-5-sonnet-20240620-v1:0 ACTIVE
APAC Anthropic Claude 3 Haiku apac.anthropic.claude-3-haiku-20240307-v1:0 arn:aws:bedrock:ap-northeast-1:123456789012:inference-profile/apac.anthropic.claude-3-haiku-20240307-v1:0 ACTIVE
呼び出し例
modelIdは、推論プロファイルIDまたは推論プロファイルARNを指定します。
- 推論プロファイルID(例): us.anthropic.claude-3-5-sonnet-20240620-v1:0
- 推論プロファイルARN(例): arn:aws:bedrock:us-east-1:123456789012:inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0
import boto3
client = boto3.client("bedrock-runtime")
client.converse(
modelId="us.anthropic.claude-3-5-sonnet-20240620-v1:0",
# modelId="arn:aws:bedrock:us-east-1:123456789012:inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0",
messages=[
{
"role": "user",
"content": [
{
"text": "Hello, how are you?",
}
],
}
],
)
注意が必要なのは、「ベースモデルは提供していないが、クロスリージョン推論だけ提供している場合がある」 ということです。
2024/11/24現在、東京リージョンでは クロスリージョン推論でのみ Claude 3 Sonnetが使用できます。
そのため、東京リージョンでベースモデル「anthropic.claude-3-sonnet-20240229-v1:0」を指定すると、以下のようなエラーとなります。
ValidationException: An error occurred (ValidationException) when calling the Converse operation: Invocation of model ID anthropic.claude-3-sonnet-20240229-v1:0 with on-demand throughput isn’t supported. Retry your request with the ID or ARN of an inference profile that contains this model.
(セカンダリリージョンでモデルが有効化されている必要があるかもしれませんので、そのあたりもご注意ください。)
アプリケーション推論プロファイル(Application inference profile)
2024/11/1に追加された機能です。
ベースモデルとクロスリージョン推論は、タグ付けができないため、同一リージョンの同一モデルの場合を使用した場合にコストを分割することができませんでした。アプリケーション推論プロファイルを使うことでタグ付けが可能になり、「アプリ1のClaude 3 Sonnet利用料」と「アプリ2のClaude 3 Sonnet利用料」を分けることができるようになりました。(コスト分配タグの機能を組み合わせて使用します)
コスト以外にもCloudWatchのメトリクスも分けてみることができるようになります。
カスタムモデルなどは、従来からタグ付けがサポートされています。
アプリケーション推論プロファイルは「create_inference_profile」APIで作成します。「modelSource」にモデルARN(ベースモデルの場合)か推論プロファイルARN(クロスリージョン推論の場合)を指定します。
import boto3
client = boto3.client("bedrock")
client.create_inference_profile(
inferenceProfileName="claude-3-haiku-profile",
modelSource={
"copyFrom": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
},
tags=[{"key": "bedrock-inference-profile", "value": "app-1"}],
)
アプリケーション推論プロファイルを作成すると、一意なARNが発行されます。
arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/jf2sje1c0jnb
アプリケーション推論プロファイルの推論プロファイル一覧を取得
アプリケーション推論プロファイルは、クロスリージョン推論の推論プロファイルと同様ListInferenceProfiles APIを使用して取得します。取得結果をアプリケーション推論プロファイルのみにフィルターするため、「--type-equals APPLICATION」を指定します。
aws bedrock list-inference-profiles --type-equals APPLICATION | \
jq -r '.inferenceProfileSummaries[] | [
.inferenceProfileName,
.inferenceProfileId,
.inferenceProfileArn,
.status
] | @tsv' | column -t -s $'\t'
呼び出し例
modelIdにアプリケーション推論プロファイルARNを指定します。
import boto3
client = boto3.client("bedrock-runtime")
client.converse(
modelId="arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/jf2sje1c0jnb",
messages=[
{
"role": "user",
"content": [
{
"text": "Hello, how are you?",
}
],
}
],
)
プロンプト(Prompt)
プロンプト管理(Prompt Management)機能は2024/11/7にGAしました。
こちらの投稿で検証していますので参照ください。
プロンプト管理にてプロンプトを作成すると、ARNが発行されますので、API呼び出しのmodelIdとして指定します。
呼び出し例
import boto3
client = boto3.client("bedrock-runtime")
client.converse(
modelId=prompt1_arn,
promptVariables={"language": {"text": "英語"}, "message": {"text": "こんにちは"}},
)
プロビジョンドスループット(Provisioned Throughput)
ベースモデルで提供されるスループット以上のスループットが必要な場合、プロビジョンドスループットを購入することで、安定したパフォーマンスでBedrockを利用できるようになります。
カスタムモデル(Custom model)
カスタムモデルは、ベースモデルをもとに、独自のデータセットを使った追加学習を行う機能です。
カスタムモデルを使用する際、プロビジョンドスループットを購入する必要があります。
カスタムモデルの詳細は公式ブログを参考にしてください。
インポートしたモデル(Imported model)
インポートしたモデルは、Bedrock「以外」で構築したモデルを取り込んでBedrockで使用する機能です。
インポートしたモデルはカスタムモデルと異なり、プロビジョンドスループットを購入する必要はありません。
すでに検証記事がありますので、詳細はこれらを参考にしてください。
まとめ
種別 | 概要 | 指定方法 |
---|---|---|
ベースモデル(Base model) | ベースとなるモデル | モデルID もしくは ARN |
クロスリージョン推論(Cross region (system-defined) inference profile ) | 複数のAWSリージョンにまたがって推論するモデル | 推論プロファイルID もしくは ARN |
アプリケーション推論プロファイル(Application inference profile) | コストとモデルの使用状況を追跡するために作成するモデル | ARN |
プロンプト(Prompt) | Prompt managementで作成したプロンプト | ARN |
カスタムモデル(Custom model) | Bedrockでカスタマイズしたモデル | プロビジョンドスループットのARN(?) |
インポートしたモデル(Imported model) | Bedrock外でカスタマイズし、Bedrockにインポートしたモデル | ARN |
プロビジョンドスループット(Provisioned Throughput) | スループットを固定コストで購入するモデル | ARN |