一个开源模型服务(model serving)指南

简介: 当我们完成模型训练之后,我们如何处理我们的模型呢?模型本身没有多大价值 —— 关键在于你如何使用它们。无论是推动您的业务决策,还是为您的客户提供新功能,服务框架的作用都是让您的模型栩栩如生。

简介

当我们完成模型训练之后,我们如何处理我们的模型呢?

模型本身没有多大价值 —— 关键在于你如何使用它们。无论是推动您的业务决策,还是为您的客户提供新功能,服务框架的作用都是让您的模型栩栩如生。

使用模型服务框架,您可以

  • 通过 API 与模型交互。正因为如此,任何与你的模型对话的东西都可以在不知道任何内部细节的情况下这样做,比如使用了哪些工具来训练它或者它是用什么语言编写的。
  • 将模型与应用程序的其他组件一起部署在云中
  • 轻松扩展模型以满足用户需求

举一个具体的例子,假设您经营一家在线商店,并且您希望您的每个客户都能看到个性化的产品推荐。有很多方法可以为这个任务训练模型,但假设你已经完成了那部分,下一个挑战是让网站与之对话。

即使模型可能很复杂,模型服务框架会隐藏这种复杂性,给我们留下一个简单的 API,这样,每当我们希望客户看到推荐时,我们需要做的就是查询该 API。


批量与实时

有时,您希望模型能够提供即时结果。 在产品推荐示例中就是这种情况,我们希望在客户浏览网站时向他们提供相关建议。

在其他情况下,结果不需要是即时的,并且可以按计划(schedule)访问模型。 想象一下,我们有一些产品的价格每周都会更新,使用的模型是经过训练可以根据季节性趋势进行定价。

许多模型服务框架同时适用于实时和批量使用,但在实现模型服务之前了解您需要哪种方法很重要。


我需要模型服务框架吗?

虽然我们都需要以某种方式与我们的模型进行交互,但模型服务框架并不是唯一的方法。

模型服务的优势在于它可以将复杂的模型隐藏在简单的 API 后面,这使得这种方法非常适合在云中运行的任何应用程序,包括 Web 应用程序。

但并非一切都是基于云的。 比如:边缘/物联网应用。 以使用模型检测人脸的智能相机为例。 在这种情况下,模型需要直接在摄像机的硬件上运行,因为将视频流式传输到远程服务器太慢了。


有什么可供选择的模型服务框架?

开源模型服务框架的选择非常广泛。为了缩小范围,考虑以下几个因素对选择会有所帮助:

  • 机器学习库支持。任何模型都将使用 TensorFlow、PyTorch 或 SKLearn 等 ML 库进行训练。例如,一些服务工具支持多个 ML 库,而另一些可能仅支持 TensorFlow。
  • 模型是如何打包的。一个典型的模型由原始模型资产和一堆代码依赖组成。本指南中的服务工具都是通过将模型 + 依赖项打包到 Docker 容器中来工作的。 Docker 是将软件打包、分发和部署到现代基础设施的行业标准方式。
  • 模型运行的地方。一些服务框架只是为您提供了一个容器,您可以在任何支持 Docker 的地方运行该容器。其他的则建立在 Kubernetes 之上,Kubernetes 是用于自动化部署、扩展和管理容器的最流行的开源解决方案。

考虑到这些因素,让我们看一些可供选择的模型服务框架。


Seldon

Seldon Core 是一个成熟的工具,专为可扩展、可靠的模型服务而构建,它以丰富的开箱即用功能集支持这一点,包括高级指标、日志记录、可解释性和 A/B 测试。

Seldon Core 的一项特别重要的功能是指标和监控。每个模型服务都公开了可以集成到您的软件监控堆栈中的指标,并且它可以与 Seldon 的另一个开源产品 Alibi-Detect 结合使用,对漂移和偏差等模型进行特定的监控。

优点

  • 由 Kubernetes 提供支持。容器编排的事实标准,Seldon 利用其提供所有模型服务功能,以低管理开销提供可扩展且可靠的基础架构。
  • 支持许多 ML 库。包括 PyTorch、TensorFlow、SKLearn。
  • 不需要额外的代码。默认情况下,您无需编写任何代码即可部署模型;您只需告诉 Seldon 在哪里可以找到您的模型资产,然后让它完成剩下的工作。
  • 模型监控。包括启用模型监控的功能。

缺点

  • Kubernetes 并不总是最好的选择。有了 Seldon,您别无选择,只能使用 Kubernetes。如果您只部署一两个模型,那么运行 Kubernetes 可能对您的需求来说成本太高。

BentoML

虽然 Seldon Core 专注于 Kubernetes 上的模型部署,但 BentoML 对模型的部署位置并不挑剔。

使用 Bento 的最简单方法是通过 Docker 容器,但这也不是必需的,因为您可以在自己的基础架构上运行自己的 BentoML 服务实例。

优点

  • 支持许多 ML 库。 包括 PyTorch、TensorFlow、SKLearn。
  • 在任何地方部署模型。 包括 Docker、Kubernetes 或 AWS、GCP 和 Azure 等云平台。


缺点

  • 没有内置编排。编排是关于自动化容器的部署、管理、扩展和网络。 BentoML 由您决定:根据您的部署位置,编排支持会有所不同。 相比之下,Seldon Core 通过 Kubernetes 免费获得这个功能。

Kubeflow 和 KServe

Kubeflow 是最古老的开源 MLOps 框架之一。它涵盖了许多不同的领域,从pipelines、模型训练和模型服务。正如您可能从名称中猜到的那样,它运行在 Kubernetes 之上。

Kubeflow 的现有用户会发现最容易坚持使用它进行模型服务。最近,Kubeflow 的模型服务部分被拆分为一个独立的项目,称为 KServe,您可以在没有 Kubeflow 的其余部分的情况下使用它。

从表面上看,KServe 承诺与 Seldon Core 类似的东西:在 Kubernetes 上运行任何模型。但与 Seldon 相比,KServe 更轻量级,使其更易于设置和运行,但代价是功能更少。

优点

  • 支持许多 ML 库。包括 PyTorch、TensorFlow、SKLearn。
  • 不仅仅是服务。如果完全使用 Kubeflow,那么您可以在同一个系统中训练和部署模型。

缺点

  • Legacy。 在过去几年中,MLOPS 工具有了很大的进步,KServe 和 Kubeflow 在很多方面都落后于这一趋势。
  • 缺少高级监控。与 Seldon Core 相比,这是 Kubeflow 尤其欠缺的一个领域。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
机器学习/深度学习 数据挖掘 PyTorch
视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库(上)
视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库(上)
|
15小时前
|
机器学习/深度学习 API TensorFlow
TensorFlow的高级API:tf.keras深度解析
【4月更文挑战第17天】本文深入解析了TensorFlow的高级API `tf.keras`,包括顺序模型和函数式API的模型构建,以及模型编译、训练、评估和预测的步骤。`tf.keras`结合了Keras的易用性和TensorFlow的性能,支持回调函数、模型保存与加载等高级特性,助力提升深度学习开发效率。
|
15小时前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow中的自定义层与模型
【4月更文挑战第17天】本文介绍了如何在TensorFlow中创建自定义层和模型。自定义层通过继承`tf.keras.layers.Layer`,实现`__init__`, `build`和`call`方法。例如,一个简单的全连接层`CustomDenseLayer`示例展示了如何定义激活函数。自定义模型则继承自`tf.keras.Model`,在`__init__`中定义层,在`call`中实现前向传播。这两个功能使TensorFlow能应对特定需求和复杂网络结构,增强了其在深度学习应用中的灵活性。
|
10月前
|
机器学习/深度学习 JSON 算法
TensorFlow Serving使用指南
TensorFlow Serving使用指南
295 0
|
机器学习/深度学习 存储 PyTorch
视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库(下)
视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库(下)
视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库(下)
|
机器学习/深度学习 存储 Kubernetes
快速入门统一模型部署(Model Serving)框架 BentoML
BentoML 是一个用于机器学习模型服务的开源框架,旨在弥合数据科学和 DevOps 之间的差距(gap)。 数据科学家可以使用 BentoMl 轻松打包使用任何 ML 框架训练的模型,并重现该模型以用于生产。 BentoML 协助管理 BentoML 格式打包的模型,并允许 DevOps 将它们部署为任何云平台上的在线 API 服务端点或离线批量推理作业。
|
机器学习/深度学习 弹性计算 JSON
Tensorflow Serving部署模型与调用
本文以mnist为数据集,使用keras 构建CNN网络,将训练获取的模型通过Tensorflow Serving方式部署提供Rest Full接口,分别使用PostMan和Python调用服务,代码编辑调试使用阿里云PAI DSW实例,模型部署使用阿里云ECS虚拟机。
62641 2
Tensorflow Serving部署模型与调用
|
机器学习/深度学习 TensorFlow API
阿里云机器学习PAI EAS部署TensorFlow Model
为了帮助用户更好的实现一站式端到端的算法应用,PAI平台针对在线推理场景提供了PAI EAS(Elastic Algorithm Service)在线预测服务,支持基于异构硬件(CPU/GPU)的模型加载和数据请求的实时响应。您可以通过在线部署功能将您的模型快速部署为Restful API,然后使用HTTP请求的方式进行调用。本文通过一个示例演示:TensorFlow(SavedModel)模型的在线部署及调用。
3105 0
阿里云机器学习PAI EAS部署TensorFlow Model
|
机器学习/深度学习 存储 人工智能
阿里巴巴开源GNN框架Graph-Learn
项目地址:https://github.com/alibaba/graph-learn 阿里巴巴近期开源了面向图神经网络(GNN)的框架Graph-Learn(GL,原AliGraph)。框架由阿里内部团队研发,研发同学分别来自计算平台事业部-PAI团队,新零售智能引擎事业群-智能计算实验室,以及安全部-数据与算法团队。
3594 0
阿里巴巴开源GNN框架Graph-Learn
|
存储 Kubernetes 算法
kubeflow系列(三):模型即服务,关于tensorflow serving的使用
模型即服务(Model as a service)作为算法模型最优雅的价值变现,也是最佳的tf算法部署实践,Tensorflow Serving 作为Tensorflow官方的模型部署方案,也是kubeflow默认的一种tensorflow部署形式,本文介绍如何用 Tensorflow Serving 部署算法模型。
2084 0