暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Machine Learning Service加速机器学习模型部署和应用

甲骨文云技术 2021-04-17
2139

Oracle自治数据库中的机器学习(Oracle Machine Learning,以下简称OML) 为数据探索和数据准备、机器学习模型构建、评分和部署提供了数据库内功能。Oracle ML Service(以下简称OML Service或OML服务)通过 REST API 支持数据库内 OML模型和第三方开放式神经网络交换(ONNX)机器学习模型的部署和管理,支持使用 REST 端点对部署的机器学习模型进行应用开发。

Oracle ML Service的 REST API通过Oracle自治数据库托管的 REST 端点,允许访问存储在数据库内的机器学习模型及其元数据。从Scikit-learn和TensorFlow等包中以 ONNX 格式导出的第三方分类或回归模型,也可以通过REST API导入到ML Service中,统一被管理和使用。

此外,OML Service支持拥有专利的认知文本功能,包括主题发现、关键字、摘要、情绪和相似性。最初支持的语言包括英语、西班牙语和法语,对英语有情感支持。认知文本使用基于数百万维基百科文章的 OML 提供的预构建模型启用。OML SERVICE还允许导入第三方 ONNX 格式的认知图像模型,用于图像和张量(Tensor)的评分。

OML Service是专门设计用于与Oracle自治数据库结合工作,但也适用于Oracle机器学习模型(从本地或者云中的Oracle数据库创建)和非Oracle机器学习模型(使用机器学习算法构建的第三方模型)。

OML Service的核心功能满足不同角色人员的需求,包括:

数据科学家

  • 管理和部署使用 OML 语言接口(ML4SQL/ML4R/ML4Python),OML AutoML UI 或Oracle Data Miner生成的数据库内机器学习模型,

  • 管理和部署以 ONNX 格式从 SciKit-learn、TensorFlow 等流行框架导出的第三方工具制作的模型

  • 业务和数据分析师

  • 直接从 REST 端点利用 OML 模型或者 ONNX 格式的第三方模型,为小批量数据提供实时评分性能

  • 使用内置认知文本模型发现新洞察,增强分析和报告

数据库和 IT 专业人员

  • 管理和部署可服务于社区的机器学习模型

  • 维护相同的Oracle数据库数据管理平台和安全标准

应用程序开发人员

  • 更轻松地构建嵌入机器学习洞察和预测的应用程序

  • 与更广泛的数据科学团队合作,同时自动化和传播结果

下面我们就以实例说明一下OML Service如何发布模型和使用模型:

1、ADW中数据模型的部署

访问ADW带有的Machine Learning的Web界面,在登录界面中输入用户名和密码,打开首页,访问左侧菜单,点击“模型”打开页面,能够看到ADW中存储的数据库内机器学习模型。无论使用AutoML UI,OML4Python还是OML4SQL生成的机器学习模型都会展示在这里。之前的AutoML UI文章中,我们已经展示了如何将AutoML生成的模型部署到ML Service中,具体可以参照之前的微信文章:Oracle ADW 机器学习自动化加速实现客户购买预测

本文中我们以ADW自带的联名卡办理预测示例来介绍模型部署。(如果读者已经使用该示例做过OML实验,则可以忽略以下生成模型这个步骤)。

在左侧菜单中访问“示例”页面,找到名字为《OML4SQL Classification》的示例,导出成JSON文件,再到记事本页面,点击“导入”按钮,导入该JSON文件,打开生成的笔记本,依次执行每一块程序,则会生成名字为“N1_CLASS_MODEL”的机器学习模型,显示在上面所说的“模型”页面中。

选中N1_CLASS_MODEL,点击上面“部署”按钮,则会弹出模型部署配置窗口。按照下图进行配置,我们修改部署的模型名称为CARD_CLASS_MODEL,点击“确定”按钮提交。成功后能够看到有条绿色文字显示“已成功部署选定模型”。

