Containers¶
Containers provide a stable fixed environment for your software that greatly reduces the dependency on any details of NERSC's software stack while retaining and, in some cases, improving performance.
NERSC supports multiple container technologies. If you are new to containers, we recommend using podman-hpc to build and run containers on Perlmutter. If your team already has an established Shifter workflow, you can continue to use Shifter.
Use the sections below to find information about the container technology and workflow that best fits your needs.
podman-hpc¶
podman-hpc, an adaptation of Podman for HPC use-cases, is available on Perlmutter and offers several advantages over the Shifter tool, including the ability to create containers on Perlmutter. This capability is available because Podman utilizes usernamespaces which have, unfortunately, been less reliable and performant at scale than desired.
Shifter¶
Shifter is a NERSC-developed tool which allows users to run images on NERSC systems such as Perlmutter.
Building Custom Images¶
The page, Building Custom Images provides details of the base image that can be used as a starting point to develop your own container image. It also provides various building blocks that can be used as a template to develop your own.
Container Registry¶
NERSC provides a private container registry at registry.nersc.gov where users can store and manage container images.
See the registry documentation for information about using the registry and best practices.registry.nersc.gov
Containers and MPI¶
If your application depends on MPI, NERSC recommends installing MPICH inside the container from source, rather than installing it with apt-get, and building it with shared libraries. This allows your software to use the ABI-compatible Cray MPICH, which is optimized for the Perlmutter network.
Moving Between Container Technologies¶
If you need to transition between Podman-HPC and Shifter, see Tips and Tricks for guidance on making your container workflows more portable.