NVIDIA|NVIDIA独家绝技 CUDA正在被赶下神坛?

在过去十年中,机器学习软件开发的格局发生了重大变化 。许多框架来来去去,但大多数都严重依赖于利用 Nvidia 的 CUDA,并且在 Nvidia GPU 上表现最佳 。
然而,随着 PyTorch 2.0 和 OpenAI 的 Triton 的到来,英伟达在该领域主要依靠其软件护城河的主导地位正在被打破 。
笔者认为,机器学习模型的默认软件堆栈将不再是 Nvidia 的闭源 CUDA 。球在 Nvidia 的球场上,他们让 OpenAI 和 Meta 控制了软件堆栈 。
由于 Nvidia 的专有工具失败,该生态系统构建了自己的工具,现在 Nvidia 的护城河将被永久削弱 。
TensorFlow 与 PyTorch
几年前,框架生态系统相当分散,但 TensorFlow 是领跑者 。谷歌看起来准备控制机器学习行业 。他们凭借最常用的框架 TensorFlow 以及通过设计/部署唯一成功的 AI 应用特定加速器 TPU 获得了先发优势 。
NVIDIA|NVIDIA独家绝技 CUDA正在被赶下神坛?
文章图片

相反,PyTorch 赢了 。谷歌未能将其先发优势转化为对新兴 ML 行业的主导地位 。
如今,谷歌在机器学习社区中有些孤立,因为它不使用 PyTorch 和 GPU,而是使用自己的软件堆栈和硬件 。按照典型的谷歌方式,他们甚至还有一个名为 Jax 的第二个框架,它直接与 TensorFlow 竞争 。
由于大型语言模型,尤其是来自 OpenAI 和使用 OpenAI API 或正在构建类似基础模型的各种初创公司的大型语言模型,谷歌在搜索和自然语言处理方面的主导地位甚至没完没了 。
虽然我们认为这种厄运和阴霾被夸大了,但这是另一个故事 。尽管存在这些挑战,谷歌仍处于最先进机器学习模型的前沿 。他们发明了transformers ,并在许多领域(PaLM、LaMBDA、Chinchilla、MUM、TPU)保持最先进的水平 。
回到为什么 PyTorch 赢了 。虽然谷歌在争夺控制权方面存在一些因素,但这主要是由于 PyTorch 与 TensorFlow 相比具有更高的灵活性和可用性 。
如果我们将其归结为第一个主要级别,PyTorch 与 TensorFlow 的不同之处在于使用“ Eager mode ”而不是“ Graph Mode ” 。
Eager 模式可以被认为是一种标准的脚本执行方法 。深度学习框架会像任何其他 Python 代码一样,逐行立即执行每个操作 。这使得调试和理解您的代码更容易,因为您可以看到中间操作的结果并查看您的模型的行为方式 。
相反,Graph 模式有两个阶段 。第一阶段是表示要执行的操作的计算图的定义 。计算图是一系列相互连接的节点,表示操作或变量,节点之间的边表示它们之间的数据流 。第二阶段是延迟执行计算图的优化版本 。
这种两阶段方法使理解和调试代码更具挑战性,因为在图形执行结束之前您无法看到发生了什么 。这类似于“解释”与“编译”语言,如 Python 与 C++ 。调试 Python 更容易,主要是因为它是解释型的 。
虽然 TensorFlow 现在默认具有 Eager 模式,但研究社区和大多数大型科技公司已经围绕 PyTorch 安定下来 。
机器学习训练组件
如果我们将机器学习模型训练简化为最简单的形式,那么机器学习模型的训练时间有两个主要的时间组成部分 。
1、计算 (FLOPS):在每一层内运行密集矩阵乘法
2、内存(带宽):等待数据或层权重到达计算资源 。带宽受限操作的常见示例是各种规范化、逐点操作、SoftMax和ReLU? 。
过去,机器学习训练时间的主导因素是计算时间,等待矩阵乘法 。随着 Nvidia 的 GPU 不断发展,这很快就不再是主要问题 。
Nvidia 的 FLOPS 通过利用摩尔定律提高了多个数量级,但主要是架构变化,例如张量核心和较低精度的浮点格式 。相比之下,存储并没有走同样的道路 。