Preskočiť na obsah

Kontajnery

Čo je softvérový kontajner a na čo slúži?

Kontajner umožňuje zabaliť aplikáciu a všetky jej závislosti do jedného balíka. Vďaka tomu je aplikácia prenosná, zdieľateľná a reprodukovateľná. Kontajnery podporujú prenosnosť a reprodukovateľnosť, pretože obsahujú všetky závislosti aplikácie. Aplikácia tak môže byť presunutá do nového prostredia bez potreby opätovnej inštalácie svojich závislostí.

Tu je niekoľko príkladov použitia kontajnerov:

  • Zabaľte analytický pipeline tak, aby bežal na vašom notebooku, v cloude aj v HPC prostredí a poskytoval rovnaké výsledky.
  • Zverejnite článok a pridajte odkaz na kontajner so všetkými dátami a softvérom, ktoré ste použili, aby iní používatelia mohli ľahko reprodukovať vaše výsledky.
  • Nainštalujte a spustite aplikáciu, ktorá vyžaduje komplexnú sadu závislostí.
  • Vytvorte pipeline alebo komplexný workflow, v ktorom každý program môže bežať vo vlastnom prispôsobenom prostredí.

Ako sa kontajnery líšia od virtual machines (VM)?

Kontajnery aj virtual machine (VM) sú formy virtualizácie. Je však dôležité pochopiť rozdiely medzi nimi a vedieť, kedy použiť ktorý typ.

VMs obsahujú celý operačný systém (OS) vrátane jadra, ktoré umožňuje operačnému systému komunikovať s hardvérom. To znamená, že VM:

  • Sú úplné v tom zmysle, že umožňujú používať celý operačný systém nezávisle od hostiteľského operačného systému.
  • Sú veľmi flexibilné. Napríklad môžete nainštalovať Windows VM na Mac pomocou softvéru, ako je VirtualBox.
  • Sú pomalšie a náročnejšie na zdroje. Pri spustení VM sa musí spustiť celý operačný systém.

Kontajnery zdieľajú jadro s hostiteľským operačným systémom. To znamená, že kontajnery:

  • Sú menej flexibilné ako VM. Napríklad Linuxový kontajner musí bežať na Linuxovom hostiteľskom operačnom systéme. Jednotlivé distribúcie Linuxu však môžete kombinovať.
  • Sú výrazne rýchlejšie a menej náročné na zdroje ako VM. Kontajner môže mať veľkosť iba niekoľko MB.
  • Rýchlo sa spúšťajú a zastavujú a sú vhodné na spúšťanie jednotlivých aplikácií.

Vzhľadom na tieto rozdiely slúžia VM a kontajnery rôznym účelom a používajú sa v rôznych situáciách.

  • VMs sú vhodné pre dlhodobo bežiace interaktívne relácie, v ktorých potrebujete používať viacero rôznych aplikácií.
  • Kontajnery sú vhodnejšie na spúšťanie jednej alebo niekoľkých aplikácií, často neinteraktívne, vo vlastnom prispôsobenom prostredí.

Docker

Docker je v súčasnosti jedným z najrozšírenejších systémov na prácu s kontajnermi. Má niekoľko výhod a nevýhod, ktoré z neho robia vhodnú voľbu pre niektoré projekty, ale nie pre iné.

Filozofia

Docker je navrhnutý na spúšťanie viacerých kontajnerov na jednom systéme a umožňuje kontajnerom zdieľať spoločné softvérové komponenty z dôvodu efektívneho využívania zdrojov. Zároveň sa snaží izolovať každý kontajner od ostatných kontajnerov a od hostiteľského systému.

Docker predpokladá, že budete root používateľom alebo že máte možnosť získať potrebné oprávnenia.

Výhody

  • Softvér s veľkou komunitou používateľov
  • Docker Hub
    • Miesto na zostavovanie a hostovanie kontajnerov
    • Plná integrácia s Dockerom
    • Viac ako 100 000 predpripravených kontajnerov
    • Ekosystém na orchestráciu kontajnerov
  • Bohatá sada funkcií

Nevýhody

  • Náročnejší na osvojenie
    • Zložité interné mechanizmy
    • Zložitý model kontajnerov založený na vrstvách
  • Nie je primárne navrhnutý s ohľadom na bezpečnosť
  • Nie je navrhnutý pre HPC, hoci je vhodný pre cloudové prostredia

