先聊个实在的:很多人问我,AI工程师到底怎么入门?网上资料铺天盖地,但今天学PyTorch、明天看Transformer、后天又去追Agent框架,学了大半年还是只会跑别人的代码。这个标题“ai-engineering-from-scratch”其实就是个很典型的自学路线命题:不依赖任何现成课程,从底层开始,把AI工程的核心能力一步步搭起来。这篇文章我想用自己踩过的坑、带过的人、做过落地项目的经验,把“从零开始”这四个字拆到能直接照着执行的程度——你不需要名校背景,也不需要一开始就啃完一本600页的数学书,但你需要一条能走得通、能验证自己进步、能最终做出真实产品的路径。
这篇内容适合三类人:想转行做AI工程但不知道从哪下手的开发者、已经在调模型但总觉得缺了系统性的同学、以及需要带团队做AI落地、想给新人设计培养方案的Tech Lead。我会把学习路径、核心技能拆解、实战项目设计、常见坑点全部过一遍,不整虚的,全是能落地的东西。
1. AI工程不只是“会调模型”
1.1 先搞清楚AI工程师和数据科学家、算法工程师的区别
我在面试候选人的时候,最常听到的一句话是“我做过几个Kaggle比赛,排名还不错”。但如果追问一句“这个模型上线之后QPS能到多少?推理延迟多少?数据漂移了怎么监控?模型怎么灰度发布?”,大部分人就开始含糊了。这就是AI工程师和数据科学家最本质的区别:前者要对系统的全生命周期负责,后者更关注离线指标能不能刷高。
AI工程这个岗位,说到底就是把“能跑的模型”变成“稳定运转、可维护、可迭代的软件系统”。它不只是训练一个准确率98%的分类器,而是要把数据管道、特征存储、模型训练、模型部署、监控告警、持续学习这整条链路串起来。这有点像传统后端工程师和算法研究者的交叉地带——你得懂算法原理,但更得懂工程化。
从零开始学AI工程,首先要扭转一个心态:模型是你的产品核心,但不是你工作的全部。你写的Pytorch训练脚本可能只占整个系统的20%,剩下80%的时间花在数据清洗、接口调试、性能优化、故障排查上。如果你只痴迷于调整loss曲线而对工程细节没耐心,那这个方向可能会让你很痛苦。
1.2 一张能力地图:AI工程需要哪六块拼图
根据我这些年做项目的经验,一个能独立扛事的AI工程师,基本需要以下六块能力,缺一块都会在关键时刻掉链子:
| 能力板块 | 核心内容 | 常见误区 |
|---|---|---|
| 编程与工程基础 | Python、Linux、Git、Docker、CI/CD | 以为会写训练脚本就算会工程 |
| 数学与算法基础 | 线性代数、概率统计、机器学习经典模型 | 陷入数学推导无法自拔,忘了最终目标 |
| 深度学习框架 | PyTorch/TensorFlow、分布式训练、推理优化 | 只会调用高层API,不懂底层原理 |
| 数据工程 | SQL、数据管道、特征工程、数据质量监控 | 轻视数据工作,觉得“不性感” |
| 模型部署运维 | 模型服务化、性能压测、监控告警、A/B测试 | 只关心离线指标,忽略线上表现 |
| 业务理解与产品思维 | 指标定义、成本估算、价值验证 | 做了一堆技术很炫但业务不买账的东西 |
这六块不是按顺序学完一块再学下一块的线性关系,而是螺旋式上升。你最开始只需要每块都有一点基础,然后通过一个完整项目把它们串起来,再回头补深度。
1.3 “从零开始”的时间预期和里程碑设计
说句实话,从零基础到能独立负责一个AI项目的工程落地,全职学习大概需要6到10个月。这比我见过很多培训广告说的“三个月速成”要慢得多,但也比你自己漫无目的摸索快得多——前提是你有清晰的里程碑。
我自己带新人喜欢把路线切成四段:第一段打基础(约6周),核心目标是能看懂模型代码、能独立完成数据预处理;第二段入门深度学习(约8周),核心目标是用PyTorch从零实现并训练一个完整模型;第三段工程化(约6周),核心目标是把训练好的模型打包上线,用FastAPI或Flask接成HTTP服务;第四段做综合项目(约8周),核心目标是完成一个端到端的可交互产品,比如图片分类Web应用或文档问答机器人。
每个阶段结束必须有一个“看得见的东西”——不是一个学习笔记,而是一个能跑的代码仓库、一个能访问的服务地址、一份完整的实验记录。光看不练是这个领域最大的时间黑洞。
2. 核心技能拆解:每块拼图到底怎么拼
2.1 编程和工程基础:不只是写Python
很多零基础的同学从Python语法开始学,学完列表推导、装饰器就觉得万事大吉了,结果一进公司发现连代码都拉不下来。我建议在打基础阶段就直接用“真实项目”来驱动:建一个GitHub仓库,把学习过程中的所有代码都提交上去,用Git管理版本。这看起来很简单,但等你有20个版本的训练脚本之后就会发现,能随时回滚、能说清楚每次改动的区别,是多么宝贵的能力。
Linux基础也不能跳过。AI训练几乎都在Linux服务器上跑,你至少要熟练使用命令行、看懂系统资源占用、会用screen或tmux挂后台任务、会用scp传文件。Docker更是绕不开的坎——没有Docker的话,你连复现别人的环境都困难。我见过太多新手卡在环境配置上几天搞不定,最后发现就是CUDA版本和PyTorch版本不匹配的问题。Docker镜像一打包,半个小时就能把队友的项目完整跑起来。
CICD这一块新手容易忽视,但其实越早接触越好。哪怕只是写一个简单的GitHub Actions配置:代码push后自动跑单元测试、自动构建镜像,这能逼着你把代码写规范。一旦养成这个习惯,后面做MLOps相关的Workflow编排时适应会非常快。
2.2 机器学习与深度学习:别在数学里迷失,也别完全抛弃数学
关于数学要学多少这个问题,我的观点可能和学院派不太一样:不需要你先学完线性代数、微积分、概率论的所有内容再动手写代码。正确的姿势是“用到什么补什么”,你在看反向传播的时候遇到偏导数卡住了,就回去补求导法则;你在理解Embedding的时候遇到矩阵乘法不明白了,就回去补矩阵运算。带着问题学数学,效率至少是漫无目的地刷教材的三倍。
但这不意味着可以完全忽视数学。线性代数里的矩阵运算、概率论里的贝叶斯公式和常见分布、统计学里的假设检验和置信区间,这三块在AI工程中是高频出现的。尤其是当你开始做模型评估、要做A/B测试的时候,不懂置信区间会被业务方问到怀疑人生。
深度学习方面,我强烈建议你不要一开始就上Transformers、LangChain这些太上层的东西。先把全连接网络、CNN、RNN这些基础网络结构吃透,亲手用PyTorch里的nn.Module写一遍前向传播和训练循环。这个过程会帮你建立直觉:梯度是怎么传播的、学习率太大为什么会发散、过拟合是什么样的表现。这些直觉在你后面排查线上模型问题时,价值不可估量。
2.3 数据工程:AI项目的地基
做了这几年AI落地项目,我得说句得罪人的话:大部分项目失败不是因为模型选得不好,而是因为数据没整明白。数据工程这块学得越扎实,你在实际工作中就越游刃有余。
首先是SQL,这是数据工程师的看家本事,也是AI工程师必须熟练掌握的技能。你需要能写复杂的关联查询、窗口函数、子查询,能理解数据仓库的分区策略、能看懂数据血缘。因为数据清洗、数据探查、特征提取的第一步几乎都是从SQL开始的。
其次是特征工程。特征质量直接决定模型效果的上限,而模型调参只是在逼近这个上限。我常用的套路包括:数值特征做分箱或归一化、类别特征做目标编码或频次编码、时间特征抽取出星期几/节假日/距最近事件的时长等。每做一步特征变换,都要记录为什么这么做、对模型指标有什么影响——后面你写实验报告时就明白这份记录有多重要了。
数据质量监控也是AI工程师和传统后端工程师协作时最容易扯皮的地方。训练数据和线上数据分布不一致,模型效果就会悄悄劣化。建议你在学习阶段就养成习惯:每次建模前做数据分布分析,上线后设计简单的监控指标(均值、标准差、空值率等),一旦偏离阈值就触发告警。
2.4 模型部署与服务化:从Notebook到生产环境的惊险一跃
Notebook里跑通模型,和线上环境稳定服务用户,之间的鸿沟比很多人想象的大得多。我第一次把模型上线的时候,线下准确率97.6%,线上直接跌到82%,排查了大半天发现是线上推理时特征预处理逻辑和训练时不一致——训练时对数值做了归一化,线上服务却忘了加载scaler对象。这种Low到尘埃里的错误,只要你经历一次,就再也不会忘。
模型部署的基本功包括三块:模型序列化与格式转换、推理服务的封装、性能优化。PyTorch模型先转成TorchScript或ONNX,再配合TensorRT或ONNX Runtime做加速,这是最常见的路径。服务封装用FastAPI是当前主流选择,它自带OpenAPI文档、支持异步、性能也不错,学习成本很低。
性能压测这块很多新手会忽略。你用ab或wrk工具测一下你服务的QPS,就能理解为什么GPU虽然算得快但线上还是会卡——瓶颈往往在网络传输、数据预处理这些CPU密集操作上。学会用Profiler定位性能瓶颈,是AI工程师进阶的标志之一。
3. 一条完整的实操路径:从零搭建一个端到端AI应用
3.1 阶段一:选定项目,搭好开发环境
做从零到一的实战项目,我建议选“图像分类仪”这类经典题目,而不是一上来就做大模型应用。为什么?因为图像分类的数据比较规整、评价指标直观、单卡就能训练,适合把工程链路完整走通。等这套链路熟练了,做大模型应用、Agent应用的时候就能把注意力集中在业务逻辑上,而不会被工程细节绊住。
开发环境方面,我的建议是:本地安装Python 3.10+和PyTorch稳定版,配置好CUDA(如果有NVIDIA显卡);同时把Docker装好,写一个Dockerfile把项目环境固化下来。第一次配置可能会折腾一两天,但这是一次性投入。用conda创建虚拟环境也很重要,python -m venv .venv这种基础操作要形成肌肉记忆。
项目结构从第一天开始就要规范化:
project/ ├── data/ # 原始数据与处理后数据 ├── notebooks/ # 探索性分析、实验笔记 ├── src/ # 核心代码 │ ├── data_preprocess.py │ ├── train.py │ ├── evaluate.py │ └── inference.py ├── models/ # 训练产出的模型文件 ├── tests/ # 单元测试 ├── Dockerfile ├── requirements.txt └── README.md别觉得这是小题大做。你后面回头复用代码时,会发现清晰的项目结构比任何炫技代码都值钱。
3.2 阶段二:数据获取与特征工程实操
推荐用CIFAR-10或Food-101这类公开数据集,PyTorch的torchvision.datasets里都有现成的加载接口。拿到数据后第一件事不是训练,而是可视化:随机抽一批图片看看类别是否均衡、亮度是否异常、有没有损坏的样本。花30分钟看数据,能省掉后面3小时在训练时排查奇怪的loss波动的时间。
特征工程在图像任务上相对简单(主要靠网络自主学习特征),但你应该在代码里写清楚数据预处理的pipeline:归一化、随机裁剪、水平翻转这些数据增强操作。这里有个关键细节:训练集和验证集的数据增强策略必须不一样——训练集可以用RandomCrop和RandomHorizontalFlip增加多样性,验证集只能用Resize和Normalize保证评估的公平性。如果你把数据增强也用在验证集上,评估指标会失真且很不稳定。
处理完数据之后,立刻写一个简单的数据分布统计脚本,记录每个类别的样本数。这个基线记录在你后面做数据增强、样本均衡操作时,可以用来对比效果。
3.3 阶段三:模型训练与实验记录规范
训练这一块我建议用PyTorch写完整的训练循环,而不是直接套PyTorch Lightning。虽然Lightning确实能省很多样板代码,但你要理解每个环节在干什么——DataLoader怎么协作、optimizer.zero_grad()为什么必须在反向传播之前调用、梯度累积和梯度裁剪是怎么操作的。这些底层的“脏活”你亲手做过一遍,后面遇到问题才有排查的方向。
训练中的“实验记录规范”是我最想强调的点。从第一次训练开始,你要给每次实验编号、记录配置文件、记录训练日志。现在MLflow和Weights & Biases都很成熟,但就算你只用一张Excel表也比完全不记录强。我见过太多人训练到第三天就忘了上次最好的超参数是什么,然后开始随机试参,白白浪费GPU资源。
一个可参考的简单实验记录表长这样:
| 实验编号 | 模型结构 | 学习率 | Batch Size | 数据增强 | 训练时长 | 验证准确率 | 备注 |
|---|---|---|---|---|---|---|---|
| v0.1 | ResNet18 | 1e-3 | 128 | 仅标准化 | 45min | 0.847 | 基线 |
| v0.2 | ResNet18 | 3e-4 | 128 | 标准增强 | 45min | 0.891 | 降低LR有效 |
| v0.3 | ResNet34 | 3e-4 | 256 | 标准增强 | 80min | 0.912 | 加大模型有效 |
每次只改一个变量,这是实验方法学的基本纪律。一起改两个变量,效果变好了你都不知道是哪个改出来的。
3.4 阶段四:模型服务化与Docker部署
训练完模型后,先把PyTorch模型转成TorchScript。用torch.jit.script或torch.jit.trace都行,目的是脱离Python运行时做推理。然后写一个FastAPI服务,接口设计成POST /predict,接收JSON格式的图片Base64字符串,返回预测类别和置信度。这里有个实用建议:在你的API服务里对输入做校验(比如非空判断、大小限制),否则生产环境如果有人传了个空文件,你的服务可能直接抛异常甚至崩溃。
Docker部署这一步,写个多阶段构建的Dockerfile:
# 构建阶段 FROM python:3.10-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt # 运行阶段 FROM python:3.10-slim WORKDIR /app COPY --from=builder /root/.local /root/.local COPY . . ENV PATH=/root/.local/bin:$PATH EXPOSE 8000 CMD ["uvicorn", "src.api:app", "--host", "0.0.0.0", "--port", "8000"]多阶段构建的好处是最终镜像里只保留运行时需要的文件,镜像体积能小一半以上。这一点在推送到镜像仓库、从仓库拉取到GPU服务器时,节省的不只是时间,还有实打实的带宽成本。
3.5 阶段五:监控与迭代闭环
很多人做到部署上线就觉得大功告成,其实AI工程的真正考验才刚开始。你需要给服务加上监控:每秒请求数、平均推理延迟、错误率、预测结果的置信度分布。置信度分布这个东西很有意思——如果整体趋势是置信度越来越低,很可能说明数据分布正在漂移,你的模型正在悄悄变“老”。
更好的做法是给线上预测结果做“影子评估”:把线上请求复制一份,用更新版本的模型跑一遍,对比新旧两版的结果差异。这样不用冒风险就能持续评估模型是否该更新。这个概念叫影子部署,是AI工程里很实用但新手很少接触的技术。
4. 常见问题与避坑实录
4.1 环境依赖永远是最容易卡住新人的第一关
我把“跑不起来别人的代码”列为AI工程新手的第一大痛点,远超模型原理看不懂。常见的坑有这么几类:Python版本不兼容(比如代码依赖Python 3.8的特性,你用了3.7)、CUDA和PyTorch版本不匹配、conda和pip混用导致环境混乱。我的建议是:统一用conda管理虚拟环境,统一用pip安装包,别混用。这个小原则能解决80%的环境问题。
还有一个容易被忽略的坑:训练代码能跑,但一上多GPU分布式训练就报错。数据并行和分布式数据并行(DDP)的区别要先搞清楚,不然你会遇到“改了torch.distributed初始化但rank不同步”这类莫名其妙的问题。新手不建议一开始就碰分布式,先在单卡上把问题简化。
4.2 过拟合判别:你的模型是真的聪明,还是把训练集背下来了
验证集效果不错、测试集效果很差,这是过拟合的经典表现。但很多新手看到验证准确率98%就觉得模型“成”了,不懂再拿一个全新的测试集去验。防止过拟合的常用手段我按优先级排一下:增加数据(包括数据增强)、降低模型复杂度、增加正则化(L2、Dropout)、早停。实操时前两招的效果远好于后两招。
有一种隐蔽的过拟合是数据泄漏:训练和测试数据里有重复样本,或者特征里包含了未来信息(比如用T+1的数据预测T时刻的标签)。排查数据泄漏有个笨办法但很好用:把训练集和测试集样本的ID做交集,一旦发现重复就得警惕了。
4.3 线上表现不如离线指标:三个需要检查的位置
模型上了线,准确率突然比训练时低了好几个点,这种“灵异事件”我平均每个月都能遇到一次。常规排查顺序是:先检查数据预处理的一致性(训练和推理是否用了同一套scaler和Encoder),再检查线上请求的数据格式是否正常(字段缺失?类型变了?),最后检查模型文件是否被意外替换(有些人是真的会传错模型的,别问我怎么知道的)。
4.4 从个人学习到团队协作:Git和代码规范是基本礼仪
很多自学出身的高手喜欢一个人写代码,但公司里AI工程师几乎都要团队协作。我强烈建议你学习阶段就养成几个习惯:每次改代码前创建新分支、commit信息写清楚动机(“add augmentation”比“update code”强十倍)、Pull Request里附上实验指标变化。这些不是形式主义,当你们团队需要回溯“线上模型是哪次commit训练出来的”时,这一套东西能救命。
4.5 硬件资源不够用怎么办
个人学习阶段买不起A100很正常的。我的建议是:先用免费的Colab或Kaggle Notebook把代码逻辑跑通,用小数据集验证想法;需要长时间训练时再考虑租云GPU(按小时计费)。但你要明白,单卡训练和真正的分布式训练还是有差距的,所以理论学习别落下——至少要弄清楚数据并行、模型并行、流水线并行分别是解决什么问题的。
如果你有本地显卡,显存不够时可以先降低batch size,同时使用梯度累积来保证训练稳定性。这招在多卡场景下的效果非常接近真正的大batch训练,是工程上常用的折中方案。
5. 关于后续进阶路线的一些个人经验
如果你已经完整走完上面这条从零到一的路径,接下来的方向我认为有三个,可以按照你的兴趣选一个深入:
第一个方向是大规模模型训练优化。这需要深入理解分布式训练框架的内部机制、混合精度训练、ZeRO优化器等底层技术。这个方向比较硬核,但价值极高,能解决Dify或LlamaIndex这些上层框架碰不到的问题。
第二个方向是MLOps与平台建设。做机器学习平台、特征平台、模型注册中心,本质上是用工程手段解决模型全生命周期管理的效率问题。这个方向更像传统后端,但对AI的深刻理解是你能做出好平台的前提。
第三个方向是大模型应用开发。这不是指简单地调用GPT的API写个聊天机器人,而是要深入理解提示词工程、RAG(检索增强生成)的机制、向量数据库的选型和优化、Agent的规划与工具调用。这个方向更新,红利期肉眼可见,但也要求你对底层模型的能力边界有足够清晰的认识。
我个人目前在大模型应用和Agent方向花的时间最多。AI工程的核心能力——数据处理、模型评估、推理优化、部署监控——在LLM时代不但没过时,反而更加重要。只不过评估对象从“分类准确率”变成了“回答质量”,监控重点从“数据漂移”变成了“上下文污染和幻觉率”。你会发现,一旦你建立了扎实的AI工程框架,学什么新模型新架构都很快,因为底层的方法论是通用的。
最后说一个掏心窝的经验:不要等所有知识都学完了再开始做项目,而是做一个项目然后把它做到极致。我在实际带人的过程中观察到一个规律:那些最快的人不是什么都会,而是用一个项目把所有模块都串起来练了一遍。做完图片分类,就去做文本分类;做完模型服务化,就试试模型微调和RAG检索。每完成一个项目就把公共模块沉淀成自己的代码库——像数据处理、实验记录、模型打包这些复用率高的代码,整理成模板,下次起步至少能快三倍。这个习惯,就是“从零开始”到“独立上手”之间,最实在的那座桥。