🐰

速習Amazon Nova

2024/12/30に公開

Amazonが出したLLMモデルAmazon Novaについて2024/12時点での覚書。

https://www.aboutamazon.com/news/aws/amazon-nova-artificial-intelligence-bedrock-aws

Amazon Novaの採用・意思決定に必要な情報をサマリするのが目的。

対象にしないもの

  • 画像生成モデルとしてのAmazon Nova Canvasは扱わない
  • 動画生成モデルとしてのAmazon Nova Reelは扱わない
    • 6秒の動画しか作れないので、しばらくキャッチアップの優先度を下げて良さそう

対象読者

  • LLM APIとしてのAmazon Novaに興味がある
  • Bedrockの選択肢の一つとしてのAmazon Novaに興味がある
  • Amazon NovaとClaudeの使い分けに興味がある

前提

  • 公式ブログの情報は既に読了済みとする

https://aws.amazon.com/jp/blogs/aws/introducing-amazon-nova-frontier-intelligence-and-industry-leading-price-performance/

  • 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に比べ数%-5%ほど性能が落ちる
      • Claude 3.0 Haiku

vs 性能

比較材料

  1. Amazon Scienceが出しているベンチマーク

https://www.amazon.science/publications/the-amazon-nova-family-of-models-technical-report-and-model-card

  1. 3.5 Sonnet v2、3.5 Haikuが出た時のベンチマーク

https://aws.amazon.com/jp/blogs/news/upgraded-claude-3-5-sonnet-from-anthropic-available-now-computer-use-public-beta-and-claude-3-5-haiku-coming-soon-in-amazon-bedrock/

  1. Claude 3 haikuが出た時のベンチマーク

https://www-cdn.anthropic.com/de8ba9b01c9ab7cbabf5c33b80b7bbc618857627/Model_Card_Claude_3.pdf

性能感

細かい数字で一喜一憂してもいけないのだが、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

https://aws.amazon.com/bedrock/pricing/

大体これくらい。

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の採用を検討する。

※以下は公式の引用

https://docs.aws.amazon.com/nova/latest/userguide/using-converse-api.html

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がファーストチョイス。

https://speakerdeck.com/okamotoaws/sheng-cheng-aiyusukesuwokao-edao-sutamenogenerative-ai-use-cases-jp-genu-nomei-li-toshi-ifang

GitHubのRepositoryに手順は転がっているので便利。

https://github.com/aws-samples/generative-ai-use-cases-jp

Discussion