Docker je vhodný najmä pre DevOps tímy poskytujúce používateľom cloud-native mikroslužby.


Singularity

Singularity

Singularity je kontajnerová platforma s otvoreným zdrojovým kódom, ktorá bola vytvorená na spúšťanie komplexných aplikácií na HPC clusteroch. Bola navrhnutá s ohľadom na bezpečnosť, vedecký softvér a HPC systémy. Umožňuje vytvárať a spúšťať kontajnery, ktoré zabalia softvér prenosným a reprodukovateľným spôsobom.

Kontajner môžete vytvoriť pomocou Singularity na svojom notebooku a následne ho spustiť na HPC clustri. Singularity vám zároveň umožňuje využívať zdroje hostiteľského systému, na ktorom sa nachádzate. Patria medzi ne HPC zdroje, súborové systémy, GPU a ďalšie akcelerátory.

Používateľ bez špeciálnych oprávnení môže „vymeniť“ používateľské prostredie hostiteľského systému za prostredie definované kontajnerom. Ak teda hostiteľský systém používa napríklad RHEL6, ale vaša aplikácia vyžaduje Ubuntu alebo RHEL7, môžete vytvoriť obraz s požadovaným operačným systémom, nainštalovať doň aplikácie, skopírovať obraz na iný hostiteľský systém a spustiť aplikáciu v tomto prostredí.

Kontajnery Singularity môžu mať tri rôzne formáty:

  • read-only squashfs (predvolené) – najlepšie pre produkčné použitie
  • writable ext3 (s možnosťou --writable)
  • writable (ch)root adresár (s možnosťou --sandbox) – najlepšie pre vývoj

Obrazy SquashFS aj (ch)root adresáre je možné vytvoriť z Docker zdroja priamo na clustri bez potreby root oprávnení. Dôrazne sa odporúča vytvoriť natívny Singularity obraz na zrýchlenie spúšťania kontajnera.

Filozofia

Singularity predpokladá (viac alebo menej), že každá aplikácia bude mať vlastný kontajner. Nesnaží sa úplne izolovať kontajnery navzájom ani od hostiteľského systému.

Singularity predpokladá, že budete mať systém na zostavovanie kontajnerov, na ktorom ste root používateľom, a produkčný systém, na ktorom root oprávnenia nemusíte mať.

Výhody

  • Jednoduché na osvojenie a používanie (relatívne)
  • Navrhnuté pre HPC
  • Dokáže konvertovať Docker kontajnery na Singularity a spúšťať kontajnery priamo z Docker Hub
  • Singularity Container Services
    • Miesto na bezpečné zostavovanie a zdieľanie kontajnerov

Nevýhody

  • Menšia komunita používateľov
  • Aktívne sa vyvíja, preto je potrebné sledovať nové zmeny

Singularity je vhodný najmä pre vedecký softvér bežiaci v HPC prostredí.


Sťahovanie a interakcia s kontajnermi

Predpripravené kontajnery nájdete na mnohých miestach. Singularity dokáže konvertovať a spúšťať kontajnery v rôznych formátoch vrátane kontajnerov vytvorených pomocou Dockeru.

V tomto príklade použijeme kontajnery z:

Predpripravené kontajnery nájdete aj na mnohých ďalších miestach. Medzi populárne zdroje patria:

  • Singularity Hub, pôvodne vytvorený v spolupráci Stanford University a komunity Singularity
  • Quay.io, vyvíjané a udržiavané spoločnosťou Red Hat
  • NGC, vyvíjané a udržiavané spoločnosťou NVIDIA
  • BioContainers, vyvíjané a udržiavané komunitou Bioconda
  • Cloudoví poskytovatelia ako Amazon AWS, Microsoft Azure a Google Cloud poskytujú aj registre kontajnerov, ktoré je možné používať so Singularity

Kompatibilita architektúry Perun

Perun poskytuje dva nezávislé softvérové stacky:

  • x86_64 softvérový stack pre prihlasovacie a CPU uzly
  • ARM64 (Grace Hopper) softvérový stack pre GPU uzly

