Preskočiť na obsah

Conda

Conda je nástroj s otvoreným zdrojovým kódom na správu balíkov a prostredí, ktorý zjednodušuje inštaláciu softvérových balíkov a vytváranie izolovaných softvérových prostredí. Hoci bol pôvodne navrhnutý pre Python, dokáže spravovať balíky pre mnohé programovacie jazyky.

Používanie Conda umožňuje používateľom udržiavať samostatné prostredia s rôznymi verziami softvéru, čo je obzvlášť užitočné pri práci na viacerých projektoch alebo v prípade, že sa závislosti jednotlivých projektov navzájom rozchádzajú.

Architektúrne špecifické prostredia

Perun ponúka x86_64 CPU uzly aj ARM64 (AArch64) GPU uzly založené na procesoroch NVIDIA Grace Hopper.

Conda prostredia sú architektúrne špecifické. Prostredie vytvorené na prihlasovacích uzloch (x86_64) sa zvyčajne nedá použiť na GPU uzloch (AArch64) a naopak.

Ak máte v úmysle spúšťať softvér na GPU uzloch, vytvorte Conda prostredie priamo na GPU uzle:

srun --partition=gpu --gres=gpu:1 --pty bash
conda create --name myenv python=3.12

Rovnako prostredia vytvorené na GPU uzloch by sa mali používať iba na GPU uzloch.

YAML súbory prostredí je možné zdieľať medzi architektúrami, samotné prostredie však musí byť vytvorené samostatne pre každú architektúru.


Distribúcie Conda

Správca balíkov Conda je dostupný v dvoch hlavných distribúciách.

Miniconda

  • minimálna inštalácia Conda,
  • obsahuje iba základ systému Conda,
  • používateľ si manuálne inštaluje ďalšie balíky.

Anaconda

  • kompletná vedecká distribúcia Pythonu,
  • obsahuje stovky bežne používaných balíkov,
  • má väčšiu inštalačnú stopu.

CONDA

Pre HPC prostredia sa zvyčajne odporúča Miniconda, pretože udržiava inštaláciu malú a umožňuje používateľom nainštalovať iba balíky, ktoré potrebujú.


Inštalácia Miniconda3

Inštalátor Miniconda je možné stiahnuť z oficiálneho repozitára.

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

Po inštalácii inicializujte Conda:

~/miniconda3/bin/conda init bash

Reštartujte terminál alebo sa znova pripojte ku clusteru, aby sa zmeny aplikovali.

Note

Inštalátory Miniconda sú architektúrne špecifické. Použite inštalátor zodpovedajúci architektúre, na ktorej sa bude Conda používať:

  • prihlasovacie a CPU uzly: Linux-x86_64,
  • Grace Hopper GPU uzly: Linux-aarch64.

Conda kanály

Conda balíky sa distribuujú prostredníctvom kanálov, ktoré predstavujú repozitáre balíkov.

V predvolenom nastavení Conda používa kanál defaults, ale mnohé vedecké balíky sú dostupné prostredníctvom conda-forge, veľkého komunitného repozitára.

Príklad inštalácie balíka z conda-forge:

conda install <package> --channel conda-forge

Kanál je možné pridať natrvalo:

conda config --add channels conda-forge

Vytváranie a správa prostredí

Conda prostredia umožňujú vytvárať izolované inštalácie softvéru.

Vytvorenie nového prostredia:

conda create --name myenv

Aktivácia a deaktivácia prostredia:

conda activate myenv
conda deactivate

Zoznam dostupných prostredí:

conda info --envs

Odstránenie prostredia:

conda remove --name myenv --all

Overenie odstránenia:

conda info --envs

Vytváranie prostredí z YAML súborov

Conda prostredia je možné definovať v YAML špecifikačnom súbore. To je užitočné na zdieľanie prostredí alebo reprodukciu softvérových nastavení.

Vytvorenie prostredia z YAML súboru:

conda env create -f my-env.yml

Typický YAML súbor obsahuje názov prostredia, jeho závislosti a kanály použité na inštaláciu.


Zdieľanie Conda prostredí

Existujúce prostredie je možné exportovať do YAML súboru:

conda env export > my-env.yml

Vygenerovaný súbor obsahuje nainštalované balíky a ich verzie.

Strojovo špecifické riadky v exporte

Exportovaný súbor môže obsahovať aj strojovo špecifickú cestu prefix: a riadok platform:. Odstráňte tieto riadky, aby ostatní používatelia mohli prostredie znova vytvoriť.

Alternatívne môžete exportovať iba explicitne nainštalované balíky pomocou:

conda env export --from-history > my-env.yml

Iný používateľ môže prostredie vytvoriť pomocou:

conda env create -f my-env.yml

Ak prostredie vyžaduje ďalšie kanály, je možné ich pridať pomocou:

conda config --add channels <channel-name>

Inštalácia balíkov

Balíky je možné inštalovať do prostredia buď po jeho aktivácii, alebo explicitným určením prostredia.

Základné prostredie

Vyhnite sa inštalácii veľkého množstva balíkov do predvoleného base prostredia. Postupom času môže dochádzať ku konfliktom závislostí.

Odporúčaný pracovný postup:

  • Udržiavajte base prostredie minimálne.
  • Vytvárajte samostatné prostredia pre jednotlivé projekty.
  • Exportujte prostredia do YAML súborov na zabezpečenie reprodukovateľnosti.
  • Pravidelne čistite cache balíkov pomocou conda clean --all.

Používanie izolovaných prostredí pomáha predchádzať konfliktom závislostí a uľahčuje reprodukciu softvérových nastavení na rôznych systémoch.

Aktivácia prostredia:

conda activate myenv
conda install matplotlib

Inštalácia balíka do konkrétneho prostredia:

conda install --name myenv matplotlib

Zoznam nainštalovaných balíkov:

conda list

Zoznam balíkov v konkrétnom prostredí:

conda list -n myenv

Vyhľadávanie konkrétneho balíka:

conda search <package>

Čistenie cache Conda

Conda ukladá stiahnuté balíky lokálne. Postupom času môže táto cache zabrať významné množstvo miesta v domovskom adresári.

Na odstránenie nepoužívaných balíkov a cache použite:

conda clean --all

Tento príkaz odstráni nepoužívané súbory balíkov, cache a dočasné dáta.


Použitie Conda v skriptoch na odosielanie úloh

Keďže všetky výpočtovo náročné operácie musia byť vykonávané na výpočtových uzloch, Conda prostredia je možné používať aj v úlohách odosielaných prostredníctvom plánovača SLURM:

Conda skript

#!/bin/bash
#SBATCH -J "sample_job"
#SBATCH --account=<project>
#SBATCH --partition=short
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --time=1:00:00
#SBATCH -o stdout.%J.out
#SBATCH -e stderr.%J.out

echo "Launched at $(date)"
echo "Job ID: ${SLURM_JOBID}"
echo "Node list: ${SLURM_NODELIST}"
echo "Submit dir.: ${SLURM_SUBMIT_DIR}"
echo "Numb. of cores: ${SLURM_CPUS_PER_TASK}"

conda init
eval "$(conda shell.bash hook)"
conda activate myenv

# Pokračujte kódom aplikácie ...

# Príklad
export SRUN_CPUS_PER_TASK="${SLURM_CPUS_PER_TASK}"
export OMP_NUM_THREADS=1

srun ...
Created by: Marek Štekláč