ai技术与ai软件(谈谈AI基础软件生态)

NVidia最近因为两件事情经常上新闻,一是收购ARM,二是RTX 30显卡推出。这家公司主要干两件事,一是卖玩游戏的显卡GPU(2C生意),二是卖AI和HPC(高性能计算)用途的计算GPU(数据中心生意)。今天我们就谈一下这个数据中心生意。

数据中心生意在NVidia的重要性正越来越高。所有用过NVidia产品做过深度学习工作的人,对其中包含的基础软件——CUDA——都是非常熟悉的。这里我们简单聊下CUDA在生意中所处的关键位置、CUDA的竞争对手在干什么、以及开发者、创业者应该如何选择。

1. CUDA带来的供应商锁定

下图是NVidia CEO黄仁勋在GTC 2019上的一页slide:

ai技术与ai软件(谈谈AI基础软件生态)(1)

这一页很关键,因为它描述了NVidia数据中心业务的全貌,重要的模块,以及背后的关键想法。我们可以看到CUDA,以及更高一层的CUDA-X,是连接所有上层AI框架、服务与应用,以及下层工作站、服务器和云端硬件的基础软件。从2007年CUDA推出以来,经过13年的发展,CUDA/CUDA-X已经变成了一个规模巨大的基础软件库,覆盖异构计算编程语言(CUDA C/C )、编译器(nvcc)、指令集(PTX)、单源代码异构计算API(CUDA Runtime API),以及大量的编程库,例如:cuBLAS(高性能线性代数)、cuFFT、CUDA Math Lib、cuDNN(深度神经网络)、TensorRT(深度学习推理)、Jarvis(对话)、DeepStream(视频理解)、Dali(图像解码)、等等。

这么大量的技术背后,是巨大的投入(每年数亿到10亿美元计)。NVidia为什么愿意坚持这么多年做这么大量的投资?可以简单地用技术经济领域的“微笑曲线”理论来解释。

ai技术与ai软件(谈谈AI基础软件生态)(2)

“微笑曲线”是台湾宏基电脑董事长施振荣在1992年提出的,曲线分成左中右三段,左段为技术、专利,中段为组装、制造,右段为品牌、服务。而Y轴是附加价值,可以看到中段附加值较低,而左右两段附加值高。这个理论我认为适用性很强,很值得学习。NVidia就是通过CUDA和GPU硬件技术,把自己牢牢定位在曲线左侧,通过强大的核心技术来取得竞争先机。

NVidia的核心技术是硬软件一体的,GPU的架构和芯片设计是硬件核心技术,CUDA就是软件的核心技术。这和通用计算领域知名的Wintel联盟形成鲜明的对照(Wintel联盟正是微笑曲线理论提出的背景),在Wintel中,Intel掌握硬件核心技术,而微软掌握软件核心技术,而到了大规模并行计算产业中,这两套核心技术都掌握在了NVidia一家公司手上。

NVidia采用硬件高价、软件免费(但不开源)的方式实现商业变现。整个CUDA的软件和文档都是可以免费下载的,但这个的前提,一是CUDA只支持NVidia自己的硬件,二是软件并不开源。从这点上说,NVidia采取了和Apple很类似的商业化策略,Mac硬件高价 MacOS/iWorks免费。从更广的范围来看,NVidia的业务模式和Apple也是很类似的,当然这是另外的话题。

CUDA是NVidia实现供应商锁定(Vendor Lock-in)的关键环节。很容易理解,CUDA的免费,以及游戏GPU的普及性使得开发者上手非常容易;而大量成熟的库的存在,使得使用CUDA开发AI应用效率更高,效果更好;而当开发者已经在CUDA架构下进行了较长时间的投入积累之后,也就无法轻易转换到其它不兼容的软件架构上面去了,这就保证了NVidia GPU在AI领域长期的低营销成本、高利润的销售。

2. 创造非CUDA生态的努力

在任何领域,供应商锁定都是购买者和竞争对手不喜欢的。因此从CUDA诞生开始,就有其它供应商开发竞争的生态。而实际上,在大部分技术领域,都不是像GPU领域有这么强的市场集中性和技术的不兼容。比如桌面CPU领域,Intel和AMD的x86 CPU,在几十年的时间范围内都是互相兼容的。在数据库领域,也有SQL这样的查询语言标准,实现了相当高程度的不同供应商之间的互操作。

但是竞争生态不是那么容易建立起来的,作为后来者,“选择比努力重要”,光靠投入是不够的(毕竟NVidia每年还在不断大幅投入CUDA研发),必须有聪明的办法。到目前为止,行业尝试了两条不同的路。

