モデル、モデルプロファイル、モデルバンドル、モデルのデプロイに馴染みがない場合は、モデルとバンドルのデプロイ ページをご覧ください。
投機的デコーディングとは
投機的デコーディングは、高速かつ軽量な 「ドラフト」モデル (draft model) と、より大規模で高品質な 「ターゲット」モデル (target model) を組み合わせる推論高速化手法です。- ドラフトモデルが複数の次トークンの候補を提案します
- ターゲットモデルがそれらを並列に高速で検証し、採用または棄却します
- このアプローチにより、推論のデコード時間が大幅に短縮されます。特にドラフトモデルがターゲットモデルと密接に「整合」している場合に効果的です
投機的デコーディングを使用すべきでないケース
投機的デコーディングは、ターゲットモデルの次トークンのかなりの部分をドラフトモデルが予測できる場合に最も効果を発揮します。ただし、状況によってはほとんど効果が得られず、かえって全体のパフォーマンスを低下させることもあります。投機的デコーディングでのカスタムドラフトチェックポイントの使用
SambaStack の一部のモデルプロファイルは、投機的デコーディングに対応しています。ターゲットモデルが投機的デコーディングを使用する場合、ドラフトモデルとターゲットモデルの両方を一緒にデプロイする必要があり、どちらのモデルのチェックポイントもカスタマイズできます。 このセクションでは、カスタムドラフトチェックポイントをデプロイする一連のワークフローを説明します。内容は以下のとおりです。- 投機的デコーディングを使用するプロファイルとバンドルを特定する方法
- ドラフトモデルとターゲットモデルの互換性を検証する方法
ModelBundleを更新する方法
ワークフローの概要
カスタムドラフトチェックポイントを投機的デコーディング用にデプロイする大まかな手順は以下のとおりです。カスタムドラフトチェックポイントのデプロイ手順
デプロイメントが投機的デコーディングを使用していることを確認
投機的デコーディングには、ペアリング自体は、上記の例では:
ModelProfile が投機的デコーディングに対応したターゲットモデルと、それと一緒にデプロイされるドラフトモデルが必要です。プロファイルが投機的デコーディングに対応しているかどうかは、spec.features に speculative_decoding が含まれているかで判断できます。ModelBundle の spec.specDecodingPairs で宣言します。以下の例では、meta-llama-3-3-70b-instruct がターゲット、meta-llama-3-2-1b-instruct がドラフトです。3 つ目のモデル gemma-4-31b-it は、これらと同じバンドルに含まれていますが、投機的デコーディングは使用しません。meta-llama-3-3-70b-instructがターゲットモデルです。投機的デコーディング用にコンパイルされた PEF を持つllama-3p1-70b-sdプロファイルを使用しています。meta-llama-3-2-1b-instructがドラフトモデルです。routable: falseが指定されているため、クライアントから直接アクセスすることはできません。spec.specDecodingPairsが両者のペアリングを宣言しています。gemma-4-31b-itはこのペアリングとは無関係で、通常どおりサービングされます。
- ターゲットモデルとドラフトモデルの両方が、
spec.modelConfigsのエントリとして記載されている必要があります。 - リクエストはターゲットモデルに送信されるため、ドラフトモデルはルーティング不可 (non-routable) にすることを推奨します。
specDecodingPairsのエントリでは、アーキテクチャやバージョンのサフィックスを付けずに、Modelリソース名のみでモデルを参照します。
投機的デコーディングのフィールド
カスタムドラフトチェックポイントの変換
ドラフトモデルのチェックポイントを、独自にファインチューニングしたバージョンやカスタムバージョンに置き換える場合は、チェックポイント変換ツール (Checkpoint Conversion Tool) を使用して SambaNova 互換フォーマットに変換します。
- ツールをまだセットアップしていない場合は、チェックポイント変換ツールのドキュメントページにある ダウンロードとセットアップ の手順に従ってください。
- 次に、チェックポイントの変換と検証 の手順に従ってドラフトチェックポイントを変換します。
SambaStack 提供のチェックポイントは、すでに正しいフォーマットになっています。SambaStack 提供のドラフトチェックポイントを使用する場合は、このステップをスキップしてください。
ドラフトとターゲットのチェックポイント互換性の検証
投機的デコーディングでカスタムチェックポイントをデプロイする際は、ドラフトチェックポイントがターゲットチェックポイントと互換であることを検証してください。これにより、推論時の予期しないエラーを防止できます。チェックポイント変換ツールには、ドラフトとターゲットの互換性をチェックする組み込みユーティリティが用意されています。この検証ユーティリティを使用して、以下を確認します。このステップは任意ですが、実行時エラーを避けるために強く推奨します。
- ドラフトモデルとターゲットモデルが構造的に整合していること
- 両者のトークナイザーに互換性があること
- このペアで投機的デコーディングを安全に実行できること
コマンドテンプレート
パラメータ
以下は、validate-sd コマンドの主な入力フラグです。ホスト側の変数
上記のフラグに加えて、通常は Docker コマンド用に以下の環境変数を設定します。重要: 検証の前に、ドラフトおよびターゲットの両方のチェックポイントを変換しておく必要があります。SambaStack 提供のターゲットチェックポイントを使用する場合、変換は不要です。SambaStack 提供のチェックポイントは、すべてすでに正しいフォーマットになっています。
カスタムドラフトチェックポイントのアップロード
クラスターが NFS マウントストレージを使用している場合は、カスタムチェックポイントを、クラスターから読み取れる NFS 上に配置してください。クラスターで Google Cloud Storage を使用している場合は、変換済みのドラフトチェックポイントのディレクトリを GCS バケットにアップロードし、SambaStack のサービスアカウントから読み取れることを確認してください。アップロード手順と GCS の権限設定の詳細については、カスタムチェックポイントのデプロイ → 変換済みチェックポイントのアップロード をご覧ください。
ドラフトチェックポイントの参照
カスタムチェックポイントのデプロイ で説明されている 2 つの方法のいずれかを使用して、変換したドラフトチェックポイントをサービング可能にします。
- 既存のドラフトモデルのチェックポイントをオーバーライドする。
spec.modelConfigs内のドラフトモデルのエントリにcheckpointOverridesを設定します。ドラフトモデルの名前は変わらないため、specDecodingPairsの変更は不要です。こちらの方が簡単な方法で、次のステップで示します。 - 新しい
Modelリソースを登録する。 ドラフトチェックポイントを独自の名前でサービングする場合に使用します。この場合、specDecodingPairsのdraftの値を、新しいリソース名を参照するように更新する必要があります。
ドラフトモデルがクライアントから直接アクセスされることはないため、新しいサービング名が必要になるケースはまれです。ドラフトを独自の名前でアクセス可能にしたい場合を除き、チェックポイントのオーバーライドを推奨します。
ModelBundle の更新
ドラフトチェックポイントのアップロードが完了したら、ドラフトモデルのエントリがそのチェックポイントを参照するようにします。ターゲットのチェックポイントもカスタマイズする場合は、同じ方法でターゲットモデルのエントリに
変更前: SambaNova 提供のドラフトを使用
変更後: カスタムドラフトチェックポイントを使用
ドラフトモデルのmodelSettings に checkpointOverrides を追加します。specDecodingPairs を含め、それ以外は何も変わりません。チェックポイントの
source には、Google Cloud Storage のパス (gs://) または NFS のパス (nfs://) を指定できます。checkpointOverrides を追加します。バンドルの適用
重要な注意点
- 推論 API リクエストでドラフトモデルを直接呼び出す必要はありません。
- ターゲットモデルにリクエストを送信すると、SambaStack がペアリングされたドラフトモデルを使用して投機的デコーディングを自動的に実行します。
- 投機的デコーディングが機能するには、両方のモデルが
spec.modelConfigsに含まれている必要があります。 - カスタムチェックポイントの完全なワークフローについては、カスタムチェックポイントのデプロイ をご覧ください。
デプロイメントの確認
バンドルを適用してデプロイしたら、デプロイメントを確認します。kubectl get models が一覧表示するのは Kubernetes のリソース名 (metadata.name) です。ターゲットモデルへのアクセスには、サービング名 (spec.name) を使用してください。両者は異なることがよくあります。対応モデルとバンドル をご覧ください。トラブルシューティング
関連ページ
- チェックポイント変換ツール: チェックポイントを SambaNova フォーマットに変換
- カスタムチェックポイントのデプロイ: カスタムターゲットチェックポイントのデプロイ
- モデルとバンドルのデプロイ: モデル、プロファイル、バンドル、デプロイメントの概念

