Singularity 快速上手, 带你飞
Singularity 快速上手Singularity介绍先用ubuntu:16.04镜像体验一下如何使用singularity获取镜像:运行镜像:创建实例:查看实例:停止实例:以 ubuntu16.04作为基础镜像创建容器安装singularity(本地计算机)部分:SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图
Singularity 快速上手
Singularity介绍
Singularity 是一种容器技术,用户可以在本地将软件打包成镜像,上传到服务器上运行。因为用户在本地计算机上拥有root权限,在制作软件的容器镜像时也拥有root权限,在部署安装应用的时候更加灵活。
(我在落地算法的时候需要用到ROS,使用学校的超算资源部署环境的时候,无法获得sudo权限。故悲惨打工人只能自己查阅资料,发现可以用集群可以提供的Singularity解决,所以开始自学,大家多多指教!)
Singularity 官网地址如下:https://sylabs.io/guides/3.6/user-guide/,可以据此进一步学习。
先用ubuntu:16.04镜像体验一下如何使用singularity
获取镜像:
首先, 从Singularity Hub 或者 Docker Hub 获取 预编译镜像。
$ singularity pull ubuntu:16.04 # 根据需要选择版本
之后就可以在当前目录下得到 ubuntu_16.04.sif 文件。
运行镜像:
可以使用 shell 命令连接到容器中运行命令。
$ singularity shell ubuntu_16.04.sif
Singularity> pwd
/home/tutuzi
创建实例:
简单创建两个实例,成功后会显示 instance started successfully。
$ singularity instance start ubuntu_16.04.sif test1
$ singularity instance start ubuntu_16.04.sif test2
查看实例:
可以查看各实例对应的 DAEMON NAME, PID, CONTAINER IMAGE 信息。
$ singularity instance list
停止实例:
停止之前创建的 test1 和 test2 两个实例。
$ singularity instance stop test1
$ singularity instance stop test2
以 ubuntu16.04作为基础镜像创建容器
具体步骤参见:这篇说明:运行Singularity
相关的注解说明和我本人实践过程中遇到的问题以及对应的解决方案如下:
安装singularity(本地计算机)部分:
- 只能在 Linux 系统安装使用 singularity, 我本人拥有root权限的电脑是win10系统,所以需要使用虚拟机才创建镜像。
(如果也需要进行本步骤所需的安装和配置,可参照以下步骤,巨详细,均亲测有效!!)
ITEM | REFERENCE |
---|---|
VMware Workstation Pro v16 | https://www.ruanhuicn.com/soft/vmware-workstation-pro.html |
Ubuntu18.04 iso | http://mirrors.aliyun.com/ubuntu-releases/18.04/ |
推荐这个:CentOS7 | http://mirrors.aliyun.com/centos/7/isos/x86_64/ |
在VMware 上安装 Ubuntu | https://cloud.tencent.com/developer/article/1571849 |
#安装依赖:
sudo yum install -y gcc libuuid-devel squashfs-tools openssl-devel
#安装go
export VERSION=1.15 OS=linux ARCH=amd64
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz
sudo rm -f go$VERSION.$OS-$ARCH.tar.gz
sudo vim /etc/profile
#添加 export PATH=/usr/local/go/bin:$PATH
source /etc/profile
sudo vim /etc/sudoers
#添加 /usr/local/go/bin/ 到 Defaults secure_path
#安装singularity,这里的安装版本为3.6.2
export VERSION=3.6.2
wget https://github.com/hpcng/singularity/releases/download/v${VERSION}/singularity-${VERSION}.tar.gz
tar -xzf singularity-${VERSION}.tar.gz
cd singularity
./mconfig
cd builddir/
sudo make && sudo make install
sudo rm -rf singularity*
制作singularity镜像(python2.7+ROS+mpi4py+Stage+Pytorch 为例):
参考官方文档:https://singularity.hpcng.org/user-docs/3.2/quick_start.html#singularity-definition-files
Singularity v3.0 and above produces immutable images in the Singularity Image File (SIF) format. This ensures reproducible and verifiable images and allows for many extra benefits such as the ability to sign and verify your containers.
创建sandbox的方法制作镜像:
su
singularity build --sandbox ./tutu_box docker://ubuntu:16.04
singularity shell -w ./tutu_box
apt-get -y update
apt-get -y install python2-minimal python-dev
安装ROS 可以参考官网 http://wiki.ros.org/kinetic/Installation/Ubuntu.
- Configure your Ubuntu repositories:
# apt-get install software-properties-common add-apt-repository universe add-apt-repository multiverse add-apt-repository restricted apt-get update
- Setup your sources.list:
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- Setup your keys:
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- Installation:
apt-get update apt-get install ros-kinetic-desktop-full
- Environment setup:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc source ~/.bashrc
- Dependencies for building packages
apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential rosdep init rosdep update
安装mpi4py: 可参考官方安装说明
apt-get install -y wget
wget https://github.com/pmodels/mpich/releases/download/v3.4.2/mpich-3.4.2.tar.gz # 可以自己去选择合适的版本 此处选择 3.4.2
tar -zxf mpich-3.4.2.tar.gz
cd mpich-3.4.2
./configure --enable-shared --prefix=/usr/local/mpich
# 如果上步出现报错,则按提示加上 --with-device=ch4:ofi
# 完成后显示如下结果
# ***
# *** device: ch4
# *** netmods: ofi
# *** shm: auto
# ***
# Configuration completed.
make
make install
MPI_DIR=/usr/local/mpich
export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH
python -m pip install mpi4py
安装Stage: 可参考官方安装说明
# Install Stage's dependencies
apt-get install git cmake g++ fltk1.1-dev libjpeg8-dev libpng12-dev libglu1-mesa-dev libltdl-dev
# Get and build Stage
mkdir stage4
cd stage4
git clone git://github.com/rtv/Stage.git
export STG=$HOME/stg
cmake -DCMAKEINSTALLPREFIX=$STG Stage
make
# Install and set up environment
make install
export LDLIBRARYPATH=$STG/lib
安装pyTorch (CUDA 10.1)
easy_install pip
pip install torch==1.4.0 torchvision==0.5.0
退出容器,设置永久环境变量(宿主机)
vim ./tutu_box/environment
#加入下面
source /opt/ros/kinetic/setup.bash
MPI_DIR=/usr/local/mpich
export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH
export LDLIBRARYPATH=$STG/lib
需要的工具全部安装完毕之后,创建sif:singularity build tutu_env.sif ./tutu_box
接下来我们讲使用 定义文件 来创建 SIF 容器环境 (ROS):
A Singularity Definition file is divided into two parts: Header & Section
BootStrap: docker
From: ubuntu:16.04
%post
apt-get -y update
apt-get install sudo
apt-get install python-minimal python-dev
apt-get install software-properties-common
add-apt-repository universe
add-apt-repository multiverse
add-apt-repository restricted
apt-get update
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
apt-get update
apt-get install ros-kinetic-desktop-full
rosdep init
rosdep update
apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
wget https://github.com/pmodels/mpich/releases/download/v3.4.2/mpich-3.4.2.tar.gz
tar -zxf mpich-3.4.2.tar.gz
cd mpich-3.4.2
./configure --enable-shared --prefix=/usr/local/mpich
make
make install
python -m pip install mpi4py
apt-get install git cmake g++ fltk1.1-dev libjpeg8-dev libpng12-dev libglu1-mesa-dev libltdl-dev
mkdir stage4
cd stage4
git clone git://github.com/rtv/Stage.git
export STG=$HOME/stg
cmake -DCMAKEINSTALLPREFIX=$STG Stage
make
make install
pip install torch==1.4.0 torchvision==0.5.0
%environment
MPI_DIR=/usr/local/mpich
%runscript
source /opt/ros/kinetic/setup.bash
export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH
export LDLIBRARYPATH=$STG/lib
%labels
简单测试
singularity shell --bind /home/tutuzi/rl-collision-avoidance-master:/home/rl-collision-avoidance-master:rw ./tutu_box/
测试sif是否可用 (分别测试各个工具)
< 测试python2.7是否可以正常运行 >
[tutuzi@localhost ~]$ singularity exec tutu_env.sif python --version
Python 2.7.12
< 测试ROS是否可以正常运行 >
source /opt/ros/kinetic/setup.bash # 需要增加这一代码
# 在三个terminal分别运行如下三条命令
roscore # terminal 1 启动环境
rosrun turtlesim turtlesim_node # terminal 2 出现小乌龟
rosrun turtlesim turtle_teleop_key # terminal 3 方向键可控制小乌龟移动
< 测试mpi是否可以正常运行 >
- 创建如下 main.c:
#include <mpi.h> #include<stdio.h> // 测试并行是否成功 int main(int argc, char* argv[]) { int rank; int size; int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; // 并行环境初始化 MPI_Init(&argc,&argv); // 获得当前进程 MPI_Comm_rank(MPI_COMM_WORLD, &rank); // 获得运行该程序的总进程 MPI_Comm_size(MPI_COMM_WORLD, &size); // 获得当前进程下主机的名称 MPI_Get_processor_name(processor_name, &namelen); printf("hello world from process %i of size %i -- name %s .\n",rank,size,processor_name); // mpi环境结束 MPI_Finalize(); return 0; }
- 执行如下命令
得到结果如下:[tutuzi@localhost ~]$ singularity exec tutu_env.sif mpicc main.c [tutuzi@localhost ~]$ singularity exec tutu_env.sif mpiexec -n 3 ./a.out
hello world from process 0 of size 3 -- name localhost.localdomain . hello world from process 1 of size 3 -- name localhost.localdomain . hello world from process 2 of size 3 -- name localhost.localdomain .
< 测试pytorch是否可以正常运行 >
进入python, 观察以下import是否报错:
import torch
import torchvision
更多推荐
所有评论(0)