1. 这不是一篇讲“机器学习算法”的文章,而是一份从业十年的ML工程岗位实录
你点开这篇文章,大概率是因为被标题里那个刺眼的“Not What You Think”勾住了——没错,我第一次看到“ML Engineer”这个头衔时,也以为自己要天天推公式、调超参、在arXiv上扒最新论文。结果入职第一天,我的任务是:给一个卡了三天的Airflow DAG加日志埋点,顺便把上游数据源返回的XML里嵌套七层的 <response><data><items><item><fields><field><value> 结构用XPath精准抽出来,再转成Parquet写进S3。
ML Engineering 、 Data Scientist 、 Research Scientist 、 Applied Scientist 、 Data Engineer 、 Research Engineer ——这些词在招聘JD里像一串加密口令,HR觉得它们很专业,候选人觉得它们很玄学,团队老板可能连自己招的是谁都说不太清。这不是术语游戏,而是真实存在的岗位割裂:有人写PyTorch模型但从不碰生产API,有人部署千个模型却从不训练一个,有人每天和Kubernetes打交道,却连交叉验证是什么都要查Wikipedia。
这篇内容,不讲理论,不画架构图,不列技术栈清单。它是我过去十年在六家不同规模公司(从20人AI初创到万人大厂)、带过17个跨职能项目、亲手招聘/面试过214位候选人的实战沉淀。我会用具体任务、真实代码片段、失败截图、上线时间线,告诉你每个角色在真实世界里 每天打开电脑后做的第一件事是什么 , 最后一行commit改了什么 , 周五下午三点被叫去救火时到底在修哪条链路 。如果你正纠结该学Spark还是学Transformer,该刷LeetCode还是读ICML,或者刚收到offer却不确定自己未来三年要对着屏幕敲什么——那接下来的内容,就是你花三小时能省下六个月试错成本的关键。
2. 岗位本质解构:从“做什么”到“为谁扛责”
2.1 数据工程师(Data Engineer):数据世界的水电工
很多人以为数据工程师就是“写SQL的”,这就像说外科医生就是“拿刀的”。真正的分水岭在于: 你是否对数据的时效性、一致性、可追溯性负最终责任 。
我带过一个电商推荐项目,数据源包括订单库(MySQL)、用户行为日志(Kafka)、商品主数据(PostgreSQL)。当推荐模型突然准确率暴跌12%时,90%的会议时间都在争论“是不是模型坏了”,而数据工程师老张默默导出三张表的last_modified_timestamp,发现订单库同步延迟了47分钟——因为上游DBA在凌晨升级了MySQL版本,触发了CDC组件的兼容性bug。他没写一行模型代码,但整个推荐系统瘫痪的根因在他管辖范围内。
核心动作拆解 :
- 数据接入层 :不是简单连数据库,而是设计容错机制。比如用Flink CDC替代Debezium时,必须处理binlog position断点续传;解析JSON日志时,要预设schema evolution策略(新增字段默认null?还是丢弃整条记录?)。我见过最惨的案例:某金融公司因未定义timestamp字段的时区处理逻辑,导致T+1报表中所有交易时间全乱序,审计直接叫停。
- 数据建模层 :维度建模不是教科书作业。实际中,你得决定“用户活跃度”这个指标是存在DWD层(明细层)还是DWS层(汇总层)——前者支持灵活下钻,后者保障查询性能。我们曾为一个实时风控场景,在DWD层冗余存储用户最近3次登录IP,只为避免关联5张表带来的200ms延迟。
- 运维保障层 :监控不是看Grafana仪表盘。真正的SLO是:“99.9%的数据在产生后15分钟内可被下游消费”。这意味着你要写告警规则:当Kafka topic lag > 10000且持续5分钟,自动触发Slack通知+创建Jira工单+执行回滚脚本。
提示:数据工程师的终极KPI从来不是“ETL任务跑了多少个”,而是“业务方提需求时,能否在30分钟内给出数据可用性结论”。我见过最高效的DE团队,把所有数据表的血缘关系、更新频率、负责人、SLA承诺全部注入内部Wiki,并用Python脚本自动生成Markdown文档——新同事入职第一天就能查清“用户画像表”依赖哪些上游任务、最近一次失败原因是什么。
2.2 机器学习工程师(ML Engineer):模型与生产的翻译官
“ML Engineer”这个词被严重滥用了。有些公司把它当高级数据工程师用,有些当初级算法研究员用,但真正符合岗位本质的,是 解决“模型在实验室有效,上线后失效”这一鸿沟的人 。
去年我们上线一个物流ETA预测模型,离线AUC 0.89,线上首周p95误差高达42分钟。排查发现:训练时用的是历史订单数据(含人工修正的送达时间),而线上推理用的是GPS轨迹流数据(含信号漂移噪声)。问题不在模型,而在 特征工程与线上服务的语义一致性 。
关键能力矩阵 :
| 能力维度 | 实验室场景 | 生产环境要求 | 我的实操方案 |
|---|---|---|---|
| 特征计算 | Pandas DataFrame单机处理 | 毫秒级响应,支持高并发 | 将特征计算下沉到Flink SQL,用RocksDB做状态存储,避免每次请求都查HBase |
| 模型服务 | Flask本地API | 自动扩缩容,AB测试分流,金丝雀发布 | 用KServe封装PyTorch模型,通过Istio配置流量权重,灰度期间同时打分并比对结果差异 |
| 监控告警 | 离线评估指标 | 实时数据漂移检测,模型衰减预警 | 在Prometheus埋点记录每批次预测的feature distribution KL散度,超过阈值自动触发重训流程 |
| 最反直觉的是: ML工程师写的代码里,模型相关代码占比通常不超过15% 。剩下85%是:写Dockerfile优化镜像大小(从2.3GB压到480MB)、配K8s HPA的CPU/memory指标、写CI/CD流水线校验模型输入输出schema、甚至手动修改Nginx配置解决gRPC健康检查超时。 | < |


500

被折叠的 条评论
为什么被折叠?



