告别 CUDA!GPULlama3.java 横空出世,Java 首次实现原生 GPU 跑大模型
<p>本文已收录在Github,<strong>关注我,紧跟本系列专栏文章,咱们下篇再续!</strong></p><ul>
<li>🚀 魔都架构师 | 全网30W技术追随者</li>
<li>🔧 大厂分布式系统/数据中台实战专家</li>
<li>🏆 主导交易系统百万级流量调优 & 车联网平台架构</li>
<li>🧠 AIGC应用开发先行者 | 区块链落地实践者</li>
<li>🌍 以技术驱动创新,我们的征途是改变世界!</li>
<li>👉 实战干货:编程严选网</li>
</ul>
<h2 id="0-前言">0 前言</h2>
<p>曼彻斯特大学 Beehive Lab 发布 GPULlama3.java,这是首个支持 GPU 自动加速的 Java 原生 Llama3 实现。该项目基于 TornadoVM,让开发者无需编写 CUDA 或原生代码,即可在 Java 中实现LLM的 GPU 推理。这有望彻底改变 Javaer 在企业环境中构建 AI 应用的方式。</p>
<h2 id="1-gpullama3java-的核心">1 GPULlama3.java 的核心</h2>
<p>TornadoVM —— 一款创新的异构编程框架,它扩展了 OpenJDK 和 GraalVM,使 Java 程序能自动在 GPU、FPGA 以及多核 CPU 加速运行。与传统 GPU 编程方式不同,TornadoVM 无需手动重写 CUDA 或 OpenCL 代码,开发者可完全用 Java 编写逻辑,TornadoVM 负责底层加速。</p>
<p>根据 TornadoVM 官方文档 的介绍,该系统通过扩展 Graal JIT 编译器,添加专用后端,在运行时将 Java 字节码转换为 GPU 可执行代码。只需用 <code>@Parallel</code> 注解标记方法,TornadoVM 就能将普通 Java 字节码转换为 Graal 中间表示(IR),应用 GPU 优化策略,并生成目标平台代码,如 OpenCL C(跨平台)、PTX(NVIDIA)或 SPIR-V(二进制格式,支持 Intel 显卡)。</p>
<pre><code class="language-java">// 来自 TornadoVM 文档的 TaskGraph 示例
TaskGraph taskGraph = new TaskGraph("computation")
.transferToDevice(DataTransferMode.FIRST_EXECUTION, data)
.task("process", MyClass::compute, input, output)
.transferToHost(DataTransferMode.EVERY_EXECUTION, output);
TornadoExecutionPlan executor = new TornadoExecutionPlan(taskGraph.snapshot());
executor.execute();
</code></pre>
<p>根据 TornadoVM 编程指南,开发者可用与硬件无关的 API,在不同硬件平台上运行相同的 Java 代码。TornadoVM 运行时会自动处理所有设备相关的优化、内存管理和数据传输。</p>
<h2 id="2-支持后端">2 支持后端</h2>
<p>GPULlama3.java 支持三种主要后端,可运行在多种硬件:</p>
<ul>
<li><strong>NVIDIA 显卡</strong>:支持 OpenCL 和 PTX 两种后端</li>
<li><strong>Intel 显卡</strong>:包括 Arc 独显和集成的 HD Graphics,支持 OpenCL</li>
<li><strong>Apple Silicon</strong>:M1/M2/M3 可通过 OpenCL 运行(但由于 Apple 已弃用 OpenCL,未来将转向 Metal)</li>
</ul>
<p>项目运行时可通过命令行参数配置:</p>
<pre><code class="language-bash"># 使用 GPU 加速运行(项目 README 示例)
./llama-tornado --gpu --verbose-init --opencl --model beehive-llama-3.2-1b-instruct-fp16.gguf --prompt "Explain the benefits of GPU acceleration."
</code></pre>
<p>该项目依赖 Java 的现代功能,具体包括:</p>
<ul>
<li>要求 <strong>Java 21 及以上版本</strong>,以使用 Vector API 和 Foreign Memory API</li>
<li>支持 <strong>GGUF 模型格式</strong>,方便模型打包与部署</li>
<li>支持 <strong>量化格式</strong>(Q4_0 和 Q8_0),以降低内存占用</li>
</ul>
<p>GPULlama3.java 基于 Alfonso Peterssen 的原始 LLama3.java 实现 开发,并在此基础引入 TornadoVM GPU 加速功能。正如 Peterssen 在 Devoxx 2024 大会 展示,他的工作首次实现无需原生依赖即可运行 Llama 模型。TornadoVM 团队进一步将其适配为异构加速架构。</p>
<h2 id="3-java-llm-项目">3 Java LLM 项目</h2>
<p>GPULlama3.java 的发布也使其成为 Java LLM 项目的一员,其他相关项目还包括:</p>
<ul>
<li>JLama:一个现代 Java LLM 推理引擎,支持分布式部署</li>
<li>Llama3.java:专注 CPU 优化的纯 Java 实现</li>
</ul>
<p>正如 Quarkus 官方博客关于 Java LLM 的文章 所指出的,Java 生态系统正不断拓展其 AI/机器学习能力,使开发者能够无需离开 Java 平台就能构建 LLM 驱动的应用程序。</p>
<p>TornadoVM 起源于曼彻斯特大学的研究项目,自 2013 年以来持续发展,目标是让 Java 开发者更容易使用异构计算。该框架目前仍在不断增加后端支持并进行性能优化。</p>
<h2 id="4-当前进度">4 当前进度</h2>
<p>GPULlama3.java 目前处于测试阶段,团队正在持续优化性能并收集基准测试数据。由于 Apple 弃用 OpenCL,当前在 Apple Silicon 上的性能不佳,TornadoVM 团队正在开发 Metal 后端,以提升兼容性并优化 Transformer 操作。</p>
<h2 id="5-总结">5 总结</h2>
<p>总的来说,GPULlama3.java 的发布标志着 Java 生态在 GPU 加速 LLM 推理方面迈出了重要一步。得益于 TornadoVM 的加持,Java 开发者无需跳出熟悉的开发环境,就能享受到 GPU 加速的强大计算能力。尽管目前仍在开发中,但该项目已展示出 Java 在 AI 应用中无限的可能性,特别是在对安全性、可扩展性与可维护性有高要求的企业级场景下。</p>
<p>对想要在 Java 中尝试 GPU 加速 LLM 推理的开发者而言,该项目已经 开源发布于 GitHub,并配有文档和示例,方便快速上手。</p>
<blockquote>
<p>本文由博客一文多发平台 OpenWrite 发布!</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/JavaEdge/p/18958779
頁:
[1]