无论是数据科学家还是机器学习工程师,学习机器学习系统设计都是最重要的核心技能之一。它是连接模型构建与部署实际业务成果解决方案的桥梁。
将机器学习理念转化为实际生产系统,以节省成本、提升营收并创造可衡量价值的能力,决定了职业生涯的长期发展和薪资水平。
掌握这些技能,有望实现每年数百万美元的成本节约,并获得超过六位数年薪的职业机会。
本指南将深入剖析机器学习系统设计的核心思路,助力读者掌握这一关键能力。
通用框架
以下是设计机器学习系统时可以遵循的通用框架:
注意:这是成熟科技公司中应用型机器学习系统最常见的设计类型。还有其他更细致的场景,如基础设施设计和AI/ML研究实验设计。

(此框架图由原文作者设计)
如果需要此模板的PDF副本,可以通过以下链接获取:
https://framework.egorhowell.com
接下来,将对这些步骤进行更详细的解读。
业务问题
此步骤的目标包括:
- 明确目标 — 需要解决的业务或用户问题是什么?如何将其转化为机器学习解决方案?
- 定义指标 — 目标指标是什么?例如准确率、F1分数、ROC-AUC、精确率/召回率、RMSE等,以及它们如何转化为业务绩效。
- 约束与范围 — 可用的计算资源有多少?需要实时预测还是批量推理?是否真的需要机器学习?
- 高层设计 — 从数据到推理的粗略架构会是怎样的?
数据
此阶段主要围绕数据的收集与获取展开:
- 识别数据源 — 包括数据库、API、日志或用户生成数据等。
- 确定目标变量 — 目标变量是什么?如何获取?
- 质量控制 — 数据处于何种状态?使用这些数据是否存在法律问题?
特征工程
从现有数据中创造新的特征,以应对特定的业务问题:
- 特征重要性 — 理解哪些特征可能对目标变量产生关键影响。
- 数据清洗 — 处理缺失值、异常值和不一致的条目。
- 特征表示 — 例如独热编码、目标编码、嵌入,以及数据标准化。
- 采样与分割 — 处理不平衡数据集、数据泄露问题,并正确地将数据划分为训练集和测试集。
模型设计与选择
此阶段是展示机器学习模型理论知识的关键环节:
- 基准模型 — 从一个简单的“笨拙”模型或启发式方法开始,然后逐步增加模型的复杂性。
- 模型训练 — 涉及交叉验证、超参数调优和提前停止等技术。
- 权衡考量 — 考虑训练速度、推理速度、延迟和模型可解释性等方面的权衡。
服务与部署
理解如何在生产环境中最好地服务和部署模型。
- 基础设施 — 选择云端或本地部署,建立CI/CD(持续集成/持续部署)管道,并确保系统具备可扩展性。
- 服务方式 — 考虑API端点、边缘模型、批量预测与在线预测等不同服务模式。
评估与监控
最后一步是建立系统和框架,以跟踪模型在生产环境中的表现。
- 关键指标 — 确定在线模型和离线模型需要跟踪哪些指标。
- 监控机制 — 建立仪表板、监控笔记本和Slack警报等。
- 实验设计 — 设计A/B测试实验。
需要学习什么?
一个不为人知的秘密是:机器学习系统设计并非入门级的面试或技能要求。
这是因为机器学习系统设计通常在中高级职位面试中进行考察。
届时,工程师通常已在机器学习和软件工程领域积累了扎实的知识,并可能正在发展某一专业特长。
尽管如此,如果希望获得一份全面但并非穷尽的学习清单,以下是值得学习的内容。
机器学习理论
- 监督学习 — 分类(逻辑回归、支持向量机、决策树)、回归(线性回归、决策树、梯度提升树)。
- 无监督学习 — 聚类(K-means、DBSCAN)、降维、潜在语义分析。
- 深度学习 — 神经网络、卷积神经网络和循环神经网络。
- 损失函数 — 准确率、F1分数、NDCG、精确率/召回率、RMSE等。
- 特征选择 — 如何识别关键特征,如相关性分析、递归特征消除、正则化、交叉验证和超参数调优。
- 统计学 — 贝叶斯统计、假设检验和A/B测试。
- 专业领域 — 时间序列、计算机视觉、运筹学、推荐系统、自然语言处理等。通常只需掌握其中1-2个领域。
系统设计与工程
- 云平台 — 主要以AWS为例,建议熟悉S3、EC2、Lambda函数和ECS。大多数服务本质上都是存储和计算的封装。
- 容器化 — Docker和Kubernetes。
- 系统设计核心 — 缓存、网络、量化、API和存储。
- 版本控制与MLOps工具 — CircleCI、Jenkins、Git、MLflow、Datadog、Weights & Biases。
- 部署与编排框架 — Argo、Metaflow、Databricks、Airflow和Kubeflow。
推荐资源
- 《Scikit-Learn、Keras和TensorFlow机器学习实战》 (联属链接)— 学习所有机器学习理论的权威书籍。
- 《设计机器学习系统》 (联属链接) — 由Chip Huyen撰写,她是全球领先的AI/ML模型生产部署专家之一。
- 《实用MLOps》 (联属链接)— 一本全面学习机器学习生产工程基础知识的优秀书籍。
机器学习系统设计面试
后续可能会发布关于机器学习系统设计面试流程的详细视频,但在此之前,本指南将提供一个高层概览和一些准备技巧。
机器学习系统设计面试通常面向中高级机器学习工程师。在这些面试中,面试者通常会面临一个广泛而开放的问题,例如设计一个推荐系统或垃圾邮件过滤器。
如果应聘者的角色涉及特定专业领域,如计算机视觉,面试问题通常会侧重于该特定领域。
机器学习系统设计面试的最大挑战之一是其缺乏标准化。与结构相对一致的软件工程面试不同,ML设计面试的结构差异很大,涵盖的内容也十分广泛:包括无数概念、权衡考量和潜在解决方案路径。
尽管如此,大多数招聘经理倾向于从以下几个关键维度评估候选人:
- 问题转化能力 — 是否能将业务问题转化为机器学习解决方案?
- 决策能力 — 是否能识别权衡,并有逻辑地解释设计选择?
- 广度与深度 — 是否对机器学习理论、多种模型有扎实理解,并能有效应用于实际场景?
如何准备面试
在准备方面,有一个关键建议:
通过解决过去的面试问题进行练习。
以下是一些寻找此类练习资源的途径:
- HelloInterview — 一个练习各类面试的优秀平台。
- 《机器学习系统设计面试》 (联属链接) — 一本包含大量练习题的优秀书籍。
- 机器学习面试在线书籍 — Chip Huyen的另一份优秀资源。
此外,也建议查阅大型科技公司的技术博客文章,以了解机器学习算法如何在大规模环境中部署:
此前,曾讨论过系统设计面试不仅仅考察模型构建技能。
但它们真正考察的基础是什么呢?
一篇早前的文章对此进行了详细阐述,其中包含了所有你需要了解的内容以及最佳学习资源。
