[12/4] Amazon Nova

Amazon Novaがリリースされました。ユーザーガイドの情報を元にAmazon Novaを紹介します。

Amazon Nova ProについてはClaude 3.5 Haikuと比べてインプットトークンコストは同等でアウトプットについてはより安いため、Bedrockで使用するモデルの中で候補になってくると思います。

ユーザーガイド

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

# Amazon Nova: 新世代の基盤モデルをAmazon Bedrockで提供開始

## 概要

Amazonは、新しい世代の最先端基盤モデル（Foundation Models, FMs）「Amazon Nova」を発表しました。このモデルは、フロンティアレベルの知能と業界をリードするコストパフォーマンスを提供し、Amazon Bedrockでのみ利用可能です。

Amazon Novaを使用することで、さまざまな生成AIタスクにおけるコストと遅延を削減できます。このモデルは、複雑な文書や動画の解析、チャートや図の理解、魅力的な動画コンテンツの生成、高度なAIエージェントの構築など、幅広いエンタープライズ向けワークロードに対応しています。

Amazon Novaは、以下の2つのカテゴリのモデルを提供します。

1. **理解モデル**: テキストおよび視覚的知能を実現。
2. **創造的コンテンツ生成モデル**: イメージおよび動画の生成。

---

## 理解モデル: テキストおよび視覚的知能

Amazon Novaの理解モデルは、テキスト、画像、動画を入力として受け取り、テキスト出力を生成します。以下のモデルが用意されています。

### 1. Amazon Nova Micro
- **特徴**: テキストのみ対応、最低コスト、最低遅延。
- **用途**: テキスト要約、翻訳、分類、チャット、簡単な数学的推論、コーディング。
- **スペック**: 
  - 最大128Kトークンの文脈長。
  - 独自データでのファインチューニングやモデル蒸留が可能。

### 2. Amazon Nova Lite
- **特徴**: 非常に低コストで高速なマルチモーダルモデル。
- **用途**: 顧客対応、文書解析、視覚的質問応答。
- **スペック**: 
  - 最大300Kトークンの文脈長。
  - 単一リクエストで複数画像や最大30分の動画を処理。
  - ファインチューニングやモデル蒸留に対応。

### 3. Amazon Nova Pro
- **特徴**: 精度、速度、コストの最適なバランスを提供。
- **用途**: 高度なマルチモーダルタスク、API呼び出し、複雑なワークフロー。
- **スペック**: 
  - 最大300Kトークンの文脈長。
  - 視覚的質問応答(TextVQA)、動画理解(VATEX)で最先端の性能。
  - 15,000行を超えるコードベースを処理可能。
  - 教師モデルとしても機能。

### 4. Amazon Nova Premier
- **特徴**: 最も高性能なマルチモーダルモデル（現在トレーニング中）。
- **予定**: 2025年初頭にリリース予定。

**主な活用例**:
- 情報検索を強化した生成（RAG）
- 関数呼び出し
- エージェントアプリケーション

**カスタマイズ性**:
- テキスト、画像、動画データでファインチューニング可能。
- 例: 法律事務所が法的用語や文書構造を理解するモデルを構築。

---

## 創造的コンテンツ生成モデル: コンセプトを具現化

創造的コンテンツ生成モデルは、イメージや動画を生成します。

### 1. Amazon Nova Canvas
- **特徴**: スタジオ品質の画像生成。
- **機能**:
  - スタイルやコンテンツの精密な制御。
  - インペイント、アウトペイント、背景削除。
- **評価**: TIFA、ImageRewardで高い性能。

### 2. Amazon Nova Reel
- **特徴**: 動画生成に特化した最先端モデル。
- **用途**: マーケティング、広告、エンターテイメント。
- **機能**:
  - テキストプロンプトや画像から短編動画を生成。
  - スタイルやペーシングの調整が可能。

**安全対策**:
- 組み込みの安全管理。
- ウォーターマーク機能で責任あるAIの利用を促進。

---

## 実用例: Amazon Nova Proを使用した文書解析

以下は、Amazon Nova Proを使用した実用例です。

1. **手順**:
   - Amazon Bedrockコンソールで「Model access」を選択し、Amazon Novaモデルへのアクセスをリクエスト。
   - 「Playground」セクションで「Chat/text」を選択し、Amazon Nova Proモデルを選択。
   - 解析したいPDFファイルをアップロード。

2. **タスク**:
   - 「この文書の要約を100語で書いてください。その後、意思決定ツリーを作成してください」と依頼。

3. **出力例**:
   - 要約と構造化された意思決定ツリーを生成し、文書内容を読む前に概要を把握。

---

