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

背景 —— Notebook不能“部署”
许多数据科学家最初接触编码是通过笔记本式用户界面进行的。笔记本对于探索是不可或缺的 — 这是我们工作流程的一个关键方面。然而,它们并不设计为可投入生产。这是我在许多客户中观察到的一个关键问题,其中一些客户询问有关如何将笔记本投入生产的方法。与其将笔记本投入生产,实现生产可用性的最佳途径是编写模块化、可维护和可重复的代码。
在本文中,我提供了一个示例,展示了一个用于训练模型以分类欺诈信用卡交易的模块化ML流水线。通过本文的结论,我希望你能:
- 增进对模块化ML流水线的认识和理解。
- 受到启发,为自己构建一个。
如果你想充分发挥部署机器学习模型的效果,编写模块化的代码是重要的一步。
首先快速定义一下模块化代码。模块化代码是一种软件设计范例,强调将程序分解为独立、可互换的模块。我们应该努力将我们的机器学习流水线接近这种状态。
快速绕道 —— 项目、数据和方法
这个机器学习项目的数据来源于Kaggle。数据集包含284,807个匿名信用卡交易,其中492个是欺诈交易。任务是构建一个分类器来检测欺诈交易。
此项目的数据在Open Data Commons下获得了包括商业用途在内的许可。
我使用了深度学习方法,利用了Ludwig,这是一个声明式深度学习的开源框架。我不会在这里详细介绍Ludwig,但我之前写过一篇关于这个框架的文章。
Ludwig深度神经网络是通过一个.yaml文件进行配置的。对于那些好奇的人,你可以在模型注册GitHub上找到它。
使用Kedro构建模块化流水线
使用开源工具来构建模块化机器学习流水线变得更加容易,我最喜欢的工具之一就是Kedro。不仅因为我在工业界看到过它的成功应用,而且它还帮助我发展了我的软件工程技能。
Kedro是一个开源框架(根据Apache 2.0许可)用于创建可重复、可维护和模块化的数据科学代码。我在为一家银行开发AI战略时了解到了它,考虑到我的团队可以利用哪些工具来构建可投入生产的代码。
免责声明:我与Kedro或McKinsey的QuantumBlack没有任何关联,他们是这个开源工具的创建者。
模型训练流水线

Kedro方便地允许你可视化你的流水线,这是一个非常棒的功能,可以帮助你理清代码。流水线对于机器学习是标准的,所以我只会简要介绍每个方面。
- 导入数据:从外部源导入信用卡交易数据。
- 拆分数据:使用随机拆分将数据拆分为训练集和验证集。
- 运行实验:使用Ludwig框架在训练数据集上训练深度神经网络。Ludwig的实验API方便地保存每次实验运行的模型工件。
- 运行预测:使用前一步训练的模型在验证数据集上运行预测。
- 模型诊断:生成两个诊断图表。首先,跟踪每个时期的交叉熵损失。其次,绘制验证数据集上模型性能的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,初始时可能会出现陡峭的学习曲线,但采用标准的工作流程将简化该过程。以下是我的建议工作流程:
- 建立您的工作环境:我倾向于使用Anaconda完成此任务。我通常使用一个environment.yml文件,其中包含我环境所需的所有依赖项,并使用Anaconda Powershell命令行从这个文件创建我的环境。
- 创建一个Kedro项目:一旦您安装了Kedro(希望已在您的environment.yml中声明),您可以通过Anaconda命令行界面创建一个Kedro项目。
- 在Jupyter Notebooks中进行探索:我在Jupyter notebooks中构建初始的流水线,这个过程对大多数数据科学家来说很熟悉。唯一的区别是,一旦您构建好了流水线,您应该整理它,以便每个单元格都可以作为Kedro流水线中的一个节点。
- 注册您的数据:在数据目录中记录每个数据处理或数据摄取步骤的输入和输出。
- 添加您的流水线:在notebooks中进行探索后,您将希望创建一个流水线。这可以通过命令行界面实现。运行此命令将在“pipelines”中添加一个附加的文件夹,其中包含您刚刚创建的流水线的名称。在这个文件夹中,您将构建节点和流水线。
- 定义您的流水线:这是将代码从Jupyter notebooks转移到流水线文件夹中的node.py文件的阶段,确保您打算作为流水线一部分的节点具有输入和输出。一旦设置好节点,继续在pipeline.py文件中定义您的流水线。
- 注册您的流水线:在pipeline_registry.py文件中,您可以找到一个模板来注册您新创建的流水线。
- 运行您的项目:一旦建立好,您可以通过命令行界面运行任何流水线,还可以可视化您的项目。
可投入生产的流水线适用于更广泛的机器学习操作生态系统。阅读我的关于MLOps的文章,深入了解。
为企业建立机器学习运营
支持您的AI战略的有效MLOps蓝图
towardsdatascience.com
总结
Kedro是一个出色的框架,用于交付可投入生产的机器学习流水线。除了本文讨论的功能之外,它还与其他开源库有着众多的集成,以及用于文档和测试的包。Kedro不能解决与模型部署相关的所有问题-例如,模型版本控制可能更适合由其他工具(如DVC)处理。然而,它将帮助数据科学家在商业环境中产生更易于维护、模块化和可复现的代码,以供投入生产使用。对于完全的新手来说,学习曲线相对陡峭,但文档清晰,并包含了指导性教程。与这些包中的任何一个一样,学习的最佳方式是深入并进行实验。
链接到完整的GitHub仓库
在LinkedIn上关注我
订阅 小猪AI,获取更多我的见解:
使用我的推荐链接加入小猪AI — John Adeojo
我分享数据科学项目、经验和专业知识,以帮助您的学习之旅。您可以通过以下方式注册小猪AI…
johnadeojo.medium.com
如果您有兴趣将人工智能或数据科学整合到您的业务运营中,我们邀请您安排一次免费初步咨询:
在线预约 | 数据中心解决方案
通过免费咨询,了解我们在帮助企业实现雄心勃勃目标方面的专业知识。我们的数据科学家和…
www.data-centric-solutions.com