Obrazy kontajnerov sú architektúrne špecifické. Obrazy vytvorené pre x86_64 nebudú fungovať na GPU uzloch, zatiaľ čo obrazy vytvorené pre ARM64 nebudú fungovať na prihlasovacích alebo CPU uzloch.

Keďže prihlasovacie uzly používajú architektúru x86_64 a nemajú GPU, kontajnery vytvorené alebo stiahnuté na týchto uzloch budú typicky obrazy pre x86_64.

Pre prácu s ARM64 kontajnermi spustite interaktívnu reláciu na GPU uzle:

srun --partition=gpu --gres=gpu:1 --pty bash

Všetky kontajnery určené na spúšťanie na Grace Hopper GPU uzloch by mali byť zostavované, sťahované (pull) a testované z takejto GPU relácie.

Sťahovanie kontajnerov

Singularity je dostupná ako modul. Načítajte ju do svojho prostredia pomocou príkazu:

module load singularity

Povedzme, že chceme stiahnuť kontajner pomocou príkazu \(pull\):

cd ~

singularity pull library://godlovedc/funny/lolcow

V aktuálnom pracovnom adresári by sa teraz mal nachádzať nový súbor s názvom lolcow_latest.sif:

ls lolcow_latest.sif
lolcow_latest.sif

Ide o váš kontajner. Presnejšie, ide o súbor vo formáte Singularity Image Format (SIF), ktorý obsahuje obraz koreňového súborového systému. Tento obraz sa pripojí k hostiteľskému súborovému systému (v novom „mount namespace“) a použije sa pri spustení príkazu Singularity.

Docker verziu toho istého kontajnera môžete stiahnuť z Docker Hub nasledujúcim príkazom:

singularity pull docker://godlovedc/lolcow

Tento príkaz môže vyvolať chybu, ak kontajner už existuje.

Vstup do kontajnerov pomocou shell

Teraz vstúpme do nového kontajnera a pozrime sa, čo sa v ňom nachádza. Na to môžeme použiť príkaz shell:

singularity shell lolcow_latest.sif

V závislosti od prostredia hostiteľského systému sa môže zmeniť shell prompt. Pozrime sa, aký operačný systém beží vo vnútri kontajnera.

cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

Nezáleží na tom, aký operačný systém beží na hostiteľskom systéme, kontajner používa Ubuntu 16.04 (Xenial Xerus)!


Note
Všeobecne sa očakáva, že akčné príkazy Singularity (ako `shell`,
`run` a `exec`) budú s URI ako `library://` a `docker://`
fungovať rovnako ako s lokálnym obrazom.

Skúsme ešte niekoľko príkazov:

Singularity> whoami
trainee01

Singularity> hostname
login01

Toto je jedna z kľúčových funkcií Singularity, ktorá ju robí atraktívnou z hľadiska bezpečnosti a používateľského komfortu. Používateľ zostáva rovnaký vo vnútri kontajnera aj mimo neho.

Bez ohľadu na to, či je program cowsay nainštalovaný na hostiteľskom systéme, máte k nemu teraz prístup, pretože je nainštalovaný vo vnútri kontajnera:

Singularity> which cowsay
/usr/games/cowsay

Singularity> cowsay moo
 _____
< moo >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Tento jednoduchý program využijeme pri skúmaní Linuxových kontajnerov.

Toto je príkaz, ktorý sa vykoná, keď sa kontajner skutočne „spustí“:

Singularity> fortune | cowsay | lolcat
 ____________________________________
/ A horse! A horse! My kingdom for a \
| horse!                             |
|                                    |
\ -- Wm. Shakespeare, "Richard III"  /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Na ukončenie shellu zadajte exit.

Singularity> exit
exit

Spúšťanie kontajnerových príkazov pomocou \(exec\)

Použitím príkazu exec môžeme spúšťať príkazy vo vnútri kontajnera z hostiteľského systému.

singularity exec lolcow_latest.sif cowsay 'How did you get out of the container?'
 _______________________________________
< How did you get out of the container? >
 ---------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

V tomto príklade Singularity vstúpi do kontajnera, spustí príkaz cowsay s uvedenými argumentmi, zobrazí štandardný výstup na termináli hostiteľského systému a následne kontajner ukončí.

„Spúšťanie“ kontajnera pomocou \(run\)

Ako už bolo spomenuté, kontajner môžete „spustiť“ takto:

