跳到主要内容

AI & Data

机器学习工程师

机器学习工程师把模型当作一个运行中的系统,而不是一个结果:产出它的流水线、喂给它的特征、响应请求的服务,以及在世界已经变化而模型没有跟上时能够察觉的监控。一个在 notebook 里分数很好的模型,只是工作的起点。本指南解释这门学科,以及如何评估它。

机器学习工程师具体做什么?

机器学习工程师负责在生产环境中构建、训练、部署并维护预测模型。职责范围包括准备并构造模型所消费的特征、运行可复现的训练流水线、记录并比较实验、对模型产物做版本管理与登记、把它部署在满足延迟预算的服务接口之后,以及监控那些会随时间侵蚀准确率的数据与行为变化。这一角色的定义性部分,是第一个好的离线分数之后的一切:打包、训练与推理的一致性、成本、可观测性、回滚与重训。

这个领域最典型的生产缺陷,是同一个数值在训练时的计算方式与请求到来时的计算方式不一致。一个在批处理作业里基于完整历史表算出来的特征,到了请求时用不完整的数据、或者用略有差别的定义重新计算,就会得到一个离线验证漂亮、线上表现平平的模型。共享的转换代码和特征平台,主要就是为了堵上这道缝;而没有被它坑过的工程师,往往会低估它。

这里对可复现性的要求高于普通软件,因为一个模型产物同时是代码、训练数据、超参数、随机种子和依赖库版本的函数。几个月后重新构建出某个已部署的具体产物,在受监管行业是审计要求,在其他地方则是事故响应要求,而这只有在数据与代码一同被版本化、而不是在提交信息里被描述过的情况下才可能做到。

而且,模型会在什么都没变的情况下衰减。放着不动的软件明年表现还是一样;放着不动的模型会越来越差,因为它评分的人群正逐渐偏离它学习时的人群,有时则是因为它编码的那种关系确实已经不再成立。决定监控什么、什么阈值触发重建、以及重建是自动上线还是等待审批,是一项长期职责,而不是项目的某个阶段。

Assessing the need

团队在什么情况下需要这项能力

相当多的建模工作,会卡在“必须离开笔记本电脑”的那一刻。以下这些压力,通常就是为这一层配置专职工程师开始值得投入的时候。

  • 一个有希望的模型无处可去

    它在 notebook 里表现很好,却没有通往请求服务的路径。打包、依赖固定、延迟预算、训练与推理的特征一致性、批处理、弹性伸缩和回滚方案,全都缺席,而其中每一项对建模的人来说都很陌生。

  • 预测准确率悄悄下降了

    没有人收到告警,因为什么都没有失败。退化是通过某个经营指标的变动、或者某个运营团队开始不信任它才浮出水面的,这意味着它在被人注意到之前已经持续了一段时间。

  • 重训是一套手工仪式

    一个人、一份写在某处的操作步骤,外加一整个工作周。它很脆弱,在真正要紧的地方没有文档,而且那个人不在时就完全停摆。

  • 实验既无法比较也无法重现

    结果散落在截图和聊天记录里,好几个变体共用一个文件名,没有人能有把握地说出当前正在服务流量的那个产物,是由哪份数据集和哪组参数产生的。

  • 推理已经成为成本或延迟上的约束

    加速卡开销在基础设施账单里占了大头,或者响应预算容纳不下这个模型。可用的手段——批处理、量化、蒸馏、缓存、更小的架构——都在拿准确率换经济性,需要有人能把这笔交换量化出来。

  • 审计或合规义务到来了

    现在得有人拿出证据:哪些数据训练了这个已部署的模型、谁批准了它、它在受影响人群上的表现如何,以及某一次具体决策该如何被解释。事后重建这些,要比一路记录下来困难得多。

The discipline

