Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions .github/actions/run-inference/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Run Inference
description: Run one llama-tornado inference pass and write the metrics + sidecar files.

inputs:
backend:
description: 'GPU backend (opencl or ptx)'
required: true
model_file:
description: 'Model filename inside $MODELS_DIR (e.g. Llama-3.2-1B-Instruct-F16.gguf)'
required: true
model:
description: 'Human-readable model name for the sidecar (e.g. Llama-3.2-1B-Instruct)'
required: true
quantization:
description: 'Quantization type (e.g. F16, Q8_0)'
required: true
configuration:
description: 'Configuration key for the sidecar (e.g. standard, prefill-decode)'
required: true
flags:
description: 'Extra CLI flags passed to llama-tornado (omit for standard run)'
required: false
default: ''
metrics_file:
description: 'Absolute path for the output metrics JSON file'
required: true
prompt:
description: 'Prompt to pass to the model'
required: false
default: 'Say hello'

runs:
using: composite
steps:
- name: Run inference
shell: bash
working-directory: ${{ github.workspace }}
env:
JAVA_TOOL_OPTIONS: >-
-Dllama.metrics.format=json
-Dllama.metrics.output=file
-Dllama.metrics.file=${{ inputs.metrics_file }}
METRICS_FILE: ${{ inputs.metrics_file }}
run: |
# Run inference and emit raw metrics JSON via JAVA_TOOL_OPTIONS
./llama-tornado --gpu --${{ inputs.backend }} \
--model $MODELS_DIR/${{ inputs.model_file }} \
--prompt "${{ inputs.prompt }}" \
${{ inputs.flags }}

# Write metadata sidecar so process_metrics.py can identify each metrics file
SIDECAR="${METRICS_FILE%.json}.meta.json"
python3 scripts/write_metrics_sidecar.py \
--out "$SIDECAR" \
backend="${{ inputs.backend }}" \
task=llama-inference \
model_file=${{ inputs.model_file }} \
model=${{ inputs.model }} \
quantization=${{ inputs.quantization }} \
configuration=${{ inputs.configuration }} \
"flags=${{ inputs.flags }}" \
prompt="${{ inputs.prompt }}"
22 changes: 22 additions & 0 deletions .github/actions/setup-java/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Setup Java
description: Install and activate a JDK via SDKMAN. Exports JAVA_HOME and updates PATH.

inputs:
java_version:
description: 'SDKMAN Java version identifier (e.g. 21.0.2-open)'
required: true

runs:
using: composite
steps:
- name: Set up Java with SDKMAN
shell: bash
run: |
source "$HOME/.sdkman/bin/sdkman-init.sh"
if ! sdk list java | grep -q "${{ inputs.java_version }}"; then
sdk install java "${{ inputs.java_version }}"
fi
sdk use java "${{ inputs.java_version }}"
echo "JAVA_HOME=$HOME/.sdkman/candidates/java/current" >> $GITHUB_ENV
echo "$HOME/.sdkman/candidates/java/current/bin" >> $GITHUB_PATH
java -version
81 changes: 81 additions & 0 deletions .github/actions/setup-tornadovm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Setup TornadoVM
description: Build TornadoVM once per backend and reuse across runs via a local SHA sentinel. Exports TORNADOVM_HOME and updates PATH for all subsequent steps.

inputs:
backend:
description: 'TornadoVM backend to build (opencl or ptx)'
required: true

runs:
using: composite
steps:
- name: Get TornadoVM HEAD SHA
id: tornado_sha
shell: bash
run: |
SHA=$(git ls-remote https://github.com/beehive-lab/TornadoVM HEAD | cut -f1)
Comment thread
orionpapadakis marked this conversation as resolved.
echo "sha=$SHA" >> $GITHUB_OUTPUT

- name: Check local build sentinel
id: sentinel
shell: bash
run: |
SENTINEL="$TORNADO_ROOT/.built-sha"
if [ -f "$SENTINEL" ] && [ "$(cat $SENTINEL)" = "${{ steps.tornado_sha.outputs.sha }}" ]; then
echo "up-to-date=true" >> $GITHUB_OUTPUT
else
echo "up-to-date=false" >> $GITHUB_OUTPUT
fi

- name: Clone TornadoVM master
if: steps.sentinel.outputs.up-to-date != 'true'
shell: bash
run: |
rm -rf $TORNADO_ROOT
git clone --depth 1 --branch master \
https://github.com/beehive-lab/TornadoVM.git \
$TORNADO_ROOT

- name: Set up Python venv for TornadoVM
if: steps.sentinel.outputs.up-to-date != 'true'
shell: bash
run: |
python3 -m venv $TORNADO_ROOT/venv
source $TORNADO_ROOT/venv/bin/activate
python --version

- name: Build TornadoVM
if: steps.sentinel.outputs.up-to-date != 'true'
shell: bash
run: |
cd $TORNADO_ROOT
mkdir -p graalJars && cp $GRAAL_JARS/* graalJars/
source venv/bin/activate
echo "=== Building TornadoVM ==="
make BACKEND=${{ inputs.backend }}
echo "${{ steps.tornado_sha.outputs.sha }}" > .built-sha

- name: Find TornadoVM SDK directory
id: find_sdk
shell: bash
run: |
SDK_DIR=$(find $TORNADO_ROOT/dist -type d -maxdepth 3 -path "*/tornadovm-*-${{ inputs.backend }}" | head -n 1)
if [ -z "$SDK_DIR" ]; then
echo "::error::Could not locate TornadoVM SDK directory!"
find $TORNADO_ROOT/dist -maxdepth 5 -type d
exit 1
fi
echo "sdk_dir=$SDK_DIR" >> $GITHUB_OUTPUT

# Runs on both fresh build and sentinel hit — sets TORNADOVM_HOME and PATH
# for all subsequent steps in the calling workflow.
- name: Configure TornadoVM environment
shell: bash
run: |
FULL_SDK="${{ steps.find_sdk.outputs.sdk_dir }}"
echo "Detected TornadoVM SDK: $FULL_SDK"
echo "TORNADOVM_HOME=$FULL_SDK" >> $GITHUB_ENV
echo "$FULL_SDK/bin" >> $GITHUB_PATH
echo "$JAVA_HOME/bin" >> $GITHUB_PATH
which tornado || { echo "::error::tornado not in PATH"; exit 1; }
tornado --devices
Loading
Loading