Optimizing Foundation Model Inference on a Many-tiny-core Open-source RISC-V Platform
<|reference_start|>Optimizing Foundation Model Inference on a Many-tiny-core Open-source RISC-V Platform: Transformer-based foundation models have become crucial for various domains, most notably natural language processing (NLP) or computer vision (CV). These models are predominantly deployed on high-performance GPUs or hardwired accelerators with highly customized, proprietary instruction sets. Until now, limited attention has been given to RISC-V-based general-purpose platforms. In our work, we present the first end-to-end inference results of transformer models on an open-source many-tiny-core RISC-V platform implementing distributed Softmax primitives and leveraging ISA extensions for SIMD floating-point operand streaming and instruction repetition, as well as specialized DMA engines to minimize costly main memory accesses and to tolerate their latency. We focus on two foundational transformer topologies, encoder-only and decoder-only models. For encoder-only models, we demonstrate a speedup of up to 12.8x between the most optimized implementation and the baseline version. We reach over 79% FPU utilization and 294 GFLOPS/W, outperforming State-of-the-Art (SoA) accelerators by more than 2x utilizing the HW platform while achieving comparable throughput per computational unit. For decoder-only topologies, we achieve 16.1x speedup in the Non-Autoregressive (NAR) mode and up to 35.6x speedup in the Autoregressive (AR) mode compared to the baseline implementation. Compared to the best SoA dedicated accelerator, we achieve 2.04x higher FPU utilization.<|reference_end|>
@article{potocnik2024optimizing,
    title={Optimizing Foundation Model Inference on a Many-tiny-core Open-source
  RISC-V Platform},
    author={Viviane Potocnik, Luca Colagrande, Tim Fischer, Luca Bertaccini,
  Daniele Jahier Pagliari, Alessio Burrello, Luca Benini},
    journal={arXiv preprint arXiv:2405.19284},
    year={2024},
    archivePrefix={arXiv},
    eprint={2405.19284},
    primaryClass={cs.DC cs.AI cs.AR}
}