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 computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Esimerkkejä

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

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:9.8

%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 konttikuvan 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 kuvan laajentaminen

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

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

%post
    # The %environment section of the base image is not sourced during %post,
    # so activate the virtual environment explicitly to install into it.
    export PATH=/opt/venv/bin:$PATH

    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-2.sif pip --no-cache list

Esimerkki: Roihu-CPU-peruskontti OSU-mikrobenchmarkeilla

Tämä kuva on rakennettu x86_64-arkkitehtuurille, joten rakenna ja aja se Roihu-CPU:ssa (roihu-cpu.csc.fi).

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 -y install wget file which
    dnf -y clean all

    # 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 "$@"

Kun rakennat kontteja, aseta Apptainerin välimuistihakemisto niin, ettei peruskuva täytä kotihakemistosi kiintiötä (korvaa <project> projektillasi):

export APPTAINER_CACHEDIR=/scratch/<project>/$USER/.apptainer
apptainer build --fakeroot --bind="$TMPDIR:/tmp" container.sif container.def

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

Slurm-ympäristömuuttujat vaaditaan, 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>
#SBATCH --partition=test
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --mem=2G
#SBATCH --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

Pisteestä pisteeseen -benchmarkit tarvitsevat kaksi eri solmuilla olevaa MPI-tehtävää, mikä sopii test-osioon. Pidempään ajoon kokonaisilla solmuilla käytä sen sijaan medium-osiota ja jätä --mem pois, koska se varaa kokonaiset solmut.

sbatch batch.sh

Esimerkki: Roihu-GPU-peruskontti NCCL-testeillä

Tämä kuva on rakennettu Arm-pohjaisille (aarch64) Nvidia Grace -prosessoreille, joten rakenna ja aja ne Roihu-GPU:ssa (roihu-gpu.csc.fi).

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 -y install wget file which
    dnf -y clean all

    # 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 "$@"

Kun rakennat kontteja, aseta Apptainerin välimuistihakemisto niin, ettei peruskuva täytä kotihakemistosi kiintiötä (korvaa <project> projektillasi):

export APPTAINER_CACHEDIR=/scratch/<project>/$USER/.apptainer
apptainer build --fakeroot --bind="$TMPDIR:/tmp" container.sif container.def

Huomaa, että GPU-peruskuvat ovat yli 10 GB:n kokoisia, mikä ylittää 15 GiB:n kotihakemistokiintiön, kun välimuisti ja tuloksena syntyvä kuva lasketaan yhteen.

Nyt voit ajaa komentoja kontin sisällä ympäristö aktivoituna seuraavasti. single-skripti ajaa tavallisen NCCL-testin yhden solmun neljällä GPU:lla, kun taas mpi-skripti ajaa MPI-tuetun buildin kahden solmun yli. Molemmat käyttävät gputest-osiota, joka sallii enintään kaksi solmua, joissa kummassakin on neljä GPU:ta. Huomaa, ettei kumpikaan skripti aseta --mem-valitsinta: GPU-osioissa CPU-muisti varataan automaattisesti varattujen GPU:iden määrän perusteella.

batch_single.sh

#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gputest
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=72
#SBATCH --gres=gpu:gh200:4
#SBATCH --time=00:15:00

module purge
srun apptainer run --nv container.sif /opt/nccl-tests-2.18.3/build/all_reduce_perf -b 8 -e 128M -f 2 -g 4
sbatch batch_single.sh

batch_mpi.sh

#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gputest
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=72
#SBATCH --gres=gpu:gh200:4
#SBATCH --time=00:15:00

module purge
srun apptainer run --nv container.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-ohjelman käyttäminen konttien rakentamiseen

Makefilet ovat erinomainen tapa organisoida konttien rakentamisen logiikka. Jos et tunne Makefilejen toimintaa, 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:9.8
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, rakentaaksemme kontin toiseen hakemistoon:

make PREFIX=/projappl/<project>

Esimerkki: Kiihdytetty visualisointisovellus

Aloita rakentamalla visualisointi -peruskuva, joka sisältää VirtualGL:n, sen riippuvuudet ja apuskriptit. Voimme rakentaa kiihdytetyt visualisointisovellukset, kuten Blenderin, visualisoinnin peruskuvan päälle. Sovellus tulee suorittaa peruskonttiin asennetulla vglrun_wrapper-skriptillä.

Muut sovelluskontit

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

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta