Countless case studies demonstrate impressively the importance of HPC for engineering and scientific insight, product innovation, and market competitiveness. But so far HPC was mostly in the hands of a relatively small elite crowd, not easily accessible by the large majority. In this article, however, we argue that – despite the ever increasing complexity of HPC hardware and system components –engineers and scientists have never been this close to HPC, i.e. ubiquitous HPC, as a common tool, for everyone. The main reason for this advance can be seen in the continuous progress of HPC software tools which assist enormously in the design, development, and optimization of engineering and scientific applications. Now, we believe that the next chasm towards ubiquitous HPC will be crossed very soon by new software container technology which will dramatically facilitate software packageability and portability, ease the access and use, and simplify software maintenance and support, and which finally will pass HPC into the hands of every engineer and scientist.
First, a Little Container History
“In April 1956, a refitted oil tanker carried fifty-eight shipping containers from Newark to Houston. From that modest beginning, container shipping developed into a huge industry that made the boom in global trade possible. “The Box” tells the dramatic story of the container’s creation, the decade of struggle before it was widely adopted, and the sweeping economic consequences of the sharp fall in transportation costs that containerization brought about. … Economist Marc Levinson shows how the container transformed economic geography. … By making shipping so cheap that industry could locate factories far from its customers, the container paved the way for Asia to become the world’s workshop and brought consumers a previously unimaginable variety of low-cost products from around the globe.”
Whenever I read this story from Marc Levinson’s book “The Box: How the Shipping Container Made the World Smaller and the World Economy Bigger” my blood runs cold, because of its analogy to today’s emerging software containers and their growing importance for all IT, for the whole software life cycle, each phase, from design, coding, testing, to software release, distribution, access and use, support and maintenance, and especially for the end-users and their applications.
40 Years of Expert HPC
The last 40 years saw a continuous struggle of our community with HPC. Let me tell you how I started with HPC. In 1976 started my first job as a computer scientist at the Max Planck Institute for Plasmaphysics in Munich, developing my first program for magneto-hydrodynamics plasma simulations on a 3-MFLOPS IBM 360/91. Three years later, at the German Aerospace Center (DLR) in Gottingen, I was involved in the benchmarking and acquisition of DLR’s first Cray-1S which marked my entry into vector computing. In 1980, my team broke the 50-MFLOPS with a speedup of 20 over DLR’s IBM 3081 mainframe computer, with fluid dynamics simulations for a nonlinear convective flow and for a direct Monte-Carlo simulation of the von-Karman vortex street. To get to that level of performance, however, we had to change several numerical algorithms and hand-vectorize and optimize quite a few compute-intensive subroutines of the programs which took us several troublesome months. That was HPC for experts, then.
Ubiquitous Computing – Xerox PARC’s Great Mark Weiser
When we use the word ‘ubiquitous’ in the following we mean synonyms like everywhere, omnipresent, pervasive, universal, and all-over, according to thesaurus.com. Here I’d like to quote the great Mark Weiser from Xerox PARC who wrote in 1988 already:
“Ubiquitous computing names the third wave in computing, just now beginning. First were mainframes, each shared by lots of people. Now we are in the personal computing era, person and machine staring uneasily at each other across the desktop. Next comes ubiquitous computing, or the age of calm technology, when technology recedes into the background of our lives.”
Weiser clearly looks at ‘ubiquitous computing’ with the eyes of the end-users, engineers and scientists I mentioned above. According to Weiser these users shouldn’t care about the ‘engine’ under the hood; all they care is about ‘driving’ safely, reliably, easily; getting in the car, starting the engine, pulling out into traffic, and reaching point B; everybody should be able to do that, everywhere, any time.
Towards Ubiquitous High Performance Computing
Now translating this into ‘Ubiquitous HPC’, with Mark Weiser. Very simplified HPC technology is split into two parts: hardware and software; both today are immensely complex in themselves; and their mutual interaction is highly sophisticated. For (high performance) computing to be ubiquitous Weiser suggests making it disappear into the background of our (business) lives; note well, this is from the end user’s point of view. Indeed, in the last decade, we were able to make a big step towards reaching this goal: we abstracted the application layer from the physical architecture underneath, through server virtualization. This achievement came with great benefits for the IT folks – and for the end-users too: such as the ability to provision servers faster, enhance security, reduce hardware vendor lock-in, increase uptime, improve disaster recovery, isolate applications and extend the life of older applications, and help move things to the cloud easily. So, with server virtualization we came quite close already to ubiquitous computing.
Finally – Ubiquitous High Performance Computing – with HPC Software Containers
But, server virtualization did not really gain a foothold in HPC, especially for highly parallel applications requiring low latency and high bandwidth inter-process communication. And multi-tenant HPC servers with several VMs competing among each other for hardware resources such as I/O, memory, and network, are often slowing down application performance.
Because VMs failed to show presence in HPC, the challenges of software distribution, administration, and maintenance kept HPC systems locked up in closets, available to only a select few. There has been no way to control the application management chaos that a democratized HPC environment would result in.
. . . until in 2013 Docker Linux Containers saw the light of day. The key practical difference between Docker and VMs is that Docker is a Linux-based system that makes use of a userspace interface for the Linux kernel containment features. Another difference is that rather than being a self-contained system in its own right, a Docker container shares the Linux kernel with the operating system running the host machine. It also shares the kernel with other containers that are running on the host machine. That makes Docker containers extremely lightweight, and well suited for HPC, in principle. Still it took us at UberCloud about a year to develop – based on micro-service Docker container technology – the macro-service production-ready counterpart for HPC, plus enhancing and testing it with a dozen of applications and with engineering workflows, on about a dozen different HPC single- and multi-node cloud resources. These high performance interactive software containers, whether they be on-premise, on public or on private clouds, bring a number of core benefits to the otherwise traditional HPC environments with the goal to make HPC widely available, ubiquitous:
Packageability: Bundle applications together with libraries and configuration files:
A container image bundles the needed libraries and tools as well as the application code and the necessary configuration for these components to work together seamlessly. There is no need to install software or tools on the host compute environment, since the ready-to-run container image has all the required components. The challenges regarding library dependencies, version conflicts, configuration challenges disappear, as do the huge replication and duplication efforts in our community when it comes to deploying HPC software which is one of the major goals of the OpenHPC initiative.
Portability: Build container images once, deploy them rapidly in various infrastructures:
Having a single container image makes it easy for the workload to be rapidly deployed and moved from host to host, between development and production environments, and to other computing facilities easily. The container allows the end user to select the appropriate environment such as a public cloud, a private cloud, or an on-premise HPC cluster. There is no need to install new components or perform setup steps when using another host.
Accessibility: Bundle tools such as SSH into the container for easy access:
The container is setup to provide easy access via tools such as VNC for remote desktop sharing. In addition, containers running on computing nodes enable both end-users and administrators to have a consistent implementation regardless of the underlying compute environment.
Usability: Provide familiar user interfaces and user tools with the application:
The container has only the required components to run the application. By eliminating other tools and middleware, the work environment is simplified and the usability is improved. The ability to provide a full featured desktop increases usability (especially for pre and post processing steps) and reduces training needs. Further, the HPC containers can be used together with a resource manager such as Slurm or Grid Engine, increasing the usability even further by eliminating many administration tasks.
In addition, the lightweight nature of the HPC container suggests low performance overhead. Our own performance tests with real applications on several multi-host multi-container HPC systems demonstrate that there is no significant overhead for running high performance workloads as an HPC container.
During the past two years we at UberCloud have successfully built HPC containers for application software like ANSYS (Fluent, CFX, Icepak, Electromagnetics, Mechanical, LS-Dyna, DesignModeler, and Workbench), CD-adapco STAR-CCM+, COMSOL Multiphysics, NICE DCV, Numeca FINE/Marine and FINE/Turbo, OpenFOAM, PSPP, Red Cedar’s HEEDS, Scilab, Gromacs, and others. These application containers are now running on cloud resources from Advania, Amazon AWS, CPU 24/7, Microsoft Azure, Nephoscale, OzenCloud, and others.
Together with recent advances and trends in application software and in high performance hardware technologies, the advent of lightweight pervasive, packageable, portable, scalable, interactive, easy to access and use HPC application containers based on Docker technology running seamlessly on workstations, servers, and clouds, is bringing us ever closer to what Intel calls the democratization of HPC, i.e. the age of ubiquitous high performance computing where HPC “technology recedes into the background of our lives.”
More information about these software containers can be found here. Container cases studies with real applications in the cloud are available for download. And, quite useful for all software providers is the site “Building Your Own ‘Software as a Service’ Business in the Cloud.”