Hardware-Assisted Virtualization of Neural Processing Units for Cloud Platforms
<|reference_start|>Hardware-Assisted Virtualization of Neural Processing Units for Cloud Platforms: Cloud platforms today have been deploying hardware accelerators like neural processing units (NPUs) for powering machine learning (ML) inference services. To maximize the resource utilization while ensuring reasonable quality of service, a natural approach is to virtualize NPUs for efficient resource sharing for multi-tenant ML services. However, virtualizing NPUs for modern cloud platforms is not easy. This is not only due to the lack of system abstraction support for NPU hardware, but also due to the lack of architectural and ISA support for enabling fine-grained dynamic operator scheduling for virtualized NPUs.   We present Neu10, a holistic NPU virtualization framework. We investigate virtualization techniques for NPUs across the entire software and hardware stack. Neu10 consists of (1) a flexible NPU abstraction called vNPU, which enables fine-grained virtualization of the heterogeneous compute units in a physical NPU (pNPU); (2) a vNPU resource allocator that enables pay-as-you-go computing model and flexible vNPU-to-pNPU mappings for improved resource utilization and cost-effectiveness; (3) an ISA extension of modern NPU architecture for facilitating fine-grained tensor operator scheduling for multiple vNPUs. We implement Neu10 based on a production-level NPU simulator. Our experiments show that Neu10 improves the throughput of ML inference services by up to 1.4$\times$ and reduces the tail latency by up to 4.6$\times$, while improving the NPU utilization by 1.2$\times$ on average, compared to state-of-the-art NPU sharing approaches.<|reference_end|>
@article{xue2024hardware-assisted,
    title={Hardware-Assisted Virtualization of Neural Processing Units for Cloud
  Platforms},
    author={Yuqi Xue, Yiqi Liu, Lifeng Nai, Jian Huang},
    journal={arXiv preprint arXiv:2408.04104},
    year={2024},
    archivePrefix={arXiv},
    eprint={2408.04104},
    primaryClass={cs.AR cs.AI cs.LG cs.OS}
}