Share
Embed
Transcript
36 slides
-
2026/05/30 数村憲治 © 2026 Fujitsu Limited JJUG CCC 2026 Spring
@kkzr TornadoVMが切り拓く Javaの新領域 ~ GPU活用と生成AIへの適用 -
© 2026 Fujitsu Limited 自己紹介 Jakarta EE 仕様策定委員 MicroProfile ステコミ委員
JCP Executive Committee メンバー Eclipse Foundation ボードディレクター OCX、Adoptium Summit、JakartaOneなどで登壇 Adoptium ステコミ委員 3 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited メモリアクセス・GPU制御 RAG利用
AIフレームワーク ネイティブラッパー トレーニング MCP / A2A / ACP利用 AIクラウドネイティブ化 AIリモートアクセス Vector API HAT Babylon Valhalla JCuda TensorFlow for Java FFM Deep Java Library Visual Recognition Jakarta Agentic AI MicroProfile REST Client LangChain4j Jakarta Messaging Quarkus AI Spring AI LangGraph4j Embabel Jakarta Transactions Jakarta Query Jakarta Data Jakarta Security Jakarta Restful Web Services Jakarta RPC MicroProfile Fault Tolerance MicroProfile Telemetry MicroProfile Config Jakarta Websocket Jakarta Config Agentic AI Tornado VM Java X AI 関連技術 Landscape 2025年版 5 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited メモリアクセス・GPU制御 RAG利用
AIフレームワーク ネイティブラッパー トレーニング MCP / A2A / ACP利用 AIクラウドネイティブ化 AIリモートアクセス Vector API HAT Babylon Valhalla JCuda TensorFlow for Java FFM Deep Java Library Visual Recognition Jakarta Agentic AI MicroProfile REST Client LangChain4j Jakarta Messaging Quarkus AI Spring AI LangGraph4j Embabel Jakarta Transactions Jakarta Query Jakarta Data Jakarta Security Jakarta Restful Web Services Jakarta RPC MicroProfile Fault Tolerance MicroProfile Telemetry MicroProfile Config Jakarta Websocket Jakarta Config Agentic AI Tornado VM Java X AI 関連技術 Landscape 2025年版 本日のターゲット 6 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited AIによる計算需要 https://arxiv.org/abs/1706.03762
Figure 1:The Transformer - model architecture. 各フェーズで大量の行列計算 Attention 𝑄 𝐾 𝑉 = softmax 𝑄𝐾𝑇 𝑑𝑘 𝑉 Attention例: Transformerアーキテクチャ GPUの需要増加 7 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited CPUとGPU CPU
GPU PCI-e ノースブリッジ メモリコントローラ メインメモリ グローバルメモリ 8 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited CPUプログラミングとGPUプログラミング CPU
GPU PCI-e ノースブリッジ メモリコントローラ メインメモリ グローバルメモリ スレッドレベルの計算 並列 並行計算 ・Vector API ・並列ストリーム ・バーチャルスレッド ・ 9 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited GPUプログラミング用語 カーネル:プログラムの最少単位
スレッド:カーネルを実行する最少単位 ブロック(Work Group):スレッドの集合 グリッド(NDRange):ブロックの集合、処理範囲 ホスト:CPU側 デバイス:GPU側 10 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited CUDAの例 void
vectoradd(const float *a, const float *b, float *c, int n) { int i = blockIdx.x * BlockDim.x + threadIdx.x; if (i < n) { c[i] = a[i] + b[i]; } } void main() { ・・・ vectorAdd<<<M, N>>>(d_a, d_b, d_c, M*N); ・・・ } 1つのスレッドが実行する処理 →カーネル 範囲(ND-Range)は、 呼出し元で指定する 11 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited パラダイムシフト GPUプログラミングはCPUプログラミングの延長ではない
JavaでGPUプログラミングするには、 新しいプログラミングパラダイムが必要 OpenJDKでは、BabylonのCode Reflectionが該当 12 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited TornadoVMとは Javaプログラムを、CPU/GPU/FPGA向けに動的コンパイル
CUDAやOpenCLのコードを書かなくてよい OpenCL CやNVIDIA PTXのコードをJITで生成 主要なOpenJDKや、GraalVMにプラグイン可能 マンチェスター大学で2017年より開発 OpenJDKのプロジェクトではない 現バージョンは4.0で実運用でも使われている JVMに対するプラグイン 14 https://www.tornadovm.org/ -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited TornadoVMデザイン Task
データフロー メモリハンドラ デバイスドライバ スケジューラ オーケストレータ Execution Plan JIT OpenCL PTX SPIR-V バイトコード生成 開発者用API TornadoVM ランタイム TaskGraph グラフ最適化 実行エンジン コンパイラ拡張 (JVMCI) 15 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited TaskGraph var
taskGraph = new TaskGraph(“inference”) .transferToDevice(DataTransferMode.FIRST_EXECUTION, weights) .transferToDevice(DataTransferMode.EVERY_EXECUTION, input) .task(“forward”, Model::forward, weights, input, output) .transferToHost(DataTransferMode.EVERY_EXECUTION, output); 毎回コピー 最初の1度だけコピー アウトプットのコピーは毎回実施 タスクとして実行するメソッド 16 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited TornadoExecutionPlan ImmutableTaskGraph
immutableTaskGraph = taskGraph.snapshot(); try (var executionPlan = new TornadoExecutionPlan(immutableTaskGraph)) { executionPlan .withProfiler(ProfilerMode.CONSOLE) .execute(); } どのように実行するかを記載 例:プロファイラ、ウォームアップ、デバイス JITで再翻訳されないようにimmutable版を使う 17 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited @Parallel public
static void vectorMultiply( FloatArray a, FloatArray b, FloatArray result) { for (@Parallel int i = 0 ; i < result.getSize() ; i++) { result.set(i, a.get(i) * b.get(i) ); } } ループ内を自動的に並列化 イテレーションで依存性がないことが前提 ND-Range実行をOpenCLやCUDAにマッピング FFMを使ったオフヒープの型 TaskGraphのtaskに指定するメソッドの定義 18 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited Kernel API
// Loop over all tiles along the K dimension int numTiles = size / TS; for (int t = 0; t < numTiles; t++) { // Each thread loads ONE element of the tile into local memory int tiledRow = TS * t + row; int tiledCol = TS * t + col; aSub[col * TS + row] = A.get(tiledCol * size + globalRow); bSub[col * TS + row] = B.get(globalCol * size + tiledRow); // BARRIER: Wait for ALL threads to finish loading the tile context.localBarrier(); // Compute partial dot product using the cached tile for (int k = 0; k < TS; k++) { sum += aSub[k * TS + row] * bSub[col * TS + k]; } // BARRIER: All threads finished computing before loading next tile context.localBarrier(); } // Store the final accumulated result C.set((globalCol * size) + globalRow, sum); 19 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited Babylon/HAT v.s.
TornadoVM Babylon/HAT TornadoVM コード変換 Code Reflection (JEP draft 8361105) JIT 記述レベル 低レベル NDRangeを意識したカーネル記述 高レベル TaskGraphと並列指示 メモリ管理 FFMで低レベルの制御 ランタイムがJavaヒープ とGPU間を転送 開発場所 OpenJDK マンチェスター大学 精度(fp16等) Valhalla依存 独自実装 20 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited TornadoVM 採用例
EU & UKRI ファンドプロジェクト AERO (https://aero-project.eu/) P2CODE (https://p2code-project.eu/) ENCRYPT (https://encrypt-project.eu/) TANGO (https://tango-project.eu/) E2Data (https://e2data.eu/) GAIA (https://www.esa.int/Science_Exploration/Space_Science/Gaia) European Space Agency (ESA) 21 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited トークン数の急増 データソース:https://blog.google/company-news/inside-google/message-ceo/
https://www.morganstanley.com/insights/articles/nvidia-jensen-huang-compute-new-economic-engine-tmt-2026 Agentic AI can consume 1 million times more tokens than a standard generative prompt , which is causing compute demand to skyrocket, Huang said. トークン数増加は、性能・コストに影響 23 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited 学習と推論の非対称性 https://x.com/nvidia/status/2039767180158406961
"The inflection point for inference has arrived." — Jensen Huang, Founder & CEO of NVIDIA 学習と推論の非対称性が逆転 アプリケーションに近い所で実施される 推論の比重が高まる 企業アプリケーションで使われているJavaでの推論への期待 安定、性能、セキュリティ・ ・ ・ 24 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited リモートLLM (クラウドサービス)
ローカル 推論 プログラム モデル プロンプト REST API ChatGPT Gemini Claude ・・・ リモート 25 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited ローカルLLM (REST接続)
推論 プログラム プロンプト REST API llama.cpp Ollama ・・・ ローカル(*) ローカル(*) (*) 同一マシン、または、ローカルネットワーク モデル 26 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited ローカルLLM (プログラム呼出し)
推論 プログラム プロンプト 関数・メソッドコール llama.cpp llama3.java GPULlama3.java ・・・ ローカル ローカル モデル ローカル 27 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited リモート v.s.
ローカル リモートLLM ローカルLLM プロセッサ GPU CPU or GPU 性能(平準) トラフィックに依存 安定 性能(ピーク) 速い マシンに依存 セキュリティ データをリモートに送信 データは閉域内 精度 良い モデル(サイズ)に依存 コスト 従量課金or定額サブスク ハードウェア価格 28 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited pure Java
推論スタック LangChain4j Javaアプリケーション TornadoVM GPULlama3.java Vector API GPU PTX/CUDA JVMCI FFM OpenCL CPU SPIR-V GPUバックエンド Metal Javaコア推論 29 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited GPULlama3.java Llama3モデルなど(※)の推論をGPU上で実施
TornadoVMが必須 Llama3.javaをベースにpure Javaで実装 FP16、Q8_0、Q4_0量子化サポート (*) サポートモデル Llama3、Mistral、Devstral 2、Qwen2.5、Qwen3、Phi-3、 IBM Granite 3.2+、IBM Granite 4.0 30 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j AI-Infused
Java アプリケーションを構築するツールキット 多数のLLM/SMLとのインテグレーションを提供 一般的パターン(RAG、関数呼出し)のビルディングブロック を提供 プロンプト・メッセージ・メモリ・トークンなどの抽象化 多種多様なベクトルストアとドキュメントデータの統合 31 -
© 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j +
GPULlama3 var model = GPULlama3ChatModel.builder() .modelPath(Paths.get(“llama-3.2-1b-instruct-fp16.gguf”)) .temperature(0.9) .topP(0.9) .maxTokens(2048) .onGPU(true) .build(); var response = AiServices.create(ChatService.class, model) .chat(“Javaの歴史を教えて”); 32 -
© 2026 Fujitsu Limited ローカルLLMでの利用期待(安定、性能、セキュリティなど) TornadoVM サマリ ただし、 OpenJDKのメインストリームではない JVMCI終了への対応が課題
学習から推論へ比重変化 Java開発者のためのpure Java AIプラットフォーム GPUプログラミングに関する専門的知識はそれほどいらない (あった方がよい) 実際に使うことが可能 企業アプリケーションで多く使われているJavaへの期待 34