Difference between revisions of "Containers for CyberShake"

From SCECpedia
Jump to navigationJump to search
Line 67: Line 67:
  
 
== Basic Singularity Commands ==
 
== Basic Singularity Commands ==
Basic Singularity Commands
+
'''Pull''' - pulls a container image from a remote source
Pull - pulls a container image from a remote source
+
<pre>$ sudo singularity pull <remote source></pre>
$ sudo singularity pull <remote source>
 
 
<remote source>
 
<remote source>
Singularity Container Services
+
#Singularity Container Services
     $ sudo singularity pull --name CONTAINER_NAME.sif library://USER/PULL_PATH:VERSION
+
     <pre>$ sudo singularity pull --name CONTAINER_NAME.sif library://USER/PULL_PATH:VERSION</pre>
Singularity Hub
+
#Singularity Hub
$ sudo singularity pull --name CONTAINER_NAME.sif shub://USER/PULL_PATH:VERSION (Note: the path only needs to match the pull card. please see the remote website for example.)
+
    <pre>$ sudo singularity pull --name CONTAINER_NAME.sif shub://USER/PULL_PATH:VERSION</pre>
Docker Hub
+
  *Note: the path only needs to match the pull card. please see the remote website for example.
$ sudo singularity build CONTAINER_NAME.sif docker://USER/PULL_PATH:VERSION
+
#Docker Hub
 +
<pre>$ sudo singularity build CONTAINER_NAME.sif docker://USER/PULL_PATH:VERSION</ore>
 
(Note docker images have layers and it needs to be merged into 1 singularity image. For that to happen you MUST use: build)
 
(Note docker images have layers and it needs to be merged into 1 singularity image. For that to happen you MUST use: build)
  
Exec - executes an EXTERNAL COMMAND
 
$ singularity exec IMAGE_NAME.sif EXTERNAL_COMMAND
 
  
Shell - shells into an existing container
+
'''Exec''' - executes an EXTERNAL COMMAND
singularity shell IMAGE_NAME.sif
+
<pre>$ singularity exec IMAGE_NAME.sif EXTERNAL_COMMAND</pre>
 +
 
 +
'''Shell''' - shells into an existing container
 +
<pre>singularity shell IMAGE_NAME.sif</pre>
 
*Note: Your home directory is mounted by default
 
*Note: Your home directory is mounted by default
  
Run - runs an image. Run is based on the Run Script parameters that were placed into the container when the image was built based the recipe
 
$ singularity run IMAGE_NAME.sif
 
  
Build (BIG TO DO: Very important)
+
'''Run''' - runs an image. Run is based on the Run Script parameters that were placed into the container when the image was built based the recipe
$ singularity build IMAGE_NAME.sif <source>
+
<pre>$ singularity run IMAGE_NAME.sif</pre>
Sources include
+
 
Another Image either docker or singularity
+
Build (BIG TO DO: Very important... a lot of details and opinions)
Singularity definition file (use to be known as a recipe file), usually denoted with name.def
+
<pre>$ singularity build IMAGE_NAME.sif <source></pre>
 +
<source> include
 +
-Another Image either docker or singularity
 +
-Singularity definition file (use to be known as a recipe file), usually denoted with name.def
  
 
Note:  
 
Note:  
 
You can shell into a docker UI - explore different containers without pulling or building
 
You can shell into a docker UI - explore different containers without pulling or building
$ singularity shell docker://ubuntu
+
<pre>$ singularity shell docker://ubuntu</pre>
  
Creating Definition Files:
+
Creating Definition Files: (To Do)
Workflow:
 
 
Set up complex workflows with Recipe File:
 
Set up complex workflows with Recipe File:
 
Alternatively-
 
Alternatively-
 
Sandbox Directory Prototype Final Container: sudo singularity build --sandbox ubuntu_s docker://ubuntu
 
Sandbox Directory Prototype Final Container: sudo singularity build --sandbox ubuntu_s docker://ubuntu
 
  
 
== Containers on Frontera ==
 
== Containers on Frontera ==

Revision as of 02:48, 7 August 2020

This page is to document the steps involved in enabling the CyberShake codebase to run in a container environment.

Selection of Containers

The available HPC Containers at the time of selection were Singularity, Charlie Cloud, and Shifter. Between the 3 of these container technologies, Singularity was widely adapted and had more open source tools. Because of this wide adaptation the module already existed in the Frontera system. Singularity has built-in support for different MPI libraries from OpenMPI, MPICH, IntelMPI to name a few. Shifter is highly reliant on MPICH ABI. This would require site-specific MPI libraries to be copied to the container at run time.

Installing Singularity

Install Dependencies

sudo apt-get update && sudo apt-get install -y \
build-essential \
uuid-dev \
libgpgme-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git \
cryptsetup-bin


Download Go

export VERSION=1.13.5 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 && \
rm go$VERSION.$OS-$ARCH.tar.gz


Set Up Go

echo 'export GOPATH=${HOME}/go' >> ~/.bashrc && \
echo 'export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin' >> ~/.bashrc && \
source ~/.bashrc


Install Singularity

export VERSION=3.5.2 && # adjust this as necessary \
wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-${VERSION}.tar.gz && \
tar -xzf singularity-${VERSION}.tar.gz && \
cd singularity


Check if Singularity Works

git clone https://github.com/sylabs/singularity.git && \
cd singularity && \
git checkout v3.5.2

Setting up a serial container

(Explains the steps involved in building and running serial code in a container)


Get Image singularity pull <source>* singularity pull library://default/ubuntu:latest

  • Sources include Singularity Container Library (library), Singularity Hub (shub) and Docker Hub (docker).

Execute Command in from Outside Container Singularity Commands singularity exec myPythonContainer.sif cat /etc/lsb-release imageName command

singularity exec image_name command singularity exec myPythonContainer.sif python3 helloWorld.py

Find Size of Container: singularity cache list

Basic Singularity Commands

Pull - pulls a container image from a remote source

$ sudo singularity pull <remote source>

<remote source>

  1. Singularity Container Services
$ sudo singularity pull --name CONTAINER_NAME.sif library://USER/PULL_PATH:VERSION
  1. Singularity Hub
$ sudo singularity pull --name CONTAINER_NAME.sif shub://USER/PULL_PATH:VERSION
  *Note: the path only needs to match the pull card. please see the remote website for example.
  1. Docker Hub
$ sudo singularity build CONTAINER_NAME.sif docker://USER/PULL_PATH:VERSION</ore>
(Note docker images have layers and it needs to be merged into 1 singularity image. For that to happen you MUST use: build)


'''Exec''' - executes an EXTERNAL COMMAND
<pre>$ singularity exec IMAGE_NAME.sif EXTERNAL_COMMAND

Shell - shells into an existing container

singularity shell IMAGE_NAME.sif
  • Note: Your home directory is mounted by default


Run - runs an image. Run is based on the Run Script parameters that were placed into the container when the image was built based the recipe

$ singularity run IMAGE_NAME.sif

Build (BIG TO DO: Very important... a lot of details and opinions)

$ singularity build IMAGE_NAME.sif <source>

<source> include -Another Image either docker or singularity -Singularity definition file (use to be known as a recipe file), usually denoted with name.def

Note: You can shell into a docker UI - explore different containers without pulling or building

$ singularity shell docker://ubuntu

Creating Definition Files: (To Do) Set up complex workflows with Recipe File: Alternatively- Sandbox Directory Prototype Final Container: sudo singularity build --sandbox ubuntu_s docker://ubuntu

Containers on Frontera

Serial Containers

Explain how you got serial containers running on Frontera.

MPI Containers

Explain how you got MPI containers running on Frontera.