☰
【AI Infra小白入门⑤】AI Infra必备编程基础:Python、C++与Linux速通指南
2026/10/19 12:04:07 网站建设 项目流程

【AI Infra小白入门⑤】AI Infra必备编程基础:Python、C++与Linux速通指南

本文是「AI Infra 小白入门」系列的第五篇,也是"前置基础"模块的第一篇。前面我们建立了全景认知,从这篇开始,我们正式进入技术内容。首先来聊聊AI Infra工程师每天都在用的编程语言——Python、C++,以及Linux环境。


一、为什么AI Infra是"双语世界"?

如果你关注AI领域,可能会发现一个有趣的现象:

  • 搞算法的,主要写Python
  • 搞底层的,主要写C++
  • 搞AI Infra的,两种语言都要会

为什么?因为AI Infra处在"算法"和"硬件"之间,天然就是个"双语世界":

  • 上层(Python):和算法框架(PyTorch)打交道、写脚本、做原型——Python灵活高效
  • 下层(C++):写高性能kernel、推理引擎、算子库——C++速度快、可控性强
  • 中间(pybind11):把C++代码封装成Python接口,供上层调用

用一张图来理解:

┌─────────────────────────────────────┐ │ Python层(胶水+框架+原型) │ │ PyTorch / 训练脚本 / 工具脚本 │ ├─────────────────────────────────────┤ │ pybind11(桥梁) │ ← 把C++算子/引擎暴露给Python ├─────────────────────────────────────┤ │ C++层(性能关键路径) │ │ CUDA Kernel / 推理引擎 / 算子库 │ └─────────────────────────────────────┘

所以,想做AI Infra,Python和C++都得会。但不用怕,不需要你精通每一个细节,掌握核心内容就够了。


二、Python进阶:AI Infra常用特性

Python在AI Infra中主要用来做"胶水"——写训练脚本、工具脚本、框架接口等。你不需要成为Python专家,但以下几个特性一定要掌握。

2.1 装饰器(Decorator)

装饰器本质上是"函数的函数"——给一个函数额外加功能,但不修改它的代码。

举个最常见的例子——计时装饰器:

importfunctoolsimporttimedeftiming(fn):@functools.wraps(fn)defwrapper(*args,**kwargs):t0=time.perf_counter()result=fn(*args,**kwargs)print(f"{fn.__name__}:{(time.perf_counter()-t0)*1000:.2f}ms")returnresultreturnwrapper# 使用方式@timingdefmy_function():# 做一些事情time.sleep(0.1)my_function()# 输出: my_function: 100.xx ms

AI Infra中的应用场景:

  • Benchmark计时
  • Profiling打点
  • 分布式训练中的rank检查

2.2 生成器(Generator)

生成器用yield关键字,实现"惰性求值"——需要的时候才生成下一个值,而不是一次性全部生成好。

# 生成器表达式:不会一次性创建1亿个元素,几乎不占内存gen=(x*xforxinrange(10**8))# 用的时候才一个个取foriingen:ifi>100:breakprint(i)

AI Infra中的应用场景:

  • 处理大数据集时避免一次性加载(DataLoader的思想基础)
  • 节省内存,处理超大文件

2.3 多进程 vs 多线程

Python有个著名的GIL(全局解释器锁),导致多线程在CPU密集型任务中并不能真正并行。所以:

方式适用场景原因
多线程(threading)IO密集型GIL限制了CPU并行,但IO等待时GIL会释放
多进程(multiprocessing)CPU密集型每个进程有独立的GIL,真正并行
asyncio高并发IO单线程异步,Serving网关常用

AI Infra中的应用场景:

  • 分布式训练(DDP)每个rank就是一个进程
  • 数据加载器(DataLoader)用多进程加速
  • 推理Serving的网关层用asyncio

2.4 面向对象进阶

  • __init__/__call__/ 上下文管理器(__enter__/__exit__)
  • MRO(方法解析顺序)与super()——理解PyTorch Module的多重继承

这些在阅读PyTorch源码和写自定义Module时经常遇到。


三、C++核心:性能关键路径的必备

C++是AI Infra的"硬核"部分——CUDA kernel、推理引擎、自定义算子……性能关键路径几乎都是C++写的。

对于AI Infra工程师,你需要掌握以下核心内容:

3.1 指针与内存管理

这是C++的基础中的基础:

  • 指针、引用、数组衰减
  • 栈内存 vs 堆内存:new/delete、malloc/free
  • 智能指针:unique_ptr/shared_ptr——现代C++必备

💡为什么重要:推理引擎、TensorRT插件的代码里,智能指针随处可见。不懂指针,根本读不懂这些代码。

3.2 编译与链接

C++代码从源码到可执行文件,要经过几个步骤:

.cpp → 预处理 → 编译(.o目标文件) → 链接(可执行文件/库)
  • 静态库(.a/.lib):编译时直接链进可执行文件
  • 动态库(.so/.dll):运行时才加载
  • CMake:C++工程的标配构建工具

