Press "Enter" to skip to content

构建可部署的机器学习流水线

利用Kedro构建可投入生产的机器学习流水线

Image by Author: Generated with Midjourney

背景 —— Notebook不能“部署”

许多数据科学家最初接触编码是通过笔记本式用户界面进行的。笔记本对于探索是不可或缺的 — 这是我们工作流程的一个关键方面。然而,它们并不设计为可投入生产。这是我在许多客户中观察到的一个关键问题,其中一些客户询问有关如何将笔记本投入生产的方法。与其将笔记本投入生产,实现生产可用性的最佳途径是编写模块化、可维护和可重复的代码。

在本文中,我提供了一个示例,展示了一个用于训练模型以分类欺诈信用卡交易的模块化ML流水线。通过本文的结论,我希望你能:

  1. 增进对模块化ML流水线的认识和理解。
  2. 受到启发,为自己构建一个。

如果你想充分发挥部署机器学习模型的效果,编写模块化的代码是重要的一步。

首先快速定义一下模块化代码。模块化代码是一种软件设计范例,强调将程序分解为独立、可互换的模块。我们应该努力将我们的机器学习流水线接近这种状态。

快速绕道 —— 项目、数据和方法

这个机器学习项目的数据来源于Kaggle。数据集包含284,807个匿名信用卡交易,其中492个是欺诈交易。任务是构建一个分类器来检测欺诈交易。

此项目的数据在Open Data Commons下获得了包括商业用途在内的许可。

我使用了深度学习方法,利用了Ludwig,这是一个声明式深度学习的开源框架。我不会在这里详细介绍Ludwig,但我之前写过一篇关于这个框架的文章。

Ludwig深度神经网络是通过一个.yaml文件进行配置的。对于那些好奇的人,你可以在模型注册GitHub上找到它。

使用Kedro构建模块化流水线

使用开源工具来构建模块化机器学习流水线变得更加容易,我最喜欢的工具之一就是Kedro。不仅因为我在工业界看到过它的成功应用,而且它还帮助我发展了我的软件工程技能。

Kedro是一个开源框架(根据Apache 2.0许可)用于创建可重复、可维护和模块化的数据科学代码。我在为一家银行开发AI战略时了解到了它,考虑到我的团队可以利用哪些工具来构建可投入生产的代码。

免责声明:我与Kedro或McKinsey的QuantumBlack没有任何关联,他们是这个开源工具的创建者。

模型训练流水线

Image by Author: End-to-end model training pipeline generated with Kedro viz

Kedro方便地允许你可视化你的流水线,这是一个非常棒的功能,可以帮助你理清代码。流水线对于机器学习是标准的,所以我只会简要介绍每个方面。

  1. 导入数据:从外部源导入信用卡交易数据。
  2. 拆分数据:使用随机拆分将数据拆分为训练集和验证集。
  3. 运行实验:使用Ludwig框架在训练数据集上训练深度神经网络。Ludwig的实验API方便地保存每次实验运行的模型工件。
  4. 运行预测:使用前一步训练的模型在验证数据集上运行预测。
  5. 模型诊断:生成两个诊断图表。首先,跟踪每个时期的交叉熵损失。其次,绘制验证数据集上模型性能的ROC曲线。
作者:模型训练过程中的损失曲线
作者:在留存数据集上进行模型评估的ROC曲线

管道的核心组件

现在我们已经建立了一个高层次的视图,让我们来了解一些管道的核心组件。

项目结构

C:.├───conf│   ├───base│   │   └───parameters│   └───local├───data│   ├───01_raw│   ├───02_intermediate│   ├───03_primary│   ├───04_feature│   ├───05_model_input│   ├───06_models│   │   ├───experiment_run│   │   │   └───model│   │   │       ├───logs│   │   │       │   ├───test│   │   │       │   ├───training│   │   │       │   └───validation│   │   │       └───training_checkpoints│   │   └───experiment_run_0│   │       └───model│   │           ├───logs│   │           │   ├───test│   │           │   ├───training│   │           │   └───validation│   │           └───training_checkpoints│   ├───07_model_output│   └───08_reporting├───docs│   └───source│  └───src    ├───fraud_detection_model    │   ├───pipelines    │       ├───train_model    └───tests        └───pipelines

Kedro提供了一个模板化的目录结构,在初始化项目时会建立起来。在此基础上,您可以以编程方式向目录结构中添加更多的管道。这种标准化的结构确保了每个机器学习项目都是相同的,并且易于文档化,从而便于维护。

数据管理

数据在机器学习中起着至关重要的作用。当在商业环境中使用机器学习模型时,跟踪数据的能力变得更加重要。您经常会面临审计的情况,或者需要在他人的机器上进行生产或重现您的管道。

Kedro提供了两种方法来强制执行数据管理的最佳实践。第一种是一个目录结构,专为机器学习工作负载设计,为数据转换期间产生的中间表和模型工件提供了不同的位置。第二种方法是数据目录。作为Kedro工作流的一部分,您需要在.yaml配置文件中注册数据集,从而使您可以在管道中使用这些数据集。这种方法可能一开始看起来不太常见,但它使您和其他人能够轻松跟踪数据。

