
2026/10/22 18:01
TornadoVM 7 で Java アプリケーションからネイティブ GPU ワークロードを実現
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
TornadoVM バージョン 7.3 がリリースされ、既存コードを改変せずに CPU および GPU 上で Java アプリケーションのパフォーマンス向上を求めている開発者にとって大きな前進です。このリリースでは、レガシーの JNI インターフェースを堅牢な Foreign Function & Memory API に置き換えることでプラットフォームを根本的にモダナイズし、実験的な JVM Compiler Interface (JVMCI) への依存関係を排除することで、JDK バージョン 21 から 27 までの互換性を確保しています。主なハイライトの一つは、Nvidia CUDA との統合が深まり、cuBLAS や CUTLASS といった高性能な AI ライブラリに直接アクセスできるようになり、Apple の MXL ライブラリもハイブリッド API を通じて対応している点です。OpenJDK、GraalVM、Temurin、Zulu といった主要ディストリビューションと並行して動作し、TornadoVM は JVM 環境内で安定したマルチ GPU エキゼクションおよび最適化されたデータパラレルワークロードを可能にし、Spring AI、Quarkus、Flink、Lang4j などのフレームワーク内で GPU 加速タスクへのidiomaticなアクセスを促進します。さらに、このリリースに伴ってチームは llama.cpp および Ollama の競合候補となる単一の JAR ファイル Java AI 推論エンジンである jitLLM v2.0 も紹介しています。TornadoVM と jitLLM は新たなスピンオフ企業 Beestream.ai を通じて商業化されており、より広範なエンタープライズ導入および複雑な外部ネイティブツールへの依存軽減を示唆しています。
本文
TornadoVM 第 7.3 版リリース:Java 向け異種 GPU プログラミングの新たな里程碑
TornadoVM は、Java 用オープンソース異種 GPU プログラミングフレームワークです。プロジェクトの大きなマイルストーンとなる 第 7.3 版 が正式にリリースされました。
概要とアーキテクチャ
- 自動高速化: マルチコア CPU および GPU 上で Java プログラムを自動的に高速化します。
- エコシステムとの連携:
- 既存の JVM を置き換えるのではなく、それらと連携して動作します。
- OpenJDK、GraalVM、Temurin、Zulu など、主要な JDK ディストリビューションすべてで利用可能です。
- 機能原理:
- Java コードをハードウェアバックエンドへオフロード。
- Java ヒープとアクセラレータ間のメモリ管理を実行。
- 生成されたコンピューティングカーネルを実動化。
- 用途: 現代的なクラウドおよび機械学習ワークロードにとって有用な建築ブロックとなります。
開発モデル:Write Once, Run Anywhere
- ローカル開発: ソース Java コードを OpenCL および Apple Metal バックエンドにコンパイルし、ノートパソコン上で開発を行います。
- サーバー展開: ローカル開発後、NVIDIA GPU を搭載したサーバーへ展開することで大幅なパフォーマンス向上を実現します。
- このアプローチは、「Write Once, Run Anywhere」の概念を体現しています。
第 7.3 版における主な変更点
アーキテクチャ上の刷新
- API の移行: バックエンド処理において、Java ネイティブインタフェース(JNI)に代わって Foreign Function & Memory(FFM) API を使用。
- 依存関係の解消: 実験的な JVM コンパイラインタフェース(JVMCI)への依存関係を削除。
- 統一されたパス: すべてのコンパイラメタデータを反射+ASM+Unsafe レイヤーを通じて取得し、JDK 21/25/26/27 で統一的に動作するようになりました。
NVIDIA エコシステムとの統合深化
- 最適化された CUDA バックエンドの追加:
- 新しい
を通じた cuTile プログラミングモデルへの対応。TileContext - TornadoVM の TaskGraphs 内部から、
やcuBLAS
などの CUDA ライブラリを直接呼び出せる機能の実装。CUTLASS
- 新しい
- 柔軟な実行:
- パフォーマンスや移植性要件に応じて、JIT で生成されたカーネルと CUDA ライブラリ呼び出しの間で切り替えが可能。
- 両者を連鎖的に使用することも可能。
- Apple エコシステム: MXL ライブラリについても、同等の機能をハイブリッド API を通じて追加。
- マルチ GPU 対応: マルチ GPU 実行へのサポートを実装済み。
適正なワークロードと利用目的
最適な使用ケース
- すべての計算がオフロードから利益を得るわけではありません。
- 最も適した候補: 反復間における依存関係を持たないループなどによる データ並列ワークロード。
- 各反復をアクセラレータ上で並列に実行できるためです。
NVIDIA ライブラリへのアクセス
- Java 開発者が、NVIDIA が異なるハードウェア向けに最適化してきたライブラリにアクセスするための自然な JVM エコシステムを提供。
- 活用可能な技術:
- 線形代数
- 高速フーリエ変換(信号分析用)
- 深層ニューラルネットワーク
- 疎行列向けの手動最適化された行列乗算
- 統合・入手方法: Quarkus、Lang4j、Flink、Spring AI などのライブラリ統合が可能で、SDKMan を通じて入手できます。
Apache Flink との連携事例
- 開発フロー:
- 通常通り Table API で標準的なクエリを書く。
- GPU 高速化の可能性を示すために設定フラグを使用。
- 計算がタスクマネージャーに到達した段階で、フレームワークが実行ノードの GPU 利用可能性を確認。
- GPU 可利用の場合、ライブラリプロバイダーと接続。
- 判定プロセス: ライブラリプロバイダーがクエリの中間表現(IR)を解析し、GPU 実行に適しているかどうかを自動判定。
プログラミングアプローチの多様性
TornadoVM は Java プログラマー向けに NVIDIA GPU プログラミングの 4 つの異なる方法 を提供します:
- 並列 API:
- ループへの注釈化(アノテーション)によりコンパイラに「並列化の可能性」というヒントを与える。
- しかし、単体では本番アプリケーションでの所望のパフォーマンスが証明されていないため、追加 API が導入された経緯あり。
- カーネルコンテキスト API: より高度な制御を可能にする。
- TileContext API:
プログラミングモデルに対応した新しい文脈。cuTile - ハイブリッド API: Java と CUDA/MXL ライブラリの混合利用。
次世代 AI 推論エンジン「jitLLM v2.0」の導入
- 新機能: TornadoVM 第 7.3 版リリースと並行して、TornadoVM を基盤とした次世代 Java AI 推論エンジン 「jitLLM v2.0」 が導入されました。
- 位置づけ:
やllama.cpp
のパフォーマンス面での直接的な競合製品です。Ollama - 配布形式: 単一の JAR ファイルとして提供され、簡単に統合・使用できます。
- 商業化: TornadoVM チームによって設立されたスピンオフ企業 Beestream.ai を通じて行われています。
参考情報
- 詳細サイト: TornadoVM 公式サイト(※例示)
- 動画資料: Devoxx Belgium で公開された「TornadoVM のハイブリッド API を使用して Java から NVIDIA エコシステムを活用する」などのビデオが視聴可能です。
著者: ベン・イブンス