Контейнерная среда conda в контейнере Singularity - PullRequest
0 голосов
/ 13 февраля 2019

Я сталкивался с несколькими случаями, когда было бы очень полезно создать контейнер среды conda для долгосрочной воспроизводимости.Поскольку я обычно работаю в высокопроизводительных вычислительных системах, по соображениям безопасности они должны быть контейнерами Singularity.Как это можно сделать?

1 Ответ

0 голосов
/ 13 февраля 2019

Во-первых, вы захотите получить среду YML для вашей конкретной среды conda.

conda activate your_env
conda env export > environment.yml

Обычно вы просто используете это следующим образом:

conda env create -f environment.yml

Но,немного сложнее контейнировать вашу сборку с Singularity.

Вот пример рецепта Singularity (в файле с именем «Singularity» в том же каталоге, что и «environment.yml»):

Bootstrap: docker

From: continuumio/miniconda3

%files
    environment.yml

%environment
    PATH=/opt/conda/envs/$(head -1 environment.yml | cut -d' ' -f2)/bin:$PATH

%post
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc
    echo "source activate $(head -1 environment.yml | cut -d' ' -f2)" > ~/.bashrc
    /opt/conda/bin/conda env create -f environment.yml

%runscript
    exec "$@"

Buildэто с помощью

sudo singularity build conda.simg Singularity

Теперь у вас будет работающий контейнер, использующий библиотеки из вашей среды conda, которые можно запускать везде, где у вас установлена ​​Singularity!

Примеры:

singularity run conda.simg conda -h

singularity run conda.simg ipython
...