  Hardware accelerators such as GPUs are required for real-time, low-latency
inference with Deep Neural Networks (DNN). However, due to the inherent limits
to the parallelism they can exploit, DNNs often under-utilize the capacity of
today's high-end accelerators. Although spatial multiplexing of the GPU, leads
to higher GPU utilization and higher inference throughput, there remain a
number of challenges. Finding the GPU percentage for right-sizing the GPU for
each DNN through profiling, determining an optimal batching of requests to
balance throughput improvement while meeting application-specific deadlines and
service level objectives (SLOs), and maximizing throughput by appropriately
scheduling DNNs are still significant challenges. This paper introduces a
dynamic and fair spatio-temporal scheduler (D-STACK) that enables multiple DNNs
to run in the GPU concurrently. To help allocate the appropriate GPU percentage
(we call it the "Knee"), we develop and validate a model that estimates the
parallelism each DNN can utilize. We also develop a lightweight optimization
formulation to find an efficient batch size for each DNN operating with
D-STACK. We bring together our optimizations and our spatio-temporal scheduler
to provide a holistic inference framework. We demonstrate its ability to
provide high throughput while meeting application SLOs. We compare D-STACK with
an ideal scheduler that can allocate the right GPU percentage for every DNN
kernel. D-STACK gets higher than 90 percent throughput and GPU utilization
compared to the ideal scheduler. We also compare D-STACK with other GPU
multiplexing and scheduling methods (e.g., NVIDIA Triton, Clipper, Nexus),
using popular DNN models. Our controlled experiments with multiplexing several
popular DNN models achieve up to 1.6X improvement in GPU utilization and up to
4X improvement in inference throughput.
