Skip to content

misc: Add custom warnings functionality #7934

misc: Add custom warnings functionality

misc: Add custom warnings functionality #7934

Workflow file for this run

# Runner information:
# - OpenACC/OpenMP on NVIDIA runs on runners labeled `nvidiagpu`
# - OpenMP on AMD runs on runners labeled `amdgpu`
#
# Changes vs original:
# * Respect CUDA_VISIBLE_DEVICES for NVIDIA jobs by passing it AND restricting Docker with --gpus "device=…"
# * Tag images and container names with ${{ runner.name }} to avoid cross-runner races and maximize cache reuse
# * Remove docker prune / global container deletes (we assume disk space is fine)
# * Add comments throughout
name: CI-gpu
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
OUTPUT_PATH: ${{ github.workspace }}
RESOURCE_GROUP: CI-gpu
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
tags:
description: 'Run GPU tests'
jobs:
build:
name: ${{ matrix.name }}
runs-on:
- self-hosted
- ${{ matrix.runner_label }}
# Job-level env (includes per-runner image/container tags)
env:
DEVITO_ARCH: ${{ matrix.arch }}
DEVITO_PLATFORM: ${{ matrix.platform }}
DEVITO_LANGUAGE: ${{ matrix.language }}
OMPI_CC: ${{ matrix.arch }}
strategy:
fail-fast: false
matrix:
name: [
pytest-gpu-acc-nvidia,
pytest-gpu-omp-amd
]
test_examples: ["examples/seismic/tti/tti_example.py examples/seismic/acoustic/acoustic_example.py examples/seismic/viscoacoustic/viscoacoustic_example.py examples/seismic/viscoelastic/viscoelastic_example.py examples/seismic/elastic/elastic_example.py"]
include:
# -------------------- NVIDIA job --------------------
- name: pytest-gpu-acc-nvidia
test_files: "tests/test_adjoint.py tests/test_gpu_common.py tests/test_gpu_openacc.py"
base: "devitocodes/bases:nvidia-nvc"
runner_label: nvidiagpu
test_drive_cmd: "nvidia-smi"
# Respect CUDA_VISIBLE_DEVICES and also hard-limit Docker to that device.
# NOTE: CUDA_VISIBLE_DEVICES must be set by the runner (systemd drop-in etc.).
flags: >-
--init --rm -t
--name ${CONTAINER_BASENAME}
--env CUDA_VISIBLE_DEVICES
--gpus "device=${CUDA_VISIBLE_DEVICES:-all}"
# -------------------- AMD job -----------------------
- name: pytest-gpu-omp-amd
test_files: "tests/test_adjoint.py tests/test_gpu_common.py tests/test_gpu_openmp.py"
runner_label: amdgpu
base: "devitocodes/bases:amd"
test_drive_cmd: "rocm-smi"
# Unchanged, still passes through required /dev nodes etc.
flags: >-
--init --network=host
--device=/dev/kfd --device=/dev/dri
--ipc=host
--group-add video --group-add $(getent group render | cut -d: -f3)
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined
--rm -t
--name ${CONTAINER_BASENAME}
steps:
- name: Checkout devito
uses: actions/checkout@v4
- name: Set per-runner tags
run: |
echo "RUNNER_NAME=$RUNNER_NAME" >> $GITHUB_ENV
echo "DOCKER_IMAGE=${{ matrix.name }}-${RUNNER_NAME// /_}" >> $GITHUB_ENV
echo "CONTAINER_BASENAME=testrun-${{ matrix.name }}-${RUNNER_NAME// /_}" >> $GITHUB_ENV
- name: Build docker image
run: |
docker build . \
--rm --pull \
--file docker/Dockerfile.devito \
--tag "${DOCKER_IMAGE}" \
--build-arg base="${{ matrix.base }}"
- name: Export CODECOV token
run: echo "CODECOV_TOKEN=${{ secrets.CODECOV_TOKEN }}" >> "$GITHUB_ENV"
- name: Probe gpu
run: |
# Run a simple driver cmd first (nvidia-smi / rocm-smi)
docker run ${{ matrix.flags }} "${DOCKER_IMAGE}" ${{ matrix.test_drive_cmd }}
- name: Test with pytest
run: |
# Run a simple driver cmd first (nvidia-smi / rocm-smi)
ci_env=$(bash <(curl -s https://codecov.io/env))
docker run ${{ matrix.flags }} $ci_env -e CI=true "${DOCKER_IMAGE}" \
pytest --cov --cov-config=.coveragerc --cov-report=xml ${{ matrix.test_files }}
- name: Test examples
run: |
docker run ${{ matrix.flags }} "${DOCKER_IMAGE}" pytest ${{ matrix.test_examples }}
- name: Test examples with MPI
run: |
docker run ${{ matrix.flags }} --env DEVITO_MPI=1 "${DOCKER_IMAGE}" \
mpiexec -n 2 pytest ${{ matrix.test_examples }}