Amazon Bedrock Latency-optimized inference でレイテンシーを短縮

:::note info
2024/12 現在 パブリックプレビュー
:::


# 内容

AWS re:Invent 2024 で発表があった Amazon Bedrock Latency-optimized inference をシンプルに纏めます。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/latency-optimized-inference.html

- チャットボットやコーディングアシスタントなどレイテンシが重要な AI アプリで、レイテンシーの短縮が可能に


# モデル

- Anthropic Claude 3.5 Haiku
- Meta Llama 3.1 70B Instruct
- Llama 3.1 405B Instruct


# 対応リージョン

- 米国東部（オハイオ）クロスリージョン推論


# 設定

performanceConfig を optimized にするだけのようです。

```json
“performanceConfig” : {
    “latency” : “standard | optimized” 
}
```

クォータに達すると、standard でリクエストを処理し、standard の料金で課金されるとのこと。


# 動作確認

## standard

レイテンシーを比較したいので、まず standard で実行しておきます。
なお、standard の場合は明示的に設定する必要はありません。

```python
import boto3
import json

aws_region = "us-east-2"

modelId="us.anthropic.claude-3-5-haiku-20241022-v1:0"

user_prompt = "西暦2023年日本の映画興行収入ランキング ベスト10を教えて"

bedrock = boto3.client(
    'bedrock-runtime',
    region_name=aws_region
    )

body = json.dumps(
    {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 4000,
        "messages": [{"role": "user","content": user_prompt}]
    }
)

response = bedrock.invoke_model(
    modelId=modelId,
    body=body,
    performanceConfigLatency='standard'
    )

response_body = json.loads(response.get('body').read())
answer = response_body["content"][0]["text"]

print(answer)
```

## optimized

`performanceConfig で latency を optimized` にして実行します。

```python
import boto3
import json

aws_region = "us-east-2"

modelId="us.anthropic.claude-3-5-haiku-20241022-v1:0"

user_prompt = "西暦2023年日本の映画興行収入ランキング ベスト10を教えて"

bedrock = boto3.client(
    'bedrock-runtime',
    region_name=aws_region
    )

body = json.dumps(
    {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 4000,
        "messages": [{"role": "user","content": user_prompt}]
    }
)

response = bedrock.invoke_model(
    modelId=modelId,
    body=body,
    performanceConfigLatency='optimized'
    )

response_body = json.loads(response.get('body').read())
answer = response_body["content"][0]["text"]

print(answer)
```

## optimized の CloudWatch Logs

CloudWatch Logs から OPTIMIZED で実行されていることが確認できます。

```json
{
    "schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-12-25T12:54:32Z",
    "accountId": "123456789012",
    "identity": {
        "arn": "arn:aws:iam::123456789012:user/vscode"
    },
    "region": "us-east-2",
    "requestId": "701422aa-e2b4-467c-8cc1-caa0cd35499b",
    "operation": "InvokeModel",
    "modelId": "arn:aws:bedrock:us-east-2:123456789012:inference-profile/us.anthropic.claude-3-5-haiku-20241022-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 4000,
            "messages": [
                {
                    "role": "user",
                    "content": "西暦2023年日本の映画興行収入ランキング ベスト10を教えて"
                }
            ]
        },
        "inputTokenCount": 36
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "id": "msg_bdrk_01KPWuEux9XVLhUmpRyUvryT",
            "type": "message",
            "role": "assistant",
            "model": "claude-3-5-haiku-20241022",
            "content": [
                {
                    "type": "text",
                    "text": "2023年の日本の映画興行収入ランキングベスト10は以下の通りです（2023年12月時点）：\n\n1. 『ウォンカ』（約106億円）\n\n2. 『ガーディアンズ・オブ・ギャラクシー/リミテッド』（約93億円）\n\n3. 『スパイダーマン：アクロス・ザ・スパイダーバース』（約80億円）\n\n4. 『ドラえもん のび太の月面探査記』（約77億円）\n\n5. 『マリオカート』（約73億円）\n\n6. 『コンジュアリング3 悪魔に憑依された』（約48億円）\n\n7. 『怪物』（約44億円）\n\n8. 『シン・仮面ライダー』（約40億円）\n\n9. 『ミッション：インポッシブル デッドレコニング PART ONE』（約37億円）\n\n10. 『ハリー・ポッターの秘宝 エクスペリメント』（約36億円）\n\nこれらの数字は変動する可能性があります。"
                }
            ],
            "stop_reason": "end_turn",
            "stop_sequence": null,
            "usage": {
                "input_tokens": 36,
                "output_tokens": 328
            }
        },
        "outputTokenCount": 328
    },
    "performanceConfig": {
        "latency": "OPTIMIZED"
    },
    "inferenceRegion": "us-east-2"
}
```

## CloudWatch Metrics

CloudWatch Logs からはレイテンシーは確認できないので CloudWatch Metrics から確認します。

standard
![スクリーンショット 2024-12-25 22.10.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/260a920f-1e9a-837c-eee2-a623e25be206.png)

optimized
![スクリーンショット 2024-12-25 22.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/a5ba8a80-c81f-bc25-edda-c5d68d71d3b9.png)

確かに、optimized の方が短縮されていることが確認できました。


# 追加情報

Amazon Bedrock のエージェント、フロー、ナレッジベースで SDK を介してサポートされるようにもなったとのことです。

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-bedrock-agents-flows-knowledge-optimized-models/