> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cartesia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# クラウドサービスのプロビジョニング

> Amazon SageMaker Jumpstart を使って Cartesia をデプロイする

Amazon SageMaker Jumpstart は、マネージドインフラ、オートスケーリング、統合モニタリングを備えた Cartesia セルフホストソリューションを最短でデプロイする手段です。このデプロイ方法は、セルフホスト AI を初めて利用するチームや、マネージドインフラを利用したいチームに最適です。

開始するには、AWS Marketplace の [Sonic 3 on AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-w2bmik3jypagm) からサブスクライブしてください。

## 概要

SageMaker Jumpstart によるデプロイメントの特長:

* **マネージドインフラ**: AWS がサーバーのプロビジョニングとメンテナンスを担当
* **オートスケーリング**: 需要に応じた組み込みのオートスケーリング
* **統合モニタリング**: CloudWatch によるメトリクスとログの統合
* **従量課金**: オンデマンドリソース割り当てによるコスト最適化
* **クイックセットアップ**: 事前構成済みノートブックを使って数分でデプロイ

## 前提条件

### AWS アカウントの要件

* SageMaker アクセス可能な AWS アカウント
* GPU インスタンス（ml.g6e.xlarge）の十分なサービスクォータ
* SageMaker Full Access および Marketplace サブスクリプションアクセス（ViewSubscriptions、Unsubscribe、Subscribe）を持つ IAM ロール
* VPC 構成（プライベートデプロイ用、オプション）

## はじめに

