配置部署¶
将 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 服务相关且兼容。明智地使用它们来管理敏感数据、配置设置和其他关键信息。
如果您有多个服务,可以在不同级别设置环境变量。例如,设置全局环境变量意味着它们将应用于所有服务,而单个服务可以有只属于自己的环境变量,这些变量优先于全局变量。参阅运行分布式服务了解更多信息。
使用配置文件部署¶
如果您有许多自定义配置字段或多个服务,可以将它们定义在一个单独的文件中 (YAML 或 JSON),并在 BentoML CLI 或 bentoml.deployment.create
API 中引用它。
这是一个 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 文件可能如下所示
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
)