Pushing the Performance Envelope of DNN-based Recommendation Systems Inference on GPUs
Abstract
Personalized recommendation is a ubiquitous application on the internet, with many industries and hyperscalers extensively leveraging Deep Learning Recommendation Models (DLRMs) for their personalization needs (like ad serving or movie suggestions). With growing model and dataset sizes pushing computation and memory requirements, GPUs are being increasingly preferred for executing DLRM inference. However, serving newer DLRMs, while meeting acceptable latencies, continues to remain challenging, making traditional deployments increasingly more GPU-hungry, resulting in higher inference serving costs. In this paper, we show that the embedding stage continues to be the primary bottleneck in the GPU inference pipeline, leading up to a 3.2x embedding-only performance slowdown. To thoroughly grasp the problem, we conduct a detailed microarchitecture characterization and highlight the presence of low occupancy in the standard embedding kernels. By leveraging direct compiler optimizations, we achieve optimal occupancy, pushing the performance by up to 53%. Yet, long memory latency stalls continue to exist. To tackle this challenge, we propose specialized plug-and-play-based software prefetching and L2 pinning techniques, which help in hiding and decreasing the latencies. Further, we propose combining them, as they complement each other. Experimental evaluations using A100 GPUs with large models and datasets show that our proposed techniques improve performance by up to 103% for the embedding stage, and up to 77% for the overall DLRM inference pipeline.
Cite
@article{arxiv.2410.22249,
title = {Pushing the Performance Envelope of DNN-based Recommendation Systems Inference on GPUs},
author = {Rishabh Jain and Vivek M. Bhasi and Adwait Jog and Anand Sivasubramaniam and Mahmut T. Kandemir and Chita R. Das},
journal= {arXiv preprint arXiv:2410.22249},
year = {2024}
}
Comments
This work has been accepted in the 57th MICRO (https://microarch.org/micro57/program/). Please check appendix for details on reproducing our work including codebase and steps