こんにちは。AWS CLI が好きな福島です。
- はじめに
- 追記
- 利用可能なモデルを確認する
- AI21 Labs のモデルを使ってみる
- Amazon のモデルを使ってみる
- Anthropicのモデル を使ってみる
- Cohere を使ってみる
- Stability AI(プレビュー) のモデルを試してみる
- 終わりに
はじめに
今回は、AWS CLI からAmazon Bedrock を利用して複数のモデルを使ってみたいと思います。
追記
このブログを記載した後に気づいたのですが、BedrockのplaygroundからCLIコマンドを生成することができました。
利用可能なモデルを確認する
Bedrock では様々なモデルを利用することができますが、 以下のコマンドにより、利用可能なモデルを確認できます。
- 実行コマンド
aws bedrock list-foundation-models \ --region us-east-1 \ --query "modelSummaries[]. [providerName, modelId, inputModalities[0], outputModalities[0], responseStreamingSupported, customizationsSupported[0], inferenceTypesSupported[0]]" \ --output text | tr '\t' ',' | column -s, -t | sort
※inputModalities や outputModalities は、リスト内の最初の値のみを取得しています。 そのため、リスト内の 2 番目以降の値を取得するためには、inputModalities[1],inputModalities[2]のようにクエリを追加します。
- 実行結果例
以下は実行結果例ですが、現時点(2023/11)では、リージョンにより使えるモデルが異なることがわかります。
## バージニア北部リージョン(us-east-1) $ aws bedrock list-foundation-models --region us-east-1 --query "modelSummaries[].[providerName,modelId,inputModalities[0],outputModalities[0],responseStreamingSupported,customizationsSupported[0],inferenceTypesSupported[0]]" --output text | tr '\t' ',' | column -s, -t | sort AI21 Labs ai21.j2-grande-instruct TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-jumbo-instruct TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-mid TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-mid-v1 TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-ultra TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-ultra-v1 TEXT TEXT False None ON_DEMAND Amazon amazon.titan-e1t-medium TEXT EMBEDDING None None ON_DEMAND Amazon amazon.titan-embed-g1-text-02 TEXT EMBEDDING None None ON_DEMAND Amazon amazon.titan-embed-text-v1 TEXT EMBEDDING True None ON_DEMAND Amazon amazon.titan-text-express-v1 TEXT TEXT True FINE_TUNING ON_DEMAND Amazon amazon.titan-text-lite-v1 TEXT TEXT True FINE_TUNING ON_DEMAND Amazon amazon.titan-tg1-large TEXT TEXT True FINE_TUNING ON_DEMAND Anthropic anthropic.claude-instant-v1 TEXT TEXT True None ON_DEMAND Anthropic anthropic.claude-v1 TEXT TEXT True None ON_DEMAND Anthropic anthropic.claude-v2 TEXT TEXT True None ON_DEMAND Cohere cohere.command-text-v14 TEXT TEXT True None ON_DEMAND Stability AI stability.stable-diffusion-xl TEXT IMAGE None None ON_DEMAND Stability AI stability.stable-diffusion-xl-v0 TEXT IMAGE None None ON_DEMAND $
## 東京リージョン(ap-northeast-1) $ aws bedrock list-foundation-models --region ap-northeast-1 --query "modelSummaries[].[providerName,modelId,inputModalities[0],outputModalities[0],responseStreamingSupported,customizationsSupported[0],inferenceTypesSupported[0]]" --output text | tr '\t' ',' | column -s, -t | sort Amazon amazon.titan-embed-text-v1 TEXT EMBEDDING True None ON_DEMAND Amazon amazon.titan-text-express-v1 TEXT TEXT True None ON_DEMAND Anthropic anthropic.claude-instant-v1 TEXT TEXT True None ON_DEMAND $
- 出力内容の説明
1 列目: プロバイダー名 2 列目: モデル ID 3 列目: インプットとなるデータ(TEXT | IMAGE | EMBEDDING) 4 列目: アウトプットするデータ(TEXT | IMAGE | EMBEDDING) 5 列目: ストリーミング出力のサポート有無 6 列目: カスタマイズ可能有無 7 列目: モデルがサポートする推論タイプ(ON_DEMAND | PROVISIONED)
- 補足
現在のモデルは基本的には、インプットとアウトプットが 1 つずつですが、 Stability AI は、インプットデータが TEXT(3 列目) と IMAGE(4 列目) に対応しておりました。 ※ 5 列目はアウトプットとなるデータとなります。
$ aws bedrock list-foundation-models --region us-east-1 --query "modelSummaries[].[providerName,modelId,inputModalities[0],inputModalities[1],inputModalities[2],outputModalities[0],outputModalities[1],outputModalities[2],responseStreamingSupported,customizationsSupported[0],inferenceTypesSupported[0]]" --output text | grep "Stability AI" | tr '\t' ',' | column -s, -t Stability AI stability.stable-diffusion-xl TEXT IMAGE None IMAGE None None None None ON_DEMAND Stability AI stability.stable-diffusion-xl-v0 TEXT IMAGE None IMAGE None None None None ON_DEMAND $
AI21 Labs のモデルを使ってみる
AI21 Labs のモデルは以下の 6 つが表示されておりますが、 今回はおそらく最も高性能なai21.j2-ultra を利用してみます。
参考: https://aws.amazon.com/jp/bedrock/jurassic/#Model_versions
AI21 Labs ai21.j2-grande-instruct TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-jumbo-instruct TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-mid TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-mid-v1 TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-ultra TEXT TEXT False None ON_DEMAND AI21 Labs ai21.j2-ultra-v1 TEXT TEXT False None ON_DEMAND
ai21.j2-ultra の実行
- サンプル Body の作成
## sampl-body-ai21.txt { "prompt": "AWSって何ですか?", "maxTokens": 200, "temperature": 0 }
- モデルの実行
aws bedrock-runtime invoke-model \ --model-id ai21.j2-ultra \ --body $(cat sampl-body-ai21.txt | base64) \ --region us-east-1 response.txt
- 実行結果の確認
cat response.txt | jq -r '.completions[].data.text'
- 実行結果例
$ aws bedrock-runtime invoke-model \ --model-id ai21.j2-ultra \ --body $(cat sampl-body-ai21.txt | base64) \ --region us-east-1 response.txt { "contentType": "application/json" } $ cat response.txt | jq -r '.completions[].data.text' AWS(Amazon Web Services)は、Amazonが提供するクラウドベースのサービスです。クラウドとは、複数のコンピューターやネットワークを利用して、データや処理を分散処理する技術です。AWSは、クラウドベースのサービスを利用して、企業や個人がデータや処理を効率よく処理できるようにすることです。 AWSには、様々なサービスがあります。例えば、Amazon EC2(インターネット上で仮想サーバーを立ち上げるサービス)やAmazon S3(データの保存や処理を行うサービス)などがあります。 AWSは、クラウドベースのサービスを利用して、データや処理を効率よく処理できるようにすることで、企業や個人がより効率的に業務を行うことができるようになっています。
- レスポンスの詳細
レスポンスのデータ構造を確認します。以下は少しデータを加工したものですが、 大枠として、id, prompt, completions という辞書型キーが存在することが分かります。
* id 識別子が含まれます。(複数回実行しても 1234 のままでしたが...) * prompt 質問内容の詳細が含まれています。 * prompt.text 質問内容が含まれています。 * prompt.tokens 質問内容の単語や文字列の一部がモデルによってどう解析されたかが分かります。 * prompt.tokens[*].logprob トークンが生成される対数確率が入り、これはモデルがそのトークンを選ぶ自信の度合いを示し、 数字が小さいほど(より負の数になるほど)そのトークンの出現が予想外である、または珍しいことを意味するようです。 * prompt.tokens[*].textRange テキストの何文字目から何文字目の単語または文字列の一部かが分かります。 * completions 生成された回答の詳細が含まれています。 * completions.data.test 生成された回答が含まれています。 * completions.data.tokens 質問内容の単語や文字列の一部がモデルによってどう解析されたかが分かります。 * completions.data.tokens[*].textRange テキストの何文字目から何文字目の単語または文字列の一部かが分かります。 * completions.data.tokens[*].logprob トークンが生成される対数確率が入り、これはモデルがそのトークンを選ぶ自信の度合いを示し、 数字が小さいほど(より負の数になるほど)そのトークンの出現が予想外である、または珍しいことを意味するようです。 * completions.finishReason 生成された回答が終了した理由が含まれます。
{ "id": 1234, "prompt": { "text": "AWSって何ですか?", "tokens": [ { "generatedToken": { "token": "▁AWS", "logprob": -10.475105285644531, "raw_logprob": -10.475105285644531 }, "topTokens": null, "textRange": { "start": 0, "end": 3 } }, : 中略 { "generatedToken": { "token": "?", "logprob": -5.520342826843262, "raw_logprob": -5.520342826843262 }, "topTokens": null, "textRange": { "start": 9, "end": 10 } } ] }, "completions": [ { "data": { "text": "\nAWS(Amazon Web Services)は、Amazonが提供するクラウドベースのサービスです。クラウドとは、複数のコンピューターやネットワークを利用して、データや処理を分散処理する技術です。AWSは、クラウドベースのサービスを利用して、企業や個人がデータや処理を効率よく処理できるようにすることです。\n\nAWSには、様々なサービスがあります。例えば、Amazon EC2(インターネット上で仮想サーバーを立ち上げるサービス)やAmazon S3(データの保存や処理を行うサービス)などがあります。\n\nAWSは、クラウドベースのサービスを利用して、データや処理を効率よく処理できるようにすることで、企業や個人がより効率的に業務を行うことができるようになっています。", "tokens": [ { "generatedToken": { "token": "<|newline|>", "logprob": 0, "raw_logprob": -4.95898348162882e-05 }, "topTokens": null, "textRange": { "start": 0, "end": 1 } }, : 中略 { "generatedToken": { "token": "<|endoftext|>", "logprob": 0, "raw_logprob": -0.087738037109375 }, "topTokens": null, "textRange": { "start": 337, "end": 337 } } ] }, "finishReason": { "reason": "endoftext" } } ] }
Amazon のモデルを使ってみる
Amazon のモデルには、テキスト生成するものと、EMBEDDING 生成するものがあります。 テキスト 生成のモデルは現在プレビュー中となり、私は利用できないため、EMBEDDING 生成の amazon.titan-embed-text-v1 を使ってみます。
https://aws.amazon.com/jp/bedrock/titan/#Model_versions
Amazon amazon.titan-e1t-medium TEXT EMBEDDING None None ON_DEMAND Amazon amazon.titan-embed-g1-text-02 TEXT EMBEDDING None None ON_DEMAND Amazon amazon.titan-embed-text-v1 TEXT EMBEDDING True None ON_DEMAND Amazon amazon.titan-text-express-v1 TEXT TEXT True FINE_TUNING ON_DEMAND Amazon amazon.titan-text-lite-v1 TEXT TEXT True FINE_TUNING ON_DEMAND Amazon amazon.titan-tg1-large TEXT TEXT True FINE_TUNING ON_DEMAND
amazon.titan-embed-text-v1 の実行
- サンプル Body の作成
{ "inputText": "AWS" }
- モデルの実行
aws bedrock-runtime invoke-model \ --model-id amazon.titan-embed-text-v1 \ --body $(cat sample-body-amazon.txt | base64) \ --region us-east-1 response.txt
- 実行結果の確認
cat response.txt | jq
- 実行結果例
$ aws bedrock-runtime invoke-model \ --model-id amazon.titan-embed-text-v1 \ --body $(cat sample-body-amazon.txt | base64) \ --region us-east-1 response.txt { "contentType": "application/json" } us-east-1 ~/Desktop/Terminal/review $ cat response.txt | jq { "embedding": [ 0.91796875, 0.28125, 中略 0.6484375 ], "inputTextTokenCount":8 }
レスポンスには、embeddingとinputTextTokenCountが含まれています。 embeddingには、次元ごとにベクトル化した値が含まれており、titanの場合、1536次元の埋め込みベクトルに変換されるため、1536個の要素が含まれています。 inputTextTokenCountは、質問内容のトークン数を表します。
Anthropicのモデル を使ってみる
Anthropicのモデルは3つありますが、最新のモデルであるanthropic.claude-v2を利用します。
参考: https://aws.amazon.com/jp/bedrock/claude/#Model_versions
Anthropic anthropic.claude-instant-v1 TEXT TEXT True None ON_DEMAND Anthropic anthropic.claude-v1 TEXT TEXT True None ON_DEMAND Anthropic anthropic.claude-v2 TEXT TEXT True None ON_DEMAND
anthropic.claude-v2 の実行
- サンプルBodyの作成
## sample-body-claude.txt { "prompt": "\n\nHuman: AWSって何ですか?\n\nAssistant:", "max_tokens_to_sample": 300, "temperature": 0, "stop_sequences": [] }
※Claudeの場合、promptの前後に\n\nHuman:
と \n\nAssistant:
を含める必要があります。
含めていないと以下のエラーが出力されます。
An error occurred (ValidationException) when calling the InvokeModel operation: Invalid prompt: prompt must start with " Human:" turn, prompt must end with " Assistant:" turn
- モデルの実行
aws bedrock-runtime invoke-model \ --model-id anthropic.claude-v2 \ --body $(cat sample-body-claude.txt | base64) \ --region us-east-1 response.txt
- 生成された回答の確認
cat response.txt | jq -r .completion
- 実行結果例
$ aws bedrock-runtime invoke-model \ --model-id anthropic.claude-v2 \ --body $(cat sample-body-claude.txt | base64) \ --region us-east-1 response.txt { "contentType": "application/json" } $ cat response.txt | jq -r .completion AWSとはAmazon Web Servicesの略で、アマゾンが提供するクラウドコンピューティングサービスの総称です。 主なサービスとしては、 - EC2(Elastic Compute Cloud):仮想サーバー - S3(Simple Storage Service):オブジェクトストレージ - RDS(Relational Database Service):リレーショナルデータベース - DynamoDB:NoSQLデータベース - Lambda:サーバーレスコンピューティング - API Gateway:API管理 などがあります。 AWSを利用することで、サーバー等のインフラを自社で準備する必要がなく、必要な時に必要な分だけクラウド上のリソースを利用できるのが大きなメリットです。パブリッククラウドとして多くの企業に利用されています。 $
- レスポンスの詳細
completion,stop_reason,stop のキーが含まれています。
* completion 生成された回答 * stop_reason 回答の生成が止まった理由 * stop 停止したキーワード
{ "completion": " AWSとはAmazon Web Servicesの略で、アマゾンが提供するクラウドコンピューティングサービスの総称です。\n\n主なサービスとしては、\n\n- EC2(Elastic Compute Cloud):仮想サーバー\n- S3(Simple Storage Service):オブジェクトストレージ\n- RDS(Relational Database Service):リレーショナルデータベース\n- DynamoDB:NoSQLデータベース \n- Lambda:サーバーレスコンピューティング\n- API Gateway:API管理\n\nなどがあります。\n\nAWSを利用することで、サーバー等のインフラを自社で準備する必要がなく、必要な時に必要な分だけクラウド上のリソースを利用できるのが大きなメリットです。パブリッククラウドとして多くの企業に利用されています。", "stop_reason": "stop_sequence", "stop": "\n\nHuman:" }
Cohere を使ってみる
Cohereはモデルが1つしかないため、cohere.command-text-v14を利用してみます。
参考: https://aws.amazon.com/jp/bedrock/cohere-command/#Model_versions
Cohere cohere.command-text-v14 TEXT TEXT True None ON_DEMAND
cohere.command-text-v14 の実行
- サンプルBodyの作成
## sample-body-cohere.txt { "prompt": "AWSって何?", "max_tokens": 100, "temperature": 0 }
- モデルの実行
$ aws bedrock-runtime invoke-model \ --model-id cohere.command-text-v14 \ --body $(cat sample-body-cohere.txt | base64) \ --region us-east-1 response.txt
- 実行結果の確認
$ cat response.txt | jq -r '.generations[].text'
- 実行結果例
$aws bedrock-runtime invoke-model \ --model-id cohere.command-text-v14 \ --body $(cat sample-body-cohere.txt | base64) \ --region us-east-1 response.txt { "contentType": "application/json" } $ cat response.txt | jq -r '.generations[].text' AWSは、アメリカのコンピュータサービス会社Amazonによって開発された、パソコン・データベースなど、ホスト・ストレージなど、Webサービスなどの情報技術を提供するサービスをいう。 $
- レスポンスの詳細
* generations[].id 生成された回答ごとのIDが含まれます。 generationsと複数形のため、複数の回答を得ることができるのかもしれません。 * generations[].text 生成された回答の詳細が含まれています。 * generations[].finish_reason 生成された回答が終了した理由が含まれます。 * prompt 質問内容の詳細が含まれています。 * id 識別子が含まれます。
{ "generations": [ { "finish_reason": "MAX_TOKENS", "id": "50c42577-4bbd-4a18-83a8-2ef528eb2d75", "text": " AWSは、アメリカのコンピュータサービス会社Amazonによって開発された、パソコン・データベースなど、ホスト・ストレージなど、Webサービスなどの情報技術を提供するサービスをいう。\n\n" } ], "id": "eff8937d-dfa9-4ce7-a60f-8eb28a60664d", "prompt": "AWSって何ですか?" }
Stability AI(プレビュー) のモデルを試してみる
Stability AIには2つのモデルがありますが、おそらく最新のstability.stable-diffusion-xlを試してみます。
Stability AI stability.stable-diffusion-xl TEXT IMAGE None None ON_DEMAND Stability AI stability.stable-diffusion-xl-v0 TEXT IMAGE None None ON_DEMAND
stability.stable-diffusion-xl の実行
- サンプルBodyの作成
りんごを生成するようにお願いしています。
sample-body-stability-ai.txt { "text_prompts": [ { "text":"Please make an image of an apple" } ], "cfg_scale":10, "seed":0, "steps":50 }
- モデルの実行
aws bedrock-runtime invoke-model \ --model-id stability.stable-diffusion-xl-v0 \ --body $(cat sample-body-stability-ai.txt | base64) \ --region us-east-1 response.txt
- 実行結果の確認
cat response.txt| jq | more
- 実行結果例
$ cat response.txt| jq | more { "result": "success", "artifacts": [ { "seed": 0, "base64": "iVBORw0KGgoAAAANSUhE 中略 rAAAAAElFTkSuQmCC", "finishReason": "SUCCESS" } ] }
- レスポンスから画像を生成
レスポンスに含まれるエンコードされたデータをデコードすることで画像を取得することができます。
cat response.txt| jq -r '.artifacts[].base64' | base64 -d -o apple.png
今回生成された画像は以下の通りです。
終わりに
今回は、AWS CLIからAmazon Bedrockを利用して複数のモデルを使ってみました。 どなたかのお役に立てれば幸いです。