【AWS】AWS CLIでAmazon Bedrockに登録されている基盤モデルの情報を取得する

## はじめに

この記事ではAmazon bedrockをAWS CLIで検証します。
主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）誤りなどがあれば書き直していく予定です。

## AWS CLIでAmazon bedrockの基盤モデルを取得するには

AWS CLIを使ってAmazon bedrockの基盤モデルを取得するにはどうすれば良いのでしょうか。
結論を言うと下記のとおり、ドキュメントがありますので書いてある内容を辿っていくとだいたいのことはわかります。

[bedrock — AWS CLI 1.33.10 Command Reference](https://docs.aws.amazon.com/cli/latest/reference/bedrock/)

ですが、どう調査すれば良いのかわかりませんよね？当然のことながら私もわかりません。一緒に見ていきましょう。

## おさらい：AWS CLIの基本

AWS CLIは実行する端末もしくはシェルによって認証方法が異なります。
EC2などIAMのプロファイルを参照できる環境であれば、プロファイルで認証するため、認証済みのプロファイルで暗黙的に認証されます。
プロファイルを持たない場合は`--profile`というオプションをつけて、認証に使うプロファイルを指定する必要があります。

具体的には以下のとおりです。プロファイルを指定しないで実行する。

```bash
aws ecr describe-repositories --output json
```

プロファイルを指定して実行する。

```bash
aws ecr describe-repositories --profile cicd_handson --output json
```

もう1つ、おさえておくべき内容として
`aws`に続く、サブコマンドはサービス名でその次に来るのは操作の名前になっていることが大半です。

たとえば、S3バケット名のリストを表示するコマンドは以下のように`aws サービス名 操作`となっています。

```bash
aws s3 ls
```

上記を踏まえてAmazon bedrockに登録されている基盤モデルの情報を取得してみましょう。

## ハンズオン

今回はAdministrator Accessの権限でAWS CloudShellを起動します。

### AWS CloudShellを起動する

今回は`Tokyo`リージョンでAWS CloudShellを起動します。コンソールマークをクリックします。

![bedrock1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3f86c51c-6be1-e455-0694-cd2303cbb465.png)

### 基盤モデル名の情報を取得する

Amazon TitanとClaudeのモデル情報を取得します。
まずはAmazon Titanを取得するために以下のコマンドを実行します。

```bash
aws bedrock get-foundation-model --model-identifier amazon.titan-embed-text-v1
```

実行結果

```json
{
    "modelDetails": {
        "modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-embed-text-v1",
        "modelId": "amazon.titan-embed-text-v1",
        "modelName": "Titan Embeddings G1 - Text",
        "providerName": "Amazon",
        "inputModalities": [
            "TEXT"
        ],
        "outputModalities": [
            "EMBEDDING"
        ],
        "responseStreamingSupported": false,
        "customizationsSupported": [],
        "inferenceTypesSupported": [
            "ON_DEMAND"
        ],
        "modelLifecycle": {
            "status": "ACTIVE"
        }
    }
}
```

次にClaudeを取得するために以下のコマンドを実行します。※2.1を取得

```bash
aws bedrock get-foundation-model --model-identifier anthropic.claude-v2:1
```

実行結果

```json
{
    "modelDetails": {
        "modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-v2:1",
        "modelId": "anthropic.claude-v2:1",
        "modelName": "Claude",
        "providerName": "Anthropic",
        "inputModalities": [
            "TEXT"
        ],
        "outputModalities": [
            "TEXT"
        ],
        "responseStreamingSupported": true,
        "customizationsSupported": [],
        "inferenceTypesSupported": [
            "ON_DEMAND"
        ],
        "modelLifecycle": {
            "status": "ACTIVE"
        }
    }
}
```

「モデルIDだけ取得したいなぁ」と思ったときは以下のように`--query`オプションを指定することで絞り込めます。なお、最後に`--output text`指定しておくことでダブルクウォーテーションなしで出力できます。

```bash
aws bedrock get-foundation-model --model-identifier anthropic.claude-v2:1 --query 'modelDetails.modelArn' --output text
```

## 生成AIの基盤モデルごとに見ていく

なんとなく基盤モデルの情報を取得できたと思うので「どんな基盤モデルがあってどういう情報を持っているのか」順番に見ていきましょう。

### Amazon Titan

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1:0:8k |
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1 |
| Amazon | Titan Embeddings G1 - Text | amazon.titan-embed-text-v1:2:8k |
| Amazon | Titan Embeddings G1 - Text | amazon.titan-embed-text-v1 |
| Amazon | Titan Text Large | amazon.titan-tg1-large |
| Amazon | Titan Image Generator G1 | amazon.titan-image-generator-v1:0 |
| Amazon | Titan Image Generator G1 | amazon.titan-image-generator-v1 |
| Amazon | Titan Text Embeddings v2 | amazon.titan-embed-g1-text-02 |
| Amazon | Titan Text G1 - Lite | amazon.titan-text-lite-v1:0:4k |
| Amazon | Titan Text G1 - Lite | amazon.titan-text-lite-v1 |
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1:0:8k |
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1 |
| Amazon | Titan Embeddings G1 - Text | amazon.titan-embed-text-v1:2:8k |
| Amazon | Titan Embeddings G1 - Text | amazon.titan-embed-text-v1 |
| Amazon | Titan Multimodal Embeddings G1 | amazon.titan-embed-image-v1:0 |
| Amazon | Titan Multimodal Embeddings G1 | amazon.titan-embed-image-v1 |

モデル情報を調べる場合は以下のコマンドを実行します。（`amazon.titan-text-express-v1:0:8k`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier amazon.titan-text-express-v1:0:8k --query 'modelDetails.modelArn' --output text
```

### Anthropic Claude

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| Anthropic | Claude Instant | anthropic.claude-instant-v1:2:18k |
| Anthropic | Claude Instant | anthropic.claude-instant-v1 |
| Anthropic | Claude |anthropic.claude-v2:1:18k |
| Anthropic | Claude | anthropic.claude-v2:1:200k |
| Anthropic | Claude | anthropic.claude-v2:1 |
| Anthropic | Claude Instant | anthropic.claude-instant-v1:2:100k |
| Anthropic | Claude Instant | anthropic.claude-instant-v1 |
| Anthropic | Claude | anthropic.claude-v2:0:18k |
| Anthropic | Claude | anthropic.claude-v2:0:100k |
| Anthropic | Claude | anthropic.claude-v2:1:18k |
| Anthropic | Claude | anthropic.claude-v2:1:200k |
| Anthropic | Claude | anthropic.claude-v2:1 |
| Anthropic | Claude | anthropic.claude-v2 |
| Anthropic | Claude 3 Sonnet | anthropic.claude-3-sonnet-20240229-v1:0 |

モデル情報を調べる場合は以下のコマンドを実行します。（`anthropic.claude-instant-v1:2:18k`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier anthropic.claude-instant-v1:2:18k --query 'modelDetails.modelArn' --output text
```

### Stability AI SDXL

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| Stability AI | SDXL 0.8 | stability.stable-diffusion-xl |
| Stability AI | SDXL 0.8 | stability.stable-diffusion-xl-v0 |
| Stability AI | SDXL 1.0 | stability.stable-diffusion-xl-v1:0 |
| Stability AI | SDXL 1.0 | stability.stable-diffusion-xl-v1 |

モデル情報を調べる場合は以下のコマンドを実行します。（`stability.stable-diffusion-xl`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier stability.stable-diffusion-xl --query 'modelDetails.modelArn' --output text
```

※Tokyoリージョンではまだ提供されていないため、エラーが返ってきます。

### AI21 Labs

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| AI21 Labs | J2 Grande Instruct | ai21.j2-grande-instruct |
| AI21 Labs | J2 Jumbo Instruct | ai21.j2-jumbo-instruct |
| AI21 Labs | Jurassic-2 Mid | ai21.j2-mid |
| AI21 Labs | Jurassic-2 Mid | ai21.j2-mid-v1 |
| AI21 Labs | Jurassic-2 Ultra | ai21.j2-ultra |
| AI21 Labs | Jurassic-2 Ultra | ai21.j2-ultra-v1 |

モデル情報を調べる場合は以下のコマンドを実行します。（`ai21.j2-grande-instruct`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier ai21.j2-grande-instruct --query 'modelDetails.modelArn' --output text
```

※Tokyoリージョンではまだ提供されていないため、エラーが返ってきます。

### Cohere

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| Cohere | Command | cohere.command-text-v14:7:4k |
| Cohere | Command | cohere.command-text-v14 |
| Cohere | Command Light | cohere.command-light-text-v14:7:4k |
| Cohere | Command Light | cohere.command-light-text-v14 |
| Cohere | Embed English | cohere.embed-english-v3 |
| Cohere | Embed Multilingual | cohere.embed-multilingual-v3 |

モデル情報を調べる場合は以下のコマンドを実行します。（`cohere.command-text-v14:7:4k`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier cohere.command-text-v14:7:4k --query 'modelDetails.modelArn' --output text
```

※Tokyoリージョンではまだ提供されていないため、エラーが返ってきます。

### Meta

|プロバイダ|モデル名|モデル識別子（--model-identifier）|
|-|-|-|
| Meta | Llama 2 Chat 13B | meta.llama2-13b-chat-v1:0:4k |
| Meta | Llama 2 Chat 13B | meta.llama2-13b-chat-v1 |
| Meta | Llama 2 Chat 70B | meta.llama2-70b-chat-v1:0:4k |
| Meta | Llama 2 Chat 70B | meta.llama2-70b-chat-v1 |
| Meta | Llama 2 13B | meta.llama2-13b-v1:0:4k |
| Meta | Llama 2 13B | meta.llama2-13b-v1 |
| Meta | Llama 2 70B | meta.llama2-70b-v1:0:4k |
| Meta | Llama 2 70B | meta.llama2-70b-v1 |

モデル情報を調べる場合は以下のコマンドを実行します。（`meta.llama2-13b-chat-v1:0:4k`）を取得する場合）

```bash
aws bedrock get-foundation-model --model-identifier meta.llama2-13b-chat-v1:0:4k --query 'modelDetails.modelArn' --output text
```

※Tokyoリージョンではまだ提供されていないため、エラーが返ってきます。

## まとめ

今回はAWS CLIでAmazon bedrockを実行する方法を見ていきました。基盤モデルはリージョンによって提供有無が異なるのでAPIの実行に失敗します。
ですが、提供開始されたらすぐに実行できるようになるので確認方法を覚えておくとあとで便利です。