配置部署

将 BentoML 项目部署到 BentoCloud 时,可以通过为 BentoML CLI 命令或 Python 客户端提供额外的配置来自定义部署。

本文档提供了设置常用配置的示例。

配置

如果您的 service.py 中只有一个 BentoML 服务,请直接参考以下代码示例。如果包含多个服务,请参阅使用配置文件部署运行分布式服务了解详情。

扩展

您可以设置最小和最大扩展副本数,以确保高效的资源利用和成本管理。

要通过 BentoML CLI 指定扩展限制,可以使用 --scaling-min--scaling-max 选项。

bentoml deploy --scaling-min 1 --scaling-max 2

使用 Python API 时,可以在 bentoml.deployment.create 函数中将扩展限制指定为参数。

import bentoml

bentoml.deployment.create(
    bento="./path_to_your_project",
    scaling_min=1,
    scaling_max=3
)

更多信息请参阅并发和自动扩展

实例类型

您可以自定义服务运行的硬件类型。这对于性能密集型应用至关重要。如果您未设置实例类型,BentoCloud 将根据配置中指定的 resources 字段自动推断出最合适的实例。

要列出 BentoCloud 账户上可用的实例类型,请运行

$ bentoml deployment list-instance-types

Name        Price  CPU    Memory  GPU  GPU Type
cpu.1       *      500m   2Gi
cpu.2       *      1000m  2Gi
cpu.4       *      2000m  8Gi
cpu.8       *      4000m  16Gi
gpu.t4.1    *      2000m  8Gi     1    nvidia-tesla-t4
gpu.l4.1    *      4000m  16Gi    1    nvidia-l4
gpu.a100.1  *      6000m  43Gi    1    nvidia-tesla-a100

要通过 BentoML CLI 设置实例类型,请使用 --instance-type 选项,后跟所需的实例类型名称

bentoml deploy --instance-type "gpu.a100.1"

使用 Python API 时,可以在 bentoml.deployment.create 函数中直接将实例类型指定为参数。示例如下

import bentoml

bentoml.deployment.create(
    bento="./path_to_your_project",
    instance_type="gpu.a100.1"  # Specify the instance type name here
)

注意

选择最适合您的应用性能需求和资源需求的实例类型。实例类型应与部署环境兼容,并得到底层基础设施的支持。

环境变量

您可以为部署设置环境变量,以配置 BentoML 服务的行为,例如 API 密钥、配置标志或其他运行时设置。在部署过程中,这些变量将被注入到镜像构建容器和 Bento 部署容器中。

重要

如果您已在使用 服务配置 中使用 envs 字段指定了相同的环境变量,则无需再次设置。

要通过 BentoML CLI 设置环境变量,可以使用 --env 选项

bentoml deploy --env FIRST_VAR_NAME=value --env SECOND_VAR_NAME=value

使用 Python API 时,通过 envs 参数指定环境变量,该参数接受一个字典列表。列表中的每个字典代表一个环境变量。示例如下

import bentoml

bentoml.deployment.create(
    bento="./path_to_your_project",
    envs=[
        {"name": "FIRST_VAR_NAME", "value": "first_var_value"},  # First environment variable
        {"name": "SECOND_VAR_NAME", "value": "second_var_value"}   # Second environment variable
    ]
)

注意

确保您设置的环境变量与您的 BentoML 服务相关且兼容。明智地使用它们来管理敏感数据、配置设置和其他关键信息。

如果您有多个服务,可以在不同级别设置环境变量。例如,设置全局环境变量意味着它们将应用于所有服务,而单个服务可以有只属于自己的环境变量,这些变量优先于全局变量。参阅运行分布式服务了解更多信息。

授权

出于安全原因,在 BentoCloud 中为部署启用授权至关重要。通过创建受保护的端点来控制对部署的访问,确保只有拥有有效 token 的个人才能访问它。这种机制有助于保护应用暴露的敏感数据和功能,防止未经授权的访问和潜在滥用。

