ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI工程从零到部署:学习路线与实战踩坑经验

AI工程从零到部署:学习路线与实战踩坑经验 做AI工程这件事我自己从一头雾水到能把一个完整应用从数据处理跑到线上部署前后花了快两年。所谓ai-engineering from scratch我理解是两条线并着走一条是把底层原理搞清楚不满足于只会调API另一条是独立把数据、训练、评估、部署这条链路走通。这两条线缺了哪一条都算不上真正的AI工程师。这篇不是什么速成指南而是把这条路上我认为最值得参考的路线、工具和踩坑经验完整梳理一遍——如果你刚转行、想在业务里落地AI或者已经会调模型但没跑通过全链路这篇就是给你写的。1. 先搞清楚AI工程是什么不要用研究心态做工程我见过太多新人一上来就抱着深度学习论文猛啃结果三个月后除了记住几个网络名字连一个能跑的项目都没做出来。所以要聊from scratch第一步不是学技术而是先搞清楚这门手艺到底是干什么的。1.1 工程师和研究者的工作内容差别很大很多教程把AI教学当成前沿论文解读来写这给了新人一个错觉做AI就是发论文、刷SOTA。实际上工业界绝大多数AI工程岗位工作重心根本不是这个。研究者关注的是这个模型能有多强——新架构、新算法、新训练技巧。工程师关注的是这个模型在真实数据上能不能稳定跑起来、跑多久、花多少钱、出了问题能不能快速定位。我在实际项目中真正花时间最多的三件事是整理数据、设计评估口径、排查线上故障真正训练模型的时间占比反倒不高。这并不意味着研究者做的事不重要而是说如果你走工程路线学习重心必须调整。你当然要理解Transformer大概怎么回事、梯度下降在干什么但更重要的是知道数据怎么清洗才算干净怎么划分训练验证测试集才不泄露模型效果到底怎么评估才对业务有意义线上预测变差了第一步查什么。1.2 从零起步需要的基本盘从零不等于零基础也行。我的经验是入门前至少要具备这几样东西不然时间成本会翻好几倍会写Python至少能理解循环、函数、类、文件读写能改别人的代码。了解基本的Linux命令行操作会装环境、跑脚本。有耐心读英文文档——框架的官方文档、GitHub的issue几乎都是英文。数学不用怕但线性代数和概率统计的基本概念得有矩阵乘法、向量维度、均值方差、正态分布、条件概率。不需要会证明但得知道这些符号在代码里长什么样。这里有个容易走偏的地方很多人觉得数学不好就不能学AI于是花半年去刷《线性代数》教材刷到行列式、特征值就崩溃了。我从实际经验说工程岗位对数学的要求远没有那么高你需要的是能看懂公式转成代码的能力不是能推导公式的能力。比如你只需要知道softmax把一组数值变成概率分布而不需要能手推它的导数。1.3 能跑通全链路才算入门我对入门的定义很朴素给你一份原始数据和一个业务问题你能从零开始独立交付一个可调用的模型服务。这个定义含几个环节数据获取和清洗、特征或预处理、模型训练和调参、离线评估、封装成API、上线后能看到日志和指标。很多自学者卡在中间某个环节。最常见的两个崩溃点一是数据阶段发现真实数据脏得没法用直接放弃二是评估阶段模型训练完了不知道怎么证明它能用随便报个准确率交差一到线上就露馅。所以你在学习的时候每学一个模块都要问自己这个东西在全链路里解决什么问题如果有某个环节你完全没见过、不熟悉就去动手补上。比如学完模型训练就逼着自己用FastAPI写一个接口把这个模型包起来跑一遍。别觉得这是多余动作这一步能帮你把笔记本里的模型变成能交付的模型差距就在这里。2. 零基础到能上手我验证过的学习路线图网上各种AI学习路线图很多我这条是自己走过、也在带新人时验证过的。它最大的特点是学一点就做一点项目绝不在某一个阶段停留太久。学习周期大概4到6个月每天投入两小时以上就能覆盖。2.1 第一站Python与数据处理实战Python语法不用学完整本教材我建议看基础部分后就立刻切到实际数据任务。用pandas读一份CSV做筛选、分组、聚合、缺失值处理再用matplotlib画分布图。这个阶段的目标不是成为Python专家而是能搞定最核心的三件事加载数据、清洗数据、可视化数据。这里有一个新手常犯的错误用Jupyter Notebook时一个格子里的代码越写越长最后自己都看不懂。我建议从一开始就养成函数化的习惯相同逻辑抽成函数Notebook里只留主流程调用。后面做项目时你会发现这一个好习惯能省下大量调试时间。另外一定要学会用venv或conda建隔离环境每开一个新项目就建一个干净环境这是避免在我电脑上能跑这个尴尬局面的最基本手段。2.2 第二站经典机器学习是绕不开的地基我见过有人跳过经典机器学习直接学深度学习结果训练集表现很好、测试集一塌糊涂连过拟合这个概念都要临时查。经典机器学习虽然看起来不够酷但它把机器学习最核心的思想都浓缩在了一个极简框架里这个框架就是sklearn的fit/predict。你要掌握的不只是调几个模型而是一整套方法论划分数据用train_test_split而不是手动切用交叉验证评估泛化能力理解什么是过拟合和欠拟合知道正则化是在干什么学会看混淆矩阵、精确率、召回率、F1而不是只看准确率。我建议你从逻辑回归和决策树入手因为这两个模型足够简单你能把每一个参数和预测结果对应起来这对建立直觉特别重要。学这个阶段不要贪多sklearn里几十个模型真正用到的就是个位数逻辑回归、决策树/随机森林、GBDT系列、KMeans。重点不是背模型名字而是理解训练集/验证集/测试集这个三层结构为什么是AI工程的基石——后面所有深度学习项目都会用到这套逻辑。2.3 第三站深度学习框架实操选PyTorch还是TensorFlow早几年还有争议现在我的答案非常明确无脑PyTorch除非你的工作场景已经深度绑定TensorFlow生态。PyTorch的优点在于调试直观、生态活跃、Hugging Face等主流模型库都基于它而且从研究到工业部署的路径非常成熟。学习深度学习容易犯的最大错误是用超高层封装。很多教程让你直接调用一个现成的trainer几行代码把BERT跑起来训练完你什么也说不出来。我建议一定要手写一个最简单的训练循环定义模型、定义损失函数、定义优化器然后在一个batch的数据上前向传播、计算损失、反向传播、更新参数。这个过程别用任何高级封装就几十行代码。写完这一段你对深度学习到底在训练什么的理解就建立了后面哪怕用再复杂的框架也不会心虚。有了训练循环的基础再引入数据加载器、学习率调度、早停策略、显存优化这些工程细节就顺理成章了。然后一定要学会用预训练模型Hugging Face Transformers是目前的事实标准从huggingface.co下载模型权重和分词器用AutoModel和AutoTokenizer就能把主流模型跑起来。2.4 第四站工程化能力是分水岭前面三站学完你已经能把一个模型在Notebook里训练出来了。但这跟AI工程之间还差一大截差的这部分就是工程化能力。我把它拆成四件事代码管理、实验管理、模型封装、部署交付。代码管理就是Git的基本操作至少做到每天提交、分支清晰、不把模型权重文件传上去。实验管理的意思是你不能靠model_final_v3_真的最终版.py这种文件名来记实验而是要用参数配置或实验记录工具把每次实验的数据集、参数、指标记录清楚。模型封装是把训练好的模型包成一个服务输入请求、返回预测结果。部署交付是把这个服务放到服务器上跑起来能稳定响应、能看日志、挂了能重启。我强烈建议把这四件事当成一门课来学而不是边做边碰。因为它们每一个单独看起来都不难但连在一起就是区分会做模型和能做AI工程的那条线。3. 从零到部署完整复盘一个文本分类项目光说方法论不落地容易变成听懂了但不会做。这里我把一个完整的项目从头到尾复盘一遍项目是电商评论情感分类目标是给评论打上积极/消极标签。这个项目麻雀虽小五脏俱全能覆盖全链路所有关键环节。3.1 项目定义与数据准备先定义问题输入一条评论文本输出一个二分类标签积极/消极。业务上更关心的是准确找出消极评论因为这部分更值得被运营关注所以评估指标要重点看召回率和精确率的平衡。数据来源我用了公开的电商评论数据集大概几万条。拿到原始数据后第一步是数据探查看总条数、正负样本比例、文本长度分布、有没有空值和明显重复项。这个阶段我用pandas做value_counts、describe、isnull基本十分钟就能把数据全貌摸清楚。数据清洗阶段有几个经典动作去掉过短的评论比如少于5个字的基本没有判别价值、删除完全重复的文本、处理空值。但这里有一个我要特别提醒的点清洗一定要留痕每一步预处理逻辑都写成函数保存好而不是在Notebook里手动改。因为部署后线上来的数据也需要走同样的清洗流程你不可能让线上脚本再手改一遍。接下来划分数据我用train_test_split按7:1.5:1.5的比例分出训练集、验证集、测试集固定random_state。这一步有一个我踩过的大坑会在后面单独讲就是划分之前做清洗、但是让信息从训练集泄漏到了验证集这个一定要注意。3.2 建立baseline先跑通一条最笨的链路很多新手一上来就上BERT这是性价比很低的路线。我的习惯是先建一条最朴素的baseline把文本用词频向量化然后用逻辑回归分类。PyTorch都不用上sklearn就够了。做法是用TfidfVectorizer把评论文本转成TF-IDF特征向量设置max_features为5000左右然后用LogisticRegression训练。整个过程不到50行代码。跑出来的结果我记得在验证集上精确率和召回率都在82%到85%之间已经能用了。为什么先做baseline因为它给了你三个东西一个不能再差的性能下限一套完整的评估代码分类报告、混淆矩阵、ROC曲线以及一个判断后面复杂模型是否值得的参照系。如果你的BERT模型只比逻辑回归高两个百分点那就要认真考虑计算成本和收益是否划算——很多时候业务的真实瓶颈根本不在模型。3.3 模型升级微调一个预训练语言模型baseline跑通后下一步我用Hugging Face的bert-base-chinese做了微调。具体流程是用BertTokenizer对评论做编码设置max_length为128padding和truncation都打开。用PyTorch的Dataset和DataLoader封装数据batch_size设为16shuffle训练集。加载BertForSequenceClassification输出维度设成2。优化器用AdamW学习率设为2e-5训练3个epoch。每个epoch结束在验证集上算F1选择验证集最好的轮次保存模型权重。这里有几个关键细节。第一分词结果一定要在划分数据集之后再生成也就是先划分、后编码避免分词器在全部数据上统计信息造成隐性泄漏。第二学习率2e-5是微调BERT时一个非常稳妥的起点太大会导致训练不稳定太小收敛很慢。第三验证集指标和测试集指标一定要分开看不要用验证集反复调参后还拿验证集报数这是新手最常犯的数据泄漏变体。微调后我的F1大概从84%提升到了90%左右提升不算夸张但已经把这条链路完整走通了。到这里模型训练部分告一段落真正的考验来了。3.4 部署上线与线上监控训练完成后的第一件事不是写接口而是把模型文件、分词器、预处理脚本、依赖版本全部固定下来。我用了torch.save保存模型权重同时把tokenizer的目录整个存下来。然后写了一个推理脚本加载模型、接收文本、输出标签和概率先在本地用几条例子验证输出正常。接下来用FastAPI把推理脚本包成HTTP服务暴露一个POST接口传入JSON格式的评论返回情感分类和置信度。再用Docker把服务打包镜像里固定好Python版本和依赖。这一步解决的是本地能跑和服务器能跑之间的环境差异问题。上线后监控是很多自学者完全忽略的部分。我在日志里记录每次请求的输入文本、预测结果、置信度和响应耗时。上线第一周我发现置信度普遍偏高但偶尔出现极低置信度的预测一查发现是线上来了很多表情符号和繁体字训练数据里几乎没有——这就是典型的线上和训练数据分布不一致。发现问题后我把这些新样本收集起来定期加入训练集做增量更新。这个闭环才是AI工程和训练一个模型就完事的本质区别。4. 工具链和资源方案没有好装备也能干活很多新人以为做AI必须买几万块的显卡这真是最大的误解。我把入门阶段的工具链和资源策略完整说清楚看完你应该心里有底。4.1 工具链清单与各自的分工我的日常工具箱是这些按用途划分开发环境Python 3.10PyCharm或VS Code都可以环境管理用venv或conda。数据处理pandas、numpy、matplotlib偶尔用seaborn做分布图。经典机器学习scikit-learn它的API设计是所有机器学习框架的参照系。深度学习PyTorch加Hugging Face Transformers微调预训练模型的首选组合。实验管理MLflow或Weights Biases记录每次实验的参数和指标。部署FastAPI加Docker轻量、好用、生态成熟。协作和版本Git加GitHub私有仓库用仓库托管平台代码和配置全走版本管理。这些工具不是越多越好而是每一个都有明确分工。我见过有人把几十个工具塞进项目结果维护成本比写代码还高。核心原则是每个环节选一个活跃维护、文档清晰的工具用熟它比什么都重要。4.2 实验管理是纪律不是工具问题项目一多你就会发现记住上次用了什么参数根本不可能。我有一次连续调了一周学习率和数据增强方案最后完全分不清哪个配置跑出了最好的F1。后来我规定自己每次实验必须在实验记录里写下数据集版本、模型类型、关键超参数、训练耗时、验证集指标和测试集指标。这个记录可以是MLflow也可以是表格但绝不能只靠文件名记忆。实验管理还有一个常常被忽略的价值让实验可复现。我再也不凭空说出上次效果挺好的那个版本跑哪儿去了因为每个实验都有完整记录。这跟代码里固定随机种子、固定依赖版本三件事配合才能保证上一次的结果你自己能复现。4.3 没有GPU时的几条活路入门阶段需要跑的都是小模型CPU完全够用。跑BERT微调确实需要GPU但也不是非买不可。我常用的几条路用云端公开的免费Notebook环境跑中小规模模型完全没问题注意会话会超时释放记得及时保存模型权重。用免费的推理API对预训练模型做调用很多模型托管平台提供免费额度开发调试足够了。优先用小模型比如蒸馏版BERT比完整版快好几倍效果损失很小。工程上经常不是追求最好而是追求够用且便宜。如果必须自己训练先用小规模数据跑通流程再在现代算力平台上按小时租GPU。一小时的费用通常不高别一上来就烧几千块买卡。我见过一个很有意思的现象没有GPU的人反而更早学会如何把模型训练得又快又省因为资源约束逼着你想清楚数据和模型的关系。资源受限不是劣势反而是一种训练。4.4 部署工具的选择逻辑部署方案选择有个朴素的排序逻辑优先最简单的方案复杂度只在你真正需要的时候才加。刚开始我觉得Docker是标配后来发现很多场景的技术栈是简化版的FastAPI直接部署在服务器上加systemd做进程守护其实也能稳定跑很久。只有当你要多副本、做负载均衡、不间断更新时再引入容器编排或云原生方案。关键是理解每一步的目的是什么。加Docker是为了环境隔离加进程守护是为了崩溃自愈加网关是为了流量控制和鉴权。你完全可以按需选择不需要一口气把所有重武器都搬上。很多项目就是因为过度设计而死在部署阶段K8s都配好了模型反而没时间调。5. 新手高频踩坑实录与排查技巧这部分是我最想分享的因为文档里永远学不到。每一个坑我都亲自踩过有的不止一次。5.1 五个高频错误看看你中过几个第一个是只看准确率。二分类问题里正负样本比例不平衡时准确率极具欺骗性。比如99%是积极评论的数据模型无脑全判积极就有99%准确率但这毫无意义。一定要看混淆矩阵和F1根据业务场景选侧重精确率还是召回率。第二个是数据泄露。这词听起来很高深其实就是训练时不该看到的信息被看到。常见来源极其隐蔽标准化时用全量数据的均值和方差、划分前做了数据增强、文本预处理时用了全语料统计信息。我自己的惨痛教训是有一次做关键词特征在划分数据前先统计了全部数据的词频然后按频率筛词表结果验证集指标虚高了3个百分点上线立刻现原形。第三个是不固定随机种子。深度学习模型本身有随机性不固定种子的话同一个代码跑两次结果差不少你甚至分不清改动是有效还是随机波动。更严格的做法是连依赖库版本都固定下来。第四个是训练集表现很好、测试集一塌糊涂却不知道怎么排查。这种情况九成是过拟合先检查训练集和测试集的数据分布是否一致再检查模型容量是否太大而数据量不够。第五个是代码和模型权重不放在一起管理。模型权重文件一大推代码更新了好几版最后模型和代码对不上号想复现结果完全不可能。现在我会在模型文件的命名或配套文件中写下对应代码的commit号确保任何时刻拿出来的模型都能对上当时的代码。5.2 模型不收敛的排查顺序训练损失不下降或者波动剧烈几乎所有新手都会遇到。我的排查顺序非常固定按顺序来可以最快定位问题先看数据是否有问题标签是不是反了、样本是不是重复、有没有异常大的值。再看预处理文本编码、特征标准化有没有写错。检查模型输出维度二分类的输出维度是不是2损失函数和标签格式是否匹配。调整学习率这是最常见的原因学习率太大损失直接飞到NaN太小则训练半天没什么变化。检查优化器和调度器比如Adafactor和AdamW用法不同选错会明显影响收敛。最后看batch大小和梯度裁剪显存不够时减小batch梯度爆炸时加梯度裁剪。这个顺序背后的逻辑是从数据到模型到优化先确认喂进去的内容是对的再确认模型结构能输出最后才是优化层面的调整。我见过太多人一上来就调学习率结果发现是标签编码错位了——这基本是白忙活。5.3 数据泄露这种隐形杀手数据泄露最难防因为它不只影响指标数字更影响你对模型真实能力的判断。它常见的几种形态我再系统列一次时间序列数据里随机打乱后切分相当于让模型看到未来。数据去重前就划分了训练测试集同一个内容既在训练集又在测试集。特征工程使用了全量数据的统计量常见于标准化、归一化、TF-IDF的词表构建。数据增强生成的新样本混到了验证集里。人工检查测试集并反复修改模型直到测试集也拟合了。我的经验是每当感觉模型好得不真实就先怀疑数据泄露。验证方法也很简单把你认为泄露的环节去掉再跑一次看指标下降幅度。如果明显下降说明之前的高指标确实有水分需要修正数据处理流程。5.4 线上性能下降的排查顺序模型上线后效果变差先别急着重新训练。我按这个顺序排查先看数据和预测分布的漂移最近请求的文本长度、主题、来源渠道和训练数据一致吗置信度分布有没有整体偏移这一步能快速判断是数据变了还是模型坏了。再看代码和依赖是不是有人改了预处理逻辑或者升级了依赖库导致行为变化。然后看服务本身特征顺序被改变、默认参数被替换、模型文件被覆盖重载都是线上常见事故。最后才考虑重新训练如果确认数据分布确实变化且收集到了新样本才启动增量更新的流程。这个排查顺序的核心思想是先排除人为和环境因素再怀疑数据最后才动模型。重新训练是最昂贵的操作不能动不动就触发。6. 最后分享几点真实体会写到这里文章也接近尾声了。最后说几句心里话。带过不少新人之后我最大的体会是AI工程学习路上真正劝退人的不是难度而是不知道自己在哪个阶段、接下来该干嘛的失控感。所以我不建议你把这篇内容当成知识清单而是当成一个阶段地图——现在你在哪一站下一站该做什么心里要有数。还有一点是关于心态的。模型效果不好、线上出bug、数据永远洗不干净这些都不是你能力的问题是这个职业的常态。我到现在做新项目第一版效果也经常不如预期但已经不会慌因为我知道有一套固定流程可以去排查和优化。这套流程就是你日积月累沉淀下来的工程直觉。如果你想进一步深入学习我的建议是把这篇提到的全链路动手走一遍哪怕用公开数据集做一个点赞量不大的小项目也能让你获得从零到一的完整体验。之后再去看更复杂的架构、更大的数据、更严苛的性能要求时你已经有了一根可靠的主心骨。这条路不短但每一步都算数。
返回列表