现代应用开发 — 机器学习和人工智能
大多数现代机器学习工具包都是开源的,是在 Python 中编写的。因此,机器学习平台应为开源框架和 Python 提供原生支持。还应使用户能够通过安装自己的库或升级已安装的库来定制自己的机器学习环境。该平台应让数据科学家在结构化、非结构化或半结构化数据上训练模型,同时跨多个计算资源纵向或水平扩展提取、转换和加载 (ETL) 或培训步骤。
最后,机器学习平台应确保以最少的摩擦(通常通过简单的 REST 调用)轻松部署模型来进行实时使用,同时保留已部署模型的行沿用,以确保对模型进行审计和重现。
本文档介绍了与创建机器学习平台和最佳实施路径相关的设计原则。使用此模式创建满足数据科学家用户需求的机器学习平台。
设计原则
此体系结构采用以下方式实现现代应用开发原则:
- 原则:使用轻量级开源框架和成熟的编程语言
使用 conda 环境,而不是 Python 虚拟环境或 Docker 映像。我们提供有序的数据科学领域,其中包含选定用于处理特定用例的 Python 库集合。Conda 环境通常在 Python 中提供适当的隔离级别,允许多个环境在同一笔记本环境或批处理作业中运行,并且比 Docker 映像更容易构建,从而提供灵活性。Conda 环境也是易于导出和导入的,因为它们是简单的归档(gzip 和 zip)。
首先,我们准备使用一系列现成的环境。定期升级这些环境,以确保包含的软件包反映可用的最新版本。每个环境都附带文档和代码示例。这些环境可用于在 Python 3。6 及更高版本中构建、培训和部署机器学习模型。采用这些环境以确保不同体系结构组件之间的兼容性。
- 主体:将应用构建为通过 API 进行通信的服务
采用数据科学的模型部署功能,该功能将模型从模型目录部署为其他应用可以使用的可扩展 HTTP 端点。确保模型培训环境包含与部署环境相同的第三方依赖关系是一个挑战。数据科学模型部署通过拉取合适的 conda 环境来在 HTTP 端点后运行模型,来解决这一难题。模型部署还提供 Oracle Cloud Infrastructure (OCI) 身份和访问管理 (IAM) 验证和授权,因此您不必构建和配置自己的用户和访问管理协议。
一种可接受的替代方法是,通过 Oracle Functions 部署机器学习模型,该模型可用作 API 网关的后端。此选项提供了灵活性,尤其是在定义 API 或使用其他授权协议(例如 OAuth 或基本验证)时。但是,它为您需要更多工作,自动化程度较低,用户错误更易于出错。Oracle Functions 要求您构建自己的 Docker 映像,并确保所有必需的依赖项和 Python 运行时版本都与培训环境匹配。大多数数据科学团队都应避免此选项。
- 主体:自动构建、测试和部署
DevOps 是为了实现软件开发,而 MLOps 是机器学习:一系列以生产环境中的构建、测试、评估、部署和监视模型为中心的流程和自动化。喜欢通过数据科学中的作业和模型部署来使用可重复、可审计和可重现模式。避免直接从笔记本环节中学习和部署模型,更难以构建、运行和自动执行测试。确保用于准备数据、训练模型以及定义测试的所有代码均受版本控制。通过 OCI DevOps 服务或直接从数据科学中的作业运行构建和部署管道。运行模型目录 Artifact 样板代码中包含的一系列模型自测测试。成功运行时,这些测试可以最大程度地减少将模型部署到生产环境时发生的错误数。
- 原则:使用完全托管的服务在应用开发、运行时和数据管理中消除复杂性
无论是数据科学家通过 OCI 数据目录记录其数据资产,通过 OCI 数据流执行大规模数据处理作业,还是通过数据科学构建、训练和部署机器学习模型,所有这些解决方案都是完全托管的。我们为您管理预配、打补丁和保护这些环境。完全托管的解决方案可显著降低数据科学家团队的运营负担,他们的目标是培训和部署模型,而不是管理基础设施。优秀的机器学习平台提供各种基础设施产品(CPU、GPU、灵活配置),且无需额外配置。
- 原则:文书端到端的监测和跟踪
所有工作负荷都应当具有通过 OCI 监视服务发出的基本健康度量。用户可以为预警定义定制度量阈值,并在达到给定阈值时收到通知或执行操作。这样,他们可以监视作业、记事本会话或模型部署的运行状况。
允许用户从作业和模型部署向 OCI 日志记录服务发出定制日志。在大多数情况下,数据科学家还希望监视在作业中运行的进程(例如,培训迭代或脱机验证分数),或者从模型部署中捕获功能向量或模型预测。这是一种常见模式。确保他们能够访问 OCI 日志记录服务并通过 OCI 日志记录分析服务执行简单的研究分析。
- 原则:采用深度防御方法来保护应用和数据
一个优秀的机器学习平台,让数据科学家只能获得完成工作所需的资源。对数据科学家组具有最低权限原则。此外,对用户主体使用资源主体来验证或授权其他资源。本练习可防止用户在记事本会话或作业中插入其用户主体凭证。
确保所有用户都有权访问 OCI Vault 以及访问第三方数据源的身份证明存储在 Vault 中并进行加密。特别是记事本会话应仅可供创建它们的用户访问;配置访问策略以仅向这些资源的创建者授予对记事本会话和作业的访问权限。本练习可防止多个用户访问同一记事本环境、共享私钥并覆盖同一代码段。让出站用户随时都可以访问公共互联网。配置并选择辅助 VNIC(虚拟云网络和子网选择),以启动记事本会话和作业,并防止用户从不安全站点下载数据集或库。
体系结构
可以使用基于此观点架构的部署来实施设计原则。