Amazon Novaの詳細なベンチマークスコアは、[Amazon Nova製品ページ](#)で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/7082aae1-818a-ad81-3916-d74b09bc05c1.png)

![video](https://d2908q01vomqb2.cloudfront.net/artifacts/AWSNews/2024/AWSNEWS-1259-nova-pro-input-video.mp4?_=1)

以下では、AWS SDK for Python (Boto3) を用いて Amazon Nova Pro モデルを Amazon Bedrock Converse API を使用して呼び出し、動画の解析を行う手順を示します。


```python
import boto3

AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-pro-v1:0"
VIDEO_FILE = "the-sea.mp4"

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
with open(VIDEO_FILE, "rb") as f:
    video = f.read()

user_message = "Describe this video."

messages = [ { "role": "user", "content": [
    {"video": {"format": "mp4", "source": {"bytes": video}}},
    {"text": user_message}
] } ]

response = bedrock_runtime.converse(
    modelId=MODEL_ID,
    messages=messages,
    inferenceConfig={"temperature": 0.0}
 )

response_text = response["output"]["message"]["content"][0]["text"]
print(response_text)
```
# Amazon Nova Proによる動画解析とAmazon Nova Reelによる動画生成

## 動画解析: Amazon Nova Pro

Amazon Nova Proは、APIでアップロードされた動画（前述のコード例参照）や、Amazon Simple Storage Service（Amazon S3）バケットに保存された動画を解析できます。

### 動画解析の結果例
スクリプト内で「動画の内容を説明してください」と指示を出し、コマンドラインで実行しました。以下がその結果です。

> 動画は岩場の海岸の映像から始まり、その後、砂浜に置かれた大きな貝殻のクローズアップに切り替わります。

### 詳細情報の抽出
より詳細なプロンプトを使用すると、動画内の特定の物体やテキストを抽出することができます。ただし、Amazon Novaは現在、動画内の音声データを処理することはできません。

---

## 動画生成: Amazon Nova Reel

次に、Amazon Nova Reelを使用して、テキストプロンプトと参照画像を基に動画を生成します。

### 動画生成の手順
動画生成には数分かかるため、Amazon Bedrock APIは以下の3つの新しい操作を導入しています。

1. **StartAsyncInvoke**: 非同期処理の開始。
2. **GetAsyncInvoke**: 特定の非同期処理の現在のステータスを取得。
3. **ListAsyncInvokes**: すべての非同期処理のステータスを、ステータスや日付でフィルタリングして一覧表示。

### カメラ制御
Amazon Nova Reelは、ズームやカメラ移動などのカメラ制御アクションをサポートしています。

以下のPythonスクリプトでは、次のテキストプロンプトを使用して動画を生成します。

> **プロンプト**: 砂の中の大きな貝殻のクローズアップ。穏やかな波が貝殻の周りを流れる。夕日の光。カメラが非常に近くまでズームイン。

### 実行プロセス
1. 初回の非同期処理を開始します。
2. スクリプトは定期的にステータスを確認し、動画の生成が完了するのを待ちます。
3. 毎回異なる結果を得るため、ランダムシードを渡します。

---

これにより、Amazon Nova Reelを使用してプロフェッショナル品質の動画を生成することが可能です。生成された動画は、マーケティングや広告、エンターテインメントなど幅広い用途に利用できます。




```python
import random
import time

import boto3

AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
S3_DESTINATION_BUCKET = "<BUCKET>"

video_prompt = "Closeup of a large seashell in the sand. Gentle waves flow all around the shell. Sunset light. Camera zoom in very close."

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {"text": video_prompt},
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": random.randint(0, 2147483648)
    }
}

invocation = bedrock_runtime.start_async_invoke(
    modelId=MODEL_ID,
    modelInput=model_input,
    outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)

invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"
print(f"\nS3 URI: {s3_location}")

while True:
    response = bedrock_runtime.get_async_invoke(
        invocationArn=invocation_arn
    )
    status = response["status"]
    print(f"Status: {status}")
    if status != "InProgress":
        break
    time.sleep(SLEEP_TIME)

if status == "Completed":
    print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
    print(f"\nVideo generation status: {status}")
```

スクリプトを実行します。

```bash
Status: InProgress
. . .
Status: Completed

Video is ready at s3://BUCKET/PREFIX/output.mp4
```

数分後、スクリプトは完了し、出力Amazon Simple Storage Service（Amazon S3）の場所を出力します。AWS コマンドライン インターフェイス (AWS CLI) を使用して出力ビデオをダウンロードします。

```bash
aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-text.mp4
```

これが結果のビデオです。要求に応じて、カメラは被写体を拡大します。

![video2](https://d2908q01vomqb2.cloudfront.net/artifacts/AWSNews/2024/AWSNEWS-1259-nova-reel-output-from-text.mp4?_=2)

## Amazon Nova Reel と参照画像の使用
ビデオの作成をより適切に制御するために、Amazon Nova Reelに次のような参照画像を提供できます。

![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1707407/6c27185c-3594-d8ac-5802-fbfbb27ad145.png)

このスクリプトは、参照画像とテキストプロンプトとカメラアクション（drone view flying over a coastal landscape）を使用してビデオを作成します。

```python
import base64
import random
import time

import boto3

S3_DESTINATION_BUCKET = "<BUCKET>"
AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
input_image_path = "seascape.png"
video_prompt = "drone view flying over a coastal landscape"

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)

# Load the input image as a Base64 string.
with open(input_image_path, "rb") as f:
    input_image_bytes = f.read()
    input_image_base64 = base64.b64encode(input_image_bytes).decode("utf-8")

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": video_prompt,
        "images": [{ "format": "png", "source": { "bytes": input_image_base64 } }]
        },
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": random.randint(0, 2147483648)
    }
}

invocation = bedrock_runtime.start_async_invoke(
    modelId=MODEL_ID,
    modelInput=model_input,
    outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)

invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"

print(f"\nS3 URI: {s3_location}")

while True:
    response = bedrock_runtime.get_async_invoke(
        invocationArn=invocation_arn
    )
    status = response["status"]
    print(f"Status: {status}")
    if status != "InProgress":
        break
    time.sleep(SLEEP_TIME)
if status == "Completed":
    print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
    print(f"\nVideo generation status: {status}")
```

繰り返しになりますが、AWS CLI を使用して出力をダウンロードします。

```bash
aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-image.mp4
```

これが結果のビデオです。カメラは参照画像からスタートし、前進します。

![video3](https://d2908q01vomqb2.cloudfront.net/artifacts/AWSNews/2024/AWSNEWS-1259-nova-reel-output-from-image.mp4?_=3)

# 責任あるAIの構築

Amazon Novaモデルは、モデル開発の各段階において顧客の安全性、セキュリティ、信頼を重視して構築されており、独自のユースケースを実現するための適切なコントロールを提供します。これにより、安心してAIを利用することが可能です。

---

## 安全性とコンテンツモデレーション

Amazon Novaには包括的な安全機能とコンテンツモデレーション機能が組み込まれており、AIを責任を持って使用するためのコントロールを提供します。生成されたすべての画像や動画にはデジタルウォーターマークが含まれています。

また、Amazon Novaの基盤モデルはその高度な能力に応じた保護機能を備えており、以下のリスクに対応する安全対策を拡張しています。
- 偽情報の拡散
- 児童性的虐待資料（CSAM）
- 化学、生物学、放射線、核（CBRN）リスク

---

## 知っておくべきこと

- **利用可能なリージョン**: 
  - Amazon Novaモデルは、US East（N. Virginia）のAWSリージョンで利用可能です。
  - Amazon Nova Micro、Lite、Proモデルは、US West（Oregon）およびUS East（Ohio）のリージョンでもクロスリージョン推論を通じて利用可能です。
- **料金体系**: 
  - Amazon Bedrockと同様に、従量課金制です。
  - 詳細は [Amazon Bedrockの料金ページ](https://aws.amazon.com/bedrock/pricing/) を参照してください。

---

## 言語対応

新世代のAmazon Nova理解モデルは200以上の言語を理解・生成する能力を持ち、特に以下の言語で高い性能を発揮します。
- 英語、ドイツ語、スペイン語、フランス語、イタリア語、日本語、韓国語、アラビア語、簡体字中国語、ロシア語、ヒンディー語、ポルトガル語、オランダ語、トルコ語、ヘブライ語

これにより、地域ごとに異なるモデルを維持する必要がなく、真にグローバルなアプリケーションを構築できます。なお、創造的コンテンツ生成モデルは英語のプロンプトをサポートしています。

---

## ユースケースと機能

Amazon Novaモデルは、以下のような複雑なタスクに対応可能です。
- 最大300Kトークンに及ぶ長文ドキュメントの処理
- 単一リクエストで複数画像の解析
- 最大30分の動画コンテンツの理解
- 自然言語から画像や動画を大規模に生成

これにより、迅速なカスタマーサービス対応から企業文書の深い解析、広告、Eコマース、ソーシャルメディアアプリケーション向けのアセット作成まで、さまざまなビジネスユースケースに対応できます。

---

## Amazon Bedrockとの統合

Amazon Bedrockとの統合により、デプロイとスケーリングが容易になります。
- **機能強化**:
  - Amazon Bedrock Knowledge Basesを活用して独自情報をモデルに統合。
  - Amazon Bedrock Agentsで複雑なワークフローを自動化。
  - Amazon Bedrock Guardrailsで責任あるAIの利用を促進。
- **利用形態**:
  - インタラクティブアプリケーション向けのリアルタイムストリーミング。
  - 大量のワークロード向けのバッチ処理。
  - パフォーマンス最適化のための詳細なモニタリング。

---

## 開始方法

Amazon Novaモデルを試してみたいですか？  
1. **Amazon Bedrockコンソール**で新しいモデルを試す。
2. **Amazon BedrockドキュメントのAmazon Novaモデルセクション**を参照。
3. **AWS re:Post**でフィードバックを送信。

詳細な技術資料や、Amazon Bedrockを活用しているビルダーコミュニティの事例は、[community.aws](https://community.aws) でご覧いただけます。新しいモデルで何を構築するか、ぜひ教えてください！