Skip to content

Latest commit

 

History

History
83 lines (59 loc) · 6.55 KB

ch1.md

File metadata and controls

83 lines (59 loc) · 6.55 KB

Chapter 1: Overview

1.1 Overview

The performance of Deep Learning applications depends upon the efficiency of performance pipelines that can load and preprocess data efficiently to provide a high throughput. The pipelines are typically used to perform tasks such as loading and decoding data, perform a variety of augmentations, perform color-format conversions, etc., before passing the data for training or inference. The Deep Learning frameworks also require the pipelines to support multiple data formats and augmentations to adapt to a variety of datasets and models.

This can be achieved by creating processing pipelines that fully utilize the underlying hardware capabilities.

ROCm™ Augmentation Library (rocAL™) allows the user to create hybrid pipelines to maximize the throughput for Machine Learning applications. It helps to create pipelines that can efficiently process images, videos, and a variety of storage formats. The user can program these pipelines using C or Python API. rocAL significantly accelerates data processing on AMD processors.

To optimize the preprocessing pipeline, rocAL utilizes the following features:

  • Prefetching: Loads the data for the next batch while the existing batch is under process. This parallelization allows more batches to be processed in less time.
  • Hybrid execution: Utilizes both the CPU and GPU simultaneously. For example, decoding the data on the CPU while running the training on the GPU. 
  • Hardware decoding: Uses the AMD VCN and VA-API to efficiently decode data on the hardware. 
  • Batch processing: Groups and processes the data together as a batch.

The Role of Pipelines in Deep Learning Applications

Figure 1. The Role of Pipelines in Deep Learning Applications

1.2 Key Components

  • CPU- or GPU-based implementation for each augmentation and data_loader nodes
  • Python and C APIs for easy integration and testing
  • Multiple framework support and portable on PyTorch, TensorFlow, and MXNet
  • Flexible graphs to help the user create custom pipelines
  • Multicore host and multi-gpu execution for the graph
  • Support for various augmentations such as fish-eye, water, gitter, non-linear blend, etc., using the AMD ROCm Performance Primitive (RPP) library
  • Support for classification, object detection, segmentation, and keypoint data pipelines

1.3 Third-party Integration

rocAL provides support for many operators. The module imports are designed like other available data loaders for a smooth integration with training frameworks. The rocal_pybind package provides support for integrating with PyTorch, TensorFlow, and Caffe2. rocAL also supports many data formats such as FileReader, COCO Reader, TFRecordReader, and Lightning Memory-Mapped Database (LMDB), thus offering a unified approach to framework integration.

1.4 rocAL Operators

rocAL operators offer the flexibility to run on CPU or GPU for building hybrid pipelines. They also support classification and object detection on the workload. Some of the useful operators supported by rocAL are listed below:

  • Augmentations: These are used to enhance the data set by adding effects to the original images. To use the augmentations, import the instance of amd.rocal.fn. into the Python script. These augmentation APIs further call the RPP kernels underneath (HIP/HOST) depending on the backend used to build RPP and rocAL. 

Table 1. Augmentations Available through rocAL

Color Augmentations Effects Augmentations Geometry Augmentations
Blend Fog Crop
Blur Jitter Crop Mirror Normalization
Brightness Pixelization Crop Resize
Color Temperature Raindrops Fisheye Lens
Color Twist Snowflakes Flip (Horizontal, Vertical, and Both)
Contrast Salt and Pepper Noise Lens Correction
Exposure Random Crop
Gamma Resize
Hue Resize Crop Mirror
Saturation Rotation
Vignette Warp Affine
  • Readers: These are used to read and understand the different types of datasets and their metadata. Some examples of readers are list of files with folders, LMDB, TFRecord, and JSON file for metadata. To use the readers, import the instance of amd.rocal.readers into the Python script.

Table 2. Readers Available through rocAL

Readers Description
File Reader Reads images from a list of files in a folder(s)
Video Reader Reads videos from a list of files in a folder(s)
Caffe LMDB Reader Reads (key, value) pairs from Caffe LMDB
Caffe2 LMDB Reader Reads (key, value) pairs from Caffe2 LMDB
COCO Reader – file source and keypoints Reads images and JSON annotations from COCO dataset
TFRecord Reader Reads from a TFRecord dataset
MXNet Reader Reads from a RecordIO dataset
  • Decoders: These are used to support different input formats of images and videos. Decoders extract data from the datasets that are in compressed formats such as JPEG, MP4, etc. To use the decoders, import the instance of amd.rocal.decoders into the Python script.

Table 3. Decoders Available through rocAL

Decoders Description
Image Decodes JPEG images
Image_raw Decodes images in raw format
Image_random_crop Decodes and randomly crops JPEG images
Image_slice Decodes and slices JPEG images

To see examples demonstrating the usage of decoders and readers, click here