ホームAIサーバーが多数のモデルを常時稼働状態に保つと何が起こるのか?

エヴァ・ウォン は テクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

家庭内で多くのAIモデルをウォーム状態に保つとコールドスタートは減りますが、共有メモリが恒常的な重み、ランタイム、キャッシュ、ワークスペースの確保に変わります。

家庭用サーバーでは、チャット、埋め込み、音声、画像認識、画像生成、コーディング、自動化向けに、それぞれ異なるモデルをすぐ使える状態にしておくことがあります。各ウォームプロセスはリクエストの合間にはアイドル状態に見えますが、次の呼び出しをすぐ開始できるよう、重みとランタイムコンテキストはメモリ上に残り続けます。合計フットプリントが増えると、長いコンテキスト、同時接続ユーザー、一時テンソル、AI以外のサービスに利用できるメモリが減少します。容量が逼迫すると、システムはモデルの追い出し、オフロード、処理拒否を始め、コールドスタートをなくそうとした結果、別のレイテンシー不安定要因を生み出します。

ウォーム状態の各モデルが恒常的なメモリ基準量を占有する

常駐モデルは、GPUメモリ、ユニファイドメモリ、またはシステムRAMに重みを保持します。サービングプロセスは、ライブラリ、実行コンテキスト、コンパイル済みカーネル、アロケータープールも保持する場合があります。

WarmServeは、モデルの事前ウォームアップを配置問題として扱います。1つのモデルを準備することで、他のモデルのメモリや起動経路に干渉する可能性があるためです。

メモリが確保されたままでも、コンピュート使用率はほぼゼロになることがあります。そのため、アイドル状態のダッシュボードを見ただけでは、別のモデルをウォーム状態にするための十分な容量がデバイスにあるとは限りません。

複数モデルの常駐により、コンテキストと同時実行の余裕が減少する

モデルの重みは固定的な基準量にすぎません。アクティブなプロンプトには、すでにウォーム状態で存在するモデルに加えて、KVキャッシュ、アクティベーション、一時ワークスペースも必要です。

MuxServeは、すべてのモデルを完全に独立させて常駐させるのではなく、モデルの人気度とリソース特性に基づいてモデルを同じ環境に配置します。

アイドル状態のモデルを3つ保持できるサーバーでも、1人のユーザーが長いコンテキストを送信したり、複数のユーザーが同時にアクティブになったりすると処理に失敗することがあります。安全な常駐計画では、重みファイルを収めるだけでなく、動的使用量のピーク分も確保する必要があります。

ZimaSpaceのアクセラレーターメモリ競合ガイドでは、個々のサービスがそれぞれの設定上限に達する前に、別々のサービス同士が競合する理由を解説しています。

分離されたランタイムは、モデル間で共有できる状態を重複して保持する

モデルごとにコンテナを1つ用意すると、アップグレードや障害分離は簡単になります。しかし各プロセスが独自のアクセラレーターコンテキスト、フレームワークライブラリ、アロケーター予約領域、トークナイザーアセット、共有モデルコンポーネントを読み込む可能性があります。

コスト効率の高いマルチモデルサービングでは、動的メモリ割り当てを利用して、モデルごとの静的な予約による無駄を減らします。

統合推論サーバーは重複を減らし、常駐状態を調整できますが、互換性や障害ドメインに関するトレードオフも生じます。適切な分離境界は、モデルファミリー、セキュリティ、ランタイムのサポート状況によって異なります。

追い出しによって、メモリ圧迫が初回リクエストの遅延に変わる

新しいモデルやリクエストにより多くの空き容量が必要になると、ランタイムは非アクティブなモデルをアンロードすることがあります。そのモデルへの次の呼び出しでは、重みを再読み込みし、実行状態を再構築しなければなりません。

ZimaSpaceでは、以前はウォーム状態だったモデルが常駐しなくなった際に発生するレイテンシースパイクについて説明しています。

メモリが不足した状態で複数のモデルが交互に使われると、サーバーはスラッシング状態に陥る可能性があります。つまり、各リクエストが次のリクエストに必要なモデルを追い出してしまう状態です。

キープアライブ期間を長くするのは、占有するメモリを正当化できるほど再利用の可能性が高い場合に限るべきです。

ウォーム状態のモデルは、追い出しが起きる前から干渉することがある

常駐プロセスは、断片化したアロケーターブロックを保持したり、同時リクエスト中にメモリ帯域を消費したり、アクティブなサービスで利用できるバッチ容量やKV容量を減らしたりすることがあります。

AlpaServeは、個々のピークごとに容量を確保するのではなく、急激に変動する需要に合わせてモデルを配置するために、統計的多重化を利用します。

ウォーム状態のモデルには機会費用もあります。たまにしか使わない画像モデルのために予約されたメモリは、同時に、より多くのチャットユーザーやより長いコンテキストを支えることができません。

常駐状態は需要と復旧コストに応じて決める

モデルを、リクエスト頻度、レイテンシーへの敏感さ、読み込み時間、メモリフットプリント、許容できるフォールバックに基づいて分類します。小型で頻繁に使う音声モデルやチャットモデルは常駐させ、使用頻度の低いモデルは必要なときに読み込めるようにします。

WarmServeは、事前ウォームアップによる干渉も考慮できるように、追い出しを考慮した配置を採用しています。

モデルごとのコールドスタート時間、ウォームヒット率、常駐バイト数、アクティブ時のメモリピーク、追い出し回数、モデル切り替え頻度を測定します。全体に1つのキープアライブ値を適用するのではなく、アイドルタイムアウトをモデルごとに設定します。

目標はコールドスタートをゼロにすることではありません。すぐに応答する必要があるモデルをウォーム状態に保ちながら、繰り返しの追い出しを引き起こしたり、家庭内のアクティブなワークロードに必要な容量を減らしたりしない、安定した構成を実現することです。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.