llama.cppはリリースb11506(#26004)で、serverのスロット保存・復元時にコンテキストチェックポイントを保持するよう変更しました。復元したスロットは、プロンプト全体を再処理する代わりにチェックポイントへロールバックできます。
llama.cppはggml-orgが公開するC/C++実装の推論ソフトウェアで、OpenAI互換APIサーバーを備えています。
何が変わったか
serverは、#26640で追加されたpacked server_tokens payloadの後ろにチェックポイントをappendixとして追記し、n_written / n_readに含めます。従来は保存したスロットからチェックポイントを復元できず、クラッシュしたりプロンプト全体の再処理が必要になったりする状況がありました。
失敗時の挙動と堅牢化
| 条件 | 挙動 |
|---|---|
| スロットファイルから復元したチェックポイントの読み込み失敗 | クラッシュせずプロンプト全体を再処理 |
| メモリ上で作成したチェックポイントの読み込み失敗 | abort |
| 異なるdraft KV cache typeで保存したスロットの復元 | draft checkpointを1件テストロードし、適合しなければdraftデータを破棄 |
| appendixを書き込めない | スロット保存失敗としてクライアントにエラーを返す |
| 空のtarget stateを含むチェックポイント | 拒否 |
このほか、次の変更を加えています。
- 各blobの割り当て前に、ファイルの残りバイト数でサイズを制限
- Windowsではllama state payloadと同様にUTF-8パスでファイルを開く
- 従来のチェックポイント数上限1024を廃止し、読み込み時に最後の
n_ctx_checkpoints件を保持 commonのload_tgt/load_dftがboolを返すよう変更- ログにスロットIDを出力
従来、異なるdraft KV cache typeで保存したスロットの復元はload_dft()でabortしていました。
テスト
回帰テストと、割り当て不能なサイズを宣言するoversized-blobテストを追加しました。後者は無制限な割り当てが起きるとテストが失敗する設計です。draftのテストモデルは二重ダウンロードせずHFキャッシュから読み込みます。共同著作者はIgor Okulist氏です。

まだコメントはありません。