マンチェスター大学のBeehive LabがGPULlama3.javaを公開した。これは、Llama3のJavaネイティブ実装として初めて自動GPUアクセラレーションを実現したプロジェクトである。このプロジェクトはTornadoVMを活用し、開発者がCUDAやネイティブコードを記述する必要なく、GPUアクセラレーションによる大規模言語モデル推論を可能にする。これにより、Java開発者が企業環境でAIアプリケーションに取り組む方法を変革する可能性がある。
GPULlama3.javaの中心にあるのはTornadoVMである。これはOpenJDKとGraalVMを拡張し、JavaプログラムをGPU、FPGA、マルチコアCPU上で自動的に加速する革新的な異種プログラミングフレームワークである。従来のGPUプログラミングアプローチでは、開発者がCUDAやOpenCLのような低レベル言語でコードを書き直す必要があったが、TornadoVMはすべてのコードを純粋なJavaで保持しながらGPUアクセラレーションを可能にする。
TornadoVMのドキュメントによると、このシステムはGraal JITコンパイラを拡張し、JavaバイトコードをランタイムでGPU互換コードに変換する専門的なバックエンドを提供する。@Parallelのようなアノテーションを使用してメソッドを加速対象としてマークすると、TornadoVMのコンパイルパイプラインが標準的なJavaバイトコードをGraalの中間表現を通じて変換し、GPU特有の最適化を適用し、ターゲット固有のコードを生成する。これには、クロスプラットフォーム互換性のためのOpenCL C、NVIDIA GPU向けのPTXアセンブリ、Intelグラフィックス向けのSPIR-Vバイナリが含まれる。
// TornadoVM Task-Graph API example from documentation TaskGraph taskGraph = new TaskGraph("computation") .transferToDevice(DataTransferMode.FIRST_EXECUTION, data) .task("process", MyClass::compute, input, output) .transferToHost(DataTransferMode.EVERY_EXECUTION, output); TornadoExecutionPlan executor = new TornadoExecutionPlan(taskGraph.snapshot()); executor.execute(); TornadoVMのプログラミングガイドは、開発者がハードウェア非依存のAPIを利用する方法を示している。同じJavaソースコードがさまざまなハードウェアアクセラレータ上で同一に動作可能だ。TornadoVMランタイムは、すべてのデバイス固有の最適化、メモリ管理、データ転送を自動的に処理する。
GPULlama3.javaのリポジトリによると、このプロジェクトは3つの主要なバックエンドをサポートしており、多様なハードウェアでの実行を可能にしている。
- NVIDIA GPU:OpenCLとPTXバックエンドの両方を通じて完全サポート
- Intel GPU:Arcディスクリートグラフィックスおよび統合型HD Graphicsを含むOpenCLバックエンドによるサポート
- Apple Silicon:M1、M2、M3をOpenCLを通じてサポート(ただし、AppleはMetalを推奨しOpenCLを廃止している)
リポジトリでは、設定がコマンドラインフラグを通じて処理されることが示されている。
# Run with GPU acceleration (from project README) ./llama-tornado --gpu --verbose-init --opencl --model beehive-llama-3.2-1b-instruct-fp16.gguf --prompt "Explain the benefits of GPU acceleration." GPULlama3.javaの実装は、リポジトリに記載されている最新のJava機能を活用している。
- Java 21以上の要件:Vector APIとForeign Memory APIのサポート
- GGUF形式のサポート:単一ファイルモデルのデプロイメント
- 量子化形式のサポート:Q4_0およびQ8_0形式でメモリ要件を削減
このプロジェクトは、Alfonso Peterssen氏による元のLLama3.java実装を基に構築されており、TornadoVM統合を通じてGPUアクセラレーション機能を追加している。Peterssen氏はDevoxx 2024で、ネイティブ依存性なしでLlamaモデルを実行する能力を初めて発表した。TornadoVMチームは、この基盤を適応させ、異種コンピューティングフレームワークを通じてGPUアクセラレーションを活用している。
GPULlama3.javaは、他のJava LLMプロジェクトと並び、以下を含む。
- JLama:分散機能を備えたJava向けの最新LLM推論エンジン
- Llama3.java:CPU最適化に焦点を当てた元の純粋なJava実装
Quarkus社のブログによると、JavaエコシステムはAI/ML機能を拡張しており、開発者がJavaプラットフォームを離れることなくLLM対応アプリケーションを構築可能だ。
TornadoVMはマンチェスター大学の研究から生まれ、Java開発者が異種コンピューティングを利用可能にすることを目指している。このフレームワークは2013年から開発が進められており、新しいバックエンドサポートや最適化とともに進化を続けている。
GPULlama3.javaは現在ベータ版であり、性能最適化とベンチマーク収集が進行中である。Apple Siliconでの性能はOpenCLの廃止により依然として不十分である。TornadoVMチームはMetalバックエンドを開発中であり、Apple Siliconのサポートを強化し、トランスフォーマー操作を最適化し、モデルアーキテクチャの互換性を広げる予定だ。
GPULlama3.javaは、JavaエコシステムにGPUアクセラレーション型の大規模言語モデル(LLM)推論をもたらす重要な進展を示している。TornadoVMを活用することで、Java開発者が慣れ親しんだプログラミング環境を離れることなくGPUアクセラレーションを利用可能だ。性能最適化が進行中であり、プロジェクトは活発に開発されており、Javaのセキュリティ、スケーラビリティ、保守性といった強みが重視されるエンタープライズ環境でのJavaベースのAIアプリケーションに新たな可能性を開く。
GPUアクセラレーション型LLM推論をJavaで探求したい開発者向けに、このプロジェクトはオープンソースでGitHub上で利用可能であり、ドキュメントやサンプルが提供されている。
編集:
この記事は、Alfonso Peterssen氏のLLama3.javaプロジェクトへの帰属を含むよう更新された。このプロジェクトは、記載された作業の基盤として機能した。(2025年6月26日に更新)