核心能力

  • 特征工程与训练推理一致性

    构造模型学习所用的输入,并保证请求预测时运行的是完全相同的计算。这种一致性要作为部署的一部分被验证,而不是靠“大家本意相同”去假定。

  • 可复现的训练流水线

    参数化、可调度、端到端版本化,训练数据固定得和代码一样牢。重跑上个季度的配置,应当产出上个季度的那个产物,而不是它的近似值。

  • 实验记录

    记录配置、数据集、指标和产物,使各个变体可以被诚实地比较,并且一个结论在几周之后仍然可以被论证,而不必依赖任何人的记忆。

  • 评估与指标选择

    选择能反映该模型所支撑决策的度量,理解校准与排序质量是两回事,处理类别不平衡,并依据两类错误各自的代价来设定阈值。

  • 模型登记与晋级

    带版本的产物,能追溯回产生它的那一次具体训练运行;有明确的“候选到上线”的路径;以及在一次发布出问题时快速回退到上一个产物的能力。

  • 服务与推理

    实时接口、批量打分、流式打分、请求批处理、加速卡利用率,以及那些在并发条件下把九十五分位延迟守在预算之内的架构决策。

  • 漂移检测与重训

    既观察输入分布也观察输出分布,区分“人群变了”和“底层关系变了”,并定义什么触发重建、什么为它把关、由谁签字。

  • 分布式与加速训练

    数据并行与模型并行、显存预算、能在实例被中断后继续的检查点机制,以及预留算力与可中断算力之间的实际经济性。

  • 既有模型的适配

    判断迁移学习或对已发布模型做参数高效微调,何时优于从零训练,以及这个选择对许可、可复现性和实际所需数据量各意味着什么。

  • 负责任的部署

    不只看总体表现,也度量在受影响人群上的表现;在决策影响到个人时提供解释;在切入线上流量之前做影子部署;并在风险要求时保留一条人工复核路径。

Context

技术生态

以下列出的是机器学习工程领域的常用技术。这描述的是该学科在业界的普遍实践,并非对某位工程师技能的说明。服务栈和编排产品被替换的频率,远高于底层实践本身的变化,因此熟悉某一个具体产品的预测力,远不如“维护过一个必须持续可用的模型”的经历。

语言

  • Python
  • SQL
  • Scala
  • C++

建模框架

  • PyTorch
  • TensorFlow
  • JAX
  • scikit-learn
  • XGBoost
  • LightGBM

训练与工作流编排

  • Kubeflow
  • Metaflow
  • Ray
  • Apache Airflow
  • Amazon SageMaker
  • Google Vertex AI

实验记录与模型登记

  • MLflow
  • Weights & Biases
  • Neptune
  • DVC

特征管理

  • Feast
  • Tecton
  • Delta Lake
  • Apache Parquet

服务与推理

  • NVIDIA Triton
  • TorchServe
  • BentoML
  • KServe
  • ONNX Runtime
  • TensorRT

监控

  • Evidently
  • Arize
  • WhyLabs
  • Prometheus
  • Grafana

Working model

How this role works with your team

Engineers work inside your team, on your priorities, to your standards. You direct the work; Talent.ID carries the employment. The division below is the whole arrangement.

You keep

  • 产品
  • 业务优先级
  • 路线图
  • 架构
  • 冲刺优先级
  • 工程标准
  • 日常技术协作

Talent.ID handles

  • 雇佣关系
  • 薪资发放
  • 员工福利
  • 人才管理
  • 持续的员工关系

How an engagement works, step by step

Buyer guidance

评估候选人时应当考察什么

模型效果是候选人最容易谈的话题,也是最不适合作为决策依据的话题之一。一个漂亮的离线分数只是入场券;让模型在两年之后仍然准确、划算、可复现、可回退的那部分工程,才是真正的工作。要探查的是那些只有在东西开始服务流量之后才存在的环节。

模型在生产环境中的经历

问他们部署过什么、真正承接过真实请求,以及最先出问题的是什么。经历停留在竞赛和课程作业的候选人会讲优化;真正运维过模型的候选人会讲一次事故、一次回滚,以及后来补上的一个监控缺口。

  • 把一个模型送上过线,也经历过把它撤回来
  • 能说出最先出问题的是什么,以及当初为什么没有预料到
  • 会谈预测结果的使用方,而不只是分数
  • 既上线过模型,也下线过模型

可复现性的习惯

确认他们能否重建出某个具体产物。这里的实际做法与口头原则分歧最大,而追问“到底有哪些东西被版本化了”,比第一个问题更能说明情况。

  • 把训练数据与代码、配置一同版本化
  • 在结果依赖它们时记录随机种子、依赖库版本与硬件
  • 保留从上线产物回溯到产生它那次运行的谱系
  • 真的重建过一个旧模型,而不是相信自己能做到

指标选择的判断力

