发布于: Oct 10, 2022
维度 | 二进制模型 | 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 库的自定义模型推理容器共同构成。在后文当中,我们将共同了解如何基于这套设计模式构建起机器学习工作流。
相关文章