beehive-lab/TornadoVM
Write Java. Run on GPUs. Fast.
🌪️ TornadoVM – GPU 上的 Java
是什么 – TornadoVM 是一个开源运行时,允许你编写 纯 Java 内核,并在 GPU(NVIDIA、AMD、Intel、Apple Silicon)或多核 CPU 上执行。运行时会将 Java 字节码 JIT 编译为目标设备的原生 GPU 语言(CUDA PTX、OpenCL C 或 Apple Metal MSL),并自动处理所有主机-设备间的数据传输。在 NVIDIA 硬件上,它还能直接调用 CUDA 库栈(cuBLAS、cuFFT、cuDNN),甚至暴露 Tensor-Core 的 mma.sync 内联函数,全部通过 Java 代码实现。
🎯 核心理念
| 理念 | 如何工作 |
|---|---|
| 一次编写,随处运行 | 使用 CUDA 风格的线程索引(ctx.globalIdx)编写 Java 内核,或简单地用 @Parallel 注解循环。TornadoVM 构建一个 TaskGraph,可分派到任意后端(OpenCL、CUDA、Metal、CPU)。 |
| JIT 编译 | Java 字节码 → Graal IR → 后端特定源码(CUDA PTX / OpenCL C / MSL)→ 运行时编译器(NVRTC、OpenCL 驱动、Metal)→ 针对实际数据大小优化的原生 GPU 二进制文件。 |
| 零 JNI 桩代码 | 无需手动编写原生包装器;运行时自动生成原生代码并链接到 Java 进程。 |
| 原生 CUDA 生态系统集成 | 生成的内核与库调用(cublasSgemv、FFT、cuDNN 操作、Tensor-Core 内联函数)共享设备缓冲区和 CUDA 流。你可以在同一图中混合自定义 Java 内核和厂商优化的库任务。 |
| CUDA 图捕获 | 整个图(内核、库调用、传输)可一次性录制并用单个 cuGraphLaunch 重放,启动开销接近手写 CUDA。 |
🚀 典型应用场景
| 领域 | 示例项目 |
|---|---|
| 大语言模型推理 | GPULlama3.java 在 RTX 5090 上以约 117 tokens/s 的速度运行 Llama-3、Qwen-3、Mistral 等模型,纯 Java 实现,已被 LangChain4j 和 Quarkus 使用。 |
| 实时图形 | TornadoVM-Ray-Tracer 展示了完全用 Java 编写的交互式光线追踪。 |
| 计算机视觉 / 3D 重建 | kfusion-tornadovm 在 GPU 上实现了 KinectFusion 流水线。 |
| 科学/工程代码 | 线性代数内核(SGEMV/SGEMM)、FFT、物理模拟、金融建模 – 全部受益于 cuBLAS/cuFFT 加速。 |
| 通用数据并行工作负载 | 任何“极易并行”的循环都可以用 @Parallel 注解,并在不重写算法的前提下卸载到 GPU 或 CPU。 |
📦 快速入门
- 安装 –
sdk install tornadovm(选择opencl、cuda、metal或full)。 - 验证设备 –
tornado --devices。 - 运行示例 –
java @$TORNADOVM_HOME/tornado-argfile \ -cp $TORNADOVM_HOME/share/java/tornado/tornado-examples-5.2.0.jar \ uk.ac.manchester.tornado.examples.compute.MatrixVectorRowMajor - 添加到 Maven 项目 –
<dependency> <groupId>io.github.beehive-lab</groupId> <artifactId>tornado-api</artifactId> <version>5.2.0-jdk21</version> </dependency> - 编写内核 – 使用低级
KernelContextAPI(如 README 所示)或高级@Parallel注解。构建TaskGraph,可选地添加库任务(CuBlas::cublasSgemv等),并通过TornadoExecutionPlan执行。
🛠️ 主要特性
- 多后端支持:OpenCL、CUDA、Metal,以及 CPU 回退。
- 原生 NVIDIA 库支持:cuBLAS/cuBLASLt、cuFFT、cuDNN(含 flash-attention)、Tensor-Core 内联函数。
- TaskGraph 抽象 – 声明式数据传输、内核启动和库调用。
- CUDA 图捕获,实现低开销重复执行。
- 跨平台:支持 Linux、macOS、Windows;通过 OpenCL 支持集成 GPU 和 FPGA。
- SDKMAN! 分发版 和 Docker 镜像,便于快速部署。
- Apache 2.0 API + GPLv2-CE 运行时 – 商业使用宽松。
👥 社区与支持
- Slack: https://join.slack.com/t/tornadovmcommunity/...
- GitHub Discussions: https://github.com/beehive-lab/TornadoVM/discussions
- 问题追踪:标有“good first issue”标签,适合新手参与。
- 文档:ReadTheDocs 站点提供编程指南、基准测试指南和 API 参考。
- 学术与产业合作:参与 NVIDIA Inception 计划,获 Intel、欧盟、UKRI 等资助。
📜 许可证
- Tornado-API 及大多数模块 – Apache 2.0(你的代码无 copyleft 要求)。
- 运行时和驱动 – GPLv2 with Classpath Exception(与 OpenJDK 相同),对下游应用也无 copyleft 要求。
总结 – TornadoVM 将原生 GPU 代码的性能带入 Java 生态系统,无需你自己编写 CUDA 或 OpenCL。它是一个真实、可投入生产的项目,已被用于 LLM 推理、光线追踪和科学计算。
相关
- 项目
- Dispatch
- 项目
- 项目
- 项目