服务定义是面向服务架构(SOA)的体现,是 BentoML 中的核心构建块,用户在其中定义服务运行时架构和模型服务的逻辑。

本文将剖析和解释服务定义中的关键组件。让您将全面了解服务定义的组成以及每个关键组件的职责。

组成组件

在我们之前的快速入门指南中创建的模型服务定义如下所示。

# bento.py
import bentoml
import numpy as npfrom bentoml.io import NumpyNdarray# Load the runner for the latest ScikitLearn model we just saved
runner = bentoml.sklearn.load_runner("iris_classifier_model:latest")# Create the iris_classifier_service with the ScikitLearn runner
svc = bentoml.Service("iris_classifier_service", runners=[runner])# Create API function with pre- and post- processing logic
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def predict(input_array: np.ndarray) -> np.ndarray:# Define pre-processing logicresult = runner.run(input_array)# Define post-processing logicreturn result

从上面可以看出 BentoML 服务由三个组件组成:

  • 推理 APIs
  • 运行器(Runners)
  • 服务(Service)

推理 APIs

推理 API 定义了如何远程访问服务功能以及自定义预处理和后处理逻辑。

# Create API function with pre- and post- processing logic
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def predict(input_array: np.ndarray) -> np.ndarray:# Define pre-processing logicresult = runner.run(input_array)# Define post-processing logicreturn result

通过使用@svc.api装饰一个函数,我们声明该函数是可以远程访问的 API 的一部分。一个服务可以有一个或多个 API。 @svc.api 装饰器的输入和输出参数进一步定义了 API 的期望 IO(输入输出) 格式。

在上面的示例中,API 通过 NumpyNdarray IO 描述符将 IO (输入输出)类型定义为 numpy.ndarray。 IO 描述符有助于验证输入和输出是否符合预期的格式和模式,并将它们与原始的类型相互转换。 BentoML 支持多种 IO 描述符,包括 PandasDataFrameStringImageFile

API 也是定义模型服务的前处理和后处理逻辑的好地方。在上面的示例中,predict 函数中定义的逻辑将被打包并部署为服务逻辑的一部分。

BentoML 旨在通过基于可用系统资源启动 API 服务器的多个实例来并行化 API 逻辑。为了获得最佳性能,我们建议定义异步 API。要了解更多信息,请参考API 和 IO 描述符。

运行器(Runners)

Runners 代表一个服务逻辑单元,可以水平扩展以最大化吞吐量。

# Load the runner for the latest ScikitLearn model we just saved
runner = bentoml.sklearn.load_runner("iris_classifier_model:latest")

可以通过调用特定框架的load_runner()函数或使用 @svc.runner 装饰器的装饰实现类来创建运行器。

框架特定的函数会智能地为运行器加载 ML 框架的最佳配置,以达到最固定的支持。

例如,如果 ML 框架发布了 Python GIL 并原生支持并发访问,BentoML 将创建 runner 的单个全局实例并将所有 API 请求路由到全局实例;否则,BentoML 将根据可用的系统资源创建多个运行器实例。

别担心,我们还允许用户自定义运行时配置以微调运行器性能。

load_runner() 函数的参数是我们之前保存的模型的名称和版本。使用 latest 关键字将确保加载模型的最新版本。加载运行器还向构建器声明,在构建服务时应将特定的模型和版本打包到bento中。我们还可以在服务中定义多个运行器。

要了解更多信息,请参阅 Runner 高级指南。

服务(Service)

服务由 API 和 Runner 组成,可以通过 betoml.Service() 进行初始化。

# Create the iris_classifier_service with the ScikitLearn runner
svc = bentoml.Service("iris_classifier_service", runners=[runner])

服务的第一个参数是名称,该名称将在服务构建后成为 Bento 的名称。

运行器(Runners)应该是服务(Service)一部分,通过 runners 关键字参数传入。可以通过 svc 实例自定义服务的构建时间和运行时行为。

BentoML核心概念(一):服务定义相关推荐

  1. BentoML核心概念(二):API 和 IO 描述符

    APIs 是在服务定义中定义的函数,它们作为 HTTP 或 gRPC 端点暴露出去. 如果一个函数用 @svc.api 装饰器装饰,它就是 APIs 的一部分. APIs 可以定义为 Python 中 ...

  2. k8s核心概念pod 基本定义和命令

    文章目录 工作负载 pod定义 pod分类 关系 静态pod 控制器管理的pod 镜像拉取策略 pod常用命令 创建pod 查看pod 删除pod 删除单个pod 删除多个pod pod的标签命令 查 ...

  3. php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性

    一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...

  4. nacos 本地测试_微服务架构系列之Nacos 配置核心概念

    上次讲了<微服务架构之Nacos配置中心之配置MySQL数据库>,本次讲述Nacos 配置核心概念.原作者:哈喽沃德先生,谢谢关注哈喽沃德先生. 1.配置 为什么需要配置?概念. 在系统开 ...

  5. 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务

    文章目录 二.高级篇(大厂进阶) 5.Docker-compose容器编排 5.1是什么 5.2能干嘛 5.3去哪下 5.4 Compose核心概念 5.5 Compose使用的三个步骤 5.6 Co ...

  6. [k8s] 第一章 十分钟带你理解Kubernetes核心概念

    本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念.组件和工作原理. 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  7. 浅谈java中的四个核心概念【转】

    2019独角兽企业重金招聘Python工程师标准>>> Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.现 ...

  8. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...

  9. 第 3 章 Keystone - 018 - 理解 Keystone 核心概念

    Keystone核心概念 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: 1.管理用户及其权限 2.维护 OpenStack Services 的 Endpoint 3 ...

最新文章

  1. c语言lang变量,02-GoLang定义变量
  2. Arm十年最大更新:V9架构正式发布
  3. BZOJ1977: [BeiJing2010组队]次小生成树 Tree
  4. Infortrend EonStor GS赢得 “年度最佳混合式存储”大奖
  5. MATLAB实现FFT
  6. 手机客户端和服务器端通信
  7. 类重复引用_JVM类加载从JDK来看
  8. android6.0权限管理工具EasyPermissionUtil
  9. CKEditor 5 v19.1.1 发布,新增导出为 PDF 功能
  10. 计算机音乐创作是什么,2021计算机音乐创作的作曲方式探究论文
  11. freebsd 自动启动服务器,教程/FreeBSD启动脚本
  12. vmware虚拟机中常见的3种网络模式
  13. c++ primer plus 之函数及函数指针
  14. linux虚拟机安装samba服务,在虚拟机Redhat Linux下安装Samba服务器分享
  15. jqGrid----下拉列表框下拉联动,dataEvents回调函数。
  16. kis商贸系列加密服务器,金蝶KIS商贸标准版系统登录
  17. MATLAB画NCEP风场
  18. Java小白的入门面试笔记--线程局部变量之灵魂四问
  19. 测码奔腾-Alpha冲刺总结
  20. 阿蒙森 斯科特_斯科特的糖尿病解释:飞机类比

热门文章

  1. 没有伞的孩子,必须努力奔跑!
  2. 国外公司 职位及职能描述(一)
  3. Linux系统漏洞本地提权
  4. 以Base64字符串形式上传文件——服务器端Java/Servlet接受请求数据中的字符串内容并转换成文件
  5. opencv膨胀操作
  6. stm32f103r8t6的晶振频率_stm32f103r8t6_stm32f103r8t6最小系统_stm32f103r8t6引脚数
  7. 外企面试最常见的八大英文问题
  8. stc8a-22.1184-bu 步。。。。进。、电。额。机
  9. mysql的mvcc 和next-lock
  10. Windows事件日志监听