TornadoVM 2.0 為 Java 帶來自動 GPU 加速與大語言模型(LLM)支持
TornadoVM 項目近日發佈了 2.0 版本,這是這個 開源項目 的一個重要里程碑。該項目旨在為 Java 提供一個可在異構硬件上運行的執行環境,這次更新對在 JVM 上開發大語言模型(LLM)解決方案的團隊尤其有吸引力。
TornadoVM 可以讓 Java 程序自動在多核 CPU、GPU 和 FPGA 上加速運行。它並不會替代現有的 JVM,而是通過擴展,使得 Java 代碼可以被分發到後端硬件執行,同時管理 Java 與硬件加速器之間的內存,並負責運行計算核心(compute-kernel)。這一能力是現代雲計算和機器學習工作負載中的關鍵組件。
InfoQ 曾在 2020 年 和 2022 年 報道過該項目的進展。
TornadoVM 會在運行時(作為一個 JIT 編譯器)將 Java 字節碼編譯為三種後端之一:OpenCL C、NVIDIA CUDA PTX 或 SPIR-V 二進制格式。開發者可以根據自己的系統環境選擇要安裝和運行的後端。
需要注意的是,並非所有 Java 計算都適合通過 TornadoVM 加速。例如,那些循環中每次迭代之間沒有依賴關係的 for 循環,是非常理想的加速對象,因為它們可以被並行計算。
特別是基於矩陣的應用,如機器學習和深度學習,非常適合這種並行模式。其他典型的例子包括物理模擬(如 N-body 粒子計算)、金融算法(如 Black-Scholes 模型)、以及計算機視覺、計算攝影、自然語言處理和信號處理等領域的應用。
TornadoVM 提供兩種互補的方式來表達並行性:
- 循環並行 API(Loop Parallel API):使用 Java 註解(如
@Parallel和@Reduce)來自動並行化循環; - 內核 API(Kernel API):使用
KernelContext顯式編寫 GPU 風格代碼(可訪問線程 ID、本地內存、同步屏障等),風格類似於 CUDA/OpenCL/SYCL。
循環並行 API 的用法非常簡單,例如:
public static void vectorMul(FloatArray a, FloatArray b, FloatArray result) {
for (@Parallel int i = 0; i < result.getSize(); i++) {
result.set(i, a.get(i) * b.get(i));
}
}
而使用內核上下文(Kernel Context)的方式則更接近顯式任務圖(TaskGraph)的構建,例如:
var taskGraph = new TaskGraph("multiply")
.transferToDevice(DataTransferMode.FIRST_EXECUTION, a, b)
.task("vectorMul", Example::vectorMul, a, b, result)
.transferToHost(DataTransferMode.EVERY_EXECUTION, result);
var snapshot = taskGraph.snapshot();
new TornadoExecutionPlan(snapshot).execute();
此外,TornadoVM 團隊還推出了一個 完整的 LLM 推理庫 —— GPULlama3.java,它完全用 Java 編寫,可在 GPU 上運行 LLM 推理,無需任何外部依賴。
該庫剛發佈的 v0.3.0 版本帶來了顯著的性能和易用性提升:
- 在 NVIDIA GPU 上性能提升約 30%(tokens/sec)
- 優化了 FP16 和 Q8 內核生成
- 藉助新的 TornadoVM SDK,安裝和配置更加簡單,無需複雜的 GPU 設置
- 支持 NVIDIA PTX、OpenCL,並初步支持 Apple Silicon
- 增強了 Quarkus 支持
- 支持與 LangChain4j 集成
GPULlama3.java 目前支持多種 FP16(16 位浮點)和 8 位量化模型,參數量在十億級別以內,包括:
- Llama 3.2 (1B) – FP16
- Llama 3.2 (3B) – FP16
- Llama 3 (8B) – FP16
- Mistral (7B) – FP16
- Qwen3 (0.6B) – FP16
- Qwen3 (1.7B) – FP16
- Qwen3 (4B) – FP16
- Qwen3 (8B) – FP16
- Phi-3-mini-4k – FP16
- Qwen2.5 (0.5B)
- Qwen2.5 (1.5B)
- DeepSeek-R1-Distill-Qwen (1.5B)
根據所選模型的不同,系統會自動構建相應的執行計劃,以匹配模型架構。
該項目由 Beehive 實驗室 主導開發,隸屬於 曼徹斯特大學高級處理器技術組(Advanced Processor Technologies Group),專注於軟硬件協同設計。
團隊還開發了 TornadoInsight —— 一個 IntelliJ IDEA 插件,用於提升 TornadoVM 的開發體驗。
未來規劃中,團隊計劃將 TornadoVM 上架 SDKman,並將代碼庫中的 JNI 組件遷移至新的 FFM API。