要通过 BentoML CLI 设置授权,可以使用 --access-authorization 选项

bentoml deploy --access-authorization true

access_authorization 参数设置为 True 以启用它。

import bentoml

bentoml.deployment.create(
    bento="./path_to_your_project",
    access_authorization=True
)

要访问已启用授权的部署,请创建具有受保护端点访问权限的 API token,并参阅访问受保护的部署

使用配置文件部署

如果您有许多自定义配置字段或多个服务,可以将它们定义在一个单独的文件中 (YAML 或 JSON),并在 BentoML CLI 或 bentoml.deployment.create API 中引用它。

这是一个 config-file.yaml 文件示例

config-file.yaml
name: "my-deployment-name"
bento: .
access_authorization: true # Setting it to `true` means you need an API token with Protected Endpoint Access to access the exposed endpoint.
envs: # Set global environment variables
  - name: ENV_VAR_NAME
    value: env_var_value
services:
    MyBentoService: # Your Service name
      instance_type: "cpu.2" # The instance type name on BentoCloud
      scaling: # Set the max and min replicas for scaling
        min_replicas: 1
        max_replicas: 3
      deployment_strategy: "Recreate"
    # Add another Service below if you have more

然后可以按如下方式创建部署

bentoml deploy -f config-file.yaml
import bentoml
bentoml.deployment.create(config_file="config-file.yaml")

覆盖配置

定义 BentoML 服务时,可以使用 @bentoml.service 装饰器添加配置,例如超时和资源。当您将服务部署到 BentoCloud 时,这些配置将被应用。然而,BentoML 还允许您在部署时使用部署配置中的 config_overrides 字段覆盖这些配置。这提供了一种灵活的方式,可以在不修改服务代码的情况下,使您的服务适应不同的部署场景。

假设您有一个 BentoML 服务,定义了一些资源和超时配置

@bentoml.service(
    resources={"memory": "500MiB"},
    traffic={"timeout": 60},
)
class MyBentoService:
    # Service implementation

要覆盖某个字段(例如,timeout),需要将其设置在一个单独的 YAML (或 JSON) 文件中,然后在部署服务时引用该文件。您的 YAML 文件可能如下所示

config-file.yaml
services:
  MyBentoService: # The Service name
    config_overrides:
      traffic:
        timeout: 30 # Change the timeout from 60 seconds to 30 seconds

然后可以通过引用此文件来部署您的项目。

注意

  • 始终确保覆盖配置与部署环境的功能一致(例如,集群上可用的资源)。

  • 彻底测试这些配置非常重要,以确保服务按预期运行。

部署策略

BentoML 支持各种部署策略,允许您选择如何推出服务的更新。策略的选择会影响部署的可用性、速度和风险级别。

可用的策略包括

  • RollingUpdate: 逐步用新版本替换旧版本。这种策略最大限度地减少停机时间,但在滚动更新期间可能会暂时混用版本。

  • Recreate: 在创建新副本之前,杀死所有现有副本。这种策略可能会导致停机,但速度快,并确保应用程序在任何时候都只运行一个版本。Recreate 是默认的推出策略。部署应用程序后,您可以将其更新为使用其他策略。

  • RampedSlowRollout: 类似于 RollingUpdate,但对推出速度有更多控制。它对于缓慢引入更改并监控其影响非常有用。

  • BestEffortControlledRollout: 尝试通过逐步推出更改来最大限度地降低风险,但会根据部署的成功情况调整推出速度。

要通过 BentoML CLI 设置部署策略,可以使用 --strategy 选项

bentoml deploy --strategy Recreate

要使用 Python API 设置部署策略,可以在 bentoml.deployment.create 函数中将其直接指定为参数。示例如下

import bentoml

bentoml.deployment.create(
    bento="./path_to_your_project",
    strategy="RollingUpdate"  # Specify the deployment strategy here
)

另请参阅