编程语言
首页 > 编程语言> > BentoML简介:统一的AI应用框架

BentoML简介:统一的AI应用框架

作者:互联网

输入本图ML。

BentoML 是一个开源的 ML 模型服务框架,旨在简化部署过程。通过促进从模型创建到生产的更顺畅的交接,这种端到端框架使数据科学家和开发人员能够专注于他们最擅长的事情,弥合这两个关键角色之间的差距。因此,可以快速和可扩展地部署模型,确保更稳定的生产服务。

最新的DZone参考卡

神经网络基础

您可以使用 BentoML 框架开发服务于端点的生产就绪模型。以下是BentoML的作案手法:

  1. 指定模型:在使用 BentoML 之前,您需要从一个 ML 模型或一组模型开始。这些模型可以使用各种库(如TensorFlow或PyTorch)进行训练。
  2. 保存模型:训练模型后,将其保存在 BentoML 本地模型存储中。它充当您所有模型的管理中心,提供轻松的服务访问以及跟踪它们的系统方式。
  3. 创建 BentoML 服务:创建一个文件来包装您的模型并布置服务逻辑。它指定运行器(BentoML 中用于优化推理的抽象)以大规模执行模型推理,并构建要向外部公开的端点。service.py
  4. 构建便当:此步骤涉及通过配置 YAML 文件将您的模型和 BentoML 服务打包到便当中。Bento 是一个随时可以部署的工件,它将所有必要的元素捆绑在一起:模型的代码、依赖项和服务逻辑。我稍后会给你一个更具体的例子。
  5. 部署便当:一旦您的便当准备好了,就该部署了。您可以将 Bento 容器化为 Docker 镜像,以便在 Kubernetes 上部署。如果您更喜欢一体化解决方案,您可以将便当直接部署到 Yatai,Yatai 是 BentoML 生态系统中的开源平台,可在 Kubernetes 上自动化和管理机器学习部署。如果您想要完全托管的服务,请考虑通过BentoCloud部署Bentos,BentoCloud是一种用于构建和操作AI应用程序的无服务器解决方案。

现在您已经对 BentoML 及其工作流程有了基本的了解,让我们看看 BentoML 如何简化模型服务和部署的示例。

设置环境

若要在本地运行此项目,请确保具有以下各项:

之后,创建一个目录来存储所有项目文件,包括如上所述。我将一一创建它们。service.py

mkdir bentoml-demo
cd bentoml-demo

 

我建议您使用虚拟环境进行依赖项隔离。

python -m venv venv
source venv/bin/activate

 

创建一个文件,其中包含所有必需的库。requirements.txt

bentoml
transformers
torch>=2.0

 

安装依赖项:

pip install -r requirements.txt

 

将模型下载到本地模型商店

在这篇博文中,我使用来自Hugging Face Model Hub的文本摘要Transformer模型(sshleifer/distilbart-cnn-12-6)作为示例。

正如我上面提到的,您需要将模型下载到 BentoML 模型商店。这是通过使用该函数的脚本完成的。创建如下所示。download_model.pybentoml.transformers.save_model()download_model.py

import transformers
import bentoml

model= "sshleifer/distilbart-cnn-12-6"
task = "summarization"

bentoml.transformers.save_model(
    task,
    transformers.pipeline(task, model=model),
    metadata=dict(model_name=model),
)


运行此脚本应在本地下载并保存模型。

python3 download_model.py

 

如果下载成功,模型应显示在模型存储中。您可以稍后检索此模型以创建 BentoML 服务。

$ bentoml models list

Tag                                    Module                Size       Creation Time       
summarization:5kiyqyq62w6pqnry         bentoml.transformers  1.14 GiB   2023-07-10 11:57:40 

 

注意:下载到模型商店的所有模型都保存在目录 /home/user/bentoml/models/ 中

创建本托ML服务

使用即用型模型,您可以通过定义文件来创建 BentoML 服务,如下所示。此脚本从以前下载的模型创建一个实例,并将其包装在 .该函数(用 修饰)指定服务的 API 终结点以及处理输入和输出的逻辑。service.pysummarizer_runnerbentoml.Service()summarize()@svc.api()

import bentoml

summarizer_runner = bentoml.models.get("summarization:latest").to_runner()

svc = bentoml.Service(
    name="summarization", runners=[summarizer_runner]
)

@svc.api(input=bentoml.io.Text(), output=bentoml.io.Text())
async def summarize(text: str) -> str:
    generated = await summarizer_runner.async_run(text, max_length=3000)
    return generated[0]["summary_text"]

 

在项目目录中,用于在开发模式下启动 BentoML 服务器。bentoml serve

$ bentoml serve service:svc --development --reload