第一条路,是建立产业联盟与标准。这里最重要的项目是OpenCL,1.0版本2009年推出,最早的推动者是Apple,也有AMD, IBM, Intel等一众公司参与。今年正好有OpenCL 3.0标准的推出。OpenCL 1.x的支持还是比较广泛的,AMD Radeon和NVidia的GPU在Windows, Linux, Mac平台基本都支持,而大部分手机GPU也有OpenCL driver的支持。但是OpenCL有几个较大的问题,当前很难成为CUDA的替代品:

  1. 支持的平台多,但是性能差。OpenCL除了GPU之外,还支持FPGA、DLA等其它硬件技术,但对于GPU的一些关键特性,比如NVidia的Tensorcore这些,没有支持或者支持很差。而AI应用性能非常重要,所以OpenCL性能出了名的差,就成为阻碍应用的一大障碍。
  2. 没有真正非常投入的厂商。早期最大的支持者Apple已经基本退出。苹果目前对并行计算特别是云端GPU看起来兴趣不大,所以近几年已经改为主推自己的,面向游戏的Metal。而GPU市场的老二AMD,虽然支持OpenCL,但真正的策略是下面讲到的第二条路。所以反而这两年以来,OpenCL最大的支持者变成了在AI领域完全是后来者的Intel(Intel的相关项目叫OneAPI)。
  3. 软件库缺乏。部分因为前两个原因,使得OpenCL软件库上整体投入不够大,软件库质量较差。

第二条路,是想办法和CUDA兼容。这是AMD的ROCm/MIOpen项目采用的策略。AMD的编程模型叫HIP,基本上是一个类似CUDA的东西。AMD提供了一套代码到代码转换的工作(Hipify),让程序员可以转换CUDA代码到HIP代码。

不能说AMD的办法不好,但一来AMD业务重点还是在CPU上,在GPU软件上投入不够大,二来兼容一个领先厂商而又做想做得更好,还是难度非常大的,看看AMD在CPU领域和Intel在过去30年中打得有多辛苦就知道了。所以最后结果是ROCm用得人很少。

所以总体来看,到2019年,这两条路都走的不太顺利。

3. 2020年的新进展

到了今年,基于标准的OpenCL生态有不少动作。一个是6月份SYCL 2020推出,另一个是8月份OpenCL 3.0推出。SYCL基本上等价于CUDA C ,就是单一源代码的C 并行编程的标准。所谓“单一源代码”的意思,就是在GPU上跑和代码和在CPU上跑的代码,可以写在同一个源代码文件里,而且都用C 来写,这个已经被证明是一个并行编程环境好用的基本要求了,所以很重要。有了SYCL之后,一方面并行编程的代码写法实现了标准化,各个厂商可以逐步支持,就能解决开发者写出来的代码只能在NVidia卡上跑的问题,自己的硬件才能卖得出去。另一方面,有了统一编程标准,各软件厂商和开源组织就可以在SYCL上面构建越来越丰富的软件库的生态。

这个方向,本质上是要实现AI基础软件领域,从单一供应商的垂直整合(Vertical Integration),走向多供应商的标准化和模块化(Modularization)的过程。这一过程在很多产业都发生了,比如PC就是计算机的标准化和模块化,在PC以前,不同品牌的计算机上面的软件是不能通用的。

下图是SYCL/OpenCL的一个基本生态图,可以看到很多东西已经到位了,SYCL-BLAS, SYCL-DNN这些库,以及TensorFlow这些框架支持也都存在了。

ai技术与ai软件(谈谈AI基础软件生态)(3)

SYCL这个并不是新东西,在OpenCL 2.x时代的时候,就已经有类似的。但是因为各种原因,没有被广泛采纳。所以OpenCL 3.0的一个主要变化,就是把SYCL这样的模块单独成为标准,而不再是OpenCL大标准本身的一部分。这样模块化的标准,应该可以更好、更灵活地被采纳。以下是一些已经存在的SYCL实现:

  • triSYCL,参考实现
  • hipSYCL,面向AMD ROCm的开源实现
  • ComputeCpp, 来自Codeplay的商业实现
  • clang已经在开发内置的SYCL支持,Intel会推动合并到上游LLVM.

目前看起来,OpenCL/SYCL的支持正在逐渐变得丰富,未来几年还是可以期待的。

4. 应用开发者、AI框架开发商、AI硬件开发商的选项

应用开发者:目前来看,如果你是使GPU进行云端AI模型训练和推理的开发者,暂时CUDA依然是唯一的选择。除了买N卡,没有别的选择,否则就是自己找罪受。

对于AI框架开发商、AI硬件开发商来说,当下可能问题就会更复杂一些。非CUDA的基础软件还比较弱小,支持他们看起来是投资回报率不高的事情;但另一方面,NVidia的供应商锁定的确让其它人的机会都变小了,而且长期会更小。所以支持非CUDA的生态,可能是谋求变化的长期的好机会。而2020年的非CUDA生态,可能值得再看一眼,是否值得投资。

作者:周枫 关于教育、深度学习、创业和有道的思考。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页