将conda虚拟环境打包并集成到singularity镜像中

1. 使用yml文件打包

bash 复制代码
conda activate your_env
conda env export > environment.yml

编写cond.def文件

bash 复制代码
Bootstrap: docker

From: continuumio/miniconda3

%files
    environment.yml

%post
    /opt/conda/bin/conda env create -f environment.yml

%runscript
    exec /opt/conda/envs/$(head -n 1 environment.yml | cut -f 2 -d ' ')/bin/"$@" 

生成镜像:

bash 复制代码
singularity build conda.sif conda.def

2. 利用tar包

2.1 安装conda-pack

bash 复制代码
pip install conda-pack

版本需要0.7以上。

2.2 导出tar包

bash 复制代码
conda-pack -n <MY_ENV> -o packed_environment.tar.gz

编写conda.def文件:

bash 复制代码
Bootstrap: docker

From: continuumio/miniconda3

%files
    packed_environment.tar.gz /packed_environment.tar.gz

%post
    tar xvzf /packed_environment.tar.gz -C /opt/conda
    conda-unpack
    rm /packed_environment.tar.gz

生成镜像:

bash 复制代码
singularity build --fakeroot <OUTPUT_CONTAINER.sif> conda.def

3. 在已有基础上构建

def:

bash 复制代码
Bootstrap: localimage
From: local_image.sif

%environment
    # set up environment for when using the container
    . /opt/conda/etc/profile.d/conda.sh
    conda activate

%post
    apt-get update -y
    apt-get install -y \
            build-essential \
		    wget \
            cmake \
            g++ \
            r-base-dev \
			make
	    

    R -e "install.packages('cowsay', dependencies=TRUE, repos='http://cran.rstudio.com/')"
	
    # install miniconda
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh -b -f -p /opt/conda
    rm Miniconda3-latest-Linux-x86_64.sh

    # install conda components - add the packages you need here
    . /opt/conda/etc/profile.d/conda.sh
    conda activate
    conda install -y -c conda-forge numpy cowpy
    conda update --all

4. 沙盒模式

4.1 构建沙河目录

bash 复制代码
singularity build --sandbox lolcow/ library://sylabs-jms/testing/lolcow

4.2 进入沙盒

bash 复制代码
singularity shell --writable lolcow/

4.3 将沙盒打包成sif

bash 复制代码
singularity build lolcow.sif lolcow/

5. 设置环境变量

pytorchcmake未设置cuda环境变量

bash 复制代码
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "path\\boost_1_80_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "path\\boost_1_80_0\\libs")

可以通过如下设置:

bash 复制代码
%environment
    export CUDA_INCLUDE_DIRS=/opt/conda/cuda/include
    export CUDA_CUDART_LIBRARY=/opt/conda/cuda/lib

    export LIBRARY_PATH=/opt/conda/cuda/lib:$LIBRARY_PATH
    export CPATH=/opt/conda/cuda/include:$CPATH
    export PATH=/opt/conda/cuda:$PATH
%post
   mkdir -p /opt/conda/cuda
   conda install cuda -c nvidia -p /opt/conda/cuda
   
   mkdir -p /opt/conda/cudnn
   conda install -c anaconda cudnn -p /opt/conda/cudnn

   export PATH=/opt/conda/cuda:$PATH
相关推荐
言乐64 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
言乐65 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
沙漠之主6 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
hasty6 小时前
不上传新包,也能改变用户拿到的版本:npm dist-tag 的 OIDC 权限治理
前端·npm·node.js
yl45306 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
笨笨饿6 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
Csvn7 小时前
diff 算法(虚拟 DOM Reconciliation)
前端
for_ever_love__7 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
打工仔折腾 AI7 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
I Am a robert girl7 小时前
当传感器学会“说谎“:拆解可靠性门控的稀疏惯性动捕融合
python·姿态估计·传感器融合·惯性动捕·imu传感器·可靠性门控·可穿戴计算