输入“/”快速插入内容

如何突破英伟达垄断

2024年8月12日修改
共识粉碎机|阅读原文
转载请联系原作者取得授权
📌
本期讨论会参与者:
李乐丁老师 , 北极光高级顾问,前百度云主任架构师。
Eric老师 ,清醒异构首席架构师,有丰富的AMD落地训练/推理经验。
王健飞老师 ,NPU架构师,知乎@王健飞。
以及一位资深的 一线ASIC厂商战略负责人。
1 从PyTorch2展开谈CUDA壁垒
PyTorch2整体上有一系列重大更新,虽然进展稍慢,但不影响终局
PyTorch2是2022年下半年发布的,在2021年就开始了宣传,其中 Torch Dynamo (注1) 是Pytorch2.0中最重要的工作。
2.0中最大的功能是torch.compile(),这个功能相当于在用户的Python程序和厂商所需要的图上数据流计算构建了之间的桥梁。 在更早的时候,NV可能不需要这样的表示也能保证性能。但随着算力需求不断扩张,NV也开始需要类似的能力。因此,Torch把这部分提上了官方日程。这对所有的ASIC/DSA厂商来说都是利好,因为这部分工作量相当于Torch自己承担了,并会对用户形成一种广泛的教育。
从目前情况来看进展比预期稍慢,但已经有初步落地效果 ,进展慢的原因包括Torch Expert等功能还未发布;以及并不是100%的模型结构都能稳定翻译出来,仍然会有corner case。
技术上没有风险,预估到2024年会使整个软件栈做得更加鲁棒。 目前Torch提供的两套IR(Intermediate Representation)算子(即ATen算子库和Prims算子库)尚未完全定型,以及Torch Dynamo的Compile系统仍需一年时间的打磨。
注1:Torch Dynamo:Python-level JIT compiler designed to make unmodified PyTorch programs faster. TorchDynamo hooks into the frame evaluation API in CPython ( PEP 523 ) to dynamically modify Python bytecode right before it is executed. It rewrites Python bytecode in order to extract sequences of PyTorch operations into an FX Graph which is then just-in-time compiled with a customizable backend. It creates this FX Graph through bytecode analysis and is designed to mix Python execution with compiled backends to get the best of both worlds — usability and performance.TorchDynamo makes it easy to experiment with different compiler backends to make PyTorch code faster with a single line decorator torch._dynamo.optimize() which is wrapped for convenience by torch.compile()
PyTorch2推出的Prims新算子库与Triton结合可以削弱CUDA壁垒
Torch之前的算子库,叫ATen。这个算子库早时是按照需要添加,没有明确的算子集合的概念。可以说Torch在Python层面是一致的,但在算子层面内部没有一个良好的定义。因此, 非NV厂商想要对接,会发现这些算子定义不够稳定,可能会在一段时间内发生变化,跟踪起来会很麻烦 ,只能pin到Torch的某个稳定版本上进行迭代,这显然不符合客户的预期。 如果是仅在内部使用,无需定义IR,则并不会影响当前的使用。
Torch2.0 提供了另一套名为Prims的算子库。这套算子库将原来的~2,000多个算子拆解成更原子的算子。 Prims算子的优势在于,因为它的数量较少,所以更容易得到厂商更完善的支持。 它的缺点在于,原本是一个宏观的算子,如Attention这样的算子,在Prims算子上会被拆成很多小算子。拆完后,原来对Attention整个算子有加速设计,现在需要把小算子再拼回来,相比更加麻烦。因此,Torch希望可以用Prims来做保底。如果有一些额外设计,则可以从Attention上接入。
Torch2同时添加了新的后端Triton(注2),大致可以理解为类似于Python领域专用的语言,对中间表示进行处理, 接着通过这些中间表示进行优化。最终用IR与GPU相关的中间表示生成代码。如果以CUDA为例,写一个矩阵相乘,如果使用Triton的方法,在某些硬件上能够达到CUDA的90%。若要支持新算子,Torch也有编译的开源栈,能够把一些算子变成Triton的中间表示。实际上,对于AMD与ASIC /DSA 来说,只需要添加一个在Triton上的后端代码生成过程。 因此,Torch2更好地支持了模型编译,这也削弱了CUDA的壁垒。
注2: T riton 是一种类似于 Python 的开源编程语言,它使没有 CUDA 经验的研究人员能够编写高效的 GPU 代码——大多数时候与专家编写的代码相当。 Triton 可以用相对较少的努力达到最高的硬件性能; 例如,它可用于编写 FP16 矩阵乘法内核,其性能可与 cuBLAS 的性能相媲美——这是许多 GPU 程序员无法做到的——不到 25 行代码。 相关研究人员已经使用它来生成比等效的 Torch 实现效率高出 2 倍的内核,官方还是很愿意与社区合作,让每个人都能更轻松地进行 GPU 编程。 Source: https://zhuanlan.zhihu.com/p/617731357
AMD与ASIC /DSA 如何通过PyTorch2追赶CUDA