TornadoVM 7、JavaアプリケーションからGPUネイティブワークロードを可能に
TornadoVM 7 Enables GPU-Native Workloads from Java Applications (infoq.com)
要約
オープンソースのGPUプログラミングフレームワークTornadoVMがバージョン7.3に到達し、JavaコードをCPUやGPUで自動的に高速化する機能が強化されました。今回のアップデートでは、FFM APIへの移行、JVMCI依存関係の削除、NVIDIAエコシステムとの統合深化、CUDAバックエンドの最適化、マルチGPU実行サポートなどが追加されています。また、AI推論エンジンjitLLM v2.0も同時にリリースされ、TornadoVMチームはBeestream.aiを通じてこれらの技術の商業化を進めています。
全文翻訳
TornadoVM 7、JavaアプリケーションからGPUネイティブワークロードを可能に
TornadoVMは、Java向けのオープンソースの異種GPUプログラミングフレームワークであり、バージョン7.3に到達しました。これはプロジェクトにとって重要なマイルストーンです。
InfoQでは、以前に2025年12月と2022年にこのプロジェクトを取り上げています。
TornadoVMは、JavaプログラムをマルチコアCPUおよびGPU上で自動的に高速化します。既存のJVMを置き換えるのではなく、それらと連携して動作し、OpenJDK、Graalvm、Temurin、Zuluなどの主要なJDKディストリビューションで使用できる、Javaにおける豊富なGPUプログラミングエコシステムを提供します。
Javaコードをハードウェアバックエンドにオフロードし、Javaヒープとアクセラレータ間のメモリを管理し、生成されたコンピュートカーネルを実行します。これにより、最新のクラウドおよび機械学習ワークロードの有用なビルディングブロックとなります。
開発中、TornadoVMはソースJavaコードをOpenCLおよびApple Metalバックエンドにコンパイルします。その考え方は、ラップトップでローカルに開発し、ローカルで利用可能なハードウェアを使用し、その後Nvidia GPUを搭載したサーバーにデプロイして、大幅なパフォーマンス向上を達成できるというものです。これは、最新のMLワークロード向けの「Write Once, Run Anywhere」の一形態です。
バージョン7では、いくつかのアーキテクチャ変更がもたらされました。バックエンドは、Java Native Interface (JNI) の代わりにForeign Function & Memory (FFM) APIを使用するようになりました。実験的なJVM Compiler Interface (JVMCI) の依存関係も削除されました。チームによると、TornadoVMは現在、「すべてのコンパイラメタデータを、サポートされているすべてのJDK(21、25、26、27)で単一の統一パスであるリフレクション + ASM + Unsafeレイヤー」から取得しています。
このリリースでは、最適化されたCUDAバックエンドを通じてNvidiaエコシステムとの統合も深まっています。これには、cuTileプログラミングモデル(新しいTileContext経由)のサポートと、TaskGraphs内で直接CUDAライブラリ(cuBLASやCUTLASSなど)を呼び出す機能が含まれます。開発者は、パフォーマンスとポータビリティのニーズに応じて、JIT生成カーネルをCUDAライブラリ呼び出しに置き換えたり、両者をチェーンしたりできます。同様に、TornadoVMはハイブリッドAPIを介して、AppleのMXLライブラリにも同様の機能を追加します。最後に、マルチGPU実行のサポートが追加されました。
すべてのJava計算がオフロードの恩恵を受けるわけではありません。最適な候補は、反復間に依存関係のないループなど、データ並列ワークロードです。なぜなら、それらの反復はアクセラレータ上で並列に実行できるからです。
最近のTornadoVMバージョンの目標の1つは、Nvidiaがさまざまなハードウェアプラットフォーム向けにチューニングしたライブラリにアクセスするための、慣用的なJVM環境を生成することです。Java開発者が線形代数、高速フーリエ変換(信号解析用)、ディープニューラルネットワーク、およびスパース行列用の手動最適化された行列乗算などにアクセスできるようにすることを目指しています。TornadoVMは、Quarkus、Lang4j、Flink、Spring AIなどとライブラリ統合しており、SDKManからも利用可能です。
例えば、Apache FlinkとTornadoVMの統合を考えてみましょう。主なアイデアは、開発者がTable APIで通常行うように標準的なクエリを記述することです。設定フラグを使用して、このクエリがGPUで加速される可能性があることを示します。
次に、計算がタスクマネージャーに到達すると、フレームワークは実行中のノードにGPUが利用可能かどうかを確認し、利用可能な場合はライブラリプロバイダーに接続します。このプロバイダーは、クエリの中間表現(IR)を分析して、計算が実際にGPU実行に適しているかどうかを確認します。
合計で、TornadoVMはJavaプログラマーがNvidia GPUをプログラミングするための4つの方法を提供します。第一に、並列APIは、ループにアノテーションを付け、コンパイラにこのループが並列化される可能性があるというヒントを提供するものです。このシンプルなAPIは、本番アプリケーションで望ましいパフォーマンスを得るには長期的には十分ではないことが判明したため、カーネルコンテキストAPIや前述のTileContextなどの追加APIが追加されました。
7.3リリースと同時に、TornadoVMチームは、TornadoVM上に構築された次世代Java AI推論エンジンであるjitLLM v2.0を発表しました。チームはjitLLMをパフォーマンスにおいてllama.cppおよびOllamaの直接の競合相手として位置付けており、単一のJARファイルとして出荷されます。
TornadoVMとjitLLMの両方は、TornadoVMチームによって設立されたスピンオフであるBeestream.aiを通じて商業化されています。
詳細については、TornadoVMサイトおよびDevoxx Belgiumの最近のビデオ(例:「Tap into the NVIDIA Ecosystem from Java with TornadoVM's Hybrid API」)を参照してください。