Claude4 APIを呼び出すとレート制限に
Bedrock APIからモデルを呼び出すときには、以下のようにmax_tokens
を設定します。この値は、モデルが生成するときに許可されるトークンの最大数を規定しています [1]。
詳しい情報をたくさん生成させたいときは、max_tokens
を大きくしたくなりますよね。
ちなみに、日本語ではだいたい1語 ≒ 2~3トークン消費するようです。
{
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 10000,
"thinking": {
"type": "enabled",
"budget_tokens": 4000
}
}
Anthropic 公式ページ[2]に記載の最大出力は以下のように設定されています。
- Claude Sonnet 4では
64000
- Claude Opus 4では
32000
しかし、Sonnet 4で64000を設定すると以下のエラーが発生してしまいました。
ThrottlingException: Too many tokens, please wait before trying again.
64000まで許容してくれるはずなのに、なぜ?
原因はBedrockのクォータ制限によるものだった
Bedrockには、バーンダウンレートという概念が存在します。これは、Bedrockがリクエストを処理する際に、事前に出力トークン数を予約するための変換比率のようなものです。現在、これら2つのモデルには出力トークン1つあたり5倍のトークンとしてカウントするという、大きめのレートが設定されています。
モデルトークンの非標準バーンダウン率 [3]
モデル | 入力トークン | 出力トークン |
---|---|---|
Claude Opus 4 | 入力トークンごとに 1 トークン | 出力トークンあたり 5 トークン |
Claude Sonnet 4 | 入力トークンごとに 1 トークン | 出力トークンあたり 5 トークン |
一方で、Amazon Bedrockのサービスクォータ[4]では、多くのリージョンにおけるデフォルトの tokens-per-minute (TPM) クォータは 200000 しかありません。
したがって、Claude4を使用する場合は以下のようにmax_tokens
の設定値によってクォータを大きく圧迫してしまうのです。
シナリオ① max_tokens: 16000でリクエストを行う
- クォータ消費 16000 × 5 = 80000トークン
- この分の残りのクォータ:120000トークン
- まだリクエスト可能!
シナリオ② max_tokens: 40000でリクエストを行う
- クォータ消費:40000 × 5 = 200000トークン
- この分の残りのクォータ:0トークン
- 別のリクエストを行うには、次の1分を待たなければなりません
これら現象について解説された記事[5]でも、ベストプラクティスとして以下が推奨されています。
現実的なmax_tokensを設定する
クォータはリクエスト期間全体にわたって予約されているため、実際の出力需要を見積もり適切な値を設定しましょう。デフォルトで 4096 にしないでください。
特に高スループットなアプリケーションでは、より低いmax_tokens
に設定することで、より多くの同時リクエストが可能です。
Bedrock APIでClaude4を使用するときは、サービスクォータに要注意。max_tokens
は使用用途に応じて適正な値を設定するようにしよう。
参考文献
[1] Amazon Bedrock InferenceConfiguration
[2] Anthropic 開発者ガイド モデル概要
[3] Amazon Bedrock のクォータ
[4] Amazon Bedrock サービスクォータ
[5] Why Claude 4 API Hits Rate Limits: Token Burndown Explained
Views: 0