有一次群里有同学发了一个截图,是他面试大厂时的官方记录:
面试官:"你说说,为什么我们训练好的 AI 模型,部署到生产环境时,最后推理都是用 C++ 做的?"
候选人:"……因为 Python 比较慢?"
面试官:"那你说说,Python 比 C++ 慢在哪里?"
候选人:"……"
看得我們群里都局俏了。但事实上,这个问题的确是面试里的高频卡点。很多人天天用 Python 写 model(inputs),感觉 AI 就是 Python 的天下,却从来没想过这一行代码背后发生了什么。
今天我就给你撕开这层窗户纸。
最近上线了一套【AI Coding实战课程】,把用AI做开发的整套方法都拆开讲清楚了,如果你也在用AI写代码,但感觉用不顺,想系统提升AI编程能力,可以看下方海报了解详情👇

我先给你一个直观的对比。同一个简单的小模型(一个全连接层做矩阵乘法),分别用纯 Python 实现、PyTorch Python 接口、以及 C++ libtorch 实现,同款 CPU 下的执行时间对比:
libtorch 推理 |
纯 Python 循环实现慢了 40 倍,这不意外。但有意思的是:即使你写的是 torch.nn.Linear(...) 这种看起来纯粹的 Python 代码,执行速度也已经接近 C++ 了。
为什么?
因为 torch.nn.Linear 的前向计算,根本就不是在 Python 层完成的。Python 只是发了一条"命令",真正做矩阵运算的,是 C++ 写的 aten 底层引擎。

要理解这个现象,先得知道 Python 在运行时的两个天然缩颈。
第一个是 GIL(全局解释器锁)。Python 的内存管理不是线程安全的,所以 CPython 用了一把大锁:同一时刻只能有一个线程在执行 Python 字节码。你写了多线程代码,表面上跳来跳去,实际上还是串行的。
第二个是 解释执行。Python 是边解释边执行,每一行都要走一遍编码、词法分析、语义分析的流程。这就好比你每次做一道题都要先把题目背下来,而不是直接写答案。
而 C++ 在编译时就已经把代码翻译成机器码了,运行时直接上 CPU 命令。配合 -O2 或 -O3 编译优化,编译器还会做循环展开、向量化、内联展开等操作,把代码挑到极致。
所以 AI 框架们的选择很简单:Python 负责接地气,C++ 负责跑正事。
这里有三种常见的"借力"方式,我们用一张表对比清晰:
ctypes | ||||
Cython | ||||
pybind11 |
以 PyTorch 为例,你写的 torch.matmul(a, b) 大概走了这么一条路:
pybind11 把 Tensor 传进 C++ 层ATen(张量操作库)执行计算如果有 CUDA,进一步调用 CUDA Kernel,否则走的是写好的 CPU 向量内核看见了吗?Python 只是一个调度员,C++ 才是真正干活的工人。
而到了生产环境推理时,大家更傾向于直接用 ONNX Runtime 或 TensorRT 这种纯 C++ 后端跑模型,连 Python 那一层调度都省了。

如果你是面试者,下面这张清单建议熔会于心:
pybind11 的基本作用和原理(可以用一句话概括)libtorch C++ API 做推理服务化-O2 或 -O3,配合 -march=native 让 CPU 满血运转
我们今天讲的不是"别用 Python 了"。Python 仍然是 AI 生态中不可或缺的语言,它的易用性、丰富的库和极快的迭代速度,几乎没有对手。
但是,作为一个想要往深里走的工程师,你得明白自己在用什么。当你写下 model(inputs) 的时候,你在用 Python 的手指,动的却是 C++ 的肌肉。懂了这一点,你就不会在面试里被"追着打",也不会在产业部署时走弯路。
C++ 校招 / 社招跳槽逆袭!从0到1打造高含金量项目,导师1v1辅导,助你斩获大厂offer!
很多同学准备校招时最焦虑的问题就是:“简历没项目,怎么打动面试官?”
为了解决这个痛点,我们推出了C++项目实战训练营

在这里,你可以:
我们不只是教你写代码,更带你走一遍完整的项目流程: 从需求分析、架构设计、编译调试,到版本管理、测试发布,全流程掌握!
项目配套资料齐全,遇到问题还有导师帮你答疑,不怕卡壳!
项目准备好了,你只差一次出发。
相信我,这些项目绝对能够让你进步巨大!下面是其中某三个项目的说明文档
训练营适用人群:
不适合人群:
推荐阅读: