Comparteix:

Singularity a CALCULA

Introducció

Singularity és una solució de contenidors popular que permet als usuaris crear i executar contenidors per a diverses aplicacions i fluxos de treball. Aquesta documentació us guiarà a través del procés d'ús de Singularity a Calcula. Singularity proporciona una manera còmoda d'empaquetar el vostre programari i les seves dependències, garantint la reproductibilitat i la portabilitat en diferents entorns de computació.


Instal·lació de Singularity

És possible que Singularity ja estigui instal·lat al clúster de Calcula. Si no és així, seguiu aquests passos per instal·lar Singularity al vostre compte:

  1. Inicieu sessió a Calcula utilitzant SSH o el mètode d'accés remot proporcionat.
  2. Comproveu si Singularity ja està instal·lat executant la següent ordre:
>> module avail

Si es mostra un número de versió, Singularity està instal·lat i podeu saltar el pas d'instal·lació. En aquest cas, per carregar el mòdul heu de copiar la vostra versió de Singularity, per exemple Singularity/3.11.0, i escriure:

>> module  load singularity/3.11.0

Si l'ordre module no es troba, podeu anar a la documentació d'Environment Modules i hi trobareu informació sobre els mòduls. Actualment, només el Grup de Recerca GPI té module i, per tant, Singularity disponible.

Si Singularity no està instal·lat, necessitareu privilegis d'administrador (root) per instal·lar-lo. Poseu-vos en contacte amb el vostre administrador del sistema o consulteu la documentació del clúster per obtenir instruccions sobre com sol·licitar instal·lacions de programari.

   3. Un cop Singularity estigui instal·lat, podeu procedir a la següent secció.


Visió general de la interfície de Singularity

La interfície de línia d'ordres de Singularity us permet construir i interactuar amb contenidors de manera transparent. Podeu executar programes dins d'un contenidor com si s'estiguessin executant al vostre sistema host. Podeu redirigir fàcilment E/S, utilitzar pipes, passar arguments i accedir a fitxers, sockets i ports del sistema host des d'un contenidor.

Podeu escriure l'ordre d'ajuda per veure les opcions disponibles:

>> singularity -h

On trobareu opcions com --debug, que us permet executar Singularity amb missatges de depuració. L'ordre seria:

>> singularity  --debug run library://sylabsed/examples/lolcow

Construint imatges de Singularity

Els contenidors de Singularity es construeixen a partir de fitxers d'imatge que encapsulen l'aplicació i les seves dependències. Podeu construir les vostres pròpies imatges o utilitzar imatges preconstruïdes de fonts fiables (imatges verificades). En aquesta documentació explicarem ambdues opcions:

1. Descarregant imatges de Singularity preconstruïdes a Calcula:

Podeu utilitzar les ordres pull i build per descarregar imatges preconstruïdes d'un recurs extern com Docker Hub:

>> singularity pull docker://ubuntu:latest

o la Container Library:

>> singularity pull library://sylabsed/linux/alpine

Recordeu que tots aquests són exemples, i haureu de substituir els fitxers i les llibreries pels que desitgeu.

Finalment, també podeu utilitzar l'ordre build per descarregar imatges preconstruïdes d'un recurs extern. Amb aquesta ordre tindreu una imatge diferent, de manera que haureu d'especificar un nom. En aquest exemple, hem utilitzat lolcow.sif:

>> singularity build ubuntu.sif docker://ubuntu:latest

Tingueu en compte que Docker Hub és una biblioteca oberta on tothom pot pujar les seves imatges de contenidors, així que quan descarregueu imatges, assegureu-vos sempre de fer-ho des d'un editor de confiança.

2. Creació d'imatges a Calcula des de zero:

Ara, en lloc d'utilitzar imatges ja preexistents, podem crear les nostres. A continuació, us explicarem els passos per fer-ho:

2.1. Crear un fitxer de definició de Singularity

El fitxer de definició de Singularity és un fitxer de text que descriu els passos per construir la vostra imatge. Normalment té una extensió '.def'. Creeu un fitxer nou i obriu-lo en un editor de text.

