[Tips] shasta のモデルロード挙動について - krugle-jp/Krugle-Library GitHub Wiki

前提

shasta は、KLiP などのクライアントから推論リクエストを受けると、指定されたモデルを GPU の VRAM 上にロードして処理を行います。

このとき、リクエストには contextLength や maxTokens などのパラメータが含まれており、shasta はその条件に合わせて必要な VRAM を確保してモデルを展開します。

ここで重要なのは、同じモデル名でも、リクエスト時のパラメータが違うと別条件として扱われることです。

つまり、すでに同じモデルが動いていても、contextLength や maxTokens が異なれば、そのまま使い回せず、再ロードが発生することがあります。


よくある例

例1: 15B モデルを標準設定で使う

たとえば、最初のクライアントが krugle-code-15b-chat に対して、次の設定でリクエストしたとします。

contextLength: 16384
maxTokens: 4096

この場合、shasta はこの条件で必要な VRAM を確保して、15B モデルをロードします。

目安としては、約14GB程度の VRAM を使います。

同じように krugle-code-35b-chat を同条件で使うと、こちらは 約28GB程度の VRAM が必要になります。

VRAM 使用量はあくまで参考値です。

実際には入力文脈量や運用条件によって前後します。


例2: 15B と 35B を同時に動かしたい

GPU に十分な VRAM があれば、複数モデルを同時にロードして並行利用できます。

※ 後述の環境設定変更が必要ですのでご注意ください。

たとえば、15B と 35B をどちらも以下の設定で使う場合です。

contextLength: 16384
maxTokens: 4096

必要 VRAM の目安は次の通りです。

  • 15B: 約14GB

  • 35B: 約28GB

合計すると、ざっくり 42GB 以上の VRAM が必要になります。

そのため、GPU の VRAM が足りていれば並行利用できますが、余裕がない環境では片方のロードが外される可能性があります。


例3: VRAM が足りないとどうなるか

たとえば、32GB VRAM の GPU 環境で、すでに krugle-code-35b-chat がロードされているとします。

この時点で、おおよそ 28GB を使用している想定です。

その状態で krugle-code-15b-chat の追加要求が来ると、さらに約14GB必要になるため、単純には載りきりません。

この場合、shasta は 今ロード済みの 35B モデルをリセットして、新しく 15B モデルをロードすることがあります。

この切り替えが起きると、利用者からは次のように見えます。

  • 急に最初の応答が遅くなる

  • さっきまで速かったのに急に重くなる

  • 利用タイミングによって体感速度が変わる

共有 GPU 環境では特に起きやすい動きです。


例4: 同じモデルでも設定値が違うと再ロードされる

KLiP User #1 が krugle-code-15b-chat を以下の設定で使っているとします。

contextLength: 16384
maxTokens: 4096

この状態で、KLiP User #2 も同じ設定で krugle-code-15b-chat にアクセスするなら、shasta は すでにロード済みのモデルをそのまま利用できます。

この場合、再ロードは不要です。

ただし、KLiP User #2 が次のような別設定でリクエストすると話が変わります。

contextLength: 32768
maxTokens: 4096

この場合、shasta は既存の 16384 / 4096 向けロード状態をそのまま使えないため、いったんモデルをリセットして、32768 / 4096 用にロードし直します。

この再ロードには時間がかかるため、結果として次のような影響が出やすくなります。

  • 最初の返答が遅くなる

  • ほかの利用者にも待ち時間が波及する

  • 共有環境全体で体感速度が不安定になる


例5: 設定値は同じなのに後半だけ遅い

これもよくあるケースです。

たとえば、最初は contextLength: 16384 / maxTokens: 4096 で快適に動いていたとしても、会話が長引いて履歴が肥大化したり、添付文脈や RAG の参照情報が増えたりすると、後半になるほど重くなることがあります。

この場合は設定値が変わっていないので、一見すると原因が分かりにくいのですが、実際にはセッションの入力総量が増えているのが原因です。

