根据人工智能研究公司 OpenAI 的说法,Nvidia 的图形处理单元太难编程,包括使用 Nvidia 自己的编程工具 CUDA。
这家总部位于旧金山的 AI 初创公司在微软和风险投资公司 Khosla Ventures 的支持下,于周三推出了 1.0 版本,这是一种专门为减轻这种负担而设计的新编程语言,名为 Triton,在一篇链接到 GitHub 源代码的博客文章中有详细介绍。
OpenAI 声称 Triton 可以为 AI 机器学习形式的核心神经网络任务(例如矩阵乘法)提供比 CUDA 编码更易用的优势。
“我们的目标是让它成为 CUDA 深度学习的可行替代方案,”这项工作的负责人、OpenAI 科学家 Philippe Tillet 通过📮告诉 ZDNet。
Triton“适用于尽管拥有良好的软件工程技能但不熟悉 GPU 编程的机器学习研究人员和工程师,”Tillet 说。
该语言来自 OpenAI,它开发了风靡全球的 GPT-3 自然语言处理程序,这一事实可能会使该代码在 AI 领域更加卓越。
该软件以开源形式提供,要求在代码的大量副本的任何分发中包含版权声明和许可。
最初的 Triton 揭幕发生在 Tillet 于 2019 年发表的一篇论文中,当时他还是哈佛大学的一名研究生,还有他的导师 H. T. Kung 和 David Cox。
Tillet 着手解决的问题是如何制作一种比供应商特定的 AI 库(例如 Nvidia 的 cuDNN)更具表现力的语言,这意味着能够处理神经网络中涉及的矩阵的各种操作; 同时具有可移植性,并具有可与 cuDNN 和类似供应商库相媲美的性能。
根据 Tillet 和团队的说法,直接在 CUDA 中对 GPU 进行编程实在是太难了。 例如,为 GPU 编写本机内核或函数“由于 GPU 编程的许多复杂性而非常困难,”Tillet 和团队在帖子中写道。
特别是,正如 Triton 文档所解释的那样,“GPU 在优化局部性和并行性方面仍然极具挑战性”。
但 Tillet 还希望该语言比迄今为止的定制工作更容易编程,基于所谓的“涉及大量手动工作”的“微内核”。 特别是,Triton 被提出作为替代供应商库的两种主要方法的替代方法,这两种方法称为多面体编译和调度语言。
Tillet 选择的是一种称为 tiles 的方法。 在 CUDA 编程中广泛使用的 Tile 将机器学习程序中使用的矩阵分解成片段,这些片段可以有效地分布在共享 SRAM 内存和快速寄存器内存中,并通过多个指令线程并行高效地运行。
然而,在 CUDA 中进行并行化是困难的,因为需要在程序的指令线程之间进行显式同步语句。
Triton 的语义将图块指定为内置类型,这样 Triton 编译器就可以搞清楚这些片段如何在 GPU 的许多核心及其伴随的寄存器中有效分配。
实际上,并行化和优化代码的工作已从语言下推到编译器中。
正如 Tillet 所说,编译器“自动执行各种重要的程序优化”。
“例如,通过查看计算密集型块级操作的操作数,可以将数据自动存储到共享内存中。”
Triton 程序员的高级代码首先转换为中间表示,其灵感来自开源 LLVM 编译器基础结构中的中间表示。 正如 Tillet 在原始论文中所描述的那样,“只需对 LLVM-IR 进行一些数据和控制流扩展,就可以实现各种平铺级优化通道,从而共同实现与供应商库相当的性能。”
然后将中间表示提供给即时编译器,该编译器以最适合共享内存和 GPU 内核寄存器的方式将各种矩阵转换为片段。
JIT 在 GPU 核心内部组织指令线程以从主内存中提取相同的值,称为“内存合并”。 同样,JIT 将这些线程共同感兴趣的数据放入共享内存中以进行高效操作,这称为“共享内存分配”。
正如 Tillet 所描述的,结果是“单线程和自动并行化”的程序。 JIT 正在执行自动调整图块、数据片段的工作,以最有效地将它们分布在核心之间。
在最初的 Triton 论文中,Tillet 提出了一种基于 CUDA 语法的类 C 形式的 Triton。 然而,在这个新的 1.0 版本中,Triton 与 Python 集成在一起。 详细信息在博客文章中有详细说明。
使用 Triton 的好处应该是可以立即加快开发神经网络的一些基本操作。 正如 Tillet 在博文中所说,“它可用于编写与 cuBLAS 性能相匹配的 FP16 矩阵乘法内核”,这是一个实现开源基本线性代数子程序的 Nvidia 库,“这是许多 GPU 程序员无法做到的” 做不到——不到 25 行代码。”
Tillet 说,他在 OpenAI 的超级计算负责人 Chris Berner 的监督下,全职参与 OpenAI 的项目。 但也有几位 OpenAI 工作人员对 Triton 项目的帮助。
“最近,几位 OpenAI 员工和研究人员——都没有 GPU 编程经验——为该项目贡献了代码和想法,”Tillet 告诉 ZDNet。 “我们已经使用它来加速和重写我们的大部分 GPU 内核,我们致力于通过后续版本使其更广泛地适用。”
Tillet 指出,该项目得到了 OpenAI 外部的“有意义的贡献”,其中包括香港科技大学的 Da Yan、微软 DeepSpeed 优化库的团队以及商业 AI 初创公司 Anthropic。
周三的博文没有强调性能指标,只是说 Triton 可以与 CuBLAS 匹敌。 然而,在 Tillet 的原始论文中,该语言的 Triton-C 版本在运行所谓的深度卷积时能够获得比 Nvidia 的 CuDNN 库更好的性能,深度卷积是将输入视为局部相关数据组的操作,例如图像 像素。
请注意,该软件目前仅适用于 Nvidia GPU; 它尚不能用于 AMD 的 GPU,也不能编译为 CPU。 作者邀请对这些芯片感兴趣的合作者加入这项工作。
Tillet 的语言努力出现在 AI 硬件加速领域的一个有趣时刻。 Nvidia 面临来自 Cerebras Systems、Graphcore 和 SambaNova 等 AI 芯片和系统初创公司的激烈竞争。 这些公司都有各种芯片架构,可以将并行计算分配给多个片上内核。 事实上,SambaNova 的芯片有一个所谓的数据流架构,它共享 Triton 的一些原理。
然而,所有这些供应商都不得不开发自己的软件工具来优化 PyTorch 和 TensorFlow 程序到他们计算机的移动。 相比之下,Nvidia 拥有 CUDA 十多年的开发经验和广泛的软件开发人员基础。
可以想象,Triton 可能是竞争对手为其芯片获得广泛的开源所需的新软件工具之一。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。商机网仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 tenspace2022@163.com 举报,一经查实,本站将立刻删除。 本文链接:https://www.315965.com/n/66481.html