点击上方“模型”标签,切换到模型页面,能够看到列表中显示部署了的模型,包括“N1_CLASS_MODEL”,选中该模型,点击后面URI下面的链接,能够弹出窗口,显示N1_CLASS_MODEL的OPEN API规范。拷贝规范里的定义文字到某个记事本中备用。下图标记红色框部分需要注意,包括了ML Service的端点URL,以及调用的参数,后面调用服务时会使用。

2、完成OML Service验证

OML Service的访问需要身份认证。ML Service REST API使用token来实现对ADW ML中用户的验证。首先要提交合法用户的名称和密码到特定的URL来获得token,后面每次在请求的Header中加入该token即可正确调用REST API。

ML Service中提交初次验证的URL格式是:

    ${omlserver}/omlusers/tenants/${tenant}/databases/${database}/api/oauth2/v1/token

    其中${omlserver},${tenant}和${database}都可以通过Machine Learning的Web界面的URL中获得。

    ${omlserver}类似https://adb.ap-seoul-1.oraclecloud.com格式

    ${tenant}是账户的OCID,类似OCID1.TENANCY.OC1..AAAAAAAA….格式

    ${database}是ADW名称大写

    提交的方法需要是POST,在Header中需要加入Content-Type: application/json和Accept: application/json,提交的内容格式是

    {"grant_type":"password", "username":"${username}", "password":"${password}"}

    在linux环境下,可以通过curl提交验证请求,命令如下:

      curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"grant_type":"password", "username":"'${username}'", "password":"'${password}'"}' "${omlserver}/omlusers/tenants/${tenant}/databases/${database}/api/oauth2/v1/token"

      如果用户名和密码正确(注意命令行中${username}和${password}要加单引号),验证成功,则返回的结果包括了token,格式类似如下:

      {"accessToken":"eyJhbGci....6zIw==","expiresIn":3600,"tokenType":"Bearer"}

      拷贝类似eyJhbGci....6zIw==部分,这就是token,后面需要每次调用REST API时在Header中加入。

      在本文中我们使用Firefox浏览器的RESTClient插件,来模拟客户端对REST API的调用。要安装Firefox浏览器的RESTClient插件,可以在菜单“Add-ons”中“Extensions”中搜索“RESTClient”,点击打开页面,点击“Add to FireFox”即可下载安装,安装成功以后,在右上角会有图标,点击该图标,会打开RESTClient界面。

      点击页面上方“Headers”-“Custom Header”,在弹出界面中加入Content-Type: application/json和Accept: application/json:

      修改界面中Method为“POST”,URL输入验证的URL,在Body中输入要提交的内容,具体如下:

      点击“SEND”按钮,如果验证成功,则可以看到下方Response部分的Headers标签下的“Status Code”为“200 OK”。

      切换到Response下的“Response”标签,能够看到返回的token信息,与前面一样,拷贝“accessToken”后面的token信息为后面使用准备。

      3、使用OML Service调用模型进行预测

      验证时获得token后,每次提交请求时,需要在header中加入token信息,格式如下:

      Authorization: Bearer ${token}

      我们在RESTClient中,点击页面上方“Headers”-“Custom Header”,在Header中加入token信息。

      同时header中也要加入Content-Type: application/json

      要访问特定模型的REST API,可以在前面部署界面中浏览OPEN API的规范,也可以通过如下URL来获得规范定义:

      ${omlserver}/omlmod/v1/deployment/${model_name}

      在前面已经把N1_CLASS_MODEL模型部署成名字为CARD_CLASS_MODEL的REST API,我们可以在RESTClient中提交请求,获得该模型的详细信息。(注意这个请求的方式为GET)

      点击“Preview”,可以将返回的JSON格式规整化如下图:

      可以看到该模型的方法,名称,元数据信息等等,其中attributes下面就是模型打分需要的输入参数,我们可以通过这些信息,或者根据前面OPEN API的规范定义,来构建模型打分的提交内容,具体格式如下(我们构建了两条):

        {"inputRecords":[{"BULK_PACK_DISKETTES":1,"EDUCATION":"10th","FLAT_PANEL_MONITOR":1,"HOME_THEATER_PACKAGE":1,"HOUSEHOLD_SIZE":"1","OCCUPATION":"Sales","YRS_RESIDENCE":3,"Y_BOX_GAMES":1},{"BULK_PACK_DISKETTES":1,"EDUCATION":"Masters","FLAT_PANEL_MONITOR":1,"HOME_THEATER_PACKAGE":1,"HOUSEHOLD_SIZE":"4","OCCUPATION":"Exec.","YRS_RESIDENCE":5,"Y_BOX_GAMES":0}]}

        模型打分的URL格式是

        ${omlserver}/omlmod/v1/deployment/${model_name}/score

        如下图加入Header,设置URL和输入内容后,点击“SEND”,提交请求

        如果提交的信息正确,则会在Response的Preview中看到模型针对提交数据的预测结果:

        我们提交了两个客户的数据,可以看到第一个客户教育程度比较低,家里人员少,拥有游戏设备,则有98.8%的可能性不会办理联名卡;而第二个客户教育程度比较高,家里人员多,没有游戏设备,有74.5%的可能性会办理联名卡(更喜欢消费娱乐)。

        使用curl提交REST API请求的命令格式是:

          curl -X POST "${omlserver}/omlmod/v1/deployment/CARD_CLASS_MODEL/score" \
          --header "Authorization: Bearer ${token}" \
          --header 'Content-Type: application/json' \
          --data '{"inputRecords":[ ${CUSTOMER_INFO} ]}' | jq

          4、认知文本功能调用

          前面说过,ML Service提供了文本的智能处理功能,包括包括主题发现、关键字、摘要、情绪和相似性等,该功能提交的URL是

          ${omlserver}/omlmod/v1/cognitive-text/{keywords|sentiment|topics}

          提交的内容格式类似如下:

            {"topN":5, "textList":["With Oracle Machine Learning, Oracle moves the algorithms to the data. Oracle runs machine learning within the database, where the data reside. This approach minimizes or eliminates data movement, achieves scalability, preserves data security, and accelerates time-to-model deployment. Oracle delivers parallelized in-database implementations of machine learning algorithms and integration with the leading open source environments R and Python. Oracle Machine Learning delivers the performance, scalability, and automation required by enterprise-scale data science projects ? both on-premises and in the Cloud."]}

            我们可以通过RESTClient提交该段文字,进行关键字提取,如下图:

            可以通过Response中Preview,看到提取出来的关键字排名前5如下:

            通过curl执行该REST API调用的命令如下:

              curl -X POST "${omlserver}/omlmod/v1/cognitive-text/keywords" \
              --header 'Content-Type: application/json' \
              --header "Authorization: Bearer ${token}" \
              --data '{ "topN":5, "textList":["${TEXTCONTENT}"]}' | jq

              有关ML Service的更多具体使用信息和示例,请参考ML Service的帮助文档,链接如下:

              https://docs.oracle.com/en/database/oracle/machine-learning/omlss/omlss/examples.html

              ML Service支持导入第三方符合ONNX标准的机器学习模型,在后续的文章里,我们会单独针对这个功能介绍。

              最后总结一下,OML Service的REST API 不仅支持Oracle数据库内机器学习模型,也支持导入第三方 ONNX 格式的机器学习模型,并且可以统一对这些模型进行以下操作:

              • 存储、删除和列出已部署的模型

              • 检索模型元数据和内容

              • 在命名空间内组织模型

              • 创建、删除和列出模型端点

              • 获取模型 API 和Swagger文档

              • 使用模型部署端点对单个记录或小数量记录进行评分

              编辑:殷海英

              最后修改时间:2021-04-17 11:17:50
              文章转载自甲骨文云技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论