协调 – 节点和管道

这是真正发生魔术的地方。Kedro为您提供了直接使用的管道功能。

管道的初始构建块是节点。每个可执行的代码块可以封装在一个节点内,节点只是一个接受输入并产生输出的Python函数。然后,您可以将管道组织为一系列节点。通过调用节点并指定输入和输出来轻松构建管道。Kedro确定执行顺序。

构建管道后,将其注册在提供的pipeline_registry.py文件中。这种方法的优点是您可以创建多个管道。这在机器学习中特别有益,您可能会有一个数据处理管道,一个模型训练管道,一个推断管道等等。

设置完成后,修改管道的各个方面就变得简单明了。

代码片段显示nodes.py脚本的示例

代码片段显示Pipeline脚本的示例

配置

Kedro的最佳实践规定,所有配置都应通过提供的parameters.yml文件处理。从机器学习的角度来看,超参数也属于这个范畴。这种方法简化了实验过程,因为您可以简单地用一组超参数替换一个parameters.yml文件,这也更容易跟踪。

我还在parameters.yml配置中包含了Ludwig深度神经网络的model.yaml和数据源的位置。如果模型或数据的位置发生变化,比如在开发者之间移动时,调整这些设置将非常简单。

代码片段显示parameters.yml文件的内容

可复现性

Kedro作为模板结构的一部分包含了一个requirements.txt文件。这使得监控环境和确切的库版本变得非常简单。但是,如果您愿意,您可以使用其他环境管理方法,比如environment.yml文件。

建立工作流程

如果您正在开发机器学习流水线并考虑使用Kedro,初始时可能会出现陡峭的学习曲线,但采用标准的工作流程将简化该过程。以下是我的建议工作流程:

  1. 建立您的工作环境:我倾向于使用Anaconda完成此任务。我通常使用一个environment.yml文件,其中包含我环境所需的所有依赖项,并使用Anaconda Powershell命令行从这个文件创建我的环境。
  2. 创建一个Kedro项目:一旦您安装了Kedro(希望已在您的environment.yml中声明),您可以通过Anaconda命令行界面创建一个Kedro项目。
  3. 在Jupyter Notebooks中进行探索:我在Jupyter notebooks中构建初始的流水线,这个过程对大多数数据科学家来说很熟悉。唯一的区别是,一旦您构建好了流水线,您应该整理它,以便每个单元格都可以作为Kedro流水线中的一个节点。
  4. 注册您的数据:在数据目录中记录每个数据处理或数据摄取步骤的输入和输出。
  5. 添加您的流水线:在notebooks中进行探索后,您将希望创建一个流水线。这可以通过命令行界面实现。运行此命令将在“pipelines”中添加一个附加的文件夹,其中包含您刚刚创建的流水线的名称。在这个文件夹中,您将构建节点和流水线。
  6. 定义您的流水线:这是将代码从Jupyter notebooks转移到流水线文件夹中的node.py文件的阶段,确保您打算作为流水线一部分的节点具有输入和输出。一旦设置好节点,继续在pipeline.py文件中定义您的流水线。
  7. 注册您的流水线:在pipeline_registry.py文件中,您可以找到一个模板来注册您新创建的流水线。
  8. 运行您的项目:一旦建立好,您可以通过命令行界面运行任何流水线,还可以可视化您的项目。

可投入生产的流水线适用于更广泛的机器学习操作生态系统。阅读我的关于MLOps的文章,深入了解。

为企业建立机器学习运营

支持您的AI战略的有效MLOps蓝图

towardsdatascience.com

总结

Kedro是一个出色的框架,用于交付可投入生产的机器学习流水线。除了本文讨论的功能之外,它还与其他开源库有着众多的集成,以及用于文档和测试的包。Kedro不能解决与模型部署相关的所有问题-例如,模型版本控制可能更适合由其他工具(如DVC)处理。然而,它将帮助数据科学家在商业环境中产生更易于维护、模块化和可复现的代码,以供投入生产使用。对于完全的新手来说,学习曲线相对陡峭,但文档清晰,并包含了指导性教程。与这些包中的任何一个一样,学习的最佳方式是深入并进行实验。

链接到完整的GitHub仓库

在LinkedIn上关注我

订阅 小猪AI,获取更多我的见解:

我分享数据科学项目、经验和专业知识,以帮助您的学习之旅。您可以通过以下方式注册小猪AI…

johnadeojo.medium.com

如果您有兴趣将人工智能或数据科学整合到您的业务运营中,我们邀请您安排一次免费初步咨询:

在线预约 | 数据中心解决方案

通过免费咨询,了解我们在帮助企业实现雄心勃勃目标方面的专业知识。我们的数据科学家和…

www.data-centric-solutions.com

Leave a Reply

Your email address will not be published. Required fields are marked *