在过去的几年里,机器学习已经成为许多公司直接或间接致力于研究的前沿课题。机器学习的兴起导致了围绕它的角色的演变。当今社区中讨论的最有趣的角色之一是机器学习工程师。机器学习工程师的角色是什么?成为其中一员需要什么?我们将尝试简要讨论这些主题,然后为成为其中之一的路线图奠定基础。
本文提到的技术和概念列表很长。在大多数情况下,熟悉这些术语就足够了,而在其他情况下,则需要更深入的理解和经验。但请记住,这是一个路线图提案,随着新技术的不断涌现,它应该被视为一个永远不会结束的漫长旅程(我希望!)。
为什么机器学习工程师很重要?
在讨论 ML 时,人们想到的最明显的角色是数据科学家。数据科学家是通过应用数学知识并结合对业务的深刻理解来构建模型的人。他们研究可用数据,应用数据操作和特征工程,选择合适的模型并对其进行调整。一旦模型准备就绪,就可以将其投入生产。不幸的是,数据科学家很少具备将模型投入生产的工程知识和能力。在下图中,中间的橙色框描述了数据科学活动的相当重要的部分。周围的方框详细说明了将模型投入生产所需的活动。
围绕模型构建生产应用程序所需的工程专业知识包括数据工程、软件工程实践、CI-CD、MLOps、部署、日志记录和监控等主题的知识。这就是机器学习工程师可以派上用场的地方。这些实践主要来自软件工程领域。因此,最适合 ML 工程师角色的是处理应用程序后端的软件工程师。机器学习应用程序的开发过程与标准应用程序的开发过程不同,它需要与普通软件工程师不同的技能。
机器学习应用程序生命周期
基于 ML 的应用程序的生命周期与常规软件应用程序不同:ML 模型需要训练。此步骤更改了注册新版本的方式。它影响 CI 和 CD 流程的构建方式,并且需要相对于其他软件应用程序不同的思维方式。基于机器学习的软件的生命周期包括以下模块:
- 研究 — 数据科学家使用 ML 进行研究以解决业务问题。他们扫描可用数据并测试不同的机器学习技术。此阶段的结果通常是包含数据操作和未调整的 ML 模型的实验代码。 Jupyter Lab 等工具在此阶段变得非常方便。机器学习工程师较少参与此阶段,但在某些情况下,数据科学家需要帮助来解决编程问题和环境问题,这些问题通常是软件工程师知识的一部分。
- 训练 — 模型训练是一个重复的步骤,其中数据和模型都在调整。数据科学家尝试不同的数据特征和数据工程。正在选择适当的模型并应用超参数调整周期。在注册的每个软件版本上都会重复此阶段。它需要 MLOps 学科的框架和库。 机器学习工程师 通过提供机器学习管道中使用的可重用构建块,帮助迭代此步骤。可重用的块通常解决诸如数据检索、与源的连接、与环境的通信等问题。这些块是应用软件工程学科性能增强的好地方。
- 预言 — 调整后的模型用于预测新数据。预测可以通过重复的批处理操作或通过以流方式处理传入数据的在线应用程序来执行。 机器学习工程师 是构建软件和流程来应用这些预测的人。无论是批量预测管道还是用于在线预测的微服务,都需要软件工程师的能力来构建具有经过调整的性能的强大应用程序。
- 行动 — 仅靠预测是不够的。为了使预测影响业务,必须采取行动。除了预测之外,此操作还需要所涉及实体的当前状态、配置等。 机器学习工程师 构建基础设施来检索这些状态和配置,并开发决定适当操作的规则引擎。此步骤可以由 ML 工程师完成,或者在更好的情况下,由数据科学家完成,前提是 ML 工程师已经构建了适当的基础设施和构建块(实体状态和配置检索,以及连接到外部系统的 API 以应用操作)
- 监控 — 在谈到软件监控时,DevOps 是应用最佳实践的最佳资源。但在机器学习应用中,不仅要监控软件的运行状况,还要监控 模型的准确度和精确度。模型倾向于 漂移 随着时间的推移。正确监控模型可以在早期阶段检测到漂移,这表明需要对模型进行更改,可以通过重新训练、添加功能,甚至替换模型本身。 机器学习工程师 需要了解正在使用的模型类型并相应地监控适当的指标。监控错误的指标可能会导致模型采取错误的决策和行动以及团队采取的补救措施。
正如您所看到的,这些阶段与常规软件应用程序开发生命周期不同,这要求机器学习工程师不仅要掌握经典的软件构建技术,还要掌握机器学习应用程序生命周期的专业知识,并理解机器学习建模的过程。以下部分详细介绍了我认为后端工程师成为机器学习工程师的路线图。
成为 ML 工程师的路线图
本路线图假设您已经是一名软件工程师,并且在软件构建方面有一定的经验,但以下部分也可以为那些刚开始涉足软件和机器学习领域的人提供重点提示。
Python
ML 领域的大多数模型、框架和基础设施都是用 Python 编写的。您可能是一名拥有 Java、C++、NodeJS (Javascript) 或 Go 等其他语言经验的软件工程师,但要在 ML 领域工作,您必须对 Python 有很好的了解。
作为一名软件工程师,您可能熟悉 横切 担忧,例如 错误处理, 表现, 记录, 安全, 联网, 和更多。您应该学习如何用 Python 完成这一切。
生产框架 网络应用程序 很重要,而且在线模型服务通常在 Web 服务器后面完成。有用于模型服务的 SaaS 服务,但在 99.9% 的情况下,您需要添加 预测前和预测后 如果不围绕模型构建 Web 应用程序,大多数 SaaS 框架都不允许这样做。在这种情况下,我发现自己使用以下方式构建微服务 烧瓶 然后 快速API 满足预处理和后处理逻辑的要求。
另外,我强烈建议学习Python 并行性 机制。这 吉尔 这是一个需要理解的重要主题。 多线程 和 多重处理 是并行性的构建块。许多人认为 吉尔 使得多线程的使用变得无关紧要,因为它可以防止一次使用多个内核,但我发现自己在涉及外部 IO 的几种情况下使用它。使用数十个线程,我成功地将单核应用程序的性能提高了十倍甚至更多!
多重处理 python 是利用多核计算机的方式。另一种选择是使用 Kubernetes 的自动伸缩 通过构建单核 POD 并让 K8 根据施加在其上的负载压力生成更多 POD 来利用多核机器来实现机制。
Python 软件开发主要在以下方面派上用场: 预言 和 行动 上面提到的阶段,而且也派上用场来支持 火车 和 研究 由数据科学家完成的阶段。
数据工程
模型需要数据。尽管数据科学家决定了需要哪些数据,但在大多数情况下,他们会让机器学习工程师来解决如何在生产中检索和准备数据,以用于训练和预测。 特征商店 是一种提供数据的绝佳新方法,但仍然需要有人开发在数据到达要素存储之前处理检索和转换的管道。为此,机器学习工程师应该具备使用数据工具的经验,如下所述。
组织将其数据保存在 数据仓库 和 数据湖。著名的数据仓库包括 谷歌的 BigQuery, 亚马逊红移 和 雪花,也被视为数据湖。 对于机器学习工程师来说,使用其中一些工具的知识和经验对于为机器学习项目构建端到端基础设施至关重要。数据管道的编排工具也很有用。其中最著名的是 阿帕奇气流。数据仓库管理领域的另一颗后起之秀是 二苯并噻唑,这有助于定义模式、运行管道和测试数据质量。
在我的公司,我帮助构建工作流程 空气流动 和 大查询 它构建保存各种实体的聚合数据的表。这些表格是我的数据科学家同事开发的大多数模型的来源。提前准备聚合将训练作业从 2 小时减少到不到 20 分钟。它允许更快的模型调整迭代,并减少生产中批量预测的时间。
所有这些工具的基础是 SQL 语言。需要丰富的 SQL 经验。几乎所有围绕数据管道的系统都公开 SQL 引擎来与数据交互。如果没有 SQL 知识,我无法想象自己作为 ML 工程师的角色。
其他重要的数据工具是著名的 python 库 熊猫 和 麻木。大多数机器学习用例都涉及使用它们进行数据处理。机器学习工程师必须掌握这些库才能在基于机器学习的项目中进行编码。当数据量很大并且无法在单台机器的内存中处理时,可以使用诸如 达斯克, 瓦克斯, 射线 和 莫丁 可能会派上用场。它们具有与 Pandas(或包装 Pandas)类似的 API,但能够在更短的时间内处理大于内存的数据帧。
MLOps
对于熟悉该术语的人来说,您可能会认为它只是 DevOps 的主题。 DevOps 的职责随着时间的推移而发生变化,以前的更多功能正在转移给开发人员。诸如此类的问题 持续性CD, 机器学习管道, 服务 和 监控 就机器学习而言,情况有所不同。在许多公司中,DevOps 的 MLOps 方面还没有得到足够的发展,您可能会发现自己更经常地单独推动该主题。 MLOps领域的工具和公司数不胜数,这样的文章根本不足以提及
模型服务性能,尤其是在实时情况下至关重要。学习 型号类型 它们的性能可以帮助选择合适的模型。即使选择模型是数据科学家的责任,您作为 ML 工程师的知识和经验也可以通过与数据科学家讨论和咨询问题来避免浪费宝贵的时间。许多 模型服务工具 存在于市场上。选择一个或构建内部服务解决方案对于企业来说是一项任务 机器学习工程师。在我的公司中,我构建了一个执行在线流预测的微服务。部署在运行的 Kubernetes 上完成 谷歌GKE。
考虑模型服务解决方案时,应该记住,模型在预测过程中会消耗大量 CPU。它们可能还需要更大的内存。了解不同模型使用 CPU 和内存的方式有助于为模型服务构建适当的基础设施。
主题如 图形处理器,以及如何在训练和预测中使用它可以对整体性能做出贡献。了解 GPU 的影响、哪些库支持它,以及 GPU 对整体性能的影响,可以在构建用于训练和预测的模型管道时受益匪浅。
机器学习基本概念
通过获得对机器学习世界的基本了解,可以极大地增强与数据科学家的沟通。
该领域的主题 特征工程 例如 独热编码, 标签编码, 插补,对于理解数据科学家的数据需求很重要。的概念 目标变量 如何处理它们对于训练期间的数据准备至关重要。
理解诸如以下的概念 监督学习与无监督学习 增强构建 ML 应用程序的体验和参与度。复杂的算法,例如 深度学习 机器学习工程师也应该熟悉。它可以帮助设计适合深度学习训练和预测管道的软件和硬件。
早在机器学习这个术语变得无处不在之前,我就开始了我的机器学习工程之旅,通过学习由 吴恩达 简单地称为—— 机器学习。它针对的是那些想成为数据科学家的人,但由于这门课程,我发现自己多次理解了与我一起工作的数据科学家解释的机器学习概念。如上所述,不同的型号有不同的 指标 来衡量它们的准确性,本课程帮助我了解了我需要选择哪些模型进行监控。本课程对我作为机器学习工程师的理解以及在某些情况下的决策做出了很大贡献。
机器学习库
数据科学家使用不同的机器学习库来运行他们的模型。为了支持生产代码,了解这些库的结构至关重要。机器学习领域最著名的入门库之一是 Scikit-Learn。他们的理念是 管道 简化了对经典机器学习结构的理解。该库包含机器学习模型生命周期中所需的大部分工具,包括 变形金刚 和 选型。
另一个著名的 ML 库是 张量流。它专注于深度学习,并拥有强大的设施 模型服务。
火炬 和 MXNet 也有自己的用户份额。我推荐阅读 本文 更好地了解这些图书馆及其专业。
总结和结论
综上所述,机器学习工程师应该掌握以下领域的知识:
- Python 编程语言
- 数据工程
- MLOps
- 机器学习基本概念
- 机器学习库
机器学习工程是一个令人兴奋的角色。它融合了软件工程和机器学习建模的两个领域,这使其在软件工程领域独一无二。
上面的主题列表来自我自己过去 10 年围绕 ML 构建软件的经验。另有想法吗?我很高兴听到您的意见!