AI Infra中的应用场景:

  • CUDA工程中,nvcc编译.cu文件,和C++目标文件链接
  • 部署时经常遇到"库找不到"的问题——都是编译链接的基础知识

3.3 模板基础

模板让C++代码可以"泛型编程"——一份代码支持多种数据类型。

template<typenameT>Tadd(T a,T b){returna+b;}// 使用add<int>(1,2);// int版本add<float>(1.0f,2.0f);// float版本

AI Infra中的应用场景:

  • CUDA kernel经常按数据类型特化(FP16 / FP32 / INT8)
  • 推理引擎的Tensor类通常是模板类

四、pybind11:Python与C++的桥梁

pybind11是一个轻量级的库,用来把C++代码封装成Python可以调用的模块。

4.1 一个最简单的例子

#include<pybind11/pybind11.h>intadd(inta,intb){returna+b;}PYBIND11_MODULE(my_ops,m){m.def("add",&add,"A function that adds two integers");}

编译之后,Python里直接用:

importmy_opsprint(my_ops.add(1,2))# 输出: 3

就这么简单!

4.2 为什么重要?

pybind11是自定义算子接入PyTorch的标准路径。

PyTorch的C++ Extension(torch.utils.cpp_extension)底层就是pybind11。你想写一个自定义CUDA算子,然后在PyTorch里调用?pybind11是必经之路。


五、Linux基础:调试部署的基本功

做AI Infra,几乎所有工作都是在Linux环境下完成的。Linux命令行不行,直接影响你的工作效率。

以下是你必须掌握的内容:

5.1 命令行工具

工具用途重要程度
grep在文件中搜索内容⭐⭐⭐⭐⭐
awk/sed文本处理⭐⭐⭐⭐
find查找文件⭐⭐⭐⭐⭐
xargs批量执行命令⭐⭐⭐
管道(|)串联命令⭐⭐⭐⭐⭐

5.2 Shell脚本

  • 变量、循环、条件判断
  • set -e(出错就退出,避免脚本继续执行造成更大问题)

5.3 进程管理

  • ps/top/htop:查看进程
  • kill:杀进程
  • nohup/&/jobs:后台运行
  • 训练任务挂后台是日常操作

5.4 环境配置

  • PATH:可执行文件搜索路径

  • LD_LIBRARY_PATH:动态库搜索路径

    💡 小贴士:CUDA库找不到,十有八九是LD_LIBRARY_PATH没配对

  • venv/conda:Python虚拟环境

5.5 GPU相关

  • nvidia-smi:查看GPU状态
  • watch -n1 nvidia-smi:每秒刷新一次,实时监控

六、小白学习建议

Python怎么学?

  1. 如果你已经会Python基础:重点看装饰器、生成器、多进程、面向对象进阶
  2. 推荐边用边学:写一个训练脚本、写一个数据处理工具,在实战中掌握
  3. 不用追求"Pythonic"——AI Infra的Python代码大多很朴素,够用就行

C++怎么学?

  1. 如果你零基础:先从C语言基础开始(指针、内存),再过渡到C++
  2. 重点掌握:指针与内存、智能指针、编译链接、模板基础
  3. 不用学太偏的特性——AI Infra用到的C++特性其实很集中
  4. 最好的学习方式:读推理引擎的源码(比如TensorRT的sample、ONNX Runtime的核心代码)

Linux怎么学?

  1. 多用、多练——用多了自然就会了
  2. 把常用命令记下来,做成自己的"速查表"
  3. 遇到问题先自己查,查不到再问人——查资料的过程也是学习

七、总结一下

今天这篇文章,我们讲了AI Infra必备的编程基础:

  1. Python进阶:装饰器、生成器、多进程/多线程、面向对象——主要用在上层胶水和脚本
  2. C++核心:指针与内存、编译链接、模板——主要用在性能关键路径
  3. pybind11:Python和C++之间的桥梁,自定义算子的必经之路
  4. Linux基础:命令行、Shell、进程管理、环境配置——调试部署的基本功

下一篇预告:我们来聊聊AI Infra需要的数学基础。别担心,不需要你会推导复杂公式,只要能快速心算矩阵维度、理解几个核心概念就够了——工程数学,够用就行。


📚本系列导航:

  • 第1篇:一文搞懂什么是AI基础设施:五大方向与不可能三角
  • 第2篇:大厂AI Infra组织架构大揭秘
  • 第3篇:AI Infra岗位路线图:级别、薪资与成长路径
  • 第4篇:AI Infra学习路线图:从入门到精通的完整指南
  • 第5篇:AI Infra必备编程基础:Python、C++与Linux速通指南(本文)
  • 第6篇:AI Infra数学基础速成:线代、概率与微积分(工程向)
  • 更多内容持续更新中……

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询