singularity run lolcow_latest.sif
 _________________________________________
/ Q: How many Bell Labs Vice Presidents   \
| does it take to change a light bulb? A: |
| That's proprietary information. Answer  |
| available from AT&T on payment of       |
\ license fee (binary only).              /
 -----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Čo sa teda deje, keď kontajner spustíte? Vo vnútri kontajnera je špeciálny súbor nazývaný runscript, ktorý sa vykoná pri spustení kontajnera. Tento súbor a ďalšie metadáta kontajnera si môžete pozrieť pomocou príkazu inspect:

singularity inspect --runscript lolcow_latest.sif
#!/bin/sh

    fortune | cowsay | lolcat

V tomto prípade sa runscript skladá z troch jednoduchých príkazov, pričom výstup každého príkazu sa pomocou pipe presmeruje do nasledujúceho príkazu.

Keďže kontajnery Singularity majú preddefinované akcie, ktoré sa majú vykonať pri spustení, sú v skutočnosti spustiteľné. Všimnite si predvolené oprávnenia, keď kontajner stiahnete alebo vytvoríte:

ls -l lolcow_latest.sif
-rwxr-xr-x 1 trainee01 trainee01 93574075 Feb 28 23:02 lolcow_latest.sif

To vám umožňuje spustiť kontajner aj takto:

./lolcow_latest.sif
 ________________________________________
/ It is by the fortune of God that, in   \
| this country, we have three benefits:  |
| freedom of speech, freedom of thought, |
| and the wisdom never to use either.    |
|                                        |
\ -- Mark Twain                          /
 ----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Ako uvidíme neskôr, tento príklad môže ľahko spôsobiť, že zabudnete, že vaše aplikácie sú v kontajneroch, a spustíte ich ako bežný program.

Pipe a presmerovanie

Singularity sa nepokúša úplne izolovať kontajner od hostiteľského systému. To umožňuje napríklad používať pipe a presmerovanie na komunikáciu medzi kontajnerom a hostiteľským systémom.

singularity exec lolcow_latest.sif cowsay moo > cowsaid

cat cowsaid
 _____
< moo >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

V aktuálnom pracovnom adresári sme vytvorili súbor s názvom cowsaid, ktorý obsahuje výstup príkazu vykonaného vo vnútri kontajnera.

Môžeme tiež posielať vstup do kontajnera pomocou pipe:

cat cowsaid | singularity exec lolcow_latest.sif cowsay -n
 ______________________________
/  _____                       \
| < moo >                      |
|  -----                       |
|         \   ^__^             |
|          \  (oo)\_______     |
|             (__)\       )\/\ |
|                 ||----w |    |
\                 ||     ||    /
 ------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Vytvorili sme meta-cow (kravu, ktorá rozpráva o kravách).

Pipe a presmerovanie teda fungujú medzi kontajnerom a hostiteľským systémom podľa očakávania. Ak však potrebujete presmerovať výstup jedného príkazu vo vnútri kontajnera do iného príkazu vo vnútri kontajnera, situácia je trochu zložitejšia. Pipe a presmerovanie sú konštrukcie shellu. Ak nechcete, aby ich interpretoval hostiteľský shell, musíte ich pred ním skryť:

singularity exec lolcow_latest.sif sh -c "fortune | cowsay | lolcat"

Tým sa spustí nový shell vo vnútri kontajnera, ktorý následne vykoná príkazový riadok fortune | cowsay | lolcat.


Vytvorenie kontajnera od nuly

Na vytvorenie kontajnera od nuly potrebujete prístup k Linuxovému operačnému systému na architektúre x86_64 s root oprávneniami a nainštalovanou Singularity. Kontajnery vytvorené na iných architektúrach (ARM, PPC64 atď.) nebudú fungovať na systéme x86_64.

Začnite vytvorením sandbox kontajnera zo základného Ubuntu Docker obrazu (alebo z ľubovoľnej Linuxovej distribúcie dostupnej na Docker Hub) pomocou nasledujúceho príkazu ako root:

singularity build --sandbox test docker://ubuntu:latest

Tým sa vytvorí adresár test. Na vstup do shellu kontajnera použite:

singularity shell --writable test

