【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 InfraPython和C都得会。但不用怕不需要你精通每一个细节掌握核心内容就够了。二、Python进阶AI Infra常用特性Python在AI Infra中主要用来做胶水——写训练脚本、工具脚本、框架接口等。你不需要成为Python专家但以下几个特性一定要掌握。2.1 装饰器Decorator装饰器本质上是函数的函数——给一个函数额外加功能但不修改它的代码。举个最常见的例子——计时装饰器importfunctoolsimporttimedeftiming(fn):functools.wraps(fn)defwrapper(*args,**kwargs):t0time.perf_counter()resultfn(*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 msAI Infra中的应用场景Benchmark计时Profiling打点分布式训练中的rank检查2.2 生成器Generator生成器用yield关键字实现惰性求值——需要的时候才生成下一个值而不是一次性全部生成好。# 生成器表达式不会一次性创建1亿个元素几乎不占内存gen(x*xforxinrange(10**8))# 用的时候才一个个取foriingen:ifi100:breakprint(i)AI Infra中的应用场景处理大数据集时避免一次性加载DataLoader的思想基础节省内存处理超大文件2.3 多进程 vs 多线程Python有个著名的GIL全局解释器锁导致多线程在CPU密集型任务中并不能真正并行。所以方式适用场景原因多线程threadingIO密集型GIL限制了CPU并行但IO等待时GIL会释放多进程multiprocessingCPU密集型每个进程有独立的GIL真正并行asyncio高并发IO单线程异步Serving网关常用AI Infra中的应用场景分布式训练DDP每个rank就是一个进程数据加载器DataLoader用多进程加速推理Serving的网关层用asyncio2.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运行时才加载CMakeC工程的标配构建工具AI Infra中的应用场景CUDA工程中nvcc编译.cu文件和C目标文件链接部署时经常遇到库找不到的问题——都是编译链接的基础知识3.3 模板基础模板让C代码可以泛型编程——一份代码支持多种数据类型。templatetypenameTTadd(T a,T b){returnab;}// 使用addint(1,2);// int版本addfloat(1.0f,2.0f);// float版本AI Infra中的应用场景CUDA kernel经常按数据类型特化FP16 / FP32 / INT8推理引擎的Tensor类通常是模板类四、pybind11Python与C的桥梁pybind11是一个轻量级的库用来把C代码封装成Python可以调用的模块。4.1 一个最简单的例子#includepybind11/pybind11.hintadd(inta,intb){returnab;}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 Extensiontorch.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/condaPython虚拟环境5.5 GPU相关nvidia-smi查看GPU状态watch -n1 nvidia-smi每秒刷新一次实时监控六、小白学习建议Python怎么学如果你已经会Python基础重点看装饰器、生成器、多进程、面向对象进阶推荐边用边学写一个训练脚本、写一个数据处理工具在实战中掌握不用追求Pythonic——AI Infra的Python代码大多很朴素够用就行C怎么学如果你零基础先从C语言基础开始指针、内存再过渡到C重点掌握指针与内存、智能指针、编译链接、模板基础不用学太偏的特性——AI Infra用到的C特性其实很集中最好的学习方式读推理引擎的源码比如TensorRT的sample、ONNX Runtime的核心代码Linux怎么学多用、多练——用多了自然就会了把常用命令记下来做成自己的速查表遇到问题先自己查查不到再问人——查资料的过程也是学习七、总结一下今天这篇文章我们讲了AI Infra必备的编程基础Python进阶装饰器、生成器、多进程/多线程、面向对象——主要用在上层胶水和脚本C核心指针与内存、编译链接、模板——主要用在性能关键路径pybind11Python和C之间的桥梁自定义算子的必经之路Linux基础命令行、Shell、进程管理、环境配置——调试部署的基本功下一篇预告我们来聊聊AI Infra需要的数学基础。别担心不需要你会推导复杂公式只要能快速心算矩阵维度、理解几个核心概念就够了——工程数学够用就行。本系列导航第1篇一文搞懂什么是AI基础设施五大方向与不可能三角第2篇大厂AI Infra组织架构大揭秘第3篇AI Infra岗位路线图级别、薪资与成长路径第4篇AI Infra学习路线图从入门到精通的完整指南第5篇AI Infra必备编程基础Python、C与Linux速通指南本文第6篇AI Infra数学基础速成线代、概率与微积分工程向更多内容持续更新中……