2.2. Definir la imatge base

Al fitxer de definició, comenceu especificant la imatge base que voleu utilitzar. Aquesta podria ser una imatge de Singularity existent o una imatge de Docker. Per exemple, podeu utilitzar una imatge base com Ubuntu:

BootStrap: docker
From: ubuntu:latest
2.3. Afegir les línies necessàries:

Dins del fitxer de definició, podeu especificar els paquets o dependències que voleu incloure a la imatge amb la secció %post, afegir fitxers o scripts utilitzant la secció %files, o fins i tot afegir etiquetes amb la secció %labels. Un exemple de fitxer de definició és:

BootStrap: library
From: ubuntu:16.04

%post
    apt-get -y update
    apt-get -y install fortune cowsay lolcat

%environment
    export LC_ALL=C
    export PATH=/usr/games:$PATH

%runscript
    fortune | cowsay | lolcat

%labels
    Author GodloveD

Tingueu en compte que aquí es presenta una visió general del sistema i les opcions, però per tenir una explicació més precisa i detallada haureu de visitar la documentació del lloc web oficial.

2.4. Construir la imatge de Singularity

Un cop hàgiu definit el vostre fitxer de definició de Singularity, podeu construir la imatge utilitzant la comanda sudo singularity build seguida del nom de la imatge desitjada i el fitxer de definició. Per exemple:

$ sudo singularity build myimage.sif myimage.def

La comanda build, per tant, s'utilitza per crear imatges de les dues maneres. Pot crear una nova imatge a partir d'una altra imatge existent, o crear-la des de zero utilitzant un fitxer de definició.


Interactuant amb imatges

Podeu interactuar amb les imatges utilitzant diverses ordres. Prenem l'exemple d'una imatge anomenada "lolcow_latest.sif".

1. Shell

Per crear un nou shell dins del contenidor i interactuar-hi com si fos una màquina virtual, podeu utilitzar l'ordre shell:

$ singularity shell myimage.sif
Singularity myimage.sif:~>

El canvi en el prompt indica que sou dins del contenidor.

L'ordre shell també funciona amb URIs com ara "library://", "docker://" i "shub://". En aquests casos, crea un contenidor temporal que desapareix quan sortiu del shell:

$ singularity shell library://sylabsed/examples/lolcow

2. Exec

L'ordre exec us permet executar ordres personalitzades dins del contenidor especificant el fitxer d'imatge. Per exemple, per executar el programa "cowsay" dins del contenidor "lolcow_latest.sif":

$ singularity exec lolcow_latest.sif cowsay "UPC is the best uni!"
 _____
< UPC is the best uni! >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

L'ordre exec també funciona amb URIs com "library://", "docker://" i "shub://". En aquests casos, crea un contenidor temporal que executa l'ordre i després desapareix:

$ singularity exec library://sylabsed/examples/lolcow cowsay "UPC is the best uni!"
 _________________________
< UPC is the best uni! >
 -------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

3. Executant un contenidor

Per executar un contenidor, els contenidors de Singularity tenen runscripts, que defineixen les accions a realitzar quan s'executa el contenidor. Podeu activar el runscript utilitzant l'ordre run o simplement cridant el contenidor com si fos un executable:

$ singularity run lolcow_latest.sif
 _____________________________________
/ You have been selected for a secret \
\ mission.                            /
 -------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

$ ./lolcow_latest.sif
 ____________________________________
/ Q: What is orange and goes "click, \
\ click?" A: A ball point carrot.    /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

L'ordre run també funciona amb URIs com "library://", "docker://" i "shub://". En aquests casos, crea un contenidor temporal que s'executa i després desapareix.

$ singularity run library://sylabsed/examples/lolcow
 ____________________________________
/ Is that really YOU that is reading \
\ this?                              /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Aquesta documentació és una introducció al treball amb Singularity. Per a una explicació més detallada, podeu visitar la documentació oficial del lloc web.