こうしたケースでは、

  • 新しいセッションに切り替える

  • 長い履歴をそのまま持ち越さない

  • 添付文脈を絞る

といった対応が有効です。


運用ルール

shasta を安定して使うためには、クライアントごとに設定をばらつかせず、できるだけ運用ルールをそろえるのが大事です。

1. モデルごとに標準パラメータを決める

まずは、環境内で使う標準値を決めておくのがおすすめです。

たとえば以下のような形です。

  • 標準設定

    contextLength: 16384

    maxTokens: 4096

KLiP や AI-Web など、複数のクライアントがある場合も、できるだけこの値にそろえて運用します。


2. 高コンテキスト設定は通常運用にしない

contextLengthに大きな値を設定するのはたしかに便利ですが、そのぶん VRAM を圧迫しやすく、再ロードやモデル切り替えの原因にもなります。

常用設定ではなく、本当に必要なケースだけで使うのが安全です。


3. 同時に使うモデル構成は先に決めておく

共有 GPU 環境では、あとから場当たり的にモデルを追加すると、VRAM 不足で既存モデルが外されることがあります。

そのため、どのモデルを同時に使うか、そのとき必要 VRAM がどれくらいか は、先に見積もっておくのがおすすめです。


4. 長いセッションは重くなる前提で考える

設定値が同じでも、対話履歴、添付ファイル、RAG の追加文脈などが積み上がると、後半になるほど重くなります。

長めのセッションでは、次のような運用を前提にしてください。

  • 会話が長くなったら新しいセッションに切り替える

  • 必要な履歴だけを要約して引き継ぐ

  • 不要な添付文脈を減らす


5. 同時ロード数を増やすときは VRAM とセットで考える

shasta では MAX_LOADED_MODELS で同時ロード数を調整できます。

設定ファイル:

/etc/systemd/system/shasta.service

変更例:

MAX_LOADED_MODELS=3

反映:

sudo systemctl daemon-reload
sudo systemctl restart shasta

ただし、設定だけ増やしても VRAM が足りなければ意味がありません。

「何個まで載せるか」ではなく、「本当に載るだけの VRAM があるか」まで含めて考える必要があります。


6. 性能問題が出たら、まずロード状況を見る

体感だけで「Shasta が重い」と判断するのではなく、まず現在のロード状況やメモリの使い方を確認するのがおすすめです。

特に次のようなときは、モデル再ロードや VRAM 不足を疑ってください。

  • 急に最初の応答が遅くなった

  • 同じモデルなのにタイミングによって速さが違う

  • セッション後半だけ重い

  • 共有環境で誰かが高負荷設定を使っている


まとめ

shasta は、クライアントから渡される contextLength や maxTokens に応じて、必要な VRAM を確保してモデルをロードします。

そのため、同じモデルでも設定値が違えば再ロードが発生し、最初の応答までの待ち時間が増えることがあります。

さらに、VRAM に収まらない新しい要求が来た場合は、いまロード済みのモデルを外して、新しい要求を優先することがあります。

共有環境ではこの影響が他ユーザにも及ぶため、モデル構成と VRAM 設計はかなり重要です。

また、実際の性能は設定値だけではなく、対話履歴、添付文脈、RAG による追加情報など、セッション内の実際の入力総量にも左右されます。

安定運用のためには、次の方針を基本にするのがおすすめです。

  • クライアント間でパラメータセットをできるだけそろえる

  • 高コンテキスト設定は必要なときだけ使う

  • 同時稼働モデル数と VRAM 総量を先に見積もる

  • 長期セッションでは履歴肥大化も前提にする


すぐ確認したいときのチェックポイント

  • contextLength / maxTokens がクライアントごとにばらついていないか

  • 高負荷設定が常用されていないか

  • 共有環境で想定以上のモデルが同時に動いていないか

  • セッション履歴や添付文脈が肥大化していないか

  • モデル再ロードが頻発していないか