GPU上的无畏并发:在Rust中进行安全的GPU推理,与vLLM/SGLang竞争 [R]

Reddit r/MachineLearning 论文

摘要

cuTile Rust 引入了一种基于块(tile)的编程模型,利用 Rust 的所有权机制来保证 GPU 内核的内存安全和无数据竞争,基于该模型构建的 Grout 推理引擎在 Qwen3 模型上实现了与 vLLM/SGLang 相当的吞吐量。

我是 cuTile Rust 的维护者,刚刚发布了论文《GPU上的无畏并发》。随着越来越多的 GPU 代码由 AI 生成,瓶颈已从编写代码转移到信任代码。cuTile Rust 允许您编写或生成 GPU 内核,其内存安全和无数据竞争性通过 Rust 的所有权和借用检查由编译器验证。这些保证是构造性获得的。它是一种基于块的编程模型,下降为 CUDA Tile IR,将 Rust 的所有权模型跨越启动边界。您将可变输出分割为不相交的可变子张量,将输入作为共享引用传递,并编写具有单线程语义的块内核,编译器将其映射到线程块。端到端地,我们与 Hugging Face 合作,在 cuTile Rust 上构建了 Grout,一个 Qwen3 推理引擎。在 batch-1 解码中,它在 RTX 5090 上对 Qwen3-4B 达到 171 tok/s,在 B200 上对 Qwen3-32B 达到 82 tok/s,与 vLLM 和 SGLang 相当。Batch-1 解码受内存带宽限制,Grout 的吞吐量与我们的 HBM 屋顶线分析一致。目前,Grout 的许多内核仍使用不安全路径,但它们可以迁移到安全变体,为生成的内核提供可验证的目标。我们已在仓库的 cutile-kernels crate 中开始收集此类内核。如果您对此感兴趣,贡献安全变体有助于建立一个安全、高性能内核的库,未来的内核综合可以从中汲取灵感。在内核方面,安全性实际上是免费的。在 B200 上,安全 GEMM 与手写底层版本相差不到 0.3%(约为密集 f16 峰值的 92%),逐元素操作达到约 7 TB/s,与 cuTile Python 在测量误差范围内一致。还有一些值得注意的额外说明:Grout 是 batch-1 的,支持的模型集较小(研究案例,非即插即用服务器),仅限 NVIDIA(下降为 Tile IR),并且 GEMM 在某些大小上仍略逊于 cuBLAS。 - 论文:https://arxiv.org/abs/2606.15991 - 代码:https://github.com/nvlabs/cutile-rs - Grout:https://github.com/huggingface/grout 希望您喜欢这篇论文并学到新东西!乐于回答任何问题 :)
查看原文

相似文章