BentoML核心概念(一):服务定义
服务定义是面向服务架构(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 描述符,包括 PandasDataFrame
、String
、Image
和 File
。
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核心概念(一):服务定义相关推荐
- BentoML核心概念(二):API 和 IO 描述符
APIs 是在服务定义中定义的函数,它们作为 HTTP 或 gRPC 端点暴露出去. 如果一个函数用 @svc.api 装饰器装饰,它就是 APIs 的一部分. APIs 可以定义为 Python 中 ...
- k8s核心概念pod 基本定义和命令
文章目录 工作负载 pod定义 pod分类 关系 静态pod 控制器管理的pod 镜像拉取策略 pod常用命令 创建pod 查看pod 删除pod 删除单个pod 删除多个pod pod的标签命令 查 ...
- php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性
一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...
- nacos 本地测试_微服务架构系列之Nacos 配置核心概念
上次讲了<微服务架构之Nacos配置中心之配置MySQL数据库>,本次讲述Nacos 配置核心概念.原作者:哈喽沃德先生,谢谢关注哈喽沃德先生. 1.配置 为什么需要配置?概念. 在系统开 ...
- 《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 ...
- [k8s] 第一章 十分钟带你理解Kubernetes核心概念
本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念.组件和工作原理. 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...
- 浅谈java中的四个核心概念【转】
2019独角兽企业重金招聘Python工程师标准>>> Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.现 ...
- 《Spark大数据分析:核心概念、技术及实践》大数据技术一览
本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...
- 第 3 章 Keystone - 018 - 理解 Keystone 核心概念
Keystone核心概念 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: 1.管理用户及其权限 2.维护 OpenStack Services 的 Endpoint 3 ...
最新文章
- c语言lang变量,02-GoLang定义变量
- Arm十年最大更新:V9架构正式发布
- BZOJ1977: [BeiJing2010组队]次小生成树 Tree
- Infortrend EonStor GS赢得 “年度最佳混合式存储”大奖
- MATLAB实现FFT
- 手机客户端和服务器端通信
- 类重复引用_JVM类加载从JDK来看
- android6.0权限管理工具EasyPermissionUtil
- CKEditor 5 v19.1.1 发布,新增导出为 PDF 功能
- 计算机音乐创作是什么,2021计算机音乐创作的作曲方式探究论文
- freebsd 自动启动服务器,教程/FreeBSD启动脚本
- vmware虚拟机中常见的3种网络模式
- c++ primer plus 之函数及函数指针
- linux虚拟机安装samba服务,在虚拟机Redhat Linux下安装Samba服务器分享
- jqGrid----下拉列表框下拉联动,dataEvents回调函数。
- kis商贸系列加密服务器,金蝶KIS商贸标准版系统登录
- MATLAB画NCEP风场
- Java小白的入门面试笔记--线程局部变量之灵魂四问
- 测码奔腾-Alpha冲刺总结
- 阿蒙森 斯科特_斯科特的糖尿病解释:飞机类比