CRAN 任务视图:R 模型部署
此 CRAN 任务视图包含按主题分组的包列表,这些包提供功能来简化将模型部署到各种环境(如移动设备、边缘设备、云和 GPU)的过程,以便对新数据进行评分或推断。它补充了与 高性能计算 和 机器学习 相关的任务视图。
模型部署通常具有挑战性,原因多种多样。一些示例挑战包括:
- 它涉及将模型部署到异构环境中,例如边缘设备、移动设备、GPU 等。
- 很难将模型压缩到非常小的尺寸,以便它可以适合存储空间有限的设备,同时保持相同的精度并最大限度地减少加载模型进行推断的开销。
- 已部署的模型有时需要在小型设备上的有限内存中处理新的数据记录。
- 许多部署环境的网络连接状况不佳,因此云解决方案有时可能无法满足要求。
- 人们对更强大的用户数据隐私范式感兴趣,在这种范式中,用户数据不需要离开移动设备。
- 对在收集数据之前执行基于设备模型的数据过滤的需求不断增长。
本任务视图中讨论的许多领域正在行业和学术界发生快速变化。请通过电子邮件将任何建议发送给维护者,或在上面链接的 GitHub 存储库中提交问题或拉取请求。感谢所有其他人提出的建议和更正。
通过不同类型的工件进行部署
本节包含提供功能的软件包,用于将训练后的模型导出为适合小型设备(例如移动设备(例如 Android、iOS)和边缘设备(Rasberri Pi))的工件。这些软件包基于不同的模型格式构建。
- 预测模型标记语言 (PMML) 是一种基于 XML 的语言,它提供了一种方法,使应用程序能够定义统计和数据挖掘模型,并在符合 PMML 的应用程序之间共享模型。以下软件包基于 PMML。
- The pmml 软件包提供了 PMML 的主要接口。
- The pmmlTransformations 软件包允许在使用数据构建模型之前对其进行转换。构建结构以允许 PMML 软件包中的函数在生成的 PMML 文件中输出转换详细信息以及模型。
- The arules 软件包提供了表示、操作和分析交易数据和模式(频繁项集和关联规则)的基础设施。关联可以写入 PMML 中的磁盘。
- The arulesSequences 软件包是 arules 的附加组件,用于处理和挖掘频繁序列。
- The arulesCBA 软件包提供了一个函数,用于为数据帧构建基于关联规则的分类器,并使用此类分类器对传入的数据帧进行分类。
- 普通旧 Java 对象 (POJO) 或模型对象,优化 (MOJO) 旨在轻松嵌入任何 Java 环境中。生成的模型的唯一编译和运行时依赖项是作为这些软件包的构建输出生成的 h2o-genmodel.jar 文件。The h2o 软件包提供了易于使用的接口来构建各种机器学习模型,例如基于 xgboost 软件包的 GLM、DRF 和 XGBoost 模型,然后可以将其导出为 MOJO 和 POJO 格式。然后,MOJO 和 POJO 工件可以通过其 REST 接口以及不同的语言绑定(例如 Java、Scala、R 和 Python)加载。
- TensorFlow 的 SavedModel 以及其优化版本 TensorFlow Lite,它使用许多技术来实现低延迟,例如针对移动应用程序优化内核、预融合激活和量化内核,这些内核允许使用更小、更快的(定点数学)模型。它支持设备上机器学习推理,具有低延迟和小二进制大小。下面列出的软件包可以生成此格式的模型。请注意,这些软件包是基于 reticulate 软件包的相应 Python API 的 R 包装器。虽然创建模型需要 Python 二进制文件,但在部署期间推理时不需要它。
- onnx 软件包提供对 Open Neural Network Exchange (ONNX) 的接口,ONNX 是使用不同框架(例如 TensorFlow、MXNet、PyTorch、CNTK 等)构建的模型的标准格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。在一个框架中训练的模型可以轻松地转移到另一个框架进行推理。这种开源格式使不同框架之间能够互操作,并简化了从研究到生产的路径,将加速人工智能社区的创新速度。请注意,此软件包基于 reticulate 软件包与原始 Python API 交互,因此部署需要 Python 二进制文件。
- 可以使用 xgboost 和 lightgbm 包创建梯度提升决策树 (GBDT) 模型,并将它们序列化为文本和二进制格式,这些格式可用于使用 R 之外的其他技术创建预测,包括但不限于 Apache Spark、Dask 和 treelite。
通过云/服务器部署
许多部署环境都基于云/服务器。以下包提供了在这些类型的环境中部署模型的功能。
- 使用 yhatr 包,可以通过 Yhat REST API 部署、维护和调用模型。
- 使用 cloudml 包,可以轻松地将模型部署到 Google Cloud ML Engine。
- 使用 tfdeploy 包,可以运行一个本地测试服务器,该服务器支持与 CloudML 和 RStudio Connect 相同的 REST API。
- 使用 vetiver 包,可以对已训练的模型进行版本控制、共享、部署和监控。函数可以处理记录和检查模型的输入数据原型,以及从远程 API 端点进行预测。该包是可扩展的,具有支持多种模型的泛型。
- 使用 domino 包,可以为 Domino CLI 提供 R 接口,该服务使您能够轻松地在可扩展的硬件上运行代码,并具有为分析工作流设计的集成版本控制和协作功能。
- 使用 tidypredict 包,可以在数据库中运行预测。它基于 dplyr 和 dbplyr,可以将用 R 编写的數據操作转换为数据库查询,这些查询可以稍后用于在各种类型的数据库中执行数据转换和聚合。
- 使用 ibmdbR 包,可以将许多基本和复杂的 R 操作推送到数据库中,这消除了 R 的主内存边界,并允许充分利用底层数据库中的并行处理。
- 使用 sparklyr 包,可以绑定到 Apache Spark 的分布式机器学习库,并允许将训练后的模型部署到集群中。此外,rsparkling 包使用 sparklyr 进行 Spark 作业部署,同时使用 h2o 包进行常规模型构建。
- 非 CRAN mrsdeploy 包提供了在控制台应用程序中建立远程会话以及发布和管理由您提供的 R 代码块或脚本支持的 Web 服务的功能。
- The opencpu 包提供了一个服务器,该服务器公开了一个简单但功能强大的 HTTP API,用于与 R 进行 RPC 和数据交换。这为统计服务或构建 R Web 应用程序提供了可靠且可扩展的基础。
- 存在一些通用的 R 服务器/客户端框架,可以帮助在基于服务器的环境中部署模型。
- The Rserve 和 RSclient 包都提供服务器和客户端功能,用于 TCP/IP 或本地套接字接口,以允许从多种语言和系统访问 R。
- The httpuv 包提供低级套接字和协议支持,用于直接在 R 中处理 HTTP 和 WebSocket 请求。
- 几个包提供了将 R 代码转换为 Web API 的功能。
CRAN 包
相关链接
其他资源