SageMaker 上で Sonic 3 の推論エンドポイントをデプロイするには、[こちらのノートブックの手順](https://github.com/cartesia-ai/cartesia-aws/blob/main/Sonic-3-Jumpstart.ipynb)を参照してください。

## 推論のセットアップ

Sonic 3 は SageMaker 上でリアルタイム推論のみをサポートしています。推論エンドポイントのインスタンスタイプとして `ml.g6e.xlarge` を選択してください。各インスタンスは 8 件の同時リクエストを処理できます。最良のパフォーマンスを得るために、SageMaker ではクライアントから SageMaker への接続を再利用することを推奨しています。これにより、接続を再確立する時間を節約できます。boto3 では `max_pool_connections` を設定できます。複数のリクエストが接続を再利用するため、リクエストごとに新しい TCP/TLS 接続を確立するコストを回避できます。

## 入出力

### 入力の概要

レスポンスストリーミングエンドポイントは、生成のトランスクリプト、ボイス、言語、出力フォーマットを指定する JSON オブジェクトを入力として受け取ります。

### 入力パラメータ

| パラメータ                       | 説明                                                                                                                                                                                                                                                                | 型         | 必須  |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | --- |
| `context_id`                | クライアントが提供する、リクエストを識別するための一意の ID。任意の文字列値で、トラッキングやデバッグに役立ちます。                                                                                                                                                                                                       | `string`  | はい  |
| `transcript`                | 音声に変換するテキスト。Sonic モデルがサポートする追加の制御（感情、速度、音量など）を含めることができます。<br /><a href="https://docs.cartesia.ai/build-with-cartesia/capability-guides/volume-speed-emotion" target="_blank">ドキュメント</a>                                                                           | `string`  | はい  |
| `language`                  | トランスクリプトテキストの言語コード。<br /><br />サポートされるコード:<br />`en`、`fr`、`de`、`es`、`pt`、`zh`、`ja`、`hi`、`it`、`ko`、`nl`、`pl`、`ru`、`sv`、`tr`、`tl`、`bg`、`ro`、`ar`、`cs`、`el`、`fi`、`hr`、`ms`、`sk`、`da`、`ta`、`uk`、`hu`、`no`、`vi`、`bn`、`th`、`he`、`ka`、`id`、`te`、`gu`、`kn`、`ml`、`mr`、`pa` | `string`  | はい  |
| `output_format`             | Cartesia TTS SSE API の `raw` オプションに一致させる必要があります。`raw` のみサポートされます。<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-output-format" target="_blank">ドキュメント</a>                                                                                     | `string`  | はい  |
| `voice`                     | Cartesia TTS SSE API の `voice` フィールドに一致します。**mode = `id`** のみサポートされます。<br /><br />例:<br />`{ "mode": "id", "id": "voice_123" }`<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-voice" target="_blank">ドキュメント</a>                               | `object`  | はい  |
| `generation_config`         | API スキーマに一致するオプションの設定オブジェクト。<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-generation-config" target="_blank">ドキュメント</a>                                                                                                                      | `object`  | いいえ |
| `add_timestamps`            | 出力に単語レベルのタイムスタンプを含めるかどうか。<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-add-timestamps" target="_blank">ドキュメント</a>                                                                                                                            | `boolean` | いいえ |
| `add_phoneme_timestamps`    | 出力に音素レベルのタイムスタンプを含めるかどうか。<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-add-phoneme-timestamps" target="_blank">ドキュメント</a>                                                                                                                    | `boolean` | いいえ |
| `use_normalized_timestamps` | タイムスタンプを正規化（0〜1 の範囲）するかどうか。<br /><a href="https://docs.cartesia.ai/api-reference/tts/sse#body-use-normalized-timestamps" target="_blank">ドキュメント</a>                                                                                                               | `boolean` | いいえ |

### データサンプル

```json theme={null}
{
    "context_id": "0",
    "transcript": "The detective burst through the door. 'We've got maybe five minutes before they realize we're here, so listen carefully and listen well: <speed ratio='1.5'/> the artifact is hidden beneath the old courthouse, exactly three feet below the cornerstone, and <volume ratio='0.5'/>whatever you do, DO NOT touch it with your bare hands!' She paused, catching her breath. 'Now... here's the important part... <speed ratio='0.6'/>you need to... very slowly... very carefully... wrap it in the copper wire first... then the silk cloth... then seal it in the lead box.' <volume ratio='2.0'/> Footsteps echoed in the hallway. 'GO GO GO! They're coming up the stairs RIGHT NOW!'",
    "language": "en",
    "output_format": {
        "container": "raw",
        "sample_rate": 44100,
        "encoding": "pcm"
    },
    "voice_id": {
        "mode": "id",
        "id": "bf0a246a-8642-498a-9950-80c35e9276b5"
    }
}
```

### 出力の詳細

#### 出力イベント

SageMaker は [Response Stream](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_ResponseStream.html) でレスポンスイベントを返します。ペイロードは base64 エンコードされた blob としてクライアントに送信されます。SageMaker の制約により、1 つのイベントが複数のセグメントに分割されることがあります。当 API は各完全なイベントの末尾に改行を必ず付与するため、クライアント側で再構築できます。返される各イベントは、生成された音声チャンクと一部のメタデータを含む JSON オブジェクトです。イベントは `event.type` で識別される次のいずれかの型になります:

##### Chunk Event

chunk イベントには、指定された出力フォーマットとサンプルレートで、最大 20 ms 分の音声チャンクが含まれます。

| パラメータ           | 説明                                                   | 型        | 必須  |
| --------------- | ---------------------------------------------------- | -------- | --- |
| `type`          | レスポンスイベントの種類。chunk イベントの場合、この値は常に `"chunk"` です。      | `string` | はい  |
| `context_id`    | レスポンスコンテキストのオプションの識別子。レスポンスとリクエストやセッションを関連付けるのに有用です。 | `string` | いいえ |
| `status_code`   | チャンクイベントの成功またはエラー状態を表す HTTP ライクなステータスコード。            | `int`    | はい  |
| `done`          | 最終チャンクかどうか（`true`）、または追加のチャンクが期待されるか（`false`）を示します。  | `bool`   | はい  |
| `data`          | base64 エンコードされた音声データのチャンク。各チャンクは完全な音声出力の一部を表します。     | `string` | はい  |
| `sampling_rate` | このチャンクの音声データのサンプリングレート（Hz 単位、例: `44100`、`8000`）。     | `int`    | はい  |
| `step_time`     | このチャンクの生成ステップを表す時間（秒）。同期やレイテンシー追跡に有用です。              | `float`  | はい  |

##### Done Event

done イベントは生成の完了を示します。done イベントは `event.type == "done"` および `event.done == True` で識別されます。

##### Timestamp Event

**timestamp イベント**は、認識された単語またはトークンのタイミング情報を提供します。

| パラメータ             | 説明                                            | 型                   | 必須  |
| ----------------- | --------------------------------------------- | ------------------- | --- |
| `type`            | レスポンスの種類。常に `"timestamps"`。                   | `string`            | はい  |
| `context_id`      | このタイムスタンプイベントを対応するリクエスト／セッションと関連付けるオプションの識別子。 | `string`            | いいえ |
| `status_code`     | 成功または失敗を示すステータスコード。                           | `int`               | はい  |
| `done`            | これが最終タイムスタンプイベントかどうかを示します。                    | `bool`              | はい  |
| `word_timestamps` | 単語レベルのタイムスタンプを記述する辞書（形式は実装により異なる場合があります）。     | `dict<string, any>` | はい  |

##### Phoneme Timestamp Event

**phoneme timestamp イベント**は、通常、詳細な音声分析のために音素レベルでタイミング情報を提供します。

| パラメータ                | 説明                                  | 型                   | 必須  |
| -------------------- | ----------------------------------- | ------------------- | --- |
| `type`               | レスポンスの種類。常に `"phoneme_timestamps"`。 | `string`            | はい  |
| `context_id`         | このイベントをリクエスト／セッションと関連付けるオプションの識別子。  | `string`            | いいえ |
| `status_code`        | 処理ステータスコード。                         | `int`               | はい  |
| `done`               | これが最終音素タイムスタンプイベントかどうかを示します。        | `bool`              | はい  |
| `phoneme_timestamps` | 音素レベルのタイミング情報を含む辞書。                 | `dict<string, any>` | はい  |

## エラーハンドリング

生成中にエラーが発生した場合、SageMaker は [Model Error](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_ResponseElements:~:text=Status%20Code%3A%20500-,ModelError,-Model%20\(owned%20by\)) としてエラーを返します。エラーを処理するには、エラーオブジェクトの `OriginalStatusCode` フィールドを参照してください（Python でのエラーハンドリング例を参照）。

### 422 エラー

422 エラーは、入力の形式が正しくないことを示します。詳細は `Message` フィールドで確認できます。

### 429 エラー

429 エラーは、リクエストしているモデルコンテナが、その時点でリクエストを処理する容量がないことを示します。Cartesia のモデルは、一度に最大 4 件の同時生成リクエストを処理します。複数の推論コンテナレプリカを実行している場合、SageMaker の `ProductionVariants` 設定内の `RoutingConfig` パラメータを `LEAST_OUTSTANDING_REQUESTS` に設定して、ロードアウェアなルーティングを使用することを推奨します。これにより、最適な負荷分散が可能になります。

## コンテナログ

CloudWatch でコンテナログを参照できます。ほとんどのログはリクエスト ID とともに発行されます。サーバー側のリクエスト ID の形式は `{uuid}-{client supplied context id}` です。
