メインコンテンツへスキップ
ローカルモデルからのすべての返信は、同じラウンドトリップに従います。テキストがトークンに変換され、モデルがプロンプト全体を一度に読み取り、その後、一トークンずつ返信を書き出します。これらのステップを理解することで、ローカルモデルのユーザーが直面する二つの事象が説明できます。一つ目は、最初の単語が表示される前に長いプロンプトが「思考」に時間がかかる理由、二つ目は生成速度が単純な計算能力だけでなくメモリに依存する理由です。 このページは、残りの Concepts(概念)トラックの 101 入門編です。ここで一ページだけ読むなら、このページを読んでください。

ステップ 1: トークン化

モデルが何らかの処理を行う前に、プロンプトはトークン(テキストの小さなチャンクで、おおよそ数文字または単語の一部)に分割されます。トークン化は決定論的であり、ほぼ瞬時に行われます。これはモデルの語彙に対する単純なルックアップです。モデルは生のテキストを見ることはなく、トークン ID のシーケンスのみを処理します。

ステップ 2: プリフィル(計算リソース制約)

プリフィルは、モデルが一言も返信を書き出す前に、送信したすべてのトークンを一回のパスで読み取る処理です。このステップは compute-bound: GPU はプロンプト全体に対して重い行列計算を一度に行うため、処理能力の量に比例してスケーリングします。 プリフィルには、知っておくべき二つの効果があります。
  • 返信の開始が遅いときに待っているのはこの処理です。プロンプトを送信してから最初のトークンが表示されるまでの遅延は time to first token (TTFT) と呼ばれ、ほぼ完全にプリフィルの時間によって占められます。
  • これにより KV キャッシュが構築されます。これはプロンプトの記録であり、モデルがその後の各トークンでそれを再処理する必要がないようにします。メモリにおけるそのキャッシュのコストについては、KV キャッシュとコンテキストを参照してください。
プロンプトが長いほどプリフィルの作業量が増え、TTFT が長くなります。

ステップ 3: デコード(メモリ帯域幅制約)

プリフィルが完了すると、モデルはデコードを開始します。これは、一トークンずつ返信を生成する処理です。各新しいトークンはシーケンスに追加され、次のトークンはこれまでのすべての情報から予測されます。 デコードはプリフィルとは非常に異なる挙動を示します。各ステップで、モデルはメモリから重み(または、mixture-of-experts モデルの場合はアクティブなエキスパートのみ)および KV キャッシュ全体を読み取る必要があります。移動するデータ量に対してトークンあたりの新しい計算が非常に少ないため、デコードは memory-bandwidth-bound — それは、利用可能な計算能力の量ではなく、メモリから計算ユニットへのデータ転送速度によって制限されます。 これが一秒あたりのトークン数で測定される内容であり、以下の理由があります。
  • 計算能力は劣るがメモリが高速な GPU は、メモリが遅い「高速」チップよりもデコードが速い場合があります。
  • コンテキストが長いほどデコードが遅くなります。これは、より多くのメモリを消費するだけでなく(KV キャッシュとコンテキスト参照)、各ステップで読み取る KV キャッシュが増えるためです。

ステップ 4: トークンのストリーミング返信

モデルが各トークンを生成すると、それはテキストにデコードされ、クライアントに即座にストリーミングされます。これが、返信が一度にすべて表示されるのではなく、単語ごとに出現して見える理由です。Tokios を使用している場合、このストリームはローカルバックエンドからコネクタとゲートウェイを介して、リクエストを送信したアプリまたはエージェントに戻ります。その旅程については、Tokios によるリクエストのルーティング方法を参照してください。

メモリ内の配置

上記のすべての処理は、VRAM(または統一メモリ)に配置されている三つの要素に対して行われます。 重みは下限です。これらが完全に読み込まれていない(または一部オフロードされていない)と、モデルを実行できません(メモリとオフロード参照)。KV キャッシュは、会話やドキュメントが長くなるにつれて増大する部分であり、「短いプロンプトでは動作したが、長いプロンプトではメモリ不足になった」という一般的な失敗モードの原因となります。
このページではメカニクスを説明します。特定のモデルとコンテキストが実際に必要なギガバイト数などのサイズ計算については、メモリとオフロードおよびGPU モデル適合ガイドを参照してください。

さらに深く学ぶ

KV キャッシュとコンテキスト

なぜ長いコンテキストはより多くのメモリを消費し、デコードを遅くするのか。

メモリとオフロード

サイズ計算式と、モデルが完全に収まらない場合の挙動。

量子化

重みの精度を縮小することで、メモリと速度がどのように変化するか。

モデルカードの読み方

モデルを実行する前に、アーキテクチャやコンテキスト長を確認する場所。

実行方法が理解できたら

上記のすべての処理は、localhost で実行されているモデルに対して、あなたのマシン上で発生します。これに慣れたら、次の疑問は、自分のマシン以外の場所からどのようにアクセスするかです。

ローカルモデルに安定したエンドポイントを付与する

Tokios はモデルを選択、ホスト、またはファインチューニングしません。ローカルで実行されているモデルを、どこからでも呼び出せる安定した認証済みエンドポイントに変換します。