Skip to main content
SambaStack では、ユーザーが用意したチェックポイントと SambaNova 提供のチェックポイントのいずれについても、カスタムドラフトモデルを使用して、特定のデプロイシナリオにおける推論パフォーマンスを向上させることができます。これらのドラフトモデルによって投機的デコーディング (speculative decoding) が可能になり、適切に構成することでレイテンシの削減とスループットの向上が期待できます。 本ページでは、投機的デコーディングを使用してモデルをデプロイする方法を説明します。投機的デコーディングが適しているケース、ドラフトモデルとターゲットモデルの互換性を検証する方法、カスタムドラフトチェックポイントの構成方法を扱います。
モデルとエキスパート (Expert)、バンドル (Bundle) とバンドルテンプレート (Bundle Template)、モデルマニフェスト (Model Manifest)、モデルのデプロイに馴染みがない場合は、モデルバンドルのデプロイ ページをご覧ください。

投機的デコーディングとは

投機的デコーディングは、高速かつ軽量な 「ドラフト」モデル (draft model) と、より大規模で高品質な 「ターゲット」モデル (target model) を組み合わせる推論高速化手法です。
  • ドラフトモデルが複数の次トークンの候補を提案します
  • ターゲットモデルがそれらを並列に高速で検証し、採用または棄却します
  • このアプローチにより、推論のデコード時間が大幅に短縮されます。特にドラフトモデルがターゲットモデルと密接に「整合」している場合に効果的です
主なメリット: 投機的デコーディングは、ターゲットモデルの出力分布 (ひいては精度) に影響を与えることなく推論を高速化します。

投機的デコーディングを使用すべきでないケース

投機的デコーディングは、ターゲットモデルの次トークンのかなりの部分をドラフトモデルが予測できる場合に最も効果を発揮します。ただし、状況によってはほとんど効果が得られず、かえって全体のパフォーマンスを低下させることもあります。

投機的デコーディングでのカスタムドラフトチェックポイントの使用

SambaStack の一部のモデルエキスパートは、投機的デコーディングを使用するように構成されています。モデルエキスパートで投機的デコーディングが有効な場合、ドラフトモデルとターゲットモデルの両方を一緒にデプロイする必要があり、ターゲットモデルとドラフトモデルのどちらのチェックポイントもカスタマイズできます。 このセクションでは、カスタムドラフトチェックポイントをデプロイする一連のワークフローを説明します。内容は以下のとおりです。
  • 投機的デコーディングを使用するデプロイ可能なバンドルを特定する方法
  • ドラフトモデルとターゲットモデルの互換性を検証する方法
  • バンドルを更新する方法

ワークフローの概要

カスタムドラフトチェックポイントを投機的デコーディング用にデプロイする大まかな手順は以下のとおりです。

カスタムドラフトチェックポイントのデプロイ手順

1

デプロイメントが投機的デコーディングを使用していることを確認

カスタムドラフトチェックポイントをデプロイするには、まず、デプロイしたいバンドル内のモデルエキスパートが投機的デコーディング用に構成されていることを確認します。この情報は、バンドルテンプレート (Bundle Template) の定義に記載されています。以下の例では、Meta-Llama-3.3-70B-Instruct モデルが投機的デコーディングを使用しており、投機的デコーディングを使用しない gpt-oss-120b と同じバンドルにまとめられています。
上記の例では、
  • Meta-Llama-3.3-70B-Instruct がターゲットモデルです。
  • Meta-Llama-3.1-8B-Instruct が投機的デコーディングに使用されるドラフトモデルです。
  • 以下のとおり、ターゲットモデル Meta-Llama-3.3-70B-Instruct に対して投機的デコーディングを構成する方法は 3 通りあります。
    • エキスパート内の個別の config に対するドラフトモデル: 4k エキスパートでは、バッチサイズ 4 の config に対して draft_model: Meta-Llama-3.1-8B-Instruct を指定した spec_decoding が構成されています。同じエキスパート内のバッチサイズ 32 の config には、投機的デコーディングは構成されていません。
    • エキスパート内のすべての config に対するドラフトモデル: 8k エキスパートでは、default_config_values の下に spec_decoding が構成されています。これにより、8k エキスパート内のすべての config に draft_model: Meta-Llama-3.1-8B-Instruct が適用されます。
    • ドラフトモデルなし: 128k エキスパートには投機的デコーディングが構成されていません。そのため、このエキスパートの実行を必要とするリクエストが送信された場合、投機的デコーディングは使用されません。バッチサイズ 32 の config を持つ 4k エキスパートについても同様です。
以下の点に注意してください。
  • ターゲットモデルとドラフトモデルの両方が、バンドルテンプレートの YAML ファイルに記載されている必要があります。
  • ターゲットモデルとドラフトモデルの両方のテンプレート名が、バンドルの YAML ファイルで参照されている必要があります。
  • 投機的デコーディングはバンドルテンプレートの YAML ファイルで指定します。バンドルの YAML ファイルでは指定しません。
  • カスタムチェックポイントはバンドルの YAML ファイルで指定します。バンドルテンプレートの YAML ファイルでは指定しません。
2

カスタムドラフトチェックポイントの変換

