一个开源模型服务(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 尤其欠缺的一个领域。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
Linux 开发工具 git
软件技术第一课:用Git克隆OpenClaw源码,在本地跑起来
本文手把手教你从GitHub克隆OpenClaw源码、配置开发环境并本地运行。涵盖Git安装、Python版本适配、虚拟环境创建、依赖安装(含镜像加速)、API密钥配置及示例运行,附常见报错解决方案,助你轻松踏入源码开发门槛。
|
Java API Maven
Java工具篇之反射框架Reflections
Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。 使用Reflections可以很轻松的获取以下元数据信息: - [x] 获取某个类型的全部子类 - [x] 只要类型、构造器、方法,字段上带有特定注解,便能获取带有这个注解的全部信息(类型、构造器、方法,字段) - [x] 获取所有能匹配某个正则表达式的资源 - [x] 获取所有带有特定签名的方法,包括参数,参数注解,返回类型 - [x] 获取所有方法的名字 - [x] 获取代码里所有字段、方法名、构造器的使用权
2214 0
Mockito框架抛出NullPointerException
一文详细讲解Mockito框架是怎么抛出NullPointerException的整个过程和解决方式。
7176 0
|
7月前
|
JSON 编解码 Go
Go 新一代网络请求resty!,比net/http好用10倍
resty 是 Go 语言高性能 HTTP 客户端,比 net/http 简洁 10 倍、比 axios 更 Go 风。零依赖、支持链式调用、自动 JSON 编解码、重试/拦截器/Mock/文件上传下载等,Go 1.18+ 可用,一行代码发起请求,大幅提升开发效率与可维护性。(239 字)
784 1
|
前端开发 容器
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
656 99
|
7月前
|
弹性计算 人工智能 运维
2026年阿里云秒级部署OpenClaw(Clawdbot)并接入skills保姆级教程
2026年,OpenClaw(原Clawdbot,曾用名Moltbot)凭借轻量化架构、高适配性及强大的自动化能力,成为阿里云生态下最热门的AI自动化代理工具,其秒级部署方案彻底打破开源工具的技术门槛,无需复杂环境配置,零基础新手也能轻松上手。OpenClaw本身仅提供核心编排框架,而Skills作为其“能力扩展插件”,能赋予它网页浏览、邮件管理、数据统计、多平台联动等实操能力,二者结合可快速搭建专属智能助手,适配个人办公、企业运维、AI创意生产等多场景。
1155 6
|
人工智能 自然语言处理
AI、大模型如何重塑海外舆情监测行业
与此同时,以人工智能(AI)与大语言模型(LLM)为代表的新一代技术,正在深刻重塑舆情监测行业的核心逻辑。从过去依赖关键词和人工分析的监测体系,到如今多语言理解、深层情绪识别与传播趋势预测等高阶能力的构建,AI不仅极大提升了舆情监测的效率与精准度,也推动其从单一的危机应对工具,迈向企业战略制定的智能引擎。
720 0
|
人工智能 开发框架 决策智能
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
谷歌开源的Agent Development Kit(ADK)是首个代码优先的Python工具包,通过多智能体架构和灵活编排系统,支持开发者在百行代码内构建复杂AI代理,提供预置工具库与动态工作流定义能力。
3081 3
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
987 5