3層の優先度スケジューラにより、デバイス上での言語モデルのレイテンシを1秒以上から0.2秒未満へと短縮し、スマートフォンがバックグラウンド処理で忙しいときでもチャットアプリの応答性を維持します。Tensor G3チップ上で動作する30億パラメータのモデル向けに構築されたこのスケジューラは、バックグラウンドジョブを停止させることなく、レイテンシを1,420msから161msへと削減します。

なぜデバイス上でのLLMは苦戦するのか

モバイルプロセッサ上で大規模言語モデル(LLM)を動かすことは、リソースの逼迫を意味します。Tensor G3では、3Bモデルだけですでにニューラル・プロセッシング・ユニット(NPU)の約85%を消費しています。ユーザーがチャットウィンドウを開いた瞬間に、オフライン・インデクサーのような低優先度のタスクが同時に実行されると、体感レスポンスタイムは約140msから1,400msへと跳ね上がり、ユーザーが即座に気づくほどの10倍の低速化が発生します。

問題は速度だけではありません。モバイルデバイスは、UIの滑らかさ、バッテリー寿命、そして計算リソースを要求する複数のアプリを同時に管理しなければなりません。ジョブを順番に処理するだけの素朴なキューでは、UIスレッドがバックグラウンド処理の完了を待たされることになり、対話型アシスタントが鈍重な体験へと変わってしまいます。

3層スケジューラの仕組み

新しいスケジューラは、推論パイプラインに連携する3つのコンポーネントを挿入します。

  1. Priority Queue(優先度キュー) – 到着したジョブを静的な重要度レベルに従って並べ替える最小ヒープ。
  2. Preemption Controller(プリエンプション・コントローラー) – 高優先度のリクエストが到着した際、低優先度のジョブを破棄するのではなく、一時停止させます。
  3. Token Budget Governor(トークン・バジェット・ガバナー) – アプリのライフサイクル状態に基づいて、ジョブが生成できるトークン数の上限を設定します。

これらが連携することで、フォアグラウンドのチャットリクエストを列の先頭に割り込ませる一方で、バックグラウンドジョブはリソースが空き次第再開できる「パーク(一時停止)」状態で待機させることができます。

優先度ティアとプリエンプション

以下の4つのティアによって、中断可能なタスクが定義されます。

ティア 説明
Foreground Chat 重要なUIインタラクション
Inline Suggestion オートコンプリート形式のヒント
Background Summary 定期的なコンテンツ要約
Offline Indexing 一括データ処理

スケジューラは低優先度のジョブを中断(アボート)することはありません。代わりに、中間アテンション結果を保持する構造であるモデルのキー・バリュー(KV)キャッシュのスナップショットを撮り、ジョブを一時停止させます。高優先度のリクエストが終了すると、コントローラーはスナップショットを復元し、バックグラウンドタスクが中断した箇所から再開できるようにします。この「一時停止と再開」のアプローチにより、ジョブを最初からやり直す際に発生するコストの高い再計算を回避できます。

また、部分的なKVキャッシュのエビクション(追い出し)によって、無駄をさらに削減します。静的なシステムプロンプトはキャッシュに保持し、動的な会話のターンのみをエビクションします。その結果、一時停止後のモデルの再プリフィル(re-prefilling)コストを40%〜60%削減できます。

タイマーに頼らないトークン・バジェットの管理

多くの実装では、ジョブがいつCPUやNPUの時間を譲るべきかを推測するためにタイマーに依存しています。しかし、タイマーは精度に欠け、UIを待たせすぎるか、チップの利用率を下げすぎるかのどちらかになりがちです。このスケジューラでは、タイマーの代わりにAndroidの ProcessLifecycleOwner を採用しています。これにより、アプリがフォアグラウンドにあるかバックグラウンドにあるかを確実に示すライフサイクルイベントを利用できます。

  • ON_RESUME – アプリが完全な計算バジェットを取り戻し、保留中のフォアグラウンドジョブが妨げられることなく実行されます。
  • ON_STOP – アプリのバックグラウンドタスクを通常のトークンバジェットの約25%に制限し、突発的なUIリクエストに備えて余裕を確保します。

リソース割り当てをライフサイクルイベントに紐付けることで、システムは任意のタイムスライスではなく、実際のユーザーの行動に反応するようになります。

パフォーマンスの向上とトレードオフ

素朴な先着順(first-come-first-served)キューでは、バックグラウンドタスクによってフォアグラウンドのチャットレイテンシは約1,420msまで増大します。優先度スケジューラが有効な場合、同じチャットリクエストは約161msで完了し、流れるようなユーザー体験を取り戻す10倍の改善を実現します。

一時停止したジョブの再開には、総実行時間が約22%増加するというコストがかかります。しかし、バックグラウンド作業は非クリティカルなものであるため、特にUIの応答性が維持されている状況では、このトレードオフは許容範囲内となります。