OpenAI 开源新的 AI 编程语言,以替代 Nvidia CUDA
OpenAI 宣布推出一种类似于 Python 的开源编程语言 Triton,并发布了 Triton 1.0 版本。根据介绍,Triton 可使没有 CUDA 经验的研究人员能够编写高效的 GPU 代码,且大多数情况下可以与专家所能编写的代码质量媲美。
OpenAI 称,Triton 使得以相对较少的努力达到峰值硬件性能成为可能。例如,它可以用不到 25 行代码编写与 cuBLAS 性能相匹配的 FP16 矩阵乘法内核,这是许多 GPU 程序员无法做到的。“我们的研究人员已经使用它来生成效率比同等 Torch 实现高 2 倍的内核,我们很高兴与社区合作,使 GPU 编程对每个人来说都变得更加容易。”
OpenAI 指出,一些在使用 CUDA 框架时被认为相当有挑战性的问题都在 Triton 中得到了解决。与 CUDA 中的编码相比,Triton 可以为一些处于 AI 机器学习形式核心的神经网络任务(例如矩阵乘法)提供显着的易用性优势。Triton 语言会自动执行许多 AI 代码优化,以节省开发人员的时间;其拥有的相对简单性还可以使没有丰富 CUDA 编程经验的软件团队能够创建比其他方法更高效的算法。
OpenAI 科学家、也是该项目的负责人 Philippe Tillet 向 ZDNet 表示,他们的目的就是让 Triton 成为深度学习中 CUDA 的一个可行的替代方案。“Triton 是为那些尽管拥有良好的软件工程技能但却不熟悉 GPU 编程的机器学习研究人员和工程师准备的”。Triton 第一次出现在公众的视野是在 Tillet 于 2019 年发表的一篇论文中。
根据介绍,Triton 通过优化在 Nvidia 芯片上运行的机器学习算法处理数据的工作流的三个核心步骤来提高 AI 性能:
第一步是在 GPU 的 DRAM 和 SRAM 存储器电路之间移动数据的任务。GPU 在不活跃时将信息存储在 DRAM 中,并将其传输到 SRAM 内存以执行计算。两个组件之间的数据传输速度越快,机器学习算法运行的速度就越快,这就是为什么开发人员将优化计算工作流的这一方面作为 AI 项目的一部分而优先考虑。优化过程包括将从 DRAM 移动到 SRAM 的数据块合并为大型信息单元。OpenAI 表示,Triton 会自动执行任务,从而为开发人员节省时间。
Triton 优化的第二个计算步骤是将传入的数据块分配到 GPU 的 SRAM 电路中,以便尽可能快地分析它们。此步骤中涉及的主要挑战之一是避免所谓的内存库冲突,指的是两个软件意外地试图将数据写到同一个内存段的情况。内存库冲突会阻碍计算,直到它们得到解决;这意味着通过减少此类错误发生的频率,开发人员可以加快其 AI 算法的性能。
Tillet 解释称:“数据必须在重新使用之前手动存储到 SRAM 中并进行管理,以最大限度地减少检索时的共享内存库冲突。”
第三个也是最后一个任务,Triton 帮助实现自动化;涉及的不是 GPU 的存储单元,而是其 CUDA 核心,即负责对存储在内存中的数据进行计算的计算电路。单个 Nvidia 数据中心 GPU 有数千个这样的电路。它们允许芯片同时执行大量计算。
为了最大限度地提高 AI 模型的性能,开发人员必须将其配置为将计算分布在多个 CUDA 核心上;以便它们可以同时完成,而不是一个接一个地完成。Triton 也可以将这项工作自动化,尽管只是部分自动化。它没有自动化整个工作流程的原因是因为,OpenAI 试图让开发人员能够灵活地根据需要为他们的项目手动定制流程。
Tillet 透露,该团队已经用 Triton 来加速和重写了其大部分的 GPU 内核,并致力于通过后续版本使它的适用性更加广泛。值得注意的是,该软件目前只适用于 Nvidia 的 GPU;还不能用于 AMD 的 GPU,也不能编译到 CPU。
详情可查看官方博客。