问他们为什么选择了所优化的那个度量。弱的回答会说出库默认输出的那个指标;扎实的回答会把这个度量与预测所驱动的决策、以及每一类错误给业务带来的代价联系起来。

  • 在类别严重不平衡时拒绝使用总体准确率
  • 理解校准,以及什么时候概率估计必须可信
  • 依据误报与漏报的相对代价来设定阈值
  • 预期离线数字会高估线上表现,并说得出原因

训练与推理的一致性

被这件事坑过的候选人,会不用提示就主动提起它。问他们某个特征在两条路径上各自如何计算、如何确认两者一致,然后再问:有没有在生产环境里真的发现过它们不一致。

  • 在两条路径上共享转换代码,而不是各写一份
  • 诊断过一次训练推理偏差,并能描述它当时的表现形式
  • 把一致性验证做成部署关卡,而不是定期检查
  • 能说清特征平台解决了什么、又没有解决什么

维护与漂移

问他们监控什么,以及数值变动时会怎么做。最有意思的回答,往往是一次他们调查了漂移、却得出“重训不是正确应对”的结论,这需要理解成因,而不是对着阈值做反应。

  • 既监控输入分布,也监控预测分布
  • 把人群变化与关系变化区分开
  • 有明确定义的重建触发条件,而不只是一个日历周期
  • 曾出于能讲清楚的理由决定不重训

推理的经济性

问他们一千次预测的成本是多少,以及他们如何知道的。承担过账单的工程师会立刻回答,并能列出可用的杠杆;没承担过的人会把服务当作别人负责的、已经解决的细节。

  • 知道自己运维过的东西的单次预测成本
  • 用过批处理、量化或蒸馏,并度量过准确率上的代价
  • 看过加速卡利用率,而不是靠假定
  • 能描述一个更简单的模型在商业上反而更合适的情形

对建模本身的克制

这个领域里最有用的工程师,至少有一次用规则替换掉了模型。问他们拿什么作为对照基线,以及有没有出现过“模型的提升不足以覆盖它的维护成本”的情况。

  • 在提出架构之前先建立一个朴素基线
  • 把长期维护成本与所能带来的提升放在一起权衡
  • 会问:这个预测出来之后,究竟哪一个决策会因此改变
  • 曾建议不要上模型,即使提出者级别更高

Buyer guidance

值得一问的面试问题

这些问题属于您自己的招聘流程,不属于别人。评估由您进行、结论由您得出;下面这些只是通常能把对话从 notebook 移到“必须围绕它建起来的那套系统”上的问题。

  1. 一个已部署的模型表现不如评估阶段。按你会检查的先后顺序,列出可能的解释。

    What a strong answer shows

    诊断的结构感。预期能听到:特征在两条路径上的计算不同、数据泄漏抬高了离线数字、输入人群发生偏移、标签到达得太晚以至于不可信,以及一次没有尊重时间顺序的评估划分。

  2. 你会如何在特征一致性缺陷到达客户之前把它抓住?

    What a strong answer shows

    验证是自动化的,还是停留在愿望层面。扎实的回答会把“同一批记录在两条路径上算出的值”做成发布关卡逐一比对,并在上线之后对偏离持续告警。

  3. 描述一个你运行过的东西的重训策略。是什么触发的?结果由谁批准?

    What a strong answer shows

    运维成熟度。要看被监控的触发条件而不是固定周期、候选模型必须通过的评估关卡,以及晋级究竟是自动的还是需要人来决定。

  4. 你接手了一个没有任何文档的模型。你首先要弄清什么?

    What a strong answer shows

    不确定条件下的优先级。有用的顺序是:它在驱动哪一个决策、相对一个可度量的基线它现在做到了什么、是哪些数据训练了它,以及这个产物究竟还能不能被重建出来。

  5. 讲一次你发现的数据泄漏问题。它是怎么暴露的?

    What a strong answer shows

    对“结果好得不正常”的真实经历。要听某个特征编码了结果、划分忽略了时间顺序,或者预处理在划分之前就对整份数据集拟合过。

  6. 推理现在是基础设施账单里最大的一项。有哪些选择?各自的代价是什么?

    What a strong answer shows

    是否愿意有意识地用准确率换经济性。预期能听到批处理、更小的架构、量化、蒸馏、对重复输入做缓存,以及对每一项在质量上代价的量化说明。

  7. 什么时候更简单的模型赢过了更复杂的模型?你是怎么决定的?

    What a strong answer shows

    工程判断力高于技术偏好。扎实的回答会把边际收益,与维护成本、延迟、可解释性以及有多少人能支持它放在一起权衡。

  8. 你如何评估一个模型在不同用户群体上的行为?

    What a strong answer shows

    是否把总体表现当作足够。要看分群度量、对“总体准确率会掩盖不均衡表现”的意识,以及在发现差距时应当怎么做的成熟立场。

