找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1595

积分

0

好友

202

主题
发表于 2025-12-18 18:48:27 | 查看: 42| 回复: 0

TornadoVM 项目近期发布 2.0 版本,这是该开源项目的重要里程碑。TornadoVM 旨在为 Java 提供异构硬件运行时,让 JVM 团队可以更容易把计算密集型任务迁移到加速器上运行。对于正在 JVM 生态上构建大模型方案的团队来说,这次更新尤其值得关注。

TornadoVM 是什么:给 Java 增加异构加速能力

TornadoVM 可以自动加速 Java 程序,使其在多核 CPU、GPU 以及 FPGA 上运行。它并不会替换现有 JVM,而是在现有 Java 应用之上补齐以下能力:

  • 将 Java 代码卸载(offload)到不同硬件后端执行  
  • 在 Java 堆与硬件加速器之间管理内存与数据传输
  • 负责执行计算 kernel(计算内核)

这类能力是现代云计算与机器学习工作负载的关键组件,也让 Java 生态在高性能计算方向有了更“开箱即用”的选择。

JIT 编译到多后端:OpenCL、CUDA PTX 与 SPIR-V

TornadoVM 会在运行时充当 JIT 编译器,将 Java 字节码编译到三种后端之一:

  • OpenCL C
  • NVIDIA CUDA PTX
  • SPIR-V(二进制)

开发者可以根据自身系统环境选择安装并使用对应后端。

哪些 Java 任务适合卸载到 GPU?

并非所有 Java 计算都适合 offload。一般来说,循环迭代之间没有数据依赖的 for-loop 是很好的候选,因为它们天然适合并行化。

典型适用场景包括:

  • 以矩阵为核心的机器学习/深度学习
  • 物理仿真(如 N-body 粒子计算)
  • 金融计算(如 Black-Scholes)
  • 计算机视觉、计算摄影
  • 自然语言处理、信号处理等

两种并行表达方式:Loop Parallel API 与 Kernel API

TornadoVM 提供两套互补的并行编程方式:

  1. Loop Parallel API:通过 Java 注解(如 @Parallel@Reduce)对循环做并行化
  2. Kernel API:通过 KernelContext 进行更显式的 GPU 风格编程(线程 ID、本地内存、barrier 等概念),风格接近 CUDA/OpenCL/SYCL

方式一:Loop Parallel 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/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();

纯 Java 的 LLM 推理:GPULlama3.java 与 TornadoVM

团队同时发布了一个基于 TornadoVM 的完整 LLM 推理库:GPULlama3.java。该库用纯 Java 构建,可在 GPU 上进行 LLM 推理,并强调无需外部依赖、全流程都在 Java 内完成,适合希望在 JVM 内闭环大模型推理的场景。

此外,刚发布的 GPULlama3.java v0.3.0 带来性能与易用性提升:

  • NVIDIA GPU 上 tokens/sec 约 提升 30%
  • 优化 FP16 与 Q8 的 kernel 生成
  • 新的 TornadoVM SDK 带来更简化的配置流程(减少复杂 GPU 配置)
  • 可在 NVIDIA PTX、OpenCL 上运行,并提供早期 Apple Silicon 支持
  • 增强 Quarkus 支持
  • 与 LangChain4j 集成(面向 人工智能 应用编排与落地更友好)

当前支持的模型(FP16 / 8-bit 量化)

GPULlama3.java 目前支持若干 FP16(16 位浮点)与 8-bit 量化模型,参数规模主要在个位数十亿级:

  • 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)

不同模型会构建不同的执行计划,以匹配相应的模型架构。

工程与生态:IntelliJ 插件 TornadoInsight

团队还开发了 TornadoInsight:一个面向 IntelliJ IDEA 的插件,用于增强 TornadoVM 的开发体验,帮助开发者更顺畅地在 IDE 中进行异构加速相关开发与调试。

路线图:SDKman 与 FFM API

后续路线图包括:

  • 让 TornadoVM 通过 SDKman 更易安装与管理
  • 将代码库中的 JNI 组件迁移为使用新的 FFM API

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 20:36 , Processed in 0.205152 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表