英伟达CUDAvsAMDROCm生态圈差距研究 时间:2024年1月17日 专家:某AI芯片生态圈资深技术专家主持人:HongjunYou,久谦中台分析师 核心洞察 1.ROCm当前核心痛点: a.兼容只能追赶,不可能超越,转译带来的性能损失难避免 b.底层框架支持不足+算子库丰富度差距大 2.生态圈主要用于训练+推理,提取/变形/加载/存储属于解决数据问题 3.CUDA和ROCm核心区别: a.推出时间:CUDA更早,积累更多,AMD做为后发者起步晚+研发实力上有所差距 b.软件生态:在基础设施上,两者差不多,但丰富度(算子库+算子融合)+ 用户数是当前最大痛点 c.框架迁移:在训练推理过程中,当开发者需要做框架迁移,CUDA这块支持显著优于ROCm d.底层框架支持:ROCm目前在底层框架支持上,只针对少数主流框架, CUDA相对完整很多,且底层框架软件商会优先适配英伟达硬件 e.开元跟闭源:ROCm做为后发者使用开源生态抢占使用者,CUDA则是全闭源 f.编译器:ROCmHCC通用性更强,NVCC只针对英伟达硬件去做的,在使用上专家认为主要是用户习惯的差异,其余差异不大 4.训练和推理对生态圈的依赖度差异:训练上,专家认为优先选择肯定是英伟达,推理端则可能选择其他厂商,AMD这块做到全兼容CUDA会有一定优势 a.训练:精度要求较高,包含前向记算+反向记算,反复验证修改参数 b.推理:只需前向记算即可 5.CNN到Transformer对CUDA壁垒影响:专家认为架构迁移对CUDA壁垒影响有限 a.硬件端:核心基础都是卷积神经网络,但算子设计有所不同,对硬件端提出计算单元核新的要求,从这个角度利好英伟达这类硬件设计能力强的厂商 b.软件生态端:架构转变对ROCm等后进生态圈有利,差距上有所缩小,但专家认为实际上差距还是很大,架构迁移对CUDA壁垒影响有限 6.从生态圈角度出发,训练用英伟达,推理用AMD是否可行:专家认为是可行的,针对大部份情况下,转换成本不高,主要原因是ROCm完全兼容CUDA,ROCmAPI接口完全仿照CUDA做出来 7.ROCm兼容CUDA难点:转译带来性能损失+CUDA算子库更新后需重新适配 a.当英伟达硬件更新,对应算子库更新,ROCm需重新适配,适配过程中, ROCm用户用不了相关功能 b.在同等算力条件下,既使用ROCm转译后,上层还是CUDA,下层换成ROCm软件栈,这块操作系统的改变会带来性能上的受损,实测下来,ROCm相对CUDA性能会差10%左右 目录 Q:生态圈的建立流程?过程中芯片厂商和软件提供商之间的关系如何?-1- Q:横向对比CUDA和ROCm,开发者开发过程包括提取、变形、加载、存储、训练、推理,目前生态圈在哪个环节差异最大?原因是?-1- Q:训练和推理分开来看,推理部分ROCm和CUDA会有非常大的使用体验差异吗?还是说差异主要发生在训练端?-2- Q:PyTorch和TensorFlow唯一差别就在功率?可否理解为算子库之类的要素,更多靠用户使用积累成更多算子库,方便后续新开发者快速提取使用?-3- Q:ROCm更新后,PyTorch要主动对应ROCm做适配,还是ROCm来做?-3-Q:最近AMD和Meta的合作越来越多,减少适配是否不再是主要问题,因为 ROCm升级后可能会出现PyTorch不支持的情况,给用户带来很大影响?-3- Q:从CNN迁移到Transformer架构,对CUDA边际壁垒的影响是?-4- Q:有人认为,过去所有生态圈都是针对CNN架构,当转向Transformer架构 时,过去的积累无法转化,所以对于ROCm生态差距会缩小,您认同吗?-4- Q:硬件端,AMD和英伟达的单卡在技术水平、算力、性能方面的表现都没有太大落差。再加上大模型底层架构改动带来的生态圈改变,差距会缩小,这对CUDA并不好?-4- Q:ROCm作为一个全开源生态的主要逻辑,可否用开源的生态快速获取市场份额?现在MI300硬件的性能有提升,ROCm能快速斩获市场份额吗?-5- Q:现在大模型主要都以pytroch或tensorflow来训,在这种少数框架占据大部份AI推训方式的情况下,对生态圈的广泛性要求是否会下降?-5- Q:现在很多大厂、海外头部CSP向AMD下单,训练端用英伟达,推理端逐步替换一些AMD。ROCm基本完全兼容CUDA,还需要额外工作来帮助完成推理吗?这样配置是否可行,且为了适配,边际投入的时间和成本很低?-5- Q:假设用英伟达的卡做训练,换成AMD的卡做推理,转换难度高吗?-6- Q:因为ROCm在API层面全面仿造CUDA来实现兼容,痛点在于每推出一代新硬件,会有对应的新算子库,需要快速适配,当中的时间差导致ROCm用户没办法使用这些功能?-6- Q:兼容性主要通过转译方式实现,HIPIFY做CUDA转译到ROCm上的动作可能会导性能受损。能否量化平均性能的受损程度,和主要原因?-6- Q:ROCm用的HCC与英伟达用的NVCC,差距主要在哪里?-7-Q:HCC整体通用性更强,NVCC和HCC对用户使用能力的要求有区别吗?-7-Q:目前ROCm只对部份AI用GPU支持,要做全产品系列支持很难吗?-7- Q:AMD为什么不在ROCm生态上适配自己的所有硬件?除了MI系列,一些基本的(包括游戏显卡)是不支持的。-8- Q:CUDA自定义的算子也需要在CUDA生态上自己写吗?写起来跟ROCm比差距大吗?为什么一些特殊的自定义算子从CUDA迁移到ROCm很费力?-8- Q:转译过程中平均耗损10%性能,如果在CUDA上写好,迁移到ROCm上,相同算子在CUDA上实现100%,ROCm只能实现90%,会有这种情况吗?-8- Q:ROCm未来可能会通过扩充用户群、增加硬件销量、增加算子库和支持更多边缘小众框架和软件来发展。您认为未来两三年中是否可能缩小差距?-9- Q:CUDA的优势之一是跟PyTorch形成了2,000多个优化的算子,但PyTorch2.0 将算子缩减到250个,是否会大幅降低ROCm跟PyTorch适配的速度?-9- Q:一种方向是把公共的先做出来、用起来,另一种发展AI编译器,通过编译解决算子?-9- Q:PyTorch对AMD支持不足,是合作关系不够紧密,还是技术问题?-10-Q:目前哪些推理框架用得比较多?-10- Q:CUDA的软件栈比较丰富,ROCm也提供函数加速库,如CUDA有cuDNN,ROCm有MIOpen做匹配,CUDA软件生态更丰富体现在哪里?-10- Q:生态圈的建立流程?过程中芯片厂商和软件提供商之间的关系如何? A:从AI生态圈来讲,AI是由软件加硬件的系统组合而成,所以谈生态圈要结合软件和硬件两者。硬件涉及到芯片供应商,国际上最著名的是英伟达。在硬件之上是AI的基础软件栈,涉及到硬件在系统层的驱动,还有GPU硬件或者AI芯片的运行时库。再者是对用户暴露的API接口,还有一些其他相关库,比如基础数据库、AI算法、图像图形编解码等,这一系列构成了整个AI的软件栈或者称作生态圈,这是针对底层的软件栈。在这之上还有深度学习的编译框架。深度学习框架包含了训练和推理两个方向和应用场景。 训练框架更偏向于应用场景,类似于在操作系统之上的应用软件。训练框架更偏向于给做AI应用的科研机构、高校,提供一个方便使用AI芯片、软件栈的深度学习框架,更专注于做AI模型或者AI的技术研究,而不是专注于技术软件栈或硬件方向。从下往上依次是硬件、操作系统、驱动、运行时编程模型和外部工具、学习框架,构成了整个AI的软件栈或生态。在此基础之上才有了在CV领域内的CNN,以及现在流行的Transformer等AI模型和新技术的应用发展。 从芯片厂商的角度来看,需要从底层一直往上做,可以做到深度学习框架,也可以只做到AI软件栈这一层,给用户提供编程模型和API接口。从这个角度来看,AI芯片厂商做的工作更多一些。而深度学习框架则站在比较宏观和应用角度,所以他们所做的工作相对偏向于应用,与具体的硬件会有一定的差距。软件提供商范围相对宽泛,因为软件的定义很大,做基础软件栈还是做框架,还是做AI模型和应用,大家所处的角色不同,要开发和建立生态圈的流程也会有差别。 Q:横向对比CUDA和ROCm,开发者开发过程包括提取、变形、加载、存储、训练、推理,目前生态圈在哪个环节差异最大?原因是? A:提取,变形,再到存储加载,训练推理,这是从AI偏上层的模型研发或应用开发的角度来讲。AI的三大要素包括算力、算法和数据。提取、变形、加载、存储,更多的是解决数据问题,即怎样获取海量的数据,并通过提取变形把数据转换成或脱离出所需要的信息,用于后续的模型训练。这些过程不仅AI领域使用,包括五六年前的大数据领域,也涉及到提取、变形、加载、存储等过程。 到了AI领域才有了训练,有数据、算法、AI模型、AI芯片强大的算力,就可以实现一个解决特定领域的算法,在AI芯片上通过收集和提取的数据把模型训练出来,训练出来之后再去做后续的推理。推理相当于把模型训练出来之后,对这个模型做应用。 CUDA和ROCm大同小异,从芯片供应商的角度来讲,都是为了给芯片使用者或者AI的开发者,提供一个更方便使用AI芯片、异构计算的计算机模型的软件栈,都是方便用户使用他的CPU或DSA,从这个角度来看,二者解决的需求相同。 二者的区别在于CUDA推出的时间比较早,在2006年的时候,英伟达已经开始推CUDA,当时CUDA比较难用。经过了10多年的发展,2015年开始AI成为比较热门的发展方向。再加 上在图形图像和并行计算领域,英伟达本身就已经是国际上最著名的公司,所以不管是高校还是企业,天然地就会选择N卡。从这个角度来讲,英伟达赶上了这一波风口浪潮,再加上CUDA做并行计算的研发时间要早很多,就带来了这种无与伦比的优势。再者,多年来英伟达在这个方向上持续进行研发投入、高校和企业持续应用CUDA,对其生态的发展都做出巨大贡献,导致目前无论是做训练还是做推理,CUDA都是最优选择。 至于ROCm,在2015年AI浪潮兴起之后,AMD才开始做并行计算、AI计算领域的软件生态,相对来说起步更晚一些。再加上AMD的研发实力也不如英伟达强劲,所以软件栈的丰富度和好用程度相比英伟达的CUDA来说要差很多。并且AMD芯片本身的迭代速度和算力,与英伟达的迭代速度和架构变化发展相比也有不小差距。这一系列因素导致无论是AMD还是国内做GPU的芯片厂商,想用ROCm开源软件栈兼容CUDA方案去做AI技术软件栈都很困难。 总体来说,应该有的东西ROCm基本上都已经有了,比如软件生态中的硬件、AI软件栈、驱动、运行时间模型、加速库、开发环境和工具包,不过相对来说使用人群较少,导致没有那么好用。国内做Android手机操作系统的厂商,尤其是像华为的鸿蒙OS,其实2010年Android操作系统刚推出时也非常难用,现在这么好用是因为在使用中不断发现问题,并持续进行优化,类似于这样一个过程。 ROCm没有踩在合适的时间点,相对落后于CUDA,再加上AMD对ROCm卡的支持欠缺。所以目前使用AMD这套来进行AI模型的训练和推理并不是特别好的选择。 Q:训练和推理分开来看,推理部分ROCm和CUDA会有非常大的使用体验差异吗?还是说差异主要发生在训练端? A:首先要明确训练是什么,推理是什么。训练是一个AI模型或算法,将数据输入给算法,算法反复读取之前收集和整理的数据并进行学习,学习之后更新算法中的权重参数,优化损失函数,使模型精度越来越高,最后使这个模型在解决特定问题时能满足精度要求和实际应用需求。在训练的阶段有前向计算和反向计算,前向计算是把数据让模型运算一遍,观察计算结果是什么。反向计算是把模型前向计算得出的结果与真实模型数据的标签值进行对比,即与数据应该得出的结果对比,比较模型前向计算结果与真实结果的差距,并进行反向调整参数。 推理相对