发布于: Oct 10, 2022

模型训练与服务化可以说是成功建立端到端 机器学习流程的两大基本环节。这两个步骤通常需要不同的软件与硬件设置,才能为生产环境提供最佳组合。模型训练优化的目标是低成本、训练时间长度可行、科学上的灵活性以及良好的模型可解释性等;而模型服务化的优化目标是低成本、高吞吐以及低延迟。
 
因此,目前使用的普遍方法是通过流行的数据科学语言(例如 Python 或 R)训练模型,并创建某种模型格式,例如 Model Object, Optimized (MOJO), Predictive Model Markup Language (PMML) 或者 Open Neural Network Exchange (ONNX) 等,并在基于 Open Java Development Kit (OpenJDK) 的微服务(例如 Spring Boot 应用程序)之上实现模型服务化。
 
本文将向大家演示如何使用 Amazon SageMaker 以端到端方式为流行开源机器学习框架 H2O 实施上述方法。Amazon SageMaker 是一项完全托管服务,可为每位开发人员及数据科学家提供快速构建、训练及部署机器学习模型的能力。Amazon SageMaker 是一项多功能机器学习服务,您可以在其中使用自己选定的机器学习框架及编程语言。H2O 框架由 Amazon Web Services 合作伙伴网络(APN)高级合作伙伴 H2O.ai 打造,您可以在多种选项中做出选择,借此在 Amazon Web Services 云上训练及部署 H2O 模型。此外,H2O 还提供一系列示例设计模式的示例以演示如何把 H2O 机器学习管道用于生产。
 
H2O 框架支持三种模型格式,具体如下表所示。
维度 二进制模型 Plain Old Java Object (POJO) Model Object, Optimized (MOJO)
定义 H2二进制模型旨在使用由特定H2O版本支持的特征执行非生产机器学习实验。 POJO是一类普通Java对象,不受任何特殊限制。这是一种导出H2O内置模型并将其实现在Java应用程序当中的方法。 MOJO同样属于Java对象,但模型树不丰此对象之内,因为它使用通用Tree-Walker代码实现模型导航。这样能够进一步缩小模型的大小。
用例 用于交互式机器学习实验。 适用于生产环境。 适用于生产环境。
部署限制 模型托管镜像应运行一套H2O集群,外加与二进制模型相同的h2o版本。 在H2O中,模型文件不可超过1 GB。 对于H2O没有任何限制。
推理性能 高延迟(可高达几秒)——不推荐在生产中使用。 仅在二项式与回归模型中比MOJO略快一点。延迟通常在个位数毫秒级别。 对于多标称与大规模模型,推理效率大大高于POJO。延迟通常在个位数毫秒级别。

在本次试验当中,我们尝试了 Amazon SageMaker 管理的几种端到端设计模式,并将结果整理为下表。

ID 设计模式 优点 缺点
A

使用由H2O.ai提供的Amazon SageMaker Marketplace 算法进行模型训练及部署。

 

无需创建任何自定义容器及Amazon SageMaker算法资源。 存在一套较旧的h2o Python库版本。其他缺点与选项B一致。
B

使用自定义容器配合h2o Python库进行训练。模型将以H2O二进制模型格式导出。使用运行有Flask应用程序的自定义容器做模型服务化,并由h2o Python库运行推理。

 

可以使用h2o Python库的任意版本。 H2O二进制模型推理延迟明显高于MOJO模型。由于不兼容h2o Python库版本,因此容易出现故障。
C

使用自定义容器配合h2o Python库进行训练。模型将以MOJO格式导出。使用运行有Flask应用程序的自定义容器做模型服务化,并由pyH2oMojo运行推理。

 

由于支持MOJO模型格式,因此模型推理延迟低于选项B,而且可以使用h2o Python库的任意版本。 使用pyH2oMojo会导致延迟更高,而且由于无法全面支持快速更新的H2O版本而导致容易出现故障。
D 使用自定义容器配合h2o Python库进行训练。模型将以MOJO格式导出。使用运行有Spring Boot 应用程序以及h2o-genmodel Java库的 Amazon Corretto做模型服务化。 可以使用h2o Python及 h2o-genmodel库的任意版本。可实现最低的模型推理延迟。 大部分数据科学家更倾向于单纯使用脚本语言。

我们可以在之前的列表中添加其他一些选项,特别是在使用 Sparkling Water 运行分布式训练的情况下。在测试所有备选方案之后,本文得出结论,设计模式 D 是广泛适用于各类 H2O 生产级用例的最佳选择。设计模式 D 由包含 h2o Python 库的自定义模型训练容器配合包含 Spring Boot 应用程序以及 h2o-genmodel Java 库的自定义模型推理容器共同构成。在后文当中,我们将共同了解如何基于这套设计模式构建起机器学习工作流。

大家可以使用由 Kaggle 与 encyclopedia-titanica 发布的“泰坦尼克号旅客生存”公共数据集构建一套预测模型,借此分析哪些群体更有可能在灾难性的沉船事故当中幸存下来。其中使用11项独立变量(例如年龄、性别与乘客舱位等)预测二分类目标变量 Survived。在本文中,我们将原始训练数据集以二八比例拆分开来,用以分别创建 validation.csv 与 train.csv 输入文件。数据集位于父存储库的/exmaples 目录之下。此数据集需要执行特征预处理操作,例如对 Age 特征进行空值数据插值、以及对 Sex 及 Embarked 特征进行索引等,借此使用H2O的Gradient Boosting Machines(GBM)算法实现模型训练。

相关文章