从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
你在手机上问 AI 一个问题,几秒钟后,答案一个字一个字地"流"了出来。这件事看起来很轻松,但在你看不见的地方,可能有成百上千块显卡在机房里嗡嗡作响,有无数行精心打磨过的代码在毫秒之间完成了上万亿次计算。
我们平时聊 AI,聊的多是模型有多聪明、能写诗能编程。但很少有人聊:这些模型到底是怎么"跑"起来的? 这就要说到两个在圈内很常见、圈外却很陌生的词:算子 和 AI Infra。
这篇文章就用大白话,把这两件事讲清楚。
一、先打个比方:一家超大型餐厅
想象有一家餐厅,每天要接待几亿位客人,每位客人点的菜都不一样。
- 菜谱 :告诉厨师这道菜怎么做。在 AI 里,这就是模型。
- 切、炒、煮、蒸这些基本动作 :任何菜谱都是由这些基本动作组合出来的。在 AI 里,这就是算子。
- 厨房、灶台、冰箱、传菜员、排班表、采购供应链 :让成千上万道菜又快又稳地做出来、端上桌。在 AI 里,这就是 AI Infra(AI 基础设施)。
研究员负责设计菜谱,而算子工程师和 Infra 工程师负责让厨房高效运转。菜谱再好,厨房一团糟,客人也只能饿着肚子等。
记住这个比喻,下面我们一层一层展开。
二、算子:AI 计算的"基本动作"
1. 算子到底是什么
用一句话说:算子就是神经网络里的一个基本计算步骤。 它接收一些数据,做一种特定的运算,再输出结果。
AI 里的数据通常是一堆排列整齐的数字,叫张量(Tensor)。可以简单理解为:
- 一个数字,是 0 维张量;
- 一排数字,是 1 维张量(向量);
- 一张表格,是 2 维张量(矩阵);
- 一叠表格,是 3 维张量......以此类推。
而算子,就是"把一些张量变成另一些张量"的那个动作。
2. 常见的算子有哪些
| 算子 | 干什么 | 生活化理解 |
|---|---|---|
| Add(加法) | 两组数字逐个相加 | 两张成绩单的分数对应相加 |
| MatMul(矩阵乘法) | 两个矩阵相乘 | AI 里最核心、最耗算力的动作,好比"炒"这个主力工序 |
| Conv(卷积) | 用一个小窗口在图片上滑动计算 | 拿放大镜一块一块扫描图片找特征 |
| ReLU(激活函数) | 负数变 0,正数不变 | 只留下"有用"的信号 |
| Softmax | 把一组数字变成加起来等于 1 的概率 | 把各候选答案的得分换算成"可能性百分比" |
| LayerNorm(归一化) | 把一组数字调整到统一的尺度 | 把不同单位的数据换算成同一标准 |
| Attention(注意力) | 计算每个词该"关注"其他哪些词 | 读句子时判断"它"指的是前面哪个词 |
一个大语言模型,拆到最底层,其实就是这些算子按照一定顺序反复堆叠。一个有几百亿参数的模型,听起来神秘,但它运行时做的事,不过是成千上万次矩阵乘法、加法、Softmax......的组合。
3. 看一段代码就明白了
用 PyTorch 写一个最简单的神经网络层:
python
import torch
x = torch.randn(32, 1024) # 输入:32 个样本,每个 1024 维
w = torch.randn(1024, 4096) # 权重
b = torch.randn(4096) # 偏置
y = x @ w # 算子 1:矩阵乘法 MatMul
y = y + b # 算子 2:加法 Add
y = torch.relu(y) # 算子 3:激活 ReLU
短短三行,就调用了三个算子。框架会把模型里所有的算子连成一张图,叫计算图:数据从一头流进去,经过一个个算子"加工",从另一头流出来。
4. 关键问题:同一个算子,写法不同,速度能差几十倍
你可能会想:矩阵乘法不就是小学学过的"行乘列再相加"吗?写个三重循环不就完了?
数学上确实如此。但在显卡上把它跑得飞快,是一门硬功夫。 同样一个矩阵乘法,随手写的版本和高手优化过的版本,速度差个几十倍甚至上百倍都很正常。
为什么?这要先了解一下显卡(GPU)的脾气。
GPU 的特点:厨师超多,但门很窄
GPU 里有成千上万个计算核心,就像厨房里站着几千个厨师,动手能力极强。但问题是,食材放在外面的大仓库(显存)里,从仓库搬运食材到灶台的通道是有限的。
于是会出现两种情况:
- 算力瓶颈(Compute-bound):食材早就到位了,厨师们忙不过来。矩阵乘法通常属于这种,每搬来一份数据要做大量计算。
- 带宽瓶颈(Memory-bound):厨师们闲着,都在等食材送进来。像加法、ReLU 这种"搬一个数、算一下、送回去"的算子,基本都属于这种。
现实情况是,GPU 的计算速度增长远远快于数据搬运速度的增长。很多时候,真正拖后腿的不是"算得慢",而是"搬得慢"。
优化的核心思路:少跑腿
举个例子,前面代码里的三个算子,最朴素的执行方式是:
- 从显存读 x 和 w,算矩阵乘法,结果写回显存;
- 再从显存读出结果,加上 b,写回显存;
- 再读出来,做 ReLU,再写回显存。
这就好比厨师切完菜放回冰箱,再从冰箱拿出来炒,炒完又放回冰箱,再拿出来装盘。纯属折腾。
聪明的做法叫算子融合(Operator Fusion):把三步合成一步,数据读进来之后,乘、加、激活一口气做完,只写回一次。跑腿次数少了,速度自然就上去了。
业内一个非常有名的例子是 FlashAttention。它并没有改变注意力机制的数学结果,只是重新安排了计算顺序:把数据切成小块,尽量在 GPU 内部高速的"小仓库"里算完,避免反复读写大显存。仅凭这一招,就让注意力计算快了好几倍,还大幅省下了显存,成了如今大模型的标配。
这就是算子优化的魅力:算的东西一样,算法结果一样,但"怎么安排干活"不一样,效率天差地别。
5. 谁来写算子
- 硬件厂商:比如英伟达提供了 cuBLAS(矩阵运算)、cuDNN(深度学习常用算子)这样的官方算子库。
- 框架开发者:PyTorch 等框架内置了数千个算子,底层会调用各种硬件的实现。
- 算子工程师:用 CUDA、Triton 等工具,为特定模型、特定硬件手写或调优高性能算子。
- AI 编译器 :比如
torch.compile、XLA、TVM 等,试图让机器自动完成算子融合和优化,减少人工手写的工作量。
在国内,还有一项非常重要的工作叫算子适配 。国产 AI 芯片想要跑起主流模型,就得把模型用到的成百上千个算子,在自家芯片上一个个实现好、调快。芯片硬件参数再漂亮,算子库不全、不快,模型也跑不起来或跑不快。可以说,算子生态,是一块 AI 芯片能否真正"能用、好用"的关键。
三、AI Infra:让 AI 跑得起、跑得快、跑得省
1. 它是什么
如果说算子是"基本动作",那 AI Infra(AI 基础设施) 就是从芯片到上线服务之间的一整套系统工程。它要解决的问题可以概括为三个字:
- 跑得起:几千亿参数的模型,一块显卡根本装不下,怎么办?
- 跑得快:训练要几个月?能不能缩短到几周?用户等回复要十秒?能不能压到一秒内?
- 跑得省:显卡非常昂贵,电费也不便宜,怎么用更少的卡干更多的活?
2. AI Infra 的"楼层图"
可以把 AI Infra 想象成一栋楼,从下往上分好几层:
┌──────────────────────────────────┐
│ 应用层:聊天机器人、代码助手、AI 搜索...... │
├──────────────────────────────────┤
│ 推理服务:让模型高效响应海量用户请求 │
├──────────────────────────────────┤
│ 训练系统:分布式训练、容错、断点续训 │
├──────────────────────────────────┤
│ 框架与编译器:PyTorch、AI 编译器 │
├──────────────────────────────────┤
│ 算子库与通信库:cuBLAS、NCCL...... │
├──────────────────────────────────┤
│ 集群调度:管理成千上万张卡,谁用、用多久 │
├──────────────────────────────────┤
│ 硬件:GPU/AI 芯片、高速网络、存储、机房 │
└──────────────────────────────────┘
算子位于这栋楼的偏底层,是地基里的"砖块"。AI Infra 则覆盖了从砖块到整栋楼的方方面面。
下面挑几个最核心的部分说说。
3. 训练:一万个人怎么合写一本书
训练一个大模型,往往需要成千上万张显卡同时工作几周甚至几个月。问题来了:一个模型怎么拆给这么多张卡一起算?
想象一万个人要合作翻译一部超级巨著,常见的分工方法有这么几种:
- 数据并行:每个人手里都有一本完整的词典(完整模型),各自翻译不同的章节(不同的数据),定期碰头统一一下翻译风格(同步参数)。这是最常见、最简单的方式。
- 张量并行:某一页内容太长,一个人翻不过来,就把这一页拆成几段,几个人同时翻,最后拼起来。对应的是把一个超大的矩阵乘法拆到多张卡上。
- 流水线并行:像工厂流水线,第一个人负责前 10 层,翻完交给第二个人处理第 11 到 20 层......大家各管一段,接力完成。
- 专家并行:对于"混合专家(MoE)"结构的模型,不同的"专家"放在不同的卡上,每份数据只找相关的几位专家处理。
实际的大模型训练,往往是这几种方法混合使用。怎么组合最高效,本身就是一门学问。
通信:碰头开会的成本
这么多卡一起干活,免不了频繁"开会对答案"。卡与卡之间传输数据的速度,往往成为整个训练的瓶颈。所以 AI Infra 里专门有人研究:
- 用 NVLink、InfiniBand 等高速连接,把卡和卡、机器和机器连起来;
- 用 NCCL 等通信库,高效地完成 AllReduce(大家把结果汇总再分发)等操作;
- 让"计算"和"通信"同时进行,算这一块的时候顺便把上一块的结果传出去,别让卡闲着。
容错:一万张卡,总有一张会坏
这是外行很难想象的问题。一张显卡出故障的概率不高,但一万张卡放在一起,几乎每天都可能有某张卡、某根网线、某台机器出问题。只要一张卡掉线,整个训练就可能卡住。
所以训练系统必须能:
- 定期保存进度(Checkpoint,就像游戏存档);
- 快速发现故障节点并把它踢出去;
- 换上备用机器,从最近的存档继续训练。
存档本身也要讲究效率:几千亿参数的模型,存一次档的数据量非常可观,如果每次存档都要停下来等很久,那也是巨大的浪费。
衡量标准:显卡到底有没有在"干活"
业内常用一个指标叫 MFU(模型算力利用率),意思是显卡的理论算力有多少真正用在了模型计算上。由于通信、等待、故障等各种损耗,这个数字能做到一半左右,就已经算相当不错了。Infra 工程师的很多工作,就是一点一点把这个数字往上抠。在动辄上万张卡的规模下,利用率提升几个百分点,省下的就是一大笔钱。
4. 推理:一个模型怎么同时服务千万人
模型训好了,要拿出来给用户用,这个过程叫推理(Inference)。训练是"一次性的大工程",推理则是"天天营业的流水账",用户越多,推理的总花费就越大。很多公司在推理上的长期成本,甚至会超过训练。
推理优化里有几个特别有代表性的技术:
(1)KV Cache:别从头再读一遍
大模型生成回答是一个字一个字(准确说是一个 token 一个 token)往外蹦的。每生成一个新字,都需要参考前面所有的内容。
如果每次都把前文从头计算一遍,就像写小说续篇时,每写一个字都要把前面几十万字重读一遍,显然太傻了。KV Cache 的做法是:把前文计算过的中间结果存起来,下次直接用。这样就省掉了大量重复计算。
但这又带来新问题:缓存很占显存,对话越长、用户越多,占得越凶。
(2)PagedAttention:像操作系统一样管理显存
vLLM 这个推理框架提出了 PagedAttention 技术,借鉴了操作系统管理内存的"分页"思路,把 KV Cache 切成一小块一小块灵活分配,大大减少了显存浪费,让同一张卡能同时服务更多用户。
(3)连续批处理:电梯别等满员才走
把多个用户的请求凑成一批一起算,效率更高。但不同用户的回答长短不一,如果非要等一批人全部结束才开始下一批,就像电梯必须等最后一个人下了才能上新人。连续批处理(Continuous Batching) 让已经结束的请求随时离开、新请求随时加入,显卡始终保持满负荷。
(4)量化:把数字"写短一点"
模型里的参数原本常用 16 位来存储一个数字,量化就是把它压缩到 8 位甚至 4 位。就像把"3.14159265"简化成"3.14",精度略有损失,但模型体积小了好几倍、算得也更快,很多场景下效果几乎不受影响。
(5)投机解码:让小弟先猜,大哥来批改
让一个小而快的模型先猜接下来几个字,再让大模型一次性检查这几个字对不对。猜对了就直接采用,一次前进好几步;猜错了就从出错处纠正。对用户来说,回复速度明显变快,结果却和大模型自己一个字一个字写完全一样。
此外,推理系统还要考虑:怎么把"理解问题"和"生成回答"两个阶段拆到不同机器上各自优化,怎么在流量高峰时自动扩容,怎么让多个模型共享一批显卡,等等。这些都是 AI Infra 的日常。
5. 其他看不见的角落
除了训练和推理,AI Infra 还包括很多容易被忽略的工作:
- 集群调度:几万张卡是公司的宝贵资源,谁的任务先跑、分多少卡、跑多久,需要调度系统来管理。
- 数据管线:训练需要海量数据,读取速度跟不上,显卡就只能干等。
- 存储系统:存放训练数据、模型文件、存档,既要容量大,又要读写快。
- 监控与诊断:几万张卡里哪张变慢了、哪根网线有问题,要能迅速定位。
- 成本核算:每训练一次、每回答一个问题花了多少钱,需要算得明明白白。
四、算子和 AI Infra 是什么关系
一句话概括:算子是 AI Infra 的一部分,而且是最底层、最"硬核"的那一部分。
| 对比维度 | 算子 | AI Infra |
|---|---|---|
| 范围 | 单个计算步骤 | 从芯片到服务的整套系统 |
| 关注点 | 一个运算在一块芯片上怎么算得最快 | 整个系统怎么跑得起、跑得快、跑得省 |
| 比喻 | 厨师切菜炒菜的手艺 | 整个餐厅的厨房、物流、排班、营业 |
| 典型技能 | 硬件架构、CUDA/Triton、性能调优 | 分布式系统、网络、调度、推理引擎、算子等 |
| 典型成果 | FlashAttention、各类高性能算子库 | 分布式训练框架、推理引擎、大规模集群 |
两者是互相成就的关系:
- 算子写得快,整个系统的上限才高。厨师手艺不行,厨房管理再好也上不了菜。
- 系统设计得好,算子的能力才能发挥出来。厨师手艺再好,食材供应不上、灶台不够,也是白搭。
五、为什么这些年 AI Infra 这么火
原因其实很简单:模型越来越大,用的人越来越多,钱烧得越来越凶。
早些年,一个 AI 模型用几块显卡就能训练,Infra 问题并不突出。而如今,顶尖大模型的训练动辄需要上万张显卡,硬件投入以亿计;面向大众的 AI 服务,每天要处理海量请求。在这种规模下:
- 训练效率提高 10%,可能意味着省下几周时间和一大笔电费;
- 推理成本降低一半,可能意味着产品能不能盈利、能不能免费给更多人用;
- 同样的硬件,Infra 做得好的团队,能训出更大的模型、服务更多的用户。
所以有人说,大模型的竞争,一半是算法的竞争,另一半是 Infra 的竞争。那些看起来"突然变便宜了""突然变快了"的 AI 服务背后,往往都有 Infra 团队在算子、并行策略、推理引擎上一点一点抠出来的功劳。
六、一句话总结
- 算子 是 AI 计算的基本动作,就像菜谱里的切、炒、煮。动作本身简单,但做得快不快,取决于你多懂手里的"刀"和"灶"(硬件)。
- AI Infra 是让 AI 跑得起、跑得快、跑得省的整套系统,就像一家超大型餐厅的厨房、供应链和运营体系。
下次当你看到 AI 飞快地回答你的问题时,不妨想一想:这短短几秒钟背后,有算子在显卡里以惊人的速度翻滚计算,有成千上万张卡在机房里协同工作,还有一群很少被人看见的工程师,正在为了让它再快一点、再省一点而反复打磨。
模型决定了 AI 能有多聪明,而 Infra 决定了这份聪明能以多快的速度、多低的成本,送到每一个人面前。