ML系统设计面试

和传统系统设计面试的区别

  1. 案例类型
    ML系统设计(下称为MLSD)顾名思义通常会以一个典型的ML案例而非软件或者功能设计案例来推动整场面试。这样的ML案例通常会包含一个比较笼统的任务描述,一些提供给你的数据/特征集,和一些随后而来推动设计进度的问题。
  2. 重点设计节点
    MLSD的重点通常都是围绕特征集和模型这两点展开的。特征集的产生,变换和存储;模型的选择和训练,这些是着重考察的点。
  3. 系统评估标准
    成功的MLSD通常需要面试者能做到这样几点:顺利理解任务要求,能评判性地分析任务;进行合适的特征筛选,对不同特征类型做到正确的预处理;对所需数据的存储规模和数据流有直观的认识;能够选择适用于该问题的模型,并对模型的

如何准备

  1. 结合不同的ML任务来思考不同算法模型的用途和优缺点
  2. 从软件工程师的角度去思考机器学习模型的生命周期
  3. 观察并积累对于复杂数据/特征的运用以及它们的存储,性能上的要求
  4. 整理出一套适用于MLSD的模版

一个简单的模板

  1. 任务描述
    任务是什么,不是什么; 合理的线上/线下评价指标分别是什么;
  2. 数据/特征
    数据从哪里来,QpS如何; 数据存在哪里,存储量如何; 如何生成特征集; 特征集feed给模型时的latency考虑
  3. 模型和训练
    模型种类选择; 训练周期,方式; 模型质量评估; 部署和调用方式(线上/线下)
  4. 迭代分析
    如果是第一代模型,以什么为baseline; 后续可能的优化;
  5. 完整的request path 以流程图的形式把各个组间结合起来