Illustrative engagement

What this looks like in practice

A hypothetical scenario, written to show how the working model applies. It does not describe a Talent.ID client or a completed project.

Challenge
若干个模型正在承接生产流量,每一个都由最初构建它的人非正式地维护着。重训靠手工完成,登记表里的产物无法追溯回产生它们的那次运行,而最近一次关于准确率的投诉很难归因,因为输入分布的情况从来没有被记录过。
Approach
追加的工程能力在团队既有的实践内运作——他们的代码仓库、他们的评审约定、他们的部署流程,以及他们已经确定的技术方向。产品优先级和架构决定权仍属于内部团队;追加的能力与他们并肩处理流水线、模型登记与监控方面的工作。
What this adds to the team
团队提高了产出,而不必交出对自身模型或平台决策的所有权。做什么、以什么顺序做、达到什么标准,仍然掌握在对结果负责的人手中。

Related disciplines

Common questions

Frequently asked questions

机器学习工程师和数据科学家有什么区别?
交付物不同。数据科学家确定应当度量什么、设计研究方法、判断观察到的效应是否真实,并把结论传达给必须据此行动的人。机器学习工程师则把一种建模思路变成一个能可靠训练、能在预算内响应请求、并且在条件变化时仍然可用的东西。两者的技能在中间地带重叠,而失败方式不同:一个产出无人能据以行动的答案,另一个产出一套没人论证过是否值得建的系统。
这个角色与 AI 工程师有何不同?
机器学习工程师产出并维护模型。AI 工程师围绕别人训练好的基础模型构建应用,时间花在检索、上下文、评测体系和护栏上,而不是训练运行与特征流水线上。两者都可能说自己“做模型”,但日常工作几乎完全不同,因此在职位描述里明确指出这项工作需要哪一种,是值得的。
机器学习工程师需要研究背景吗?
对多数商业工作而言,不需要。新颖的架构和发表研究确实需要它,但生产环境中的大部分价值来自数据质量、合理的特征、诚实的评估和可靠的运行——这些是工程能力而不是研究能力。博士学位既不是要求也不是减分项,而默认按此筛选会大幅收窄候选范围,却并不改善结果。
MLOps 是一个独立岗位吗?
在某个规模以下,它是一种实践而不是一个岗位:训练模型的同一批工程师,也负责流水线、模型登记、服务和监控。当多个团队都在共享基础设施上交付模型之后,通常会分化出一个平台方向,它更接近平台工程而不是建模。过早设立这个岗位,往往会产出没有用户的基础设施。
模型应该多久重训一次?
固定周期只是真正要紧之事的一个代理指标,真正要紧的是:模型所处的环境是否已经变化到足以伤害它。有些模型多年不动也没问题;另一些在一次调价或一个季节性变化之后几周内就开始退化。稳妥的做法是监控输入与结果、定义触发条件,并把任何日历周期当作安全网而不是机制本身。
数据工程师能转到这个角色吗?
这是一条走得比较多的路径,因为其中相当大一部分工作是候选人本就会做的流水线建设。需要补上的是统计判断力:选择评估度量、识别数据泄漏、理解离线分数为什么会高估线上表现,以及解读漂移而不只是检测到漂移。
机器学习工程师如何与现有的工程团队协作?
在技术团队扩展的模式下,日常的开发优先级和技术决策由您的团队掌握。您的规范、您的架构、您的路线图和您的冲刺规划决定实际发生什么,技术协作的对象是您自己的工程师。Talent.ID 负责雇佣他们:雇佣关系、薪资发放、员工福利、人才管理,以及全程持续的员工关系。

Tell us what your team needs

Describe the gap — the work, the stack, the way your team runs — and we will tell you what we can support. If it is not something we can help with, we will say so.