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。