libargus v1.0.0: Project Panama を介した Java 22 用低レイテンシ・ローカル LLM ランタイム

libargus v1.0.0: Project Panama を介した Java 22 用低レイテンシ・ローカル LLM ランタイム

libargus v1.0.0 は Java 22+ におけるゼロアロケーションなネイティブ AI 推論を可能にします

libargus v1.0.0 は、大規模言語モデル (LLM) のテキスト生成、Whisper ベースの音声文字起こし (ASR)、およびマルチモーダル (Vision, Audio, Video) パイプラインを単一のプロセス・グローバルなネイティブ実行ランタイムに統合する、アンマネージドでモデルに依存しない推論ラッパーです。JDK 22+ Project Panama Foreign Function & Memory (FFM) API を活用することで、ホットパスの推論中の JVM ヒープのプリミティブ配列やガベージコレクション (GC) のフットプリントによるオーバーヘッドを排除します。

コア・アーキテクチャの柱

libargus は、いくつかの主要なアーキテクチャ上の決定を通じて、レイテンシと VRAM 断片化を最小限に抑えるように設計されています。

統合されたハードウェア・オーケストレーション

マルチコンテキスト・ドライバーのレースコンディションと VRAM 断片化を防ぐため、ランタイムは Process-Global Backend Singularity を使用します。テキスト、音声、およびマルチモーダル・サブシステム全体にわたって、ggml_backend_load_all() を介した単一の共有初期化パスウェイをオーケストレートします。

ゼロコピー・メモリ境界

ランタイムは、JVM ヒープのプリミティブ配列 (int[], float[]) を Project Panama の MemorySegment パラメータに置き換えます。これにより、トークン・テープ、音声波形、およびビデオ・フレームが絶対的なゼロコピー・メモリ境界で処理されることが保証され、推論ループから GC オーバーヘッドが取り除かれます。

重みと実行の分離

libargus は、モデルの重みのロード (argus_model_t) と、評価コンテキストのメモリ状態 (argus_context_t) を分離します。この分離により、単一のモデル重みのセットを複数の同時実行セッションで再利用することが可能になります。

マルチモーダル統合

libmtmd C++ エンジンを統合することで、libargus は生のビットマップ、音声 PCM 配列、およびビデオ・ファイルをサポートします。GPU 上でのマルチモーダル投影のために、M-RoPE 位置グリッドと非因果的アテンション行列を自動的に構成します。

高度な計算機能

  • Speculative & MTP Acceleration: Speculative drafting と Multi-Token Prediction (draft-mtp) のためのネイティブ検証ループが C++ レイヤーに直接実装されています。
  • KV Cache Quantization: type_k および type_v キャッシュ・エナムを使用して、メモリ・フットプリントを Q8_0、Q4_0、またはその他の最適化された形式にオフロードすることをサポートします。
  • Video Iteration Pipe: 内部の FFmpeg サブプロセス・パイプを使用してビデオをフレーム単位でデコードおよびストリーミングし、生の RGB フレームまたはタイムスタンプ付きのテキスト・チャンクを提供します。

Java 開発者エクスペリエンスと API の使用法

libargus は、メモリ安全で AutoCloseable な Java API を提供し、開発者が手動のポインタ演算や構造体のアライメント・ギャップから保護されます。

テキストと音声の文字起こし

開発者は、メモリ管理のために Arena を使用してグローバル・バックエンドを初期化し、モデルをロードします。

ArgusBackend.init();
try (Arena arena = Arena.ofConfined();
     ArgusModel model = ArgusModel.load(arena, Path.of("models/llama-3-8b.gguf"), 99, true)) {
     ArgusContextConfig config = new ArgusContextConfig.Builder(4096)
         .cpuThreads(8)
         .typeK(ArgusContextConfig.KV_TYPE_Q4_0)
         .build();
     try (ArgusContext context = ArgusContext.init(arena, model, config)) {
         // Generation loop
     }
}
} finally {
    ArgusBackend.free();
}

マルチモーダル・プロンプティング

ビジョン機能を持つ GGUF モデルとそのマルチモーダル・プロジェクター (mmproj) を使用して、、API は画像やビデオの処理を可能にします。

try (ArgusMultimodalContext mctx = ArgusMultimodalContext.init(arena, baseModel, Path.of("models/qwen2-vl-7b-it.mmproj"), 4, true)) {
    try (ArgusBitmap image = ArgusBitmap.loadFile(arena, mctx, Path.of("media/cat.png"), false)) {
        String prompt = "< __media__ >\n Describe what you see in this image.";
        try (ArgusInputChunks chunks = mctx.tokenize(arena, prompt, true, List.of(image))) {
            context.evalMultimodalChunks(mctx, chunks, 0, 0, 1024, true);
        }
    }
}

セマンティック・エンベディングとメタデータ

libargus は、float エンベディング・ベクトル (例: jina-embeddings-v3) の抽出、およびエンベディング次元 (nEmbd)、総パラメータ数 (nParams)、アーキテクチャ文字列などの GGUF モデル・メタデータのクエリをサポートします。

エンジニアリング手法

このプロジェクトは、システム・レベルの制御を犠牲にすることなく、開発速度を最大化するために、ハイブリッド・アプローチを採用して開発されました。

  • Human Core: すべての重要なメモリ・セマンティクス、オフヒープ Arena のライフサイクル境界、および手動の構造体アライメント・パッキングは、コンパイラ間のレイアウト・ドリフトを防ぐために、人間のエンジニアによって設計されました。
  • AI Core: LLM は、「構文コンパイラ」として使用され、人間が設計した設計図に基づき、C-to-Java downcall 結合や構造的な Java マッピング・レイアウト文字列などの、繰り返しの多いボイラープレート・コードを生成するために使用されました。

技術的議論とコミュニティ・フィードバック

プロジェクトは極端な低レイテンシとゼロアロケーションに焦点を当てていますが、一部のコミュニティ・メンバーは、これらの最適化の相対的な影響について疑問を疑問を呈しています。あるユーザーは次のように述べています。

"LLM 推論におけるすべての計算とデータ・シャッフルは、生の入出力のシャッフルは、全体的なコストの些細な部分であり、したがって大きな最適化対象ではないと考えていました。"

libargus は、これに対し、「Layer 0」実行基盤をターゲットにすることで対処しており、GC ポーズや JVM とネイティブ・レイヤー間のメモリ・コピーによる影響が許容できない、パフォーマンス・クリティカルな JVM プラットフォームにおいて、可能な限り最高のスループットを提供することを目指しています。

プロジェクト・ロードマップとライセンス

libargus は MIT ライセンスの下でリリースされ、llama.cpp (including libmtmd) および whisper.cpp にリンクします。これは、より広範な認知プラットフォームの基盤として意図されており、間もなく登場する Layer 1 ステートフル認知コア (L-TABB) とインターフェースします。

Sources