ドラフトモデルのチェックポイントを、独自にファインチューニングしたバージョンやカスタムバージョンに置き換える場合は、チェックポイント変換ツール (Checkpoint Conversion Tool) を使用して SambaNova 互換フォーマットに変換します。
  1. ツールをまだセットアップしていない場合は、チェックポイント変換ツールのドキュメントページにある ダウンロードとセットアップ の手順に従ってください。
  2. 次に、チェックポイントの変換と検証 の手順に従ってドラフトチェックポイントを変換します。
SambaStack 提供のチェックポイントは、すでに正しいフォーマットになっています。SambaStack 提供のドラフトチェックポイントを使用する場合は、このステップをスキップしてください。
3

ドラフトとターゲットのチェックポイント互換性の検証

投機的デコーディングでカスタムチェックポイントをデプロイする際は、ドラフトチェックポイントがターゲットチェックポイントと互換であることを検証してください。これにより、推論時の予期しないエラーを防止できます。チェックポイント変換ツールには、ドラフトとターゲットの互換性をチェックする組み込みユーティリティが用意されています。この検証ユーティリティを使用して、以下を確認します。
  • ドラフトモデルとターゲットモデルが構造的に整合していること
  • 両者のトークナイザーに互換性があること
  • このペアで投機的デコーディングを安全に実行できること

コマンドテンプレート

パラメータ

以下は、validate-sd コマンドの主な入力フラグです。

ホスト側の変数

上記のフラグに加えて、通常は Docker コマンド用に以下の環境変数を設定します。
重要: 検証の前に、ドラフトおよびターゲットの両方のチェックポイントを変換しておく必要があります。SambaStack 提供のターゲットチェックポイントを使用する場合、変換は不要です。SambaStack 提供のチェックポイントは、すべてすでに正しいフォーマットになっています。
このステップは任意ですが、実行時エラーを避けるために強く推奨します。
4

カスタムドラフトチェックポイントのアップロード

クラスターが NFS マウントストレージを使用している場合は、カスタムチェックポイントを、クラスターから読み取れる NFS 上に配置してください。クラスターで Google Cloud Storage を使用している場合は、変換済みのドラフトチェックポイントのディレクトリを GCS バケットにアップロードし、SambaStack のサービスアカウントから読み取れることを確認してください。
アップロード手順と GCS の権限設定の詳細については、カスタムチェックポイントのデプロイ → 変換済みチェックポイントのアップロード をご覧ください。
5

ドラフトチェックポイントの登録

カスタムチェックポイントをデプロイするワークフローのステップ 3 と同様に、モデルマニフェストを作成してチェックポイントを登録します。モデルマニフェストには、チェックポイントに関する以下のような情報が保存されます。
  • API リクエストや他の YAML で使用する名前
  • 対応言語
  • チェックポイントの説明

モデルマニフェストの例

name フィールド (上記の例では my-custom-llama3.1-8b) は、以降のステップで参照する重要なフィールドになります。

トークナイザーフィールドの選択

モデルマニフェストの tokenizer フィールドには、カスタムチェックポイントのベースとなったモデルを設定できます。たとえば、カスタムチェックポイントが Meta-Llama-3.1-70B-Instruct からファインチューニングされたものである場合、トークナイザーのパスは次のように設定できます。
モデルマニフェストの tokenizer フィールドは、生成前にシーケンス長の要件を計算するための入力チェックにのみ使用されます。

モデルマニフェストの適用

モデルマニフェストを作成したら、次のコマンドで適用します。
6

バンドル構成の更新

ドラフトチェックポイントのアップロードと登録が完了したら、他のカスタムチェックポイントと同じ方法でバンドル構成を更新します。

変更前: SambaNova 提供のドラフトを使用

以下は、カスタムドラフトチェックポイントを導入する前のバンドルです。ターゲットチェックポイントのみがカスタマイズされています。

変更後: カスタムドラフトを使用

ドラフトモデルのチェックポイントを置き換えるには、ターゲットモデルの場合と同様に、checkpoints セクションと models セクションの両方を編集して、カスタムドラフトチェックポイントを使用するようにバンドルを更新します。
spec.checkpoints.source には、Google Cloud Storage のパス (gs://) または NFS のパス (nfs://) を指定できます。

バンドルの適用

重要な注意点

  • 推論 API リクエストでドラフトモデルを直接呼び出す必要はありません
  • ターゲットモデル (例: Custom-Target-Llama-3.3-70B) にリクエストを送信すると、SambaStack が対応するドラフトチェックポイントを使用して投機的デコーディングを自動的に実行します
  • 投機的デコーディングが機能するには、両方のチェックポイントがバンドルに含まれている必要があります
  • カスタムドラフトチェックポイントを参照するようにデプロイメントを変更する手順は、カスタムチェックポイントの手順と同様です。詳細については、カスタムチェックポイントのデプロイページの デプロイ用 Bundle でのチェックポイントの参照 をご覧ください。

デプロイメントの確認

バンドルを適用したら、デプロイメントを確認します。
ターゲットモデルに推論リクエストを送信してテストします。SambaStack は、リクエストの処理時に自動的にドラフトモデルを使用して投機的デコーディングを実行します。 SambaNova SDK、OpenAI 互換ライブラリ、または CURL を使用した推論リクエストの送信例については、開発者向けのクイックスタートガイド をご覧ください。

トラブルシューティング

関連ページ