第一章:AI芯片与算子库概述

大家好,我是这门课的主讲人。在芯片行业摸爬滚打了十几年,从早期的GPGPU通用计算到现在的专用AI芯片,我算是亲眼见证了这场算力革命。今天咱们聊第一章,也是整个课程的地基——AI芯片与算子库。

说实话,很多刚入行的同学容易犯一个毛病:一上来就扎进CUDA代码里,结果调了三天性能还是上不去。为什么?因为你连芯片长什么样都没搞清楚。我当年也吃过这个亏,所以这一章,咱们先把底层的逻辑理清楚。

1.1 AI芯片发展简史:从CPU到专用加速器

AI芯片的发展,说白了就是一场「算力饥渴」倒逼出来的技术革命。

最早的时候,大家用CPU跑神经网络。你想想看,CPU那点可怜的并行度,跑一个卷积层要等半天。我记得2012年那会儿,AlexNet用两块GTX 580训练了五六天,当时觉得已经很快了。现在回头看,那简直是老牛拉破车。

转折点出现在2015年左右。Google推出了TPU v1,专门为推理任务设计。这玩意儿没有缓存一致性,没有复杂的控制逻辑,就是一堆乘加器堆在一起。嗯,这里要注意:TPU的成功让整个行业意识到,专用架构才是AI芯片的未来。

之后的故事大家就熟悉了:NVIDIA从Pascal到Volta再到Hopper,每一代都在强化Tensor Core;华为的昇腾系列走的是达芬奇架构;各家NPU也是百花齐放。我个人习惯把这段历史分成三个阶段:

  • 萌芽期(2012-2015):GPU通用计算为主,CUDA生态初步建立
  • 爆发期(2016-2020):专用芯片涌现,架构百花齐放
  • 成熟期(2021至今):架构趋同,生态竞争白热化

核心观点:AI芯片的演进,本质上是「通用性」和「效率」之间的博弈。越专用的芯片效率越高,但灵活性越差。算子库就是在这两者之间找平衡。

1.2 主流AI芯片架构对比:GPU vs NPU vs TPU

很多同学问我:「老师,这三种芯片到底有什么区别?我该学哪个?」我的回答是:都学,但要有侧重。

咱们先看一张对比表:

维度 GPU(NVIDIA) NPU(华为昇腾) TPU(Google)
核心设计理念 通用并行计算 专用AI加速 极致推理效率
计算单元 CUDA Core + Tensor Core AI Core(达芬奇架构) MXU(矩阵乘法单元)
存储层次 L1/L2 + 共享内存 + 全局显存 L0/L1 + 缓冲区 + DDR 统一缓冲区 + HBM
编程模型 CUDA / Triton CANN / MindSpore XLA / TensorFlow
典型应用 训练 + 推理 训练 + 推理(侧重推理) 推理为主

我来拆解一下这张表背后的东西。

GPU:NVIDIA的看家本领是「通用性」。你可以在GPU上跑任何并行计算任务,不限于AI。但代价是什么?控制逻辑复杂,功耗高。我在项目中遇到过一个问题:同样的矩阵乘法,在V100上跑和A100上跑,性能差了3倍。后来发现是Tensor Core的利用率没上去。说白了,GPU的潜力需要靠算子库去挖掘。

NPU:华为昇腾走的是「软硬协同」路线。达芬奇架构的AI Core里,有专门的三维立方体计算单元。我刚开始接触时觉得这玩意儿太死板了,后来发现对于卷积这种规则运算,效率确实高。但避坑指南来了:我曾经因为没处理好数据排布,导致NPU的带宽利用率只有30%。嗯,这里要记住:NPU对数据格式的要求比GPU苛刻得多。

TPU:Google的TPU是「极致专用」的代表。v1只能跑推理,连训练都做不了。但它的MXU(矩阵乘法单元)在推理场景下,能效比是同期GPU的10倍以上。为什么?因为它砍掉了所有不必要的功能。你想想看,推理任务不需要分支预测,不需要乱序执行,那这些硬件资源就是浪费。

我的建议:如果你是初学者,先从GPU入手。CUDA生态最成熟,学习资料最多。等你把并行计算的思想搞明白了,再去看NPU和TPU,会发现很多概念是相通的。

1.3 算子库在AI框架中的角色

好,现在咱们聊聊算子库。很多同学觉得算子库就是一堆函数的集合,没什么技术含量。大错特错。

算子库是什么?它是AI框架和芯片之间的「翻译官」。你想想看,PyTorch里写一个torch.matmul(A, B),框架怎么知道该调用哪个底层函数?怎么知道用Tensor Core还是CUDA Core?怎么知道数据该放在哪个存储层级?这些决策,都是算子库来做的。

我画过一张图,把算子库的层次结构理清楚了:

应用层:PyTorch / TensorFlow / MindSpore
    ↓
框架层:自动微分、图优化、内存管理
    ↓
算子库层:cuBLAS / cuDNN / CUTLASS / Triton
    ↓
驱动层:CUDA Driver / ROCm / CANN
    ↓
硬件层:GPU / NPU / TPU

你看,算子库处在中间位置,承上启下。它的核心职责有三点:

  1. 性能优化:把上层框架的算子调用,映射到硬件上最高效的执行方式
  2. 抽象封装:屏蔽底层硬件的差异,让框架开发者不用关心芯片细节
  3. 生态兼容:支持多种框架、多种芯片,降低迁移成本

举个例子。同样是矩阵乘法,在GPU上你可能用cuBLAS,在NPU上可能用CANN的矩阵计算接口。但上层框架看到的都是同一个matmul接口。这就是算子库的价值。

避坑指南:我曾经在项目里直接调用了cuBLAS的底层API,结果发现性能还不如PyTorch默认的。为什么?因为PyTorch内部做了很多优化,比如算子融合、内存复用。你直接调底层API,反而跳过了这些优化。所以,除非你非常清楚自己在做什么,否则不要轻易绕过框架的算子库。

说到算子库,就不得不提Triton。这是我个人非常喜欢的一个项目。它让你用Python写GPU kernel,然后自动生成高效的CUDA代码。我在做算子优化时,经常先用Triton写个原型,验证思路没问题了,再用手写CUDA去压榨极致性能。这样效率高很多。

最后总结一下这一章的核心:

  • AI芯片的发展史,就是算力饥渴和架构创新的博弈史
  • GPU、NPU、TPU各有优劣,没有银弹
  • 算子库是连接框架和硬件的桥梁,是性能优化的主战场

下一章,咱们会深入算子库的内部实现,从最简单的向量加法开始,一步步构建你自己的算子库。到时候我会带着大家手写代码,踩一些坑,再填一些坑。嗯,那才是真正有意思的部分。

公众号:蓝海资料掘金营,微信deep3321