Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

Esimerkkejä

Tämä osio sisältää esimerkkejä konttien rakentamisesta ja ajamisesta Roihussa ja Mahdissa.

Esimerkki: Python-virtuaaliympäristö

Seuraavaksi annamme esimerkin kontista, jossa on järjestelmän Python sekä virtuaaliympäristö, johon on asennettu Python-paketteja Pipillä. Voimme määritellä build-määrityksen seuraavasti:

python-pip.def
Bootstrap: docker
From: docker.io/rockylinux/rockylinux:8.10

%post
    # Replace the failing commands with always succeeding dummies.
    cp /usr/bin/true /usr/sbin/useradd
    cp /usr/bin/true /usr/sbin/groupadd

    # Install Python with system package manager.
    dnf -y update
    dnf -y install python3.11 python3.11-pip
    dnf -y clean all

    # Create a Python virtual environment and install packages using pip.
    python3.11 -m venv /opt/venv
    export PATH=/opt/venv/bin:$PATH
    python3.11 -m pip install --no-cache-dir numpy

%environment
    export PATH=/opt/venv/bin:$PATH

Nyt voimme rakentaa kontti-imagen seuraavasti:

apptainer build --fakeroot --bind="$TMPDIR:/tmp" python-pip.sif python-pip.def

Lopuksi voimme suorittaa komentoja kontin sisällä. Voimme esimerkiksi testata konttia listaamalla Pipillä asennetut Python-paketit:

apptainer exec python-pip.sif pip --no-cache list

Esimerkki: Paikallisen imagen laajentaminen

Voimme myös laajentaa olemassa olevia SIF-imageja. Tässä esimerkissä laajennamme python-pip.sif-kontti-imagea lisäämällä siihen toisen Python-kirjaston seuraavasti:

python-pip-2.def
Bootstrap: localimage
From: python-pip.sif

%post
    python3.11 -m pip install --no-cache-dir pandas

Nyt rakennamme kontin tavalliseen tapaan:

apptainer build --fakeroot --bind="$TMPDIR:/tmp" python-pip-2.sif python-pip-2.def

Listataan Pipillä asennetut paketit nähdäksesi lisäämämme paketit:

apptainer exec python-pip.sif pip --no-cache list

Esimerkki: Roihun CPU-peruskontti OSU-mikrobenchmarkeilla

Peruskontteja on saatavilla:

  • satama.csc.fi/r_installation_spack/core-cpu-gcc-15.2.0:v2026_03 (4.54 GB)

Build-määritystiedosto:

container.def
Bootstrap: docker
From: satama.csc.fi/r_installation_spack/core-cpu-gcc-15.2.0:v2026_03

%arguments
    NPROCS=10

%post
    # Activate module environment and load default modules.
    . /opt/activate.sh

    # Install tools
    dnf install -y wget file which

    # Build osu benchmarks
    cd /opt
    wget -q http://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.4.tar.gz
    tar xf osu-micro-benchmarks-7.4.tar.gz
    cd osu-micro-benchmarks-7.4
    ./configure --prefix=/opt/osu-micro-benchmarks CC=mpicc CXX=mpicxx CFLAGS=-O3
    make -j{{ NPROCS }}
    make install
    cd ..
    rm -rf osu-micro-benchmarks-7.4 osu-micro-benchmarks-7.4.tar.gz

%runscript
    . /opt/activate.sh
    exec "$@"

Kontteja rakennettaessa aseta Apptainerin välimuistihakemistoksi $TMPDIR, jotta kotihakemistön kiintiö ei täyty.

export APPTAINER_CACHEDIR=$TMPDIR
apptainer build --fakeroot container.sif container.def

Nyt voit ajaa komentoja kontin sisällä ympäristö aktivoituna seuraavasti:

Slurm-ympäristömuuttujia tarvitaan, jotta MPI toimii!

Slurm-ympäristömuuttujien on välityttävä kontin ympäristöön, jotta MPI toimii. Älä siis käytä --cleanenv, --contain tai vastaavia valitsimia.

batch.sh

#!/bin/bash
#SBATCH --account=<project> --partition=medium --mem=2G --nodes=2 --ntasks-per-node=1 --time=00:05:00
module purge
srun apptainer run container.sif /opt/osu-micro-benchmarks/libexec/osu-micro-benchmarks/mpi/pt2pt/osu_bibw
srun apptainer run container.sif /opt/osu-micro-benchmarks/libexec/osu-micro-benchmarks/mpi/pt2pt/osu_latency
sbatch batch.sh

Esimerkki: Roihun GPU-peruskontti NCCL-testeillä

