BT

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Topics

Choose your language

InfoQ Homepage News GPULlama3.java Brings GPU-Accelerated LLM Inference to Pure Java

GPULlama3.java Brings GPU-Accelerated LLM Inference to Pure Java

Listen to this article -  0:00

The University of Manchester's Beehive Lab has released GPULlama3.java, marking the first Java-native implementation of Llama3 with automatic GPU acceleration. This project leverages TornadoVM to enable GPU-accelerated large language model inference without requiring developers to write CUDA or native code, potentially transforming how Java developers approach AI applications in enterprise environments.

At the heart of GPULlama3.java lies TornadoVM, an innovative heterogeneous programming framework that extends OpenJDK and GraalVM to automatically accelerate Java programs on GPUs, FPGAs, and multi-core CPUs. Unlike traditional GPU programming approaches that require developers to rewrite code in low-level languages like CUDA or OpenCL manually, TornadoVM enables GPU acceleration while keeping all code in pure Java.

According to the TornadoVM documentation, the system works by extending the Graal JIT compiler with specialized backends that translate Java bytecode to GPU-compatible code at runtime. When a method is marked for acceleration using annotations like @Parallel, TornadoVM's compilation pipeline converts standard Java bytecode through Graal's Intermediate Representation, applies GPU-specific optimizations, and generates target-specific code—whether that's OpenCL C for cross-platform compatibility, PTX assembly for NVIDIA GPUs, or SPIR-V binary for Intel graphics.

 // TornadoVM Task-Graph API example from documentation 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();

The TornadoVM programming guide demonstrates how developers can utilize hardware-agnostic APIs, enabling the same Java source code to run identically on various hardware accelerators. The TornadoVM runtime handles all device-specific optimizations, memory management, and data transfers automatically.

According to the GPULlama3.java repository, the project supports three primary backends, enabling execution across diverse hardware:

  • NVIDIA GPUs: Full support through both OpenCL and PTX backends
  • Intel GPUs: Including Arc discrete graphics and integrated HD Graphics through the OpenCL backend
  • Apple Silicon: M1/M2/M3 support through OpenCL (though Apple has deprecated OpenCL in favour of Metal)

The repository indicates that configuration is handled through command-line flags:

 # Run with GPU acceleration (from project README) ./llama-tornado --gpu --verbose-init --opencl --model beehive-llama-3.2-1b-instruct-fp16.gguf --prompt "Explain the benefits of GPU acceleration."

The GPULlama3.java implementation leverages modern Java features as documented in the repository:

  • Java 21+ requirement for Vector API and Foreign Memory API support
  • GGUF format support for single-file model deployment
  • Quantization support for Q4_0 and Q8_0 formats to reduce memory requirements

The project builds upon Alfonso Peterssen's original LLama3.java implementation, adding GPU acceleration capabilities through TornadoVM integration. As Peterssen presented at Devoxx 2024, his work pioneered the ability to run Llama models without native dependencies. The TornadoVM team has adapted this foundation to leverage GPU acceleration through their heterogeneous computing framework.

GPULlama3.java joins other Java LLM projects, including:

  • JLama: A modern LLM inference engine for Java with distributed capabilities
  • Llama3.java: The original pure Java implementation focusing on CPU optimization

As noted in Quarkus's blog on Java LLMs, the Java ecosystem is expanding its AI/ML capabilities, enabling developers to build LLM-powered applications without leaving the Java platform.

TornadoVM originated from research at the University of Manchester, aiming to make heterogeneous computing accessible to Java developers. The framework has been in development since 2013 and continues to progress with new backend support and optimizations.

GPULlama3.java is currently in beta, with ongoing performance optimization and benchmark collection. The performance on Apple Silicon remains suboptimal due to the deprecation of OpenCL. The TornadoVM team is developing a Metal backend to enhance support for Apple Silicon, optimizing transformer operations and broadening model architecture compatibility.

GPULlama3.java represents a significant advancement in bringing GPU-accelerated large language model (LLM) inference to the Java ecosystem. By leveraging TornadoVM, the project demonstrates that Java developers can utilize GPU acceleration without leaving their familiar programming environment. While performance optimization continues and the project remains in active development, it opens up new possibilities for Java-based AI applications in enterprise settings, where Java's strengths in security, scalability, and maintainability are highly valued.

For developers interested in exploring GPU-accelerated LLM inference in Java, the project is open source and accessible on GitHub, complete with documentation and examples to help get started.

Edit:
This article has been updated to include attribution for Alfonso Peterssen's LLama3.java project, which served as the foundation for the work described. (Updated on June 26, 2025)

About the Author

BT