写点什么

TornadoVM 2.0 为 Java 提供自动 GPU 加速和 LLM 支持

  • 2025-12-18
    北京
  • 本文字数:1456 字

    阅读完需:约 5 分钟

大小:639.71K时长:03:38
TornadoVM 2.0为Java提供自动GPU加速和LLM支持

TornadoVM 项目最近达到了 2.0 版本,这是这个开源项目的一个重要里程碑,该项目旨在为 Java 提供异构硬件运行时。这个版本可能会特别吸引在 JVM 上开发 LLM 解决方案的团队。

 

该项目可以自动加速多核 CPU、GPU 和 FPGA 上的 Java 程序。它不替换现有的 JVM,而是增加了将 Java 代码卸载到后端的能力,处理 Java 和硬件加速器之间的内存管理,并运行计算内核。这种能力为现代云和机器学习工作负载提供了一个关键组件。

 

InfoQ 之前在2020年和2022年报道过这个项目。

 

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 可以像添加类型注释一样简单:

 

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));     } }
复制代码

 

而内核上下文风格显式地将 TaskGraph 构建为 Java 对象,如下所示:

 

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();
复制代码

 

团队还提供了一个完整的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。

 

原文链接:

https://www.infoq.com/news/2025/12/tornadovm-20-gpu-llm/

2025-12-18 14:002

评论

发布
暂无评论

全链路业务追踪落地实践方案

云智慧AIOps社区

运维 AIOPS 解决方案 全链路追踪

如何化解35岁危机?华为云数据库首席架构师20年技术经验分享

华为云开发者联盟

中年危机 经验分享 华为云

优酷 Android 包瘦身治理思路全解

阿里巴巴文娱技术

治理 包大小

即构「畅直播」上线!提供全链路升级的一站式直播服务

ZEGO即构

架构实战营 第 6 期 毕业总结

火钳刘明

如何实现一套容器(C 语言版)2

祖维

c 容器 泛型 迭代器 双向链表

《各行业零代码企业应用案例集锦》正式发布

明道云

Datakit 代理实现局域网数据统一汇聚

观测云

超大规模AI异构计算集群的设计和优化

Baidu AICLOUD

大模型训练 异构计算

【6.16-6.24】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

车白兔:洗车新模式共享自助洗车

共享电单车厂家

自助洗车 自助洗车加盟 车白兔洗车

在shiro基础上整合jwt,可在项目中直接使用呦

阿Q说代码

springboot Java EE 权限验证 shiro整合jwt

面试官:你说你精通Redis,你看过持久化的配置吗?

阿Q说代码

redis aof rdb 数据持久化

架构实战营 第 6 期 毕业设计

火钳刘明

#架构实战营 「架构实战营」

TDengine可通过数据同步工具 DataX读写

TDengine

数据库 tdengine 时序数据库 DataX

共享智能自助洗车现在市场如何

共享电单车厂家

自助洗车加盟 自助洗车市场 共享智能自助洗车

openGauss内核:简单查询的执行

华为云开发者联盟

数据库 互联网 华为云

一文理解OpenStack网络

华为云开发者联盟

后端 网络

共享自助洗车24小时不打烊受青睐

共享电单车厂家

共享自助洗车 自助洗车 自助洗车加盟

Redis+Caffeine两级缓存,让访问速度纵享丝滑

码农参上

redis 缓存 JAVA开发 Caffeine

Bytebase加入阿里云PolarDB开源数据库社区

阿里云数据库开源

阿里云 开源数据库 polarDB PolarDB-X 阿里云数据库

Guava中这些Map的骚操作,让我的代码量减少了50%

码农参上

JAVA开发 Guava java工具包

心楼:华为运动健康的七年筑造之旅

脑极体

共享洗车机多少钱一台?看品牌

共享电单车厂家

自助洗车机价格 自助洗车加盟 共享洗车机多少钱

无界共创,明道云参与广汽本田IT新技术展

明道云

解密安卓微信聊天信息存储

ooooooh灰灰

Go sqlite 微信 后端 SqlCipher

车白兔:自助共享洗车机哪家好

共享电单车厂家

自助洗车机 自助洗车加盟 车白兔自助洗车

如何做到全彩户外LED显示屏节能环保

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏

建木持续集成平台v2.5.0发布

Jianmu

开源 DevOps CI/CD Worker 建木CI

应用实践 | 海量数据,秒级分析!Flink+Doris 构建实时数仓方案

SelectDB

数据库 flink 数据分析 Doris 数仓

图像搜索应用场景(个人见解,欢迎补充)

Geek_e369a5

什么是图像搜索 图像搜索的应用场景 拍照购物用图像搜索的作用

TornadoVM 2.0为Java提供自动GPU加速和LLM支持_框架_Ben Evans_InfoQ精选文章