Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,12 @@
[submodule "2026-HPCIC/tutorial-code/caliper-tutorial"]
path = 2026-HPCIC/tutorial-code/caliper-tutorial
url = https://github.com/daboehme/caliper-tutorial
[submodule "2026-PACT/tutorial-code/treescape-media"]
path = 2026-PACT/tutorial-code/treescape-media
url = https://github.com/llnl/treescape-media
[submodule "2026-PACT/tutorial-code/thicket-tutorial"]
path = 2026-PACT/tutorial-code/thicket-tutorial
url = https://github.com/llnl/thicket-tutorial
[submodule "2026-PACT/tutorial-code/caliper-tutorial"]
path = 2026-PACT/tutorial-code/caliper-tutorial
url = https://github.com/daboehme/caliper-tutorial
60 changes: 60 additions & 0 deletions 2026-PACT/docker/Dockerfile.benchpark
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Copyright 2025 Lawrence Livermore National Security, LLC and other
# Benchpark developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: Apache-2.0

# For testing
# FROM test-treescape

FROM ghcr.io/llnl/treescape:pact-2026

USER root

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
wget \
gzip \
lsb-release \
patch \
tar \
unzip \
xz-utils \
zstd \
bzip2 \
libatlas-base-dev \
gettext \
libncurses-dev \
sqlite \
&& rm -rf /var/lib/apt/lists/*

SHELL [ "/bin/bash", "-c" ]

USER ${NB_USER}

RUN git clone https://github.com/LLNL/benchpark.git ${HOME}/benchpark && \
cd ${HOME}/benchpark && \
git checkout -b develop-2026-10-15 develop-2026-10-15 && \
git submodule update --init --recursive

USER root

RUN . /opt/global_py_venv/bin/activate && \
python3 -m pip install -r ${HOME}/benchpark/requirements.txt

RUN echo 'export PATH=${HOME}/benchpark/bin:$PATH' >> ${HOME}/.bashrc

RUN echo 'export PATH=${HOME}/benchpark/bin:$PATH' >> ${HOME}/.bash_profile

RUN chmod -R 777 ~/ ${HOME}

WORKDIR ${HOME}

RUN mkdir -p ${HOME}/.local/share && \
chmod 777 ${HOME}/.local/share

USER ${NB_USER}

# Run this to trigger bootstrap
RUN . /opt/global_py_venv/bin/activate && \
${HOME}/benchpark/bin/benchpark bootstrap
131 changes: 131 additions & 0 deletions 2026-PACT/docker/Dockerfile.caliper
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Copyright 2025 Lawrence Livermore National Security, LLC and other
# Benchpark developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: Apache-2.0

# FROM ubuntu:noble
FROM fluxrm/flux-sched:jammy

# ubuntu:noble added a new 'ubuntu' user in the container.
# Get rid of it!
# RUN userdel -r ubuntu

USER root

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
adduser \
vim \
nano \
emacs \
build-essential \
cmake \
python3 \
python3-dev \
python3-pip \
python3-venv \
git \
util-linux \
less \
htop \
zip \
unzip \
# NOTE: the flux-sched image already pulls and builds MPICH 4.2.2
# WITHOUT PMIx support (this is important because PMIx is a pain, and
# requires extra setup with Flux).
# openmpi-bin \
# openmpi-common \
# libopenmpi-dev \
&& rm -rf /var/lib/apt/lists/*

SHELL [ "/bin/bash", "-c" ]

RUN python3 -m venv /opt/global_py_venv

RUN . /opt/global_py_venv/bin/activate && \
python3 -m pip install pybind11

ENV CALI_INSTALL_PREFIX=/usr \
GIT_CLONE_STAGING_DIR=/tmp

RUN git clone https://github.com/LLNL/Caliper.git ${GIT_CLONE_STAGING_DIR}/Caliper && \
cd ${GIT_CLONE_STAGING_DIR}/Caliper && \
git fetch origin && \
git checkout v2.15.0 && \
git submodule update --init --recursive && \
git clone https://github.com/LLNL/Adiak.git ${GIT_CLONE_STAGING_DIR}/Adiak && \
cd ${GIT_CLONE_STAGING_DIR}/Adiak && \
git fetch origin && \
git checkout v0.5.0 && \
git submodule update --init --recursive

RUN cd ${GIT_CLONE_STAGING_DIR}/Adiak && \
mkdir build && \
cd build && \
cmake \
-DENABLE_MPI=ON \
-DCMAKE_C_COMPILER=$(which gcc) \
-DCMAKE_CXX_COMPILER=$(which g++) \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=${CALI_INSTALL_PREFIX} \
.. && \
make -j 4 && \
make install

RUN . /opt/global_py_venv/bin/activate && \
cd ${GIT_CLONE_STAGING_DIR}/Caliper && \
mkdir build && \
cd build && \
cmake \
-DWITH_TOOLS=ON \
-DWITH_MPI=ON \
-DWITH_ADIAK=ON \
-DWITH_PYTHON_BINDINGS=ON \
-Dpybind11_DIR=$(pybind11-config --cmakedir) \
-DCMAKE_PREFIX_PATH=${CALI_INSTALL_PREFIX} \
-DCMAKE_C_COMPILER=$(which gcc) \
-DCMAKE_CXX_COMPILER=$(which g++) \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=${CALI_INSTALL_PREFIX} \
.. && \
make -j 4 && \
make install

RUN rm -rf ${GIT_CLONE_STAGING_DIR}/Caliper && rm -rf ${GIT_CLONE_STAGING_DIR}/Adiak

ENV NB_USER=jovyan \
NB_UID=1000 \
HOME=/home/jovyan

RUN adduser \
--disabled-password \
--gecos "Default user" \
--uid ${NB_UID} \
--home ${HOME} \
--force-badname \
${NB_USER}

# NOTE: this should NEVER be uncommented by the time we push to GHCR
RUN adduser ${NB_USER} sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

RUN chmod -R 777 ~/ ${HOME}

ENV SHELL=/usr/bin/bash

RUN mkdir -p ${HOME}/.local/share && \
chmod 777 ${HOME}/.local/share

RUN echo $(flux env)

RUN echo 'export PATH=/usr/bin:$PATH' >> ${HOME}/.bashrc && \
echo '. /opt/global_py_venv/bin/activate' >> ${HOME}/.bashrc && \
echo 'export LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH' >> ${HOME}/.bashrc

RUN echo 'export PATH=/usr/bin:$PATH' >> ${HOME}/.bash_profile && \
echo '. /opt/global_py_venv/bin/activate' >> ${HOME}/.bash_profile && \
echo 'export LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH' >> ${HOME}/.bash_profile

USER ${NB_USER}
WORKDIR ${HOME}
6 changes: 3 additions & 3 deletions 2026-PACT/docker/Dockerfile.init
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ FROM alpine/git

USER root

ENV NB_USER=fluxuser \
NB_UID=1002 \
HOME=/home/fluxuser
ENV NB_USER=jovyan \
NB_UID=1000 \
HOME=/home/jovyan

RUN adduser \
-D \
Expand Down
115 changes: 88 additions & 27 deletions 2026-PACT/docker/Dockerfile.spawn
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,112 @@
# For testing
# FROM test-benchpark

FROM ghcr.io/llnl/benchpark/benchpark-flux-el10:latest
FROM ghcr.io/llnl/benchpark:pact-2026

USER root

RUN dnf install -y --setopt=install_weak_deps=False \
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
bind-utils \
iputils && \
dnf clean all && \
rm -rf /var/cache/dnf

ENV TINI_VERSION v0.19.0
ADD --chmod=755 https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
dnsutils \
iputils-ping \
tini

SHELL [ "/bin/bash", "-c" ]

#RUN . /opt/global_py_venv/bin/activate && \
# /opt/global_py_venv/bin/python3 -m pip install plotly[express] && \
# /opt/global_py_venv/bin/python3 -m pip install -U ipykernel && \
# /opt/global_py_venv/bin/python3 -m ipykernel install --prefix=/usr/local --name 'benchpark-tutorial-kernel'
COPY ./docker/requirements.txt /requirements.txt

# if needed, update this to dnf archive
#COPY ./docker/kitware-archive.sh /tmp
#
#RUN /tmp/kitware-archive.sh && \
# apt install -y cmake && \
# which cmake && \
# cmake --version && \
# rm -rf /var/lib/apt/lists/*
RUN . /opt/global_py_venv/bin/activate && \
# Needed for some viz in thicket-tutorial
/opt/global_py_venv/bin/python3 -m pip install plotly[express] && \
/opt/global_py_venv/bin/python3 -m pip install -r /requirements.txt && \
/opt/global_py_venv/bin/python3 -m pip install -U jupyter ipython ipykernel && \
/opt/global_py_venv/bin/python3 -m ipykernel install --prefix=/usr/local --name 'benchpark-tutorial-kernel'

COPY ./docker/kitware-archive.sh /tmp

RUN /tmp/kitware-archive.sh && \
apt install -y cmake && \
which cmake && \
cmake --version && \
rm -rf /var/lib/apt/lists/*

COPY ./tutorial-code/thicket-tutorial/requirements.txt /tmp/thicket-tutorial/requirements.txt

RUN . /opt/global_py_venv/bin/activate && \
python3 -m pip install extrap scikit-learn seaborn
# NOTE: we're not installing the dependencies for thicket-tutorial with
# requirements.txt because it hardcodes a version of IPython, which
# breaks all sorts of things. Instead, we extract the relevant dependencies
# and place them above.
# python3 -m pip install -r /tmp/thicket-tutorial/requirements.txt

COPY ./tutorial-code/caliper-tutorial/apps /tmp/caliper-tutorial/apps/
COPY ./tutorial-code/caliper-tutorial/cmake /tmp/caliper-tutorial/cmake/

ENV CALI_TUTORIAL_INSTALL_PREFIX=/usr

RUN cmake \
-B /tmp/build-basic-example \
-C /tmp/caliper-tutorial/cmake/basic_example.cmake \
-DCMAKE_INSTALL_PREFIX="${CALI_TUTORIAL_INSTALL_PREFIX}" \
-S /tmp/caliper-tutorial/apps/basic_example && \
cmake --build "/tmp/build-basic-example" && \
cmake --install "/tmp/build-basic-example"
# && \
# rm -rf /tmp/build-basic-example

WORKDIR /home/fluxuser/benchpark
RUN cmake \
-B /tmp/build-lulesh \
-C /tmp/caliper-tutorial/cmake/lulesh-mpi.cmake \
-DCMAKE_INSTALL_PREFIX="${CALI_TUTORIAL_INSTALL_PREFIX}" \
-S /tmp/caliper-tutorial/apps/LULESH && \
cmake --build "/tmp/build-lulesh" && \
cmake --install "/tmp/build-lulesh"
# && \
# rm -rf /tmp/build-lulesh

RUN cmake \
-B /tmp/build-xsbench \
-C /tmp/caliper-tutorial/cmake/xsbench-mpi.cmake \
-DCMAKE_INSTALL_PREFIX="${CALI_TUTORIAL_INSTALL_PREFIX}" \
-S /tmp/caliper-tutorial/apps/XSBench && \
cmake --build "/tmp/build-xsbench" && \
cmake --install "/tmp/build-xsbench"
# && \
# rm -rf /tmp/build-xsbench

COPY ./tutorial-code/caliper-tutorial/tutorial ${HOME}/caliper-tutorial/
COPY ./tutorial-code/caliper-tutorial/apps ${HOME}/caliper-tutorial/apps

COPY ./tutorial-code/thicket-tutorial/data/lassen ${HOME}/thicket-tutorial/data/lassen
COPY ./tutorial-code/thicket-tutorial/data/quartz ${HOME}/thicket-tutorial/data/quartz
COPY ./tutorial-code/thicket-tutorial/notebooks/01_thicket_tutorial.ipynb ${HOME}/thicket-tutorial/notebooks/01_thicket_tutorial.ipynb
COPY ./tutorial-code/thicket-tutorial/notebooks/02_thicket_rajaperf_clustering.ipynb ${HOME}/thicket-tutorial/notebooks/02_thicket_rajaperf_clustering.ipynb
COPY ./tutorial-code/thicket-tutorial/LICENSE ${HOME}/thicket-tutorial

COPY ./tutorial-code/treescape-media/datasets/newdemo/test ${HOME}/treescape-media/datasets/newdemo/test
COPY ./tutorial-code/treescape-media/examples/NightlyTestDemo_local.ipynb ${HOME}/treescape-media/examples/NightlyTestDemo_local.ipynb
COPY ./tutorial-code/treescape-media/LICENSE ${HOME}/treescape-media

COPY tutorial-code/system-description/aws-tutorial ${HOME}/benchpark/systems/aws-tutorial

RUN chown -R jovyan ${HOME}
# RUN chmod -R 777 ~/ ${HOME}

WORKDIR ${HOME}

COPY ./docker/spawn-entrypoint.sh /entrypoint.sh
COPY ./docker/spawn-local-entrypoint.sh /local-entrypoint.sh
RUN chmod 777 /entrypoint.sh
RUN chmod 777 /local-entrypoint.sh

RUN rm -f /home/fluxuser/.jupyter/jupyter_lab_config.py

USER fluxuser
USER ${NB_USER}
ENV SHELL=/usr/bin/bash
ENV FLUX_URI_RESOLVE_LOCAL=t

EXPOSE 8888
ENTRYPOINT [ "/usr/bin/tini", "--" ]
ENTRYPOINT [ "tini", "--" ]

CMD ["flux", "start", "jupyter", "lab"]
18 changes: 18 additions & 0 deletions 2026-PACT/docker/Dockerfile.thicket
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2025 Lawrence Livermore National Security, LLC and other
# Benchpark developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: Apache-2.0

# For testing
# FROM test-caliper

FROM ghcr.io/llnl/caliper:pact-2026

USER root

RUN . /opt/global_py_venv/bin/activate && \
python3 -m pip install llnl-hatchet==2025.2.0 && \
python3 -m pip install "llnl-thicket[plotting]==2026.1.0"
# python3 -m pip install llnl-thicket[extrap,plotting]==2024.2.1

USER ${NB_USER}
21 changes: 21 additions & 0 deletions 2026-PACT/docker/Dockerfile.treescape
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2025 Lawrence Livermore National Security, LLC and other
# Benchpark developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: Apache-2.0

# For testing
# FROM test-thicket

FROM ghcr.io/llnl/thicket:pact-2026

USER root

RUN git clone https://github.com/LLNL/treescape ${GIT_CLONE_STAGING_DIR}/treescape && \
cd ${GIT_CLONE_STAGING_DIR}/treescape && \
git checkout main-2026-04-15

RUN . /opt/global_py_venv/bin/activate && \
cd ${GIT_CLONE_STAGING_DIR}/treescape && \
python3 -m pip install .

USER ${NB_USER}
Loading
Loading