Peruskontteja on saatavilla:

  • satama.csc.fi/r_installation_spack/core-gpu-gcc-15.2.0-cuda-13.1.1:v2026_03 (13.7 GB)
  • satama.csc.fi/r_installation_spack/core-gpu-gcc-14.3.0-cuda-12.9.1:v2026_03 (15.9 GB)
  • satama.csc.fi/r_installation_spack/core-gpu-gcc-13.4.0-cuda-12.6.3:v2026_03 (13.5 GB)

Build-määritystiedosto:

container.def
Bootstrap: docker
From: satama.csc.fi/r_installation_spack/core-gpu-gcc-14.3.0-cuda-12.9.1:v2026_03

%arguments
    NPROCS=10

%post
    # Activate module environment and load default modules.
    . /opt/activate.sh

    # Install tools
    dnf install -y wget file which

    # Install NCCL Tests
    module load nccl
    cd /opt
    wget https://github.com/NVIDIA/nccl-tests/archive/refs/tags/v2.18.3.tar.gz
    tar xf v2.18.3.tar.gz
    rm v2.18.3.tar.gz
    cd nccl-tests-2.18.3
    make -j{{NPROCS}} CUDA_HOME=$CUDA_HOME NCCL_HOME=$NCCL_INSTROOT
    make -j{{NPROCS}} CUDA_HOME=$CUDA_HOME NCCL_HOME=$NCCL_INSTROOT MPI=1 MPI_HOME=$OPENMPI_INSTROOT NAME_SUFFIX=_mpi

%runscript
    . /opt/activate.sh
    module load nccl
    exec "$@"

Kontteja rakennettaessa aseta Apptainerin välimuistihakemistoksi $TMPDIR, jotta kotihakemistön kiintiö ei täyty.

export APPTAINER_CACHEDIR=$TMPDIR
apptainer build --fakeroot container.sif container.def

Nyt voit ajaa komentoja kontin sisällä ympäristö aktivoituna seuraavasti:

batch_single.sh

#!/bin/bash
#SBATCH --account=<project> --partition=gpumedium --mem=2G --nodes=2 --ntasks-per-node=1 --time=00:05:00 --gpus-per-node=1
module purge
srun apptainer run --nv nccl-tests-osu.sif /opt/osu-micro-benchmarks/libexec/osu-micro-benchmarks/mpi/pt2pt/osu_bibw
srun apptainer run --nv nccl-tests-osu.sif /opt/osu-micro-benchmarks/libexec/osu-micro-benchmarks/mpi/pt2pt/osu_latency
sbatch batch_single.sh

batch_mpi.sh

#!/bin/bash
#SBATCH --account=<project> --partition=gpumedium --nodes=2 --ntasks-per-node=4 --cpus-per-task=72 --gpus-per-node=4 --time=00:15:00
module purge
srun apptainer run --nv nccl-tests-osu.sif /opt/nccl-tests-2.18.3/build/all_reduce_perf_mpi -b 8 -e 128M -f 2 -g 1
sbatch batch_mpi.sh

Esimerkki: Make-konttien rakentamiseen

Makefilet ovat erinomainen tapa organisoida konttien rakentamisen logiikka. Jos Makefilejen toiminta ei ole sinulle tuttua, suosittelemme lukemaan erinomaisen Makefile Tutorial -oppaan.

Tässä on esimerkki Makefilen käyttämisestä kontin rakentamiseen määritystiedostosta nimeltä container.def SIF-tiedostoksi nimeltä container.sif.

container.def
Bootstrap: docker
From: docker.io/rockylinux/rockylinux:8.10
Makefile
TMPDIR ?= /tmp
PREFIX := .

CONTAINER_SIF := $(PREFIX)/container.sif
CONTAINER_DEF := container.def

.PHONY: all
all: $(CONTAINER_SIF)

$(CONTAINER_SIF): $(CONTAINER_DEF)
    apptainer build --fakeroot --bind=$(TMPDIR):/tmp $@ $<

.PHONY: clean
clean:
    rm -f $(CONTAINER_SIF)

Kutsutaan Makea kontin rakentamiseksi:

make

Voimme myös kutsua makea argumenteilla, kuten PREFIX, jotta kontti rakennetaan toiseen hakemistoon:

make PREFIX=/projappl/project_id

Esimerkki: Kiihdytetty visualisointisovellus

Aloita rakentamalla visualization -perusimage, joka sisältää VirtualGL:n, sen riippuvuudet ja apuskriptit. Voimme rakentaa kiihdytettyjä visualisointisovelluksia, kuten Blender, visualization-perusimagen päälle. Sovellus tulee suorittaa peruskonttiin asennetulla vglrun_wrapper-skriptillä.

Muut sovelluskontit

CSC:llä on konttien build-reseptejä eri sovelluksille singularity-recipes -repositoriossa. Tässä ovat reseptit, jotka voidaan rakentaa Apptainerilla fakerootia käyttäen Roihussa ja Mahdissa:

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta