首先声明,我不是卖卡的,至少截止2023年12月12日我都不是,所以个人认为我能相对公正的描述客观事实,写这个的目的是因为第一篇文章有读者朋友提到了能不能出一期CUDA和非CUDA生态的对比,所以有了这篇文章。
什么是CUDA就不解释了,各位读者大爷可能比我还了解,至于为什么说CUDA厉害,我相信很多人也会举很多例子,包括但不限于:
主动被动代码
SIMD
Threads,Blocks,Grids
包含了API、C编译器等极其方便的调度体系
利用片内L1 Cache共享数据,使数据不必经过内存-显存的反复传输 shader之间甚至可以互相通信
其实要想写能写整整一篇,那这些能力是不是别的硬件服务商不具备呢?
我们先拿AMD来说事吧,因为纸面数据上据称对LLM优化的MI300X在很多维度已经超过H100了例如:
HBM3管够!
晶体管达到1530亿是目前全球最大的逻辑处理器比H100多700亿
内存达到了192GB,内存带宽为5.2TB/s,虽然H100NVL可以,但是那是两块卡
CPU部分集成了24个ZEN4内核
GPU部分集成了6块使用CDNA3架构的芯片统一内存可降低不同内存间来回复制、同步和转换数据所导致的编程复杂性,采用3D堆叠优于H100的2.5D
甚至从A100/MI200的时代,AMD就拿算力说过事,可以在他们官网上找到相关的信息
但是销量上的对比我们大抵是知道的,我相信很多读者甚至都没听说过MI这个系列,单提MI200,可能会以为是小米的新手机发布了。
远古时期不考虑了,AMD算是做GPU比较早的玩家,因为它2006收购了ATI, 但是并没有像Nvidia一样发展GPU在DC里的业务。正是同一年Nvidia推出了CUDA, 吴恩达曾经这样说过,在CUDA出现之前,世界上玩GPU编程的也就一百来人,CUDA推出以后,谁都可以玩GPU编程。
看到DC生意也太能挣钱了,作为重要对手的AMD坐不住了,但是种种原因自家的ROCm在2016年才发布,ROCm具有很多的局限,例如,操作系统长期只能支持Linux,最近才登录Windows,说一个具象化的数据,在Github上,贡献CUDA软件包仓库的开发者超过32600位,而ROCm只有不到600个...
ROCm的其中一个卖点是支持OPENCL,一个开放的硬件计算框架,支持多类型的硬件环境,GPU,DSP.ASIC,FPGA之类的,AMD的官网也把接入OPENCL的能力当做一个重要的攻击点。
下图是OPENCL的框架草图:
下图是ROCm的框架
但是我们换个角度去看ROCm
然后再看一下CUDA,是不是有点像,不考虑颜色导致的认知倾斜...
这里给一下两种计算框架的对比
可以说ROCm就是照着CUDA做一套几乎是想百分之百对标和尽可能兼容的的体系,其中最重要的其实是HIP,HIP可以认为是个山寨版的CUDA接口,几乎兼容所有的CUDA API操作,稍有的不支持的在git上也写的很清楚HIP/docs/markdown/hip_faq.md at roc-1.6.0 · ROCm-Developer-Tools/HIP (github.com)
归根结底是Git上差不多600倍的开发库数量对比,让ROCm不得不兼容CUDA,而作为一个框架,尽量兼容别的框架的弊端也显而易见,为了迎合只能选择一定的牺牲,这其中会体现在性能上,bug上,以及其他多维度的吃亏,但是也是无奈之举,能用是肯定可用的,但是实际的效果上未必能发挥出本身算力的上限。
ROCm的开放卖点能支持OPENCL能实现异构数据中心的算力整合,训练推理多供应商服务,难处是因为不同公司的GPU产品对数据精度的标准和计算方法及顺序配置不同,混合使用GPU难免会导致计算精度缺失等问题,直接影响模型训练效果。其实这也很正常在做混合精度和quantized的时候都有可能由于精度进位和取舍导致梯度的消失,影响梯度和权重的更新,更别提不同的硬件厂商了,所以某种程度上说,至少现在的OPENCL跨平台,多少有点伪命题。
多数一嘴,海光用的也是ROCm。
再看一下其他友商,Intel怎么样?
Intel目前最强应该是Gaudi2了,其实在深度学习领域,我们没必要纠结到底是GPU还是NPU,对我们的结果是没什么影响的,Gaudi2虽然我拿不到它的具体TFLPs数据,但是从公布的GPT-J Benchmark的数据,基本是符合预期的,比A100高2.5倍,H100比它快1.5倍,正常来讲H100比A100快6倍(sparse矩阵的情况下),所以单就数据来讲是合乎逻辑的。这个性能其实目前来讲已经很够用了,我听到好多读者吐槽,H800 SXM的经常跑不满,其实以他们的 train data和规模用A100就够了,所以在目前大多数现实的环境中A100足够了,那毕竟有几个OPENAI和Claude啊?Gaudi2更是没啥问题。当然因为它够用,所以在国内也被禁了
Intel对标CUDA的武器是什么?
不同于老对手AMD,Intel在PK Nvidia的时候表现出前所未有的强硬,他的OneAPI几乎是照搬了标准的OPENCL开发模型,并没有要兼容CUDA的意思,打的牌其实也是兼容多种数据中心硬件。
编程模型
内存模型
据说现在OneAPI在数据中心的场景里已经可以兼容绝大多数NV的卡,但是如文章前几段提到的,兼容和可实现,可部署,可运营之间还有很长一段路要走。
此外,Intel在CPU上的对半导体行业的贡献要远高于GPU/NPU和FPGA这些, 所以自然在CPU对AI的支持上,Intel也是不遑多让。我之前的文章写过在深度学习领域,CPU天生对多并行支持的能力不具备和GPU/NPU,包括把dsp改成矩阵计算单元的FPGA这些计算载体PK的本钱,但是这些从Intel开放了AMX之后大有改变。
什么是AMX?
拿一个矩阵乘法举例子
在没有AMX之前,我们比如用AVX来做SIMD增加一次算力操作的performance,它的能力取决于K值(如下图),目前最大的AVX512, 它的K值是32,也就是说,如果拿最大的K,然后按BF16算,一次计算cycle,一个物理core能有128个OPS
那么AMX是如何处理这个问题的呢
为了防止大家看不下去,推导过程省略,直接说结论,在一个物理核的一个运算周期里,可以实现1024个OPS,整整比原来的AVX高了小10倍。比如我们在这里代入一个常规的64 core服务器,boost到3.0Ghz,可以实现192TFLOPs的 BF16算力,这么说有点枯燥,打个比方相当于0.6块A100的训练算力了!当然在你决定用CPU来进行BF16的training之前,虽然CPU领域,你可以不用考虑CUDA,但是影响的因素还有很多,价格,生态(torch本来就有CPU版本的,但是对AMX的支持还在强化中),各种其他库的支持之类的。
此外,所谓卡脖子系列操作似乎没有对CPU的版本做过硬性限制,所以某种程度上,如果合理,Intel其实可以考虑从这个领域突围,最起码在int8推理上,结合ONNX和Open-VINO等模型优化方式,先抢占一些市场。
还有一个国内最大的玩家Huawei,对于大多数人民群众来讲,Huawei是卖手机的,但是对于做这个行业的大伙来说,那肯定不是。
其实910NPU和910生态, 个人认为在这波里做的操作, 非常强劲。本身它在计算领域和chips上就有多年的积累,加上拜登1万1千多公里外的助攻,短期看Huawei应该是这次乱战里最大的赢家。
先上一张老图:
纸面数据看,算力其实和A100很接近了(A800没降算力,降的是NVlink的bandwidth,和FP64的算力),显存差点,另外HBM3良品率低,NV都缺货,这块对后面920可能是个隐患,此外,我不是特别理解为啥FP32能超出那么多,不过也无所谓,现代深度学习领域里,尤其是大语言模型里,基本常用上的精度就BF16(基本等同FP16的算力)和INT8。
我线下和一些用过昇腾产品的老同事聊过对这个卡的感受,大家都表达了正向的反馈,是真正的正向反馈,不是遥遥领先那种
。在多轮训练和推理的测试里,大家反馈基本能达到A100 九成左右的实力,尤其在一定规模的集群里,虽然在大规模集群中差距会一定程度上被放大,但是这个已经是非常大的进步了,尤其在这个对抗的时间点,我个人是十分看好他们的生意机会的。
那么Huawei的计算框架是什么?
上图是Huawei产品系列用的计算框架CANN。通过官方给的软件架构来看,CANN并不是和AMD,Intel一样从兼容其他的卡作为卖点,而是还是就自己的生态来进行运营,也没有看到它有兼容CUDA生态的意思。
此外Huawei运营着自己的深度学习框架MindSpore,对标TensorFlow和Pytorch。 如果标准的pytorch代码,MindSpore支持一键迁移百分之80以上的代码,采用MindSpore对昇腾的计算计算集群进行训练推理,会更有效率(MindSpore是也支持GPU和CUDA的)。Huawei也是加入了Torch基金会,并成了国内第一个白金会员,也看得出它要摆脱掉CUDA体系,自己做完整生态的决心,其实这一步是十分不容易的,因为对比现有深度学习框架和体系,Huawei系某种程度上连ROCm都无法比较,但是感谢拜登的助攻,这波之后,也许CANN有机会真做起来,至少是在国内,而大量数据表明,这波大模型混战最大的两个市场也就是美国和中国。
临时接了一个同事感兴趣的话题,从我个人对这行业的理解写了这篇文章,大家有不同意见欢迎讨论,包括砸挂,我也虚心接受。也欢迎有感兴趣的话题约稿,后续我可能会写一些算法上的东西,也希望各位读者大爷们耐着性子多给转发点赞,谢谢!