速習Amazon Nova
Amazonが出したLLMモデルAmazon Novaについて2024/12時点での覚書。
Amazon Novaの採用・意思決定に必要な情報をサマリするのが目的。
対象にしないもの
- 画像生成モデルとしてのAmazon Nova Canvasは扱わない
- 動画生成モデルとしてのAmazon Nova Reelは扱わない
- 6秒の動画しか作れないので、しばらくキャッチアップの優先度を下げて良さそう
対象読者
- LLM APIとしてのAmazon Novaに興味がある
- Bedrockの選択肢の一つとしてのAmazon Novaに興味がある
- Amazon NovaとClaudeの使い分けに興味がある
前提
- 公式ブログの情報は既に読了済みとする
-
Amazon Bedrockで使える「2024/11時点での」LLM APIの状況
- リージョン制約がない場合、以下のモデルを基本とする
- Claude 3.5 Sonnet V2
- Amazon Bedrockで利用できるハイエンドモデル
- GPT-4o、Gemini 1.5 Pro、Llama 3.2 90Bくらいの性能感
- Claude 3.5 Haiku
- Sonnetの1/3のコストで扱うことができる
- GPT-4o mini、Gemini 1.5 Flash、Llama 3.2 11Bくらいの性能感
- Claude 3.0 Haiku
- Sonnetの1/12のコストで扱うことができる
- 4o-mini相当の型落ちだが、激安マルチモーダルモデルとして一定の需要がある
- Claude 3.5 Sonnet V2
- 日本国内要件の場合、東京リージョンで扱える、以下のモデルを基本とする
- Claude 3.5 Sonnet
- V2に比べ数%-5%ほど性能が落ちる
- Claude 3.0 Haiku
- Claude 3.5 Sonnet
- リージョン制約がない場合、以下のモデルを基本とする
vs 性能
比較材料
- Amazon Scienceが出しているベンチマーク
- 3.5 Sonnet v2、3.5 Haikuが出た時のベンチマーク
- Claude 3 haikuが出た時のベンチマーク
性能感
細かい数字で一喜一憂してもいけないのだが、NovaとClaude系の比較ができればまあいいのだと思う。
要は、ざっくりこんなイメージと捉えている。
Claude 3.5 Sonnet V2 > Nova Pro >= Claude 3.5 Sonnet
Nova Lite > Claude 3.5 Haiku
Nova micro > Claude 3.0 Haiku
vs Cost
大体これくらい。
Model | Price per 1k Tokens (Input) | Price per 1k Tokens (Output) |
---|---|---|
Claude 3.5 Sonnet | $0.003 | $0.015 |
Amazon Nova Pro | $0.0008 | $0.0032 |
Model | Price per 1k Tokens (Input) | Price per 1k Tokens (Output) |
---|---|---|
Claude 3.5 Haiku | $0.0008 | $0.004 |
Amazon Nova Lite | $0.00006 | $0.00024 |
Model | Price per 1k Tokens (Input) | Price per 1k Tokens (Output) |
---|---|---|
Claude 3 Haiku | $0.00025 | $0.00125 |
Amazon Nova Micro | $0.000035 | $0.00014 |
コスト感
このように覚えておくと分かりやすい。
- Amazon Nova Pro
- Claude 3.5 Sonnet比で1/4の入力コスト、1/5の出力コスト
- Claude 3.5 haiku比で同等の入力コスト、4/5の出力コスト
- Amazon Nova Lite
- Claude 3.5 Haiku比で1/13の入力コスト、1/16の出力コスト
- Claude 3.0 Haiku比で1/4の入力コスト、1/5の出力コスト
- Amazon Nova Micro
- Claude 3.0 Haiku比で1/7の入力コスト、1/9の出力コスト
費用・コスト総括
これらの結果をもとに、Claude 3.5 Sonnet(v2)はハイエンドとしての利用は継続しつつ、ミドル以下のモデルはAmazon Nova Liteに乗せ換えることで大幅なコストメリットが見込まれることがわかる。
Nova LiteからMicroにすると半額になるが、性能が下がり過ぎるので、よほど簡単なジョブ以外はLiteが良さそう。
保守的なプロダクトはClaudeを引き続き使いつつ、出力コストが嵩んできた際にNovaの利用を考慮するといいだろう。
性能については結局のところ日本語性能や人間がどう判断できるかが大切なので、実際のプロダクトでの検証が必要と見込まれる。Novaで足りなかったらClaude、という順番になるだろう。
国内要件の場合は引き続きClaude 3.5 SonnetとClaude 3.0 Haikuを利用する。
Usage
Amazon Novaのモデルは、Amazon bedrockから実行する。
AWS SDK
原則としてConverse APIから使う。Bedrockの他のモデルへ移行しやすくなるため。
Tool Useなどで困る場合にはinvokeModel APIの採用を検討する。
※以下は公式の引用
import boto3
import json
client = boto3.client("bedrock-runtime")
system = [{ "text": "You are a helpful assistant" }]
messages = [
{"role": "user", "content": [{"text": "Write a short story about dragons"}]},
]
inf_params = {"maxTokens": 300, "topP": 0.1, "temperature": 0.3}
additionalModelRequestFields = {
"inferenceConfig": {
"topK": 20
}
}
model_response = client.converse(
modelId="us.amazon.nova-lite-v1:0",
messages=messages,
system=system,
inferenceConfig=inf_params,
additionalModelRequestFields=additionalModelRequestFields
)
print("\n[Full Response]")
print(json.dumps(model_response, indent=2))
print("\n[Response Content Text]")
print(model_response["output"]["message"]["content"][0]["text"])
Langchain
Converse APIはLangChainと重複するようにも思えるが、LangChainからConverseAPIは叩けるので気にせず選ぶ。
from langchain_aws import ChatBedrockConverse
# Initialize the Bedrock LLM client using ChatBedrockConverse
llm = ChatBedrockConverse(
model="us.amazon.nova-lite-v1:0", # Replace with your desired model ID
temperature=0.3, # Set the desired temperature
max_tokens=300, # Maximum tokens for the response
top_p=0.1, # Top-p sampling parameter
top_k=20, # Top-k sampling parameter
)
# Define the messages
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a short story about dragons."},
]
# Invoke the model with the messages
response = llm.invoke(messages)
# Print the full response
print("\n[Full Response]")
print(response)
# Extract and print the content text
print("\n[Response Content Text]")
print(response["output"]["message"]["content"][0]["text"])
Next
UIが欲しいならサンプル実装としてある程度完成されたGen Uがファーストチョイス。
GitHubのRepositoryに手順は転がっているので便利。
Discussion