Teraz sa váš prompt zmení na Singularity>. Príkazy, ktoré zadáte, sa budú vykonávať vo vnútri kontajnera. Nainštalujte požadovaný softvér. Shell môžete opustiť pomocou príkazu exit alebo klávesovej skratky Ctrl+D.

Pre produkčné použitie preveďte kontajner do formátu read-only SquashFS. Tým sa vytvorí jediný súbor, ktorý sa dá ľahko preniesť na Devanu:

singularity build test.sif test/

Kontajner môžete na Devane používať interaktívne:

singularity shell test.sif

alebo spustiť aplikáciu vo vnútri kontajnera zo skriptu, napríklad:

singularity exec test.sif python3 app.py

Príklad s GPU

Singularity GPU

TensorFlow sa bežne používa v projektoch strojového učenia. Oficiálny TensorFlow repozitár na Docker Hub obsahuje kontajnery s podporou NVIDIA GPU, ktoré na spracovanie využívajú CUDA.

singularity pull docker://tensorflow/tensorflow:latest-gpu

Príkazy, ktoré spúšťajú alebo inak vykonávajú kontajnery (shell, exec), môžu prijať možnosť --nv, ktorá nastaví prostredie kontajnera na použitie NVIDIA GPU a základných CUDA knižníc potrebných na spustenie CUDA aplikácie. CUDA aplikácie môžete spúšťať na výpočtových uzloch s GPU: n[141-148].

Môžete tiež použiť kontajnery z NVIDIA NGC Catalog, napríklad obraz TensorFlow 25.02:

singularity pull nvcr.io//nvidia/tensorflow:25.02-tf2-py3

V nasledujúcom príklade použijeme tento obraz. Obsahuje aj Jupyter Notebook, preto použijeme jeden z dostupných tutoriálov na webovej stránke TensorFlow ako interaktívnu reláciu:

wget https://raw.githubusercontent.com/tensorflow/docs/master/site/en/tutorials/keras/classification.ipynb

Tento Jupyter Notebook vyžaduje aj matplotlib. Pridáme ho do kontajnera pomocou recipe súboru:

Bootstrap: docker
From: nvcr.io//nvidia/tensorflow:25.02-tf2-py3

%post
    python3 -m pip install matplotlib

Uložte ho ako tensorflow.recipe.

sudo
Na zostavovanie kontajnerov z recipe súboru potrebujete sudo oprávnenia.

Na zostavenie obrazu na lokálnom počítači spustite:

sudo singularity build tensorflow-25.02.sif tensorflow.recipe

Skopírujte obraz na cluster. Na spustenie Jupyter Notebooku sa pripojte k službe Open OnDemand pomocou svojho hesla a 2FA. Zo zoznamu interaktívnych aplikácií vyberte „Jupyter Notebook - singularity“. Vo formulári uveďte účet, ktorý chcete použiť, vyberte GPU partíciu, 1 uzol, 16 jadier, 1 GPU a 60000 MB RAM, uveďte absolútnu cestu ku kontajneru a kliknite na tlačidlo Launch. Tým sa odošle úloha do Slurm plánovača. Keď sa relácia spustí, budete sa môcť pripojiť k Jupyter Notebooku. V relácii Jupyter Notebook potom môžete otvoriť súbor classification.ipynb a spustiť jeho bunky.


Príklad s OpenMPI

Príklad Singularity s OpenMPI

V súčasnosti existujú dve hlavné implementácie MPI s otvoreným zdrojovým kódom – OpenMPI a MPICH, ktoré sú podporované SingularityCE.

Note
MPI v kontajneri musí byť kompatibilné s verziou MPI dostupnou
na hostiteľskom systéme. Implementácia MPI v kontajneri musí byť
starostlivo nakonfigurovaná na optimálne využitie hardvéru,
ak je výkon kľúčovým faktorom.

Tu je príklad, ako vytvoriť kontajner s aplikáciou OpenMPI z recipe súboru na vašom počítači. Počítač by mal používať Linuxový operačný systém (alebo môžete použiť VM) na architektúre x86_64. Môžete použiť ľubovoľnú verziu OpenMPI, ktorá je nainštalovaná na Devane. Aspoň hlavná verzia musí byť rovnaká na clustri aj v kontajneri.

sudo
Na zostavovanie kontajnerov z recipe súboru potrebujete sudo oprávnenia.

