Now that computer scientists at Lawrence Berkeley National Laboratory’s National Energy Research Scientific Computing Center (NERSC) have demonstrated 15 petaflops deep-learning training performance on the Cray Cori supercomputer, the NERSC staff is working to address the data management issues that arise when running production deep-learning codes at such scale. The existing deep learning tools were not designed to efficiently ingest or manage the terabyte- to petabyte-sized deep-learning training sets that scientists can now use on this leadership class supercomputer. “Enabling the NERSC user community to perform deep learning at scale on Cori,” Quincey Koziol (Staff, Berkeley Lab) observes, “means scientists can use deep learning as part of their leading-edge scientific efforts.”
Thus NERSC staff are working to break new ground in adapting existing deep-learning frameworks to run efficiently at scale on thousands of nodes while giving researchers the ability to create and manage training sets containing tens to hundreds of terabytes of data in a portable fashion. For these datasets, it is imperative that they are formatted so Cori can ingest them efficiently at runtime.
Appreciating the magnitude of the petascale data management problem
To appreciate the magnitude of the petascale data management problem, consider that the 9,600 Intel Xeon Phi nodes used in the 15 petaflops deep learning training performance contained over a petabyte of main memory. (Specifically, 921.6 terabytes of DDR4 RAM and 153.6 terabytes of high-bandwidth 3D stacked memory.)
The first petascale training runs on the Cray XC40 Cori supercomputer focused on scalability, which left lots of room for groundbreaking research in training on really big datasets. Kurth, et.al. noted in their paper “Deep Learning at 15PF: Supervised and Semi-Supervised Classification for Scientific Data” that the climate dataset contained 15 TB of data and the HEP (High Energy Physics) data contained 10 million images. With more than a petabyte of RAM contained in 9,600 nodes, Cori can obviously utilize much larger data sets.
Not so obvious are the asynchronous data management issues that crop up after the data has been ingested and the training run has started. These asynchronous methods use prefetching and lots of communications, so per-node memory usage and network performance are critical to running at the petascale.
Without getting too technical, the 15 petaflops deep learning performance was achieved using a hybrid, asynchronous implementation of the SGD (stochastic gradient descent) numerical optimization method. SGD is a common numerical method used by popular packages such as Caffe (used in the 15 petaflops Cori runs) and TensorFlow.
Thorsten Kurth (Application Performance Specialist, NERSC) observes that, “Tensorflow is the most widely used framework and is therefore a primary optimization target at the moment, but the deep learning software world changes rapidly so that sustainable implementations are necessary. Thus it makes sense to create libraries of optimized kernels that can be used by many deep learning frameworks. This same idea can be used to create methods for the data feeding/IO operations.” These optimized libraries can then be rapidly adopted to new upcoming frameworks such as pytorch and mxnet, Kurth observes.
Addressing the challenges
Given the popularity of TensorFlow, the NERSC team is working to adapt TensorFlow to run at scale on Cori. The main challenges, Koziol observes, are threefold:
- TensorFlow uses text or binary images for input rather than HDF5 or another data format typically used by HPC scientists. Koziol and NERSC are currently integrating HDF5 with TensorFlow.
- TensorFlow uses a client-server model rather than MPI, which is the typical communications package for scientific applications that run on HPC systems. This means that there are no collective operations inside TensorFlow, which can cause performance issues.
- TensorFlow uses an asynchronous training that is very loosely coupled, which means data prefetching is critical to prevent performance from suffering due to data starvation. Conversely, prefetching increases the per-node memory consumption, so an appropriate balance must be struck to prefetch “just enough and no more.” Finding that ideal balance without overburdening any node or set of nodes with data in a large (think hundred- or thousand-node) training run is a fertile research area as NERSC brings TensorFlow into a new scaling realm.
The data management aspects of deep learning are often overlooked as researchers work to speed training and find the right ANN (Artificial Neural Network) architecture(s) to solve complex problems.
In reality, much of a data scientist’s time is spent creating a clean, representative dataset for training. The data challenge becomes that much larger and unwieldly when creating data for a petascale, deep-learning-capable, leadership-class supercomputer like Cori. Data management is sometimes referred to as the Victorian Era Child of the 21st Century – to be seen and not heard. Unfortunately, the challenges associated with Cori-sized datasets simply cannot be ignored.
Prior to joining NERSC, Koziol was director of core software and high-performance computing at the HDF Group, where he spent 11 years developing the HDF5 I/O middleware package and overseeing the group’s HPC development efforts. This makes Koziol a natural to incorporate the versatile HDF5 data model into TensorFlow. HDF5 is a Hierarchical Data Format that can represent very large, complex numerical datasets along with their metadata in a portable format that can be moved between machines. HDF5 1.10.2 is the current, latest version. The specification is open, and the tools are open source. Development of HDF5 is done by the HDF Group, a nonprofit corporation.
The benefits of HDF5 integration into TensorFlow means that scientists can use tools and a data format that have been developed over decades to enable scientists to portably manage even the largest scientific datasets. Portability means the data preprocessing and data cleaning can happen on remote systems using familiar open-source tools and frameworks. Once ready, the data can be moved onto Cori and ingested into TensorFlow. According to Koziol, this helps address the challenge of “How do we get data into the system fast enough?”
Those who are interested can find the scripts and one example of HDF5 integration in the NERSC cori-tf-distributed-examples repository on github. Specifically, https://github.com/NERSC/cori-tf-distributed-examples.
Other work in progress
NERSC is also working to address TensorFlow’s memory consumption issue and speed the collective operations. However, these are non-trivial problems that will take time. As Koziol observes, “The MPI community has been thinking about collectives for about 20 years. TensorFlow is currently only about two years old.”
Along with the per-node memory consumption challenges that must be addressed when using asynchronous training methods, researchers are also rapidly increasing the complexity of the ANNs they use to solve complex problems. Deeper and more complex ANNs utilize more parameters, which further exacerbates the memory consumed per node problem. For example, calculating the gradient for SGD in TensorFlow is becoming an issue even when running on small systems.
The NERSC team has to contend with those issues as well as prefetching and buffering of data used to support the asynchronous operations during training, so the CPU is used as effectively as possible. The large memory of the Intel Xeon Phi nodes helps, as does the fact that the data extraction and training both occur on the CPU, but finding the right configuration can be challenging, Koziol notes. “Sometimes it helps to have a small number of fat nodes,” he observes.
Steps to the future
Koziol emphasizes that deep learning workloads stress the data ingest capabilities of current supercomputers. He hopes future supercomputer designs will incorporate more features to speed data ingest for data-intensive workloads like deep learning.
Current supercomputer designs have focused on burst buffers for checkpoint/restart, a common write-optimized I/O operation used in modeling and simulation software in which the state of the simulation is quickly saved (the checkpoint operation) so that thousands of hours of compute time won’t be lost in the event of a failure. In the unlikely event that something bad does happen, the supercomputer simply reloads the last checkpoint from storage (a restart operation) and continues with the calculation once the problem is fixed. The frequency of the checkpoint operation dictates how much supercomputer runtime will be lost in the event of a failure.
As deep learning becomes an ever more common workload on supercomputers, Koziol envisions a future where supercomputers are specifically designed to support faster data ingest for deep learning and other data-intensive workloads.
The NERSC Cori supercomputer has made the training of deep-learning ANNs a member of the petascale application club. Now the NERSC data management team is working to make this petascale capability available to its users to facilitate their ability to perform leading-edge science. Incorporating HDF5 into TensorFlow is an excellent beginning to making TensorFlow a petascale-capable platform for deep learning.
Rob Farber is a global technology consultant and author with an extensive background in HPC and advanced computational technology that he applies at national labs and commercial organizations. He can be reached at [email protected]