From 6f5a664d3d4ed113039891daec66bdc563cdc1da Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 13:38:22 +0200 Subject: [PATCH 1/8] Modernize gpullama3 to support jdk25 and tornadovm jdk25 --- llama-tornado | 6 +++--- pom.xml | 8 ++++---- set_paths | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/llama-tornado b/llama-tornado index c98090f8..57a50f1c 100755 --- a/llama-tornado +++ b/llama-tornado @@ -26,12 +26,12 @@ class LlamaRunner: def __init__(self): self.java_home = os.environ.get("JAVA_HOME") - self.tornado_sdk = os.environ.get("TORNADO_SDK") + self.tornado_sdk = os.environ.get("TORNADOVM_HOME") self.llama_root = os.environ.get("LLAMA_ROOT") if not all([self.java_home, self.tornado_sdk, self.llama_root]): print("Error: Required environment variables not set") - print("Please ensure JAVA_HOME, TORNADO_SDK, and LLAMA_ROOT are defined") + print("Please ensure JAVA_HOME, TORNADOVM_HOME, and LLAMA_ROOT are defined") print("Note: check set_path in root dir -> source set_path") sys.exit(1) @@ -39,7 +39,7 @@ class LlamaRunner: """Validate that required paths exist.""" paths_to_check = { "JAVA_HOME": self.java_home, - "TORNADO_SDK": self.tornado_sdk, + "TORNADOVM_HOME": self.tornado_sdk, "LLAMA_ROOT": self.llama_root, } diff --git a/pom.xml b/pom.xml index f7a88ad1..92a9cf8a 100644 --- a/pom.xml +++ b/pom.xml @@ -37,8 +37,8 @@ - 21 - 21 + 25 + 25 UTF-8 true true @@ -54,12 +54,12 @@ io.github.beehive-lab tornado-api - 2.1.0 + 3.0.0-jdk25 io.github.beehive-lab tornado-runtime - 2.1.0 + 3.0.0-jdk25 diff --git a/set_paths b/set_paths index 0f356cc8..84661272 100644 --- a/set_paths +++ b/set_paths @@ -8,13 +8,13 @@ export LLAMA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Add TornadoVM and LLaMA bin directories to PATH -export PATH="${PATH}:${TORNADO_SDK}/bin:${LLAMA_ROOT}" +export PATH="${PATH}:${TORNADOVM_HOME}/bin:${LLAMA_ROOT}" # Optional: Set JAVA_HOME if required # export JAVA_HOME=/path/to/graalvm # export PATH="${JAVA_HOME}/bin:${PATH}" -echo "[INFO] Environment configured for LLaMA3 with TornadoVM at: $TORNADO_SDK" +echo "[INFO] Environment configured for LLaMA3 with TornadoVM at: $TORNADOVM_HOME" # ===== Notes ===== # After sourcing this script: # 1. TornadoVM will be available for GPU computation From a8ac3ff6c85d1b224a8b31b82fa07ad6cec04aff Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:27:04 +0200 Subject: [PATCH 2/8] Rename TORNADO_SDK to TORNADOVM_HOME in build-and-run.yml for consistency and clarity --- .github/workflows/build-and-run.yml | 30 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-and-run.yml b/.github/workflows/build-and-run.yml index 249f6257..b14a5267 100644 --- a/.github/workflows/build-and-run.yml +++ b/.github/workflows/build-and-run.yml @@ -76,11 +76,11 @@ jobs: echo "Detected TornadoVM SDK: $FULL_SDK" # Export for current shell session - export TORNADO_SDK="$FULL_SDK" + export TORNADOVM_HOME="$FULL_SDK" export PATH="$FULL_SDK/bin:$JAVA_HOME/bin:$PATH" - + # Save for subsequent steps - echo "TORNADO_SDK=$FULL_SDK" >> $GITHUB_ENV + echo "TORNADOVM_HOME=$FULL_SDK" >> $GITHUB_ENV echo "PATH=$PATH" >> $GITHUB_ENV echo "=== Checking tornado CLI ===" @@ -89,77 +89,77 @@ jobs: - name: Build GPULlama3.java run: | cd ${{ github.workspace }} - echo "Using TORNADO_SDK=$TORNADO_SDK" - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + echo "Using TORNADOVM_HOME=$TORNADOVM_HOME" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" tornado --version ./mvnw clean package -DskipTests - name: FP16 - Run Llama-3.2-1B-Instruct-F16.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Llama-3.2-1B-Instruct-F16.gguf \ --prompt "Say hello" - name: FP16 - Run Qwen3-4B-f16.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Qwen3-4B-f16.gguf \ --prompt "Say hello" - name: FP16 - Run Mistral-7B-Instruct-v0.3.fp16.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Mistral-7B-Instruct-v0.3.fp16.gguf \ --prompt "Say hello" - name: FP16 - Run Qwen2.5-1.5b-instruct-fp16.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/qwen2.5-1.5b-instruct-fp16.gguf \ --prompt "Say hello" - name: FP16 - Run Phi-3-mini-4k-instruct-fp16.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model /$MODELS_DIR/Phi-3-mini-4k-instruct-fp16.gguf \ --prompt "Say hello" - name: Q8 - Run Llama-3.2-1B-Instruct-Q8_0.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Llama-3.2-1B-Instruct-Q8_0.gguf \ --prompt "Say hello" - name: Q8 - Run Qwen3-0.6B-Q8_0.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Qwen3-0.6B-Q8_0.gguf \ --prompt "Say hello" - name: Q8 - Run Phi-3-mini-4k-instruct-Q8_0.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Phi-3-mini-4k-instruct-Q8_0.gguf \ --prompt "Say hello" - name: Q8 - Run Qwen2.5-1.5b-instruct-q8_0.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/qwen2.5-1.5b-instruct-q8_0.gguf \ --prompt "Say hello" - name: Q8 - Mistral-7B-Instruct-v0.3.Q8_0.gguf run: | cd ${{ github.workspace }} - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" ./llama-tornado --gpu --${{ matrix.backend.name }} \ --model $MODELS_DIR/Mistral-7B-Instruct-v0.3.Q8_0.gguf \ --prompt "Say hello" From d601f6559f9242cce922b95b7348c239a9269e17 Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:27:08 +0200 Subject: [PATCH 3/8] Refactor pom.xml to support dynamic versioning and JDK profiles for JDK21 and JDK25 --- pom.xml | 100 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 92a9cf8a..c604bab4 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ io.github.beehive-lab gpu-llama3 - 0.3.1 + ${revision}${jdk.version.suffix} GPU Llama3 GPU-accelerated LLaMA3 inference using TornadoVM @@ -37,8 +37,14 @@ - 25 - 25 + + 0.3.1 + + + 3.0.0 + + 21 + 21 UTF-8 true true @@ -54,18 +60,20 @@ io.github.beehive-lab tornado-api - 3.0.0-jdk25 + ${tornadovm.version} io.github.beehive-lab tornado-runtime - 3.0.0-jdk25 + ${tornadovm.version} - + org.apache.maven.plugins maven-compiler-plugin @@ -73,12 +81,33 @@ --enable-preview - --add-modules - jdk.incubator.vector + + + org.codehaus.mojo + flatten-maven-plugin + 1.6.0 + + true + resolveCiFriendliesOnly + + + + flatten + process-resources + flatten + + + flatten.clean + clean + clean + + + + org.apache.maven.plugins @@ -103,6 +132,56 @@ + + + + jdk21 + [21,25) + + 21 + 21 + 3.0.0 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + --add-modules + jdk.incubator.vector + + + + + + + + + + jdk25 + [25.0.2,) + + 25 + 25 + 3.0.0-jdk25 + -jdk25 + + + release @@ -132,11 +211,10 @@ maven-javadoc-plugin 3.6.3 - 21 - 21 + ${maven.compiler.source} + ${maven.compiler.source} --enable-preview - --add-modules=jdk.incubator.vector --enable-preview From f9a128fb81493eddd2906c1820675a2294ee9257 Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:27:13 +0200 Subject: [PATCH 4/8] Update release preparation script to modify property directly in pom.xml --- .github/workflows/prepare-release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index e199727b..a01c1741 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -68,7 +68,9 @@ jobs: - name: Update Maven version run: | - ./mvnw versions:set -DnewVersion=${{ env.VERSION }} -DgenerateBackupPoms=false + # Update property directly; versions:set would overwrite + # the CI-friendly ${revision}${jdk.version.suffix} expression. + sed -i 's|.*|${{ env.VERSION }}|' pom.xml echo "✅ Maven version updated to ${{ env.VERSION }}" - name: Update README.md From 2f740886cba87c65db0377b84735eb851e06a579 Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:29:17 +0200 Subject: [PATCH 5/8] Enhance Maven Central deployment workflow to support multiple JDKs and improve summary output --- .github/workflows/deploy-maven-central.yml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-maven-central.yml b/.github/workflows/deploy-maven-central.yml index a30c48ef..e80a3cc5 100644 --- a/.github/workflows/deploy-maven-central.yml +++ b/.github/workflows/deploy-maven-central.yml @@ -23,12 +23,20 @@ on: jobs: deploy: - name: Deploy to Maven Central + name: Deploy to Maven Central (${{ matrix.jdk.name }}) if: github.repository == 'beehive-lab/GPULlama3.java' runs-on: [self-hosted, Linux, x64] timeout-minutes: 15 + strategy: + fail-fast: false # if one JDK fails, still attempt the other + matrix: + jdk: + - name: jdk21 + java_home: /opt/jenkins/jdks/graal-23.1.0/jdk-21.0.3 + - name: jdk25 + java_home: /opt/jenkins/jdks/jdk-25.0.2 env: - JAVA_HOME: /opt/jenkins/jdks/graal-23.1.0/jdk-21.0.3 + JAVA_HOME: ${{ matrix.jdk.java_home }} steps: - name: Checkout code @@ -99,13 +107,15 @@ jobs: - name: Deployment Summary if: ${{ !inputs.dry_run }} run: | - echo "## 🚀 Maven Central Deployment" >> $GITHUB_STEP_SUMMARY + DEPLOYED_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout 2>/dev/null) + echo "## 🚀 Maven Central Deployment (${{ matrix.jdk.name }})" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| Detail | Value |" >> $GITHUB_STEP_SUMMARY echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY - echo "| Version | ${{ steps.version.outputs.version }} |" >> $GITHUB_STEP_SUMMARY + echo "| JDK | ${{ matrix.jdk.name }} |" >> $GITHUB_STEP_SUMMARY + echo "| Version | ${DEPLOYED_VERSION} |" >> $GITHUB_STEP_SUMMARY echo "| GroupId | io.github.beehive-lab |" >> $GITHUB_STEP_SUMMARY echo "| ArtifactId | gpu-llama3 |" >> $GITHUB_STEP_SUMMARY echo "| Status | ✅ Deployed |" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "📍 [View on Maven Central](https://central.sonatype.com/artifact/io.github.beehive-lab/gpu-llama3/${{ steps.version.outputs.version }})" >> $GITHUB_STEP_SUMMARY \ No newline at end of file + echo "📍 [View on Maven Central](https://central.sonatype.com/artifact/io.github.beehive-lab/gpu-llama3/${DEPLOYED_VERSION})" >> $GITHUB_STEP_SUMMARY \ No newline at end of file From ac2b920ea7bc8c507d6653498402b5b4b204204a Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:30:43 +0200 Subject: [PATCH 6/8] Add .flattened-pom.xml to .gitignore to prevent accidental commits --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6d41b627..c8532c71 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml +.flattened-pom.xml buildNumber.properties .mvn/timing.properties .mvn/wrapper/maven-wrapper.jar From 87cca38a24465068a4bd4eb10e451aada3ca47f3 Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 14:52:10 +0200 Subject: [PATCH 7/8] Update README.md to include Maven dependency examples for JDK 25 --- .github/workflows/prepare-release.yml | 3 ++- README.md | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index a01c1741..3ff71f90 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -76,8 +76,9 @@ jobs: - name: Update README.md run: | if [ -f "README.md" ]; then - # Update version in Maven dependency example + # Update version in Maven dependency examples (handles plain X.Y.Z and X.Y.Z-jdkNN suffixes) sed -i 's|[0-9]\+\.[0-9]\+\.[0-9]\+|${{ env.VERSION }}|g' README.md + sed -i 's|[0-9]\+\.[0-9]\+\.[0-9]\+-jdk[0-9]\+|${{ env.VERSION }}-jdk25|g' README.md echo "✅ Updated README.md" fi diff --git a/README.md b/README.md index 01cf752d..f6814c3c 100644 --- a/README.md +++ b/README.md @@ -165,6 +165,7 @@ Despite being deprecated, OpenCL can still run on Apple Silicon; albeit, with ol You can add **GPULlama3.java** directly to your Maven project by including the following dependency in your `pom.xml`: +**JDK 21:** ```xml io.github.beehive-lab @@ -173,6 +174,15 @@ You can add **GPULlama3.java** directly to your Maven project by including the f ``` +**JDK 25:** +```xml + + io.github.beehive-lab + gpu-llama3 + 0.3.1-jdk25 + +``` + ## ☕ Integration with Your Java Codebase or Tools To integrate it into your codebase or IDE (e.g., IntelliJ) or custom build system (like IntelliJ, Maven, or Gradle), use the `--show-command` flag. From 5b24ec4079ce53c2995dd08d267ecaba0e83c1ef Mon Sep 17 00:00:00 2001 From: mikepapadim Date: Wed, 25 Feb 2026 15:03:15 +0200 Subject: [PATCH 8/8] Update pom.xml to reflect JDK 25 Vector API requirements and add necessary compiler arguments --- pom.xml | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index c604bab4..dff28bce 100644 --- a/pom.xml +++ b/pom.xml @@ -72,8 +72,9 @@ + --add-modules jdk.incubator.vector is added per JDK profile (see below). + The Vector API remains in jdk.incubator.vector on both JDK 21 and JDK 25 + (JEP 508 — 10th Incubator in JDK 25); the flag is required for all JDKs. --> org.apache.maven.plugins maven-compiler-plugin @@ -169,7 +170,8 @@ Auto-activates for JDK 25.0.2+ builds (minimum required version). Publishes: gpu-llama3:${revision}-jdk25 TornadoVM: 3.0.0-jdk25 - Vector API is stable in JDK25; add-modules jdk.incubator.vector not needed + Vector API is still incubating in JDK 25 (JEP 508 — 10th Incubator); + --add-modules jdk.incubator.vector is required for compilation. ─────────────────────────────────────────────────────────────────────── --> jdk25 @@ -180,6 +182,21 @@ 3.0.0-jdk25 -jdk25 + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + --add-modules + jdk.incubator.vector + + + + + @@ -205,7 +222,10 @@ - + org.apache.maven.plugins maven-javadoc-plugin @@ -215,9 +235,12 @@ ${maven.compiler.source} --enable-preview + --add-modules + jdk.incubator.vector --enable-preview + --add-modules jdk.incubator.vector false false