com*_*Bio 4 hpc conda singularity-container
我遇到过许多实例,将conda环境容器化以实现长期可重复性确实很有帮助。由于我通常在高性能计算系统中运行,出于安全原因,它们必须是奇异容器。如何才能做到这一点?
首先,您需要为特定的conda环境获取环境YML。
conda activate your_env
conda env export > environment.yml
Run Code Online (Sandbox Code Playgroud)
通常,您将按以下方式使用它:
conda env create -f environment.yml
Run Code Online (Sandbox Code Playgroud)
但是,使用奇点容器化您的构建会稍微复杂一些。
这是一个示例奇点配方(与“ 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 "$@"
Run Code Online (Sandbox Code Playgroud)
用这个构建
sudo singularity build conda.simg Singularity
Run Code Online (Sandbox Code Playgroud)
现在,您将拥有一个使用conda环境中的库的可运行容器,该库可以在安装了Singularity的任何位置运行!
例子:
singularity run conda.simg conda -h
singularity run conda.simg ipython
Run Code Online (Sandbox Code Playgroud)
我发现它很有用,因为您可以安装一个安装了 anaconda3 环境的容器,并可以随时轻松地为不同的项目创建新的环境。
这很简单,我将逐步介绍:
通过以下定义文件在本地计算机中创建容器(您可以将其命名为任何您想要的名称。请注意,某些行可能是可以避免的):
Bootstrap: library
From: ubuntu:18.04
Stage: build
%post
apt-get update && apt-get -y upgrade
apt-get -y install \
build-essential \
wget \
bzip2 \
ca-certificates \
libglib2.0-0 \
libxext6 \
libsm6 \
libxrender1 \
git
rm -rf /var/lib/apt/lists/*
apt-get clean
#Installing Anaconda 3
wget -c https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
/bin/bash Anaconda3-2020.02-Linux-x86_64.sh -bfp /usr/local
#Conda configuration of channels from .condarc file
conda config --file /.condarc --add channels defaults
conda config --file /.condarc --add channels conda-forge
conda update conda
#List installed environments
conda list
Run Code Online (Sandbox Code Playgroud)然后,为了构建容器,请运行以下命令:
sudo singularity build ContainerName.sif YourDefineFile.def
Run Code Online (Sandbox Code Playgroud)现在您可以创建您的 conda env(您可以使用常见方法或通过 YML 文件创建它,该文件是从现有环境导出的文件)
例如,我使用 YML 文件完成此操作:首先,您需要进入 .sif 容器,如下所示:
Singularity shell YourContainerName.sif
Run Code Online (Sandbox Code Playgroud)
进而:
conda env create --name envname --file=YourEnvironments.yml
Run Code Online (Sandbox Code Playgroud)因此,创建环境后,您可以使用以下命令激活它(同样首先您需要跳转到容器中):
singularity shell YourContainer.Sif
source activate YourEnvName
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |