ローカルAIランタイムでLow Memory Killerを生き抜く
SoumiSAndroid Engineer at Microsoft
オンデバイスの Small Language Models (SLMs) の統合や、継続的なバックグラウンド同期レイヤーの実行は、メモリ枯渇という非常に厳しい技術的課題をもたらします。アプリケーションが高頻度のデータ処理やローカルモデルの推論を実行すると、デバイスのハードウェアの限界に達します。これにより、Android の積極的な Low Memory Killer デーモン (lmkd) が頻繁にトリガーされ、バックグラウンドタスクの中断、深刻なサーマルスロットリング、そしてユーザー体験を完全に損なう突然のアプリケーション終了が発生します。複雑なエッジワークロードを正常に提供するには、メモリ管理を厳格なシステムレベルの割り当て問題として扱う必要があります。 高レベルのメモリラッパーに依存すると、根底にあるハードウェアの制約が見えなくなります。本セッションでは、フレームドロップを起こすことなく極端なシステムメモリ圧迫を乗り切ることができる、非常に回復力のあるゼロアロケーションなローカルエンジンを構築するための本番環境対応システムアーキテクチャを紹介します。 具体的には、本セッションで以下の内容を扱います: カーネルレベルのメモリフックの活用: OS が介入する前に、プラットフォーム割り当てシグナル (ComponentCallbacks2) をインターセプトしてバックグラウンドデータ処理ループを動的に制限または一時停止する方法。 JVM Garbage Collector のバイパス: ByteBuffer.allocateDirect とネイティブメモリマッピング (mmap) を利用して、ヒープを増加させずに重いバイナリデータストリームをローカルデータベースに直接パイプする実践的な実装。 NPU ハードウェア実行の最適化: CPU コアにフォールバックする代わりに、Android Neural Networks API (NNAPI) を使用してモデル行列をデバイスの Neural Processing Unit (NPU) に直接ルーティングする戦略。 トランザクションの再開とフォールバック: ハードウェアリソースが突然制限された際に、数ギガバイト規模のバックグラウンド操作を安全に保存および再開するためのアーキテクチャの設計図。 プラットフォームのメモリ制限と戦うのをやめ、負荷の高いローカルランタイム実行に向けてアプリのコアアーキテクチャを最適化する方法を学びましょう。 (DroidKaigi実行委員会による翻訳)
対象者
ローカルデータエンジン、重いバックグラウンド同期システム、またはオンデバイスAI機能を開発するシニアAndroidエンジニアおよびテックリード ANRの削減、バッテリー消費の抑制、アプリのメモリフットプリントの最適化を担当するパフォーマンス&リライアビリティエンジニア ハードウェアリソースを大規模かつ安全に管理するための低レイヤーシステムデザインパターンを求めるモバイルアーキテクト