
TornadoVM 项目最近达到了 2.0 版本,这是这个开源项目的一个重要里程碑,该项目旨在为 Java 提供异构硬件运行时。这个版本可能会特别吸引在 JVM 上开发 LLM 解决方案的团队。
该项目可以自动加速多核 CPU、GPU 和 FPGA 上的 Java 程序。它不替换现有的 JVM,而是增加了将 Java 代码卸载到后端的能力,处理 Java 和硬件加速器之间的内存管理,并运行计算内核。这种能力为现代云和机器学习工作负载提供了一个关键组件。
TornadoVM 在运行时编译 Java 字节码(作为 JIT 编译器)到三种后端之一:OpenCL C、NVIDIA CUDA PTX 和 SPIR-V 二进制。开发者可以根据他们的特定系统选择安装和运行哪些后端。
请注意,并非所有类型的 Java 计算都适合卸载到 TornadoVM。例如,具有 For 循环且迭代之间没有依赖关系的工作负载是非常好的候选,因为它们允许并行计算。
特别是,基于矩阵的应用程序,如机器学习和深度学习是很好的候选。这种模式的其他好例子包括物理模拟(例如,N 体粒子计算)、金融应用如 Black-Scholes,以及计算机视觉、计算摄影、自然语言处理和信号处理等领域的一系列应用。
TornadoVM 提供了两种互补的方式来表达并行性:循环并行 API,它使用 Java 注解,如 @Parallel和@Reduce 来并行化循环,以及内核 API,它使用 KernelContext 进行显式的 GPU 风格编程(带有线程 ID、局部内存、可用的屏障等概念),类似于 CUDA/OpenCL/SYCL。
循环并行 API 可以像添加类型注释一样简单:
而内核上下文风格显式地将 TaskGraph 构建为 Java 对象,如下所示:
团队还提供了一个完整的LLM推理库,它是用纯 Java 构建的,提供 GPU 上的 LLM 推理,全部用 Java 编写,没有外部依赖。
刚刚发布的 GPULlama3.java v0.3.0 版本带来了显著的性能和可用性提升。
在 NVIDIA GPU 上性能提升了约 30%(每秒令牌数)
优化了 FP16 和 Q8 内核生成。
由于新的 TornadoVM SDKs,设置更简单——无需复杂的 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 实验室领导,该实验室是曼彻斯特大学高级处理器技术组的一部分,专门从事硬件/软件解决方案的协同设计。
该团队还开发了 TornadoInsight,这是一个IntelliJ IDEA 插件,它增强了开发者在使用 TornadoVM 时的体验。
未来的路线图工作包括使 TornadoVM 在SDKman上可用,并将代码库中的 JNI 组件迁移到使用新的 FFM API。
原文链接:







评论