插图 maf_ai_ml_design_pattern.png 的说明
该体系结构包含以下组件:
- 数据集成服务
Oracle Cloud Infrastructure 数据集成是一项完全托管的多租户、无服务器原生云服务,可帮助您执行常见的 ETL 任务,例如从不同源摄取数据、清理、转换和重新映射数据,以及高效地将数据加载到 OCI 中的目标数据源。
在此过程中,将各种来源(例如 Amazon Redshift、Azure SQL 数据库和 Amazon S3)的数据插入到对象存储和 Autonomous Data Warehouse 中。
- 对象存储和 Autonomous Database
对象存储和 Autonomous Data Warehouse 提供了用于培训机器学习模型的历史数据的存储层。对象存储可以用作源和目标数据存储层,以使用数据流执行定制数据处理和 ETL 作业。
- OCI 数据目录
一个由 Autonomous Data Warehouse 中的多个表、对象存储中的存储桶以及数千个数据资产组成的数据湖快速变得非常脆弱。对于数据科学家来说,问题属于可发现性的问题之一。他们不是 DBA,而是需要快速确定哪些数据资产与解决特定业务问题相关。借助 Oracle Cloud Infrastructure 数据目录,数据科学家可以快速识别用于培训机器学习模型的候选数据资产。
数据目录是适用于企业数据的完全托管的自助数据发现和治理解决方案。它提供了一个用于管理技术、业务和运营元数据的协作环境。可以收集、组织、查找、访问、了解、扩充和激活此元数据。
- OCI 数据流服务
在数据准备好进行机器学习之前,需要对对象存储或 Autonomous Data Warehouse 中的原始数据应用多个数据“重构”操作。数据科学家需要用适合建模(通常是数据框架)的格式来清理、联接、去标准化、重复数据、推测、扩展和形成数据。此步骤通常由数据工程师完成,但是越来越多的数据科学家开始介入这一步骤。执行这些步骤的事实工具包是 Apache Spark,我们建议使用 Oracle Cloud Infrastructure Data Flow。
数据流是运行 Spark 应用程序的完全托管服务。它让您能够专注于自己的应用,并为应用提供简单的运行时环境。它具有一个简单而简单的用户界面,具有与应用和工作流集成的 API 支持。您无需在底层基础设施、集群预配或软件安装上花费任何时间。
- OCI 数据科学
Oracle Cloud Infrastructure 数据科学是完全托管的平台,数据科学团队可以使用该平台在 OCI 中构建、训练、管理和部署其机器学习模型。数据科学包括记事本课程、作业、模型目录、模型部署以及加速数据科学 (ADS) Python SDK。数据既可以摄取笔记本课程,也可以采集来自各种数据源的职位,并可转化为模型培训的预测功能。记事本会话是 IDE,在该 IDE 中,数据科学家可以原型设计用于工程师功能和训练模型的转换管道。这些步骤可以随作业进行大规模生产。对模型进行培训后,它们将存储在受管模型存储层(模型目录)中并暂存进行部署。可以通过模型部署将模型部署为 HTTP 端点。部署模型后,无论是 OCI 还是其他位置托管这些应用,都可以使用第三方应用来使用模型。
- Oracle Machine Learning
Oracle Machine Learning 还提供了在数据库中构建、训练和部署数据的模型的功能。Oracle Machine Learning 提供了一个 Zeppelin 笔记本界面,数据科学家可以使用 OML4Py Python 客户机库训练模型。OML 还提供了使用 AutoML UI 进行培训模型的无代码方法。可以将模型作为 REST API 部署到 Oracle Machine Learning 服务中。然而,对开源软件的支持有限。
- AI 服务
AI 服务提供了一组预先培训并可定制的模型 API,涵盖了语言、愿景、演讲、决策和预测等各种用例。AI 服务提供可通过 REST API 端点访问的模型预测。这些服务提供先进的预培训模型,在使用服务 1-6 培训定制机器学习模型之前,应先考虑和评估这些服务。此外,Oracle Machine Learning 服务还提供一系列预先培训的语言模型(主题、关键字、摘要、相似性)和视野。
考虑事项
实施机器学习和人工智能时,请考虑以下选项。
- 在模型开发生命周期的每个步骤中提供水平的可扩展性
为 ETL 和数据处理步骤(通过 OCI 数据流)、模型培训本身和模型部署提供横向可扩展性。此外,还要考虑在模型培训方面和部署端使用 GPU。
- 确保模型可重现性
对模型进行审计,需要重现。重新生成模型要求保存模型时提供源代码、培训和验证数据集以及环境(第三方库和体系结构)的引用。使用对 Git 存储库的引用和提交散列来跟踪代码。使用对象存储可保存培训和验证数据集的快照。在模型元数据中包括对已发布的 conda 环境的引用。
- 版本控制代码、特性和模型
此注意事项与模型可重现性相关。您可以直接在数据科学模型目录中对模型进行版本控制。将 Git 的使用集成为数据科学 IDE 的一部分(例如 JupyterLab)或像数据科学作业那样的培训执行引擎。您可以通过对象存储或 Git 大文件存储 (Git Large File Storage, LFS) 等工具(默认支持对象版本控制)将功能版本化为数据集。
- 软件包、共享和重用第三方运行时依赖关系
在记事本、作业和模型部署中重用相同的概念环境。这样做也会尽可能减少这些步骤之间第三方依赖性不匹配的风险。
- 保持数据源敏捷性,同时限制数据传输
将数据传输到模型培训环境非常耗时。尽可能使用可在记事本环境或培训作业之间共享的块存储卷。保留本地数据集快照以便进行模型培训和验证。
替代模式
- 从 OCI 市场部署数据科学 VM 以替代托管数据科学服务
数据科学 VM 映像适用于 CPU 和 NVIDIA GPU 配置系列。该环境提供了一系列可供数据科学家使用的全面的机器学习库和 IDE。但是,它不提供模型部署功能。可以通过 OCI 数据科学模型部署或通过 Oracle Functions 来实现模型部署。
- 在数据库中使用 Oracle Machine Learning(OML 笔记本、AutoML UI、服务、OML4Py)构建、培训和部署机器学习模型
当培训模型所需的数据位于数据库中时,此替代模式可提供强大的功能。此模式限制了机器学习开源软件支持。
- 通过 OCI 注册表, Oracle Functions 和 API 网关将模型部署为 REST API
此模式适用于在数据科学 VM 映像环境中或通过 OCI 数据科学培训模型的客户。此模式提供了将机器学习模型部署为 REST API 端点的替代路径。必须构建包含经过培训的模型工件的 Docker 映像并将其部署到 OCI 注册表,然后才能从 docker 映像创建 Oracle 函数并将其部署为 API Gateway 的后端资源。
- 在 OKE 上部署 OSS Kubeflow ML 平台
此模式提供了独立解决方案,并让客户可以选择在 Oracle Container Engine for Kubernetes 上执行基于容器的机器学习负载。Kubeflow 是一款 OSS 产品,它提供机器学习平台的所有关键功能。
Antipattern
我们不建议使用机器学习 OSS 堆栈构建的 VM 组。机器学习项目通常基于多个 OSS 库。这些库具有复杂且经常冲突的相关性和安全漏洞,需要持续升级软件包。我们建议托管服务来承担构建现成可用和安全环境的负担。