Jednoduchý zdrojový kód MPI aplikácie:

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv) {
        int rc;
        int size;
        int myrank;

        rc = MPI_Init (&argc, &argv);
        if (rc != MPI_SUCCESS) {
                fprintf (stderr, "MPI_Init() failed");
                return EXIT_FAILURE;
        }

        rc = MPI_Comm_size (MPI_COMM_WORLD, &size);
        if (rc != MPI_SUCCESS) {
                fprintf (stderr, "MPI_Comm_size() failed");
                goto exit_with_error;
        }

        rc = MPI_Comm_rank (MPI_COMM_WORLD, &myrank);
        if (rc != MPI_SUCCESS) {
                fprintf (stderr, "MPI_Comm_rank() failed");
                goto exit_with_error;
        }

        fprintf (stdout, "Hello, I am rank %d/%d\n", myrank, size);

        MPI_Finalize();

        return EXIT_SUCCESS;

 exit_with_error:
        MPI_Finalize();
        return EXIT_FAILURE;
}

Pre tento príklad uložte kód ako mpitest.c. Použijeme recipe súbor openmpi-test.recipe s nasledujúcim obsahom:

Bootstrap: docker
From: ubuntu:22.04

%files
    mpitest.c /opt

%environment
    # Point to OMPI binaries, libraries, man pages
    export OMPI_DIR=/opt/ompi
    export PATH="$OMPI_DIR/bin:$PATH"
    export LD_LIBRARY_PATH="$OMPI_DIR/lib:$LD_LIBRARY_PATH"
    export MANPATH="$OMPI_DIR/share/man:$MANPATH"

%post
    echo "Installing required packages..."
    apt-get update && apt-get install -y wget git bash gcc gfortran g++ make file bzip2 libucx0 libucx-dev

    echo "Installing Open MPI"
    mkdir -p /tmp/ompi /opt
    # Download
    cd /tmp/ompi && export OMPI_VERSION=4.1.6 && wget -O openmpi-$OMPI_VERSION.tar.bz2 https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-$OMPI_VERSION.tar.bz2 && tar -xjf openmpi-$OMPI_VERSION.tar.bz2
    # Compile and install
    cd /tmp/ompi/openmpi-4.1.6 && ./configure --with-ucx --prefix=/opt/ompi && make -j2 install

    echo "Compiling the MPI application..."
    export PATH=/opt/ompi/bin:$PATH && export LD_LIBRARY_PATH=/opt/ompi/lib:$LD_LIBRARY_PATH && cd /opt && mpicc -o mpitest mpitest.c

Na vytvorenie kontajnera spustite nasledujúci príkaz:

sudo singularity build openmpi-test.sif openmpi-test.recipe

Počas procesu vytvárania kontajnera sa zo zdrojového kódu zostaví OpenMPI s podporou InfiniBand a skompiluje sa jednoduchý test. Vytvorte Slurm batch skript submit.sh:

#!/bin/bash
#SBATCH --partition=short
#SBATCH --job-name=mpitest
#SBATCH --nodes=2
#SBATCH --output=res.txt
#SBATCH --error=err.txt
#SBATCH --ntasks=2
#SBATCH --time=0:05:00
#SBATCH --cpus-per-task=1
#SBATCH --ntasks-per-node=1

module load OpenMPI/4.1.6-GCC-13.2.0
module load singularity
mpirun -np 2 singularity run openmpi-test.sif /opt/mpitest

Príklad môžete spustiť pomocou príkazu:

sbatch submit.sh

Domovský adresár používateľa sa do kontajnera automaticky pripojí. Ak potrebujete prístup k úložisku /scratch alebo lokálnemu disku /work pre váš výpočet, je potrebné ich pripojiť pomocou možnosti -B alebo --bind.

Úplnú dokumentáciu nájdete na adrese https://sylabs.io/docs/.

Použitie súkromného Docker repozitára

Na použitie súkromného Docker repozitára sa musíte najprv prihlásiť pomocou svojich prihlasovacích údajov:

singularity remote login -u username docker://repository_url

Budete vyzvaní na zadanie hesla. Ide o ekvivalent príkazu docker login. Následne by ste mali mať možnosť sťahovať kontajnery zo súkromného repozitára.

Created by: Marek Štekláč