我真服了。每次打开某乎、某面,一堆人吹“Python永远的神”“AI开发非Python莫属”。我只想说:你们是不是只会调个接口?
跑大模型的训练框架确实用Python写,但底层那套能让GPU满负载跑的算子,清一色C++。
今天就来说说,为什么你训练的模型又慢又贵——大概率是没搞懂C++在AI这盘棋里到底干了什么。
没有C++,你的大模型训练就是空转
很多人不知道一个扎心的事实:
PyTorch、TensorFlow这些框架在执行model.train()的时候,背后90%的时间都在跑C++和CUDA代码。
那些矩阵乘法、卷积、激活函数,Python只是做了个“指挥官”的角色——喊一声“开始”,真正往前冲的是C++编译出来的机器码,直接在GPU上跑。
当年我在优化一个推理服务的时候,Python那层怎么改都降不下来延迟,后来直接重写了算子融合逻辑,延迟从15ms砍到3ms。离谱吧?
为什么差距这么大?因为Python解释器那一层开销,在毫秒级的推理任务里就是灾难。
一个简单的for循环遍历张量,Python慢C++几十倍,这是常识,但很多人就是选择性忽略。
真正的高手都在抠“算子融合”
再说个反常识的:
很多人以为写AI代码就是搭积木,实际上性能瓶颈全藏在“算子”里。
举个例子。你写一个简单的y = relu(A @ x + b),听起来就三件事:矩阵乘、加法、激活函数。
但如果你老老实实分别调用三个算子——数据从显存读到寄存器,写回去,再读出来,再写回去……来回折腾三次,带宽全浪费了。
C++配合CUDA能干吗?写一个融合算子,一条指令把矩阵乘、加法、ReLU全干完。
数据不用来回搬,一次加载、三次计算、一次写回。
这就好比你点外卖:让骑手跑三趟送三样东西,还是让骑手一次性全拿来?训练大模型时,这种操作一天要跑几万亿次,差距可想而知。
模板元编程更狠——编译期就把算子形状、数据类型、循环展开策略全定死,运行时零开销。Python能做到吗?做不到。
我当年也栽过大跟头
说句暴露年龄的话,我刚开始做AI优化的时候,也迷信过“Python够用了”。
第一次接触大模型推理,用纯Python+NumPy写了个demo,单次推理1.2秒,领导直接说我这不是在写代码,是在写PPT。
后来导师甩给我一份手写C++的BERT推理代码,我看了一周才看懂那些模板元编程的骚操作——编译期就把模型结构展开,运行时连虚函数表都不查。
跑起来之后,35毫秒。你知道我当时什么心情吗?想把前面写的代码全删了。
很多人踩坑,不是能力不够,是压根不知道C++在AI这层能这么玩。
说了这么多,我想表达什么?
不是让你抛弃Python。Python写模型、做实验、快速迭代,确实香。
但如果你想做大模型训练优化、推理引擎、算子库、AI编译器这些真正“卡脖子”的底层基础设施——C++是你绕不过去的坎。
Kernel融合、显存复用、异步流、零拷贝……这些降延迟提吞吐的关键技术,全是C++的领地。
ChatGPT背后的推理引擎用的是C++,TensorRT是C++,TVM也是C++。这还不够说明问题吗?
互动时间:
你写AI代码的时候,C++用得怎么样?有没有被Python性能坑过的经历?评论区聊聊,或者说说你想了解C++的哪块——算子优化、内存管理、还是CUDA编程?我下次接着聊。
点赞过5000,我把我当年手写C++算子的踩坑笔记整理出来。
热门跟贴