2023-07-10T12:13:33+0800 [INFO] [cli] Prometheus metrics for HTTP BentoServer from "service:svc" can be accessed at http://localhost:3000/metrics.
2023-07-10T12:13:34+0800 [INFO] [cli] Starting production HTTP BentoServer from "service:svc" listening on http://0.0.0.0:3000 (Press CTRL+C to quit)
2023-07-10 12:13:34 circus[5290] [INFO] Loading the plugin...
2023-07-10 12:13:34 circus[5290] [INFO] Endpoint: 'tcp://127.0.0.1:61187'
2023-07-10 12:13:34 circus[5290] [INFO] Pub/sub: 'tcp://127.0.0.1:61188'
2023-07-10T12:13:34+0800 [INFO] [observer] Watching directories: ['/Users/sherlock/Documents/bentoml-demo', '/Users/sherlock/bentoml/models']

 

服务器现在在 http://0.0.0.0:3000 处于活动状态,它提供了一个您可以使用的 Web 用户界面。访问网站,向下滚动到服务 API,然后单击试用

在“请求正文”框中输入文本,然后单击“执行”。请参阅以下示例,了解大型语言模型的概念。

输入:

A large language model (LLM) is a computerized language model, embodied by an artificial neural network using an enormous amount of "parameters" (i.e. "neurons" in its layers with up to tens of millions to billions "weights" between them), that are (pre-)trained on many GPUs in relatively short time due to massive parallel processing of vast amounts of unlabeled texts containing up to trillions of tokens (i.e. parts of words) provided by corpora such as Wikipedia Corpus and Common Crawl, using self-supervised learning or semi-supervised learning, resulting in a tokenized vocabulary with a probability distribution. LLMs can be upgraded by using additional GPUs to (pre-)train the model with even more parameters on even vaster amounts of unlabeled texts.

 

文本摘要模型的输出:

A large language model (LLM) is a computerized language model, embodied by an artificial neural network using an enormous amount of "parameters" in its layers with up to tens of millions to billions "weights" between them . LLMs can be upgraded by using additional GPUs to (pre-)train the model with even more parameters on even vaster amounts of unlabeled texts .

 

建造便当

现在模型运行正常,您需要将其打包为 BentoML 中的标准分发格式,也称为“Bento”。Bento 包含运行服务所需的所有源代码、模型文件和依赖项。要构建便当,请在项目目录中创建一个文件。此文件定义生成选项,例如依赖项、Docker 映像设置和模型。在这里,我只列出了构建便当所需的基本信息,例如服务,要包含的Python文件以及依赖项。请参阅 BentoML 文档以了解更多信息。bentofile.yaml

service: 'service:svc'
include:
  - '*.py'
python:
  requirements_txt: requirements.txt

 

在项目目录中运行命令以构建便当。您可以在 中找到所有创建的便当。bentoml build/home/user/bentoml/bentos/

$ bentoml build

Building BentoML service "summarization:ulnyfbq66gagsnry" from build context "/Users/sherlock/Documents/bentoml-demo".
Packing model "summarization:5kiyqyq62w6pqnry"

Successfully built Bento(tag="summarization:ulnyfbq66gagsnry").

Possible next steps:

 * Containerize your Bento with `bentoml containerize`:
    $ bentoml containerize summarization:ulnyfbq66gagsnry

 * Push to BentoCloud with `bentoml push`:
    $ bentoml push summarization:ulnyfbq66gagsnry

 

要查看所有可用的便当,请运行以下命令:

$ bentoml list

Tag                               Size       Creation Time
summarization:ulnyfbq66gagsnry    1.25 GiB   2023-07-10 15:28:51

 

部署便当

一旦便当准备好了,您就可以用它来生产中供应它。请注意,如果您有同一模型的多个版本,则可以将标记更改为相应的版本。bentoml servelatest

$ bentoml serve summarization:latest

2023-07-10T15:36:58+0800 [INFO] [cli] Environ for worker 0: set CPU thread count to 12
2023-07-10T15:36:58+0800 [INFO] [cli] Prometheus metrics for HTTP BentoServer from "summarization:latest" can be accessed at http://localhost:3000/metrics.
2023-07-10T15:36:59+0800 [INFO] [cli] Starting production HTTP BentoServer from "summarization:latest" listening on http://0.0.0.0:3000 (Press CTRL+C to quit)

 

或者,您可以使用 Docker 将便当容器化。创建便当时,会在 上自动创建一个 Dockerfile。要创建 Docker 映像,只需运行以下命令:/home/user/bentoml/bentos/summarization/ulnyfbq66gagsnry/env/docker/

bentoml containerize summarization:latest

 

查看创建的 Docker 镜像:

$ docker images

REPOSITORY                    TAG                IMAGE ID       CREATED         SIZE
summarization                 ulnyfbq66gagsnry   da287141ef3e   7 seconds ago   2.43GB

 

您可以在本地运行 Docker 镜像:

docker run -it --rm -p 3000:3000 summarization:ulnyfbq66gagsnry serve

 

使用 Docker 镜像,您可以在 Kubernetes 上运行模型并创建一个 Kubernetes 服务来公开它,以便您的用户可以与之交互。

如果您正在寻找用于部署模型的端到端解决方案,您可以选择 Yatai 部署 Bentos 并在 Kubernetes 上大规模管理部署。Yatai 是 BentoML 生态系统的重要组成部分,值得拥有自己的博客文章来解释细节。如果你有兴趣,可以看看Yatai GitHub仓库。

标签:BentoML,AI,机器学习
来源: