Sirius:一个GPU原生的SQL引擎
Sirius是一个为DuckDB提供即插即用加速的GPU原生SQL引擎,未来也可应用于其他数据系统。该团队近期发表了一篇文章,详细阐述了Sirius的架构,并展示了其在TPC-H SF100基准测试中的先进性能。
作为DuckDB的一个扩展实现,Sirius无需修改DuckDB的代码库,仅对用户接口进行了极小的改动。在执行层面,Sirius采用通用的Substrait格式消费查询计划,确保了与其他数据系统的兼容性。为最大限度地减少工程投入并提升可靠性,Sirius构建于成熟的某机构库之上:
- 某机构 cuDF:专为GPU设计的高性能列式关系运算符(例如,连接、聚合、投影)。
- 某机构 RAPIDS内存管理器 (RMM):一个高效的GPU内存分配器,可减少碎片和分配开销。
Sirius在这些高性能库之上构建其GPU原生执行引擎和缓冲管理,同时复用了DuckDB的高级子系统——包括其查询解析器、优化器,以及在适当情况下的扫描运算符。这种成熟生态系统的结合为Sirius提供了先发优势,使其能够以最小的工程努力打破ClickBench纪录。
如图2所示,整个处理流程始于Sirius从DuckDB内部格式接收已优化的查询计划,确保了稳健的逻辑和物理优化得以保留。对于表扫描,Sirius调用DuckDB的扫描功能,该功能提供了如最小-最大过滤、区域跳过和即时解压等特性——这些操作高效地将相关数据加载到主机内存中。
接下来,表扫描的结果会从DuckDB的原生格式转换为Sirius数据格式(与Apache Arrow高度一致),然后传输到GPU内存。在像ClickBench这样的基准测试中,Sirius可以在GPU上缓存频繁访问的表,从而加速重复查询的执行。
Sirius格式可以直接映射到 cudf::table,实现零拷贝互操作性,使得所有剩余的SQL运算符(聚合、投影和连接)能够通过cuDF原语以GPU速度执行。一旦计算完成,结果将传回CPU,转换为DuckDB期望的输出格式,并返回给用户——既提供了原始速度,又提供了无缝、熟悉的分析体验。
在ClickBench上斩获第一
在Lambda Labs提供的某机构GH200 Grace Hopper超芯实例(每小时1.5美元)上运行的Sirius,与ClickBench排名前五的系统进行了评估。对比系统运行在纯CPU实例上——某中心A的c6a.metal(每小时7.3美元)、某中心A的c8g.metal-48xl(每小时7.6美元)和某中心A的c7a.metal-48xl(每小时9.8美元)。按照ClickBench的方法论,报告了热运行执行时间和相对运行时间,数值越低表示性能越好,1.0代表最佳可能得分。图3显示了所有基准查询的相对运行时间的几何平均值。在ClickBench运行中,Sirius在更便宜的硬件上实现了最低的相对运行时间,在此设置下,其成本效益至少提高了7.2倍。
图4展示了Sirius与ClickBench中排名前两位的系统Umbra和DuckDB的热运行查询性能。得益于通过cuDF实现的GPU高效计算,Sirius在大多数查询中实现了最低的相对运行时间。例如,在q4、q5和q18中,Sirius在过滤、投影和聚合等常用操作符上显示出显著的性能提升。
然而,一些查询也揭示了未来改进的空间。例如,q23的瓶颈在于字符串列上的“包含”操作,q24和q26受限于Top-N操作符,q27则受限于对巨大输入的聚合操作。Sirius的未来版本将包括对这些操作符的持续改进。
图5深入分析了ClickBench中最复杂的查询之一:正则表达式查询(q28)。如果简单地在GPU上实现正则表达式匹配,可能会产生巨大的内核,导致高寄存器压力和复杂控制流,从而严重降低性能。为了解决这个问题,Sirius利用cuDF的即时编译字符串转换框架来处理用户定义函数。图5比较了JIT方法与cuDF预编译API的性能,结果显示有13倍的加速。JIT转换后的内核达到了85%的warp占用率,而预编译版本仅为32%,这表明GPU利用率更高。通过将正则表达式分解为标准字符串操作(如字符比较和子字符串操作),cuDF JIT框架可以将这些操作融合到一个内核中,从而提高数据局部性并减少寄存器压力。
Sirius的未来展望
展望未来,Sirius计划集成某机构正在开发的用于GPU数据处理的新基础性、可共享构建模块。这些构建模块遵循可组合法典中描述的模块化、可互操作、可组合、可扩展(MICE)原则。优先领域包括:
- 高级GPU内存管理:制定稳健的策略来高效管理GPU内存,包括将数据无缝溢出到物理GPU限制之外,以保持性能和规模。
- GPU文件读取器和智能I/O预取:集成具有智能预取功能的GPU原生文件读取器,以加速数据加载,最大限度地减少停顿并减少I/O瓶颈。
- 面向管道的执行模型:将Sirius的核心发展为完全可组合的管道架构,简化GPU、主机和磁盘之间的数据流,有效地重叠计算和通信,同时实现对开放标准的即插即用互操作性。
- 可扩展的多节点、多GPU架构:扩展Sirius的能力,使其能够高效地扩展到多个节点和多个GPU,解锁PB级数据处理。
通过投资这些符合MICE原则的组件,Sirius旨在使GPU分析引擎更易于构建、集成和扩展——不仅仅是Sirius,而是惠及整个开源分析生态系统。
加入Sirius社区
Sirius采用宽松的Apache许可证2.0开源。该项目由某大学主导,并得到某机构的支持,欢迎所有致力于推动数据分析GPU时代的研究人员和从业者贡献自己的力量。FINISHED