
曼彻斯特大学蜂巢实验室发布 GPULlama3.java,首个支持 GPU 加速的 Java 原生 Llama3 实现。该项目利用 TornadoVM,让开发者无需编写 CUDA 或原生代码即可实现 GPU 加速的大语言模型推理,这可能会彻底改变 Java 开发者在企业环境中开发 AI 应用的方式。
GPULlama3.java 的核心是 TornadoVM,一个创新的异构编程框架,扩展了 OpenJDK 和 GraalVM,能够自动将 Java 程序加速运行在 GPU、FPGA 和多核 CPU 上。与传统的 GPU 编程方法不同,传统方法要求开发者手动将代码重写为 CUDA 或 OpenCL 等低级语言,而 TornadoVM 能够在保持所有代码为纯 Java 的情况下实现 GPU 加速。
TornadoVM 的文档提到,该系统扩展了 Graal JIT 编译器,添加了专门的后端,这些后端在运行时将 Java 字节码转换为 GPU 兼容的代码。当使用注解(如 @Parallel
)标记一个方法时,TornadoVM 的编译管道会将标准 Java 字节码通过 Graal 中间表示进行转换,应用 GPU 特定的优化,并生成特定的目标代码,无论是用于跨平台兼容的 OpenCL C、用于 NVIDIA GPU 的 PTX 汇编代码,还是用于 Intel 图形的 SPIR-V 二进制代码。
TornadoVM 编程指南详细阐述了开发者如何利用硬件无关的 API 在各种硬件加速器上以相同的方式运行相同的 Java 代码。TornadoVM 运行时会自动处理所有特定于设备的优化、内存管理和数据传输等问题。
从 GPULlama3.java 代码库可以看到,该项目支持三种主要后端,能够在不同硬件上执行:
NVIDIA GPU:通过 OpenCL 和 PTX 后端提供全面支持;
Intel GPU:包括 Arc 独立显卡和集成 HD Graphics,通过 OpenCL 后端提供支持;
Apple Silicon:通过 OpenCL 支持 M1/M2/M3(尽管 Apple 已经弃用了 OpenCL,转而支持 Metal)。
代码库指出,配置是通过命令行标志来处理的:
GPULlama3.java 实现利用了现代 Java 特性,如文档中所述:
需要 Java 21+:支持 Vector API 和 Foreign Memory API;
支持 GGUF 格式:用于单文件模型部署;
支持量化:支持 Q4_0 和 Q8_0 格式,以减少对内存的需求。
该项目基于 Mukel 的原始 Llama3.java,通过集成 TornadoVM 添加了 GPU 加速功能。
GPULlama3.java 加入了其他 Java LLM 项目,包括:
JLama:一个具有分布式能力的现代 Java LLM 推理引擎;
Llama3.java:原始的纯 Java 实现,专注于 CPU 优化。
该项目是开源的,并且可以在 GitHub 上访问,它附带了文档和示例,对于有兴趣探索 Java GPU 加速 LLM 推理的开发者来说,这是一个不错的入门资源。
原文链接:
评论