Together AI、モデルの段階的更新手法「Canary Rollouts」を公開

Together AI、モデルの段階的更新手法「Canary Rollouts」を公開

基本情報

項目 内容
公開元 Together AI
公開日 2026-09-22
出典の種類 公開元の一次情報(公式ブログが一次情報)

収集・肉付けの時点で当サイトのコードが確定させた値です。日付はJST。

概要

Together AIは、本番環境におけるモデルの更新をダウンタイムなしで行うための段階的な更新手法「Canary Rollouts」を公開しました。この手法は、現在のモデル(Source)から新しいチェックポイントや新しいモデルファミリー(Target)へと、定義されたステップに従ってトラフィックを段階的に移行させるものです。

主張と根拠

Together AIは、Canary Rolloutsを用いることで、新しいモデルへの移行時に発生しうるパフォーマンスの低下やエラーを、自動的なメトリックチェック(Metric Gates)によって検知し、安全にロールバックできる仕組みを提供できると主張しています。

発表者による実証実験では、Qwen2.5-7BからQwen3.5-9BへのCanary Rolloutを実施した際、トラフィックの10%の段階でp95レイテンシが137%悪化(regression)することをゲートが検知しました。この際、システムは自動的に「SYSTEM_PAUSED」状態となり、ユーザーはロールアウトをキャンセルしてリバース(逆方向)に実行することで、ライブリクエストを失敗させることなく元の状態に戻すことができたと報告されています。

提供されている3つの戦略の比較は以下の通りです。

特徴 Canary Blue-green Rolling
トラフィックパターン 定義したシェア(デフォルトは5% → 25% → 50% → 100%)を各ステップで保持 0% → 100% の一括切り替え レプリカごとに順次入れ替え、レプリカ比率に従ってトラフィックを移動
追加キャパシティ Sourceのサイズに近い量。TargetはSourceがドレインされる前に1ステップ分成長する Sourceがドレインされるまで両方のデプロイメントがフルサイズで稼働 各ステップでのSourceのレプリカ数。ステップ中に1つの追加レプリカが必要
一般的な所要時間 最初のコールドスタート + 各ステップの待機時間(メトリックゲート使用時は各ステップ少なくとも390秒) 最初のコールドスタート + 30秒の伝播時間。数分程度 レプリカごとのコールドスタート。大規模なデプロイメントでは低速
メトリックゲート あり(各ステップの後) なし(待機時間がないため) なし
戻し方 キャンセルにより現在のシェアを固定し、ロールアウトを逆方向に実行 ロールアウトを逆方向に実行。--final-source-replicas 1 で旧モデルを一時的に温存可能 ロールアウトを逆方向に実行
最適な用途 100%移行前にライブトラフィックで測定したい場合 短期間のダブルキャパシティを許容できる場合の最速の切り替え GPUフットプリントを一定に保ちたい、同一モデルのエンジンや設定変更の場合

前提条件

本手法および機能が動作する条件は以下の通りです。

  • 対象ソフトウェア: Together AIのプラットフォーム、および together Pythonパッケージ(バージョン 2.34.0 以降)
  • 操作インターフェース: CLI (tg コマンド)、REST API、またはコンソール
  • 使用可能なメトリック: router_error_raterouter_latencyinflight_requests の3種類
  • メトリックの制約:
    • router_latency のゲート判定には、ウィンドウ内に少なくとも20のリクエストが必要 * p99 の判定には、ウィンドウ内に少なくとも100のリクエストが必要 * router_error_rate および inflight_requests は、ウィンドウ内に少なくとも1つのデータポイントが必要

手元で再現できる範囲

Together AIのプラットフォームを利用しているユーザーは、以下の手段でCanary Rolloutsを実装・制御できます。

CLIによる操作

tg コマンドを使用して、ロールアウトの作成、開始、監視、および制御が可能です。例えば、以下のコマンドで3段階のCanary Rollout(10%, 50%, 100%)を、p95レイテンシの悪化を監視しながら開始できます。

# ロールアウトの作成と開始を同時に行う
tg beta endpoints rollout $TARGET_DEPLOYMENT_ID \
--source $SOURCE_DEPLOYMENT_ID \
--canary \
--steps 10,50,100 \
--interval 600s \
--metric router_latency --metric-stat p95 \
--metric-max-regression 10 --metric-direction higher-is-worse \
--metric-window 300s

また、以下のコマンドでロールアウトの状態を確認したり、一時停止 (--pause)、再開 (--resume)、昇格 (--promote)、キャンセル (--cancel) を行うことができます。

# ロールアウトの状態を確認
tg beta endpoints get $ROLLOUT_ID

# ロールアウトをキャンセルする
tg beta endpoints rollout $ENDPOINT_ID --cancel --reason "latency regression on target"

Python SDKによる操作

together パッケージ(2.34.0以降)を使用して、プログラムからロールアウトを制御できます。

from together import Together
client = Together()

rollout = client.beta.endpoints.rollouts.create(
    endpoint_id=ENDPOINT_ID,
    project_id=PROJECT_ID,
    source_deployment_id=SOURCE_DEPLOYMENT_ID,
    target_deployment_id=TARGET_DEPLOYMENT_ID,
    canary={"steps": [{"traffic": 10}, {"traffic": 50}, {"traffic": 100}], "step_interval": "600s"},
    metrics=[{
        "name": "router_latency", 
        "stat": "METRIC_STAT_TYPE_PERCENTILE", 
        "percentile": 95,
        "regression_check": {
            "direction": "REGRESSION_DIRECTION_HIGHER_IS_WORSE", 
            "max_regression_percent": 10
        },
        "window": "300s",
    }],
)
client.beta.endpoints.rollouts.start(rollout.id, project_id=PROJECT_ID, endpoint_id=ENDPOINT_ID)

REST APIによる操作

APIを通じて、POST リクエストによるロールアウトの作成・開始、GET リクエストによる状態取得が可能です。

関連記事

出典