Tilus: A Virtual Machine for Arbitrary Low-Precision GPGPU Computation in LLM Serving

文章标题: Tilus:一种用于LLM服务中任意低精度GPGPU计算的虚拟机
作者/机构: Yaoyao Ding (University of Toronto), Bohan Hou (Carnegie Mellon University), Xiao Zhang (University of Toronto), Allan Lin (University of Waterloo), Tianqi Chen (Carnegie Mellon University), Cody Yu Hao (Anyscale), Yida Wang (Amazon), Gennady Pekhimenko (University of Toronto)


A1 主要贡献

核心问题:大型语言模型(LLM)服务对计算资源,特别是内存带宽和计算吞吐量,提出了巨大需求。低精度计算是提高效率的关键技术,但现有方法存在局限。用于生成低精度计算核心(kernel)的方法通常仅限于位宽为2的幂的权重,并且由于高级GPU编程抽象的限制,性能欠佳。这些抽象限制了精细的寄存器管理和优化的内存访问模式等关键优化。例如,4位量化虽能显著节省计算资源,但仍有不可忽视的精度损失;而5到7位量化能缓解精度损失,却缺乏高效的GPU核心支持,导致其应用受阻。

研究目标:为了解决现有低精度计算核心生成方法的覆盖范围和性能差距,本文旨在设计一个能够支持任意位宽(1-8位)低精度数据类型,同时保持GPU可编程性和高性能的系统。

创新点
本文提出了Tilus,一个专为低精度计算设计的通用GPU(GPGPU)虚拟机,其核心贡献如下:
1. 提出一个专用于低精度计算的GPGPU虚拟机:该虚拟机旨在解决现有方法在支持任意位宽(如5-7位)量化方面的覆盖不足和性能不佳的问题。
2. 新颖的代数布局系统(Algebraic Layout System):Tilus引入了一个代数布局系统,用于精确描述张量元素在一个tile(数据块)内如何在GPU线程间分布。该系统能够灵活地将寄存器中的低精度tile重新解释(reinterpret)为硬件友好的数据类型tile,从而实现高效处理。
3. 带分层内存空间的线程块级编程模型:Tilus提供了一个线程块级的编程模型,并显式暴露了GPU的分层内存空间。这使得开发者能够对数据在GPU内存层次结构中的移动、放置和计算进行精细控制。
4. 支持任意位宽的低精度数据类型:Tilus原生支持1到8位范围内的任意位宽数据类型,包括有符号整数、无符号整数和浮点数,极大地扩展了低精度计算的应用范围。

通过广泛评估,Tilus不仅能生成覆盖整个低精度范围的高效核心,并且在其支持的核心上,性能超越了当前最先进的解决方案,最高可达2.6倍。


A3 背景知识

2.1 LLM服务与量化

2.2 GPGPU编程

2.3 GPGPU语言与编译器


A2 方法细节

3. 系统概述

3.1 关键思想

3.2 虚拟机程序示例

4. 代数布局系统

4.1 参数化的基本布局

4.2 布局组合

5. 线程块级编程模型

5.1 状态空间和类型系统

5.2 程序结构和控制流

5.3 线程块级指令集

6. 任意低精度数据类型

6.1 低精度数据的存储

6.2 在LLM中高效支持低精度

7. 实现


A4 实验

实验环境

实验结果

8.2 低精度核心性能

8.3 任意数据类型支持

8.4 端到端性能

8.5 案例研究


A5 结论

本文介绍了Tilus,一个为高效低精度LLM服务设计的GPGPU虚拟机,它解决了现有解决方案的关键局限性。Tilus的核心特性包括:用于线程块寄存器内张量分布的代数布局系统,具有精细内存管理的线程块级编程模型,以及对1到8位任意精度的子字节数据类型的广泛支持。实验结果表明,与Triton和Ladder等最先进的框架相比,Tilus取得了显著的性能提升,展示了其方法的灵活性和可扩展性。这项工作为高效和可扩展的LLM推理奠定了基础,为在新兴硬件、先进量化技术和多样化低精度格式方面的进一步优化铺平了道路。


A6 附录

A. 布局形式化

B. 优化的矩阵乘法

C. 程序编译和运行时

D. 量化核心的性能分析