配置 Ray Serve 部署#
Ray Serve 部署的默认值是一个很好的起点。要进一步定制扩展行为、资源管理或性能调优,您可以配置参数来更改 Ray Serve 部署的默认行为。
使用本指南了解部署配置的基础知识
您可以为 Ray Serve 部署配置哪些参数
指定参数的不同位置。
可配置参数#
您还可以参考 @serve.deployment 装饰器的 API 参考。
name- 唯一标识应用程序中此部署的名称。如果未提供,则使用类名或函数名。num_replicas- 控制运行以处理此部署请求的副本数量。可以是一个正整数,在这种情况下副本数量保持不变,或者auto,在这种情况下副本数量将自动扩展(有关更多信息,请参阅 Ray Serve 自动扩展)。默认为 1。ray_actor_options- 传递给 Ray Actor 装饰器的选项,例如资源要求。有效选项包括:accelerator_type、memory、num_cpus、num_gpus、object_store_memory、resources和runtime_env。有关更多详细信息,请参阅 Serve 中的资源管理。max_ongoing_requests- 在收到响应之前发送到此部署副本的最大查询数。默认为 5(请注意,在 Ray 2.32.0 中,默认值从 100 更改为 5)。这可能是 性能调优 的一个重要配置参数。autoscaling_config- 用于配置自动扩展行为的参数。如果设置了此项,则不能将num_replicas设置为数字。有关自动扩展可配置参数的更多详细信息,请参阅 Ray Serve 自动扩展。max_queued_requests- [实验性] 在每个调用方(代理或 DeploymentHandle)处将为该部署排队的请求的最大数量。一旦达到此限制,后续请求将引发 BackPressureError(对于句柄)或返回 HTTP 503 状态码(对于 HTTP 请求)。默认为 -1(无限制)。user_config- 传递给部署的 reconfigure 方法的配置。此配置可以动态更新,而无需重新启动部署的副本。user_config 必须是完全 JSON 可序列化的。有关更多详细信息,请参阅 Serve 用户配置。health_check_period_s- 副本进行健康检查调用的间隔时间(秒)。默认为 10 秒。默认情况下,健康检查是到副本的无操作 Actor 调用,但您可以通过部署中的 “check_health” 方法定义自己的健康检查,该方法在不健康时会引发异常。health_check_timeout_s- 副本等待健康检查方法返回的超时时间(秒),否则将其视为失败。默认为 30 秒。graceful_shutdown_wait_loop_s- 副本在关闭前等待无工作可做的时间(秒)。默认为 2 秒。graceful_shutdown_timeout_s- 在强制终止副本之前,等待其正常关闭的时间(秒)。默认为 20 秒。logging_config- 部署的日志配置(例如,日志级别、日志目录、JSON 日志格式等)。有关详细信息,请参阅 LoggingConfig。
如何指定参数#
您可以在两个位置指定上述参数
在您的应用程序代码中。
在 Serve 配置文件中,这是生产环境推荐的方法。
通过应用程序代码指定参数#
您可以通过两种方式在应用程序代码中指定参数
在首次定义部署时,在
@serve.deployment装饰器中在您想要修改部署时,使用
options()方法
首次定义部署时,使用 @serve.deployment 装饰器指定部署参数
# File name: configure_serve.py
from ray import serve
@serve.deployment(
name="Translator",
num_replicas=2,
ray_actor_options={"num_cpus": 0.2, "num_gpus": 0},
max_ongoing_requests=100,
health_check_period_s=10,
health_check_timeout_s=30,
graceful_shutdown_timeout_s=20,
graceful_shutdown_wait_loop_s=2,
)
class Example:
...
example_app = Example.bind()
使用 .options() 方法修改已定义的部署上的部署参数。修改现有部署可让您重用部署定义并在运行时动态设置参数。
example_app = Example.options(
ray_actor_options={"num_cpus": 0.2, "num_gpus": 0.0}
).bind()
通过 Serve 配置文件指定参数#
在生产环境中,我们建议通过 Serve 配置文件配置各个部署。您可以更改参数值而不修改应用程序代码。有关如何使用 Serve 配置文件,请参阅 生产指南。
applications:
- name: app1
import_path: configure_serve:translator_app
deployments:
- name: Translator
num_replicas: 2
max_ongoing_requests: 100
graceful_shutdown_wait_loop_s: 2.0
graceful_shutdown_timeout_s: 20.0
health_check_period_s: 10.0
health_check_timeout_s: 30.0
ray_actor_options:
num_cpus: 0.2
num_gpus: 0.0
优先级顺序#
您可以在不同位置设置参数的不同值。对于每个参数,优先级顺序为(从高到低)
Serve 配置文件
应用程序代码(通过
@serve.deployment装饰器或通过.options())Serve 默认值
换句话说,如果您在配置文件和应用程序代码中为部署指定了一个参数,Serve 将使用配置文件中的值。如果仅在代码中指定,Serve 将使用您在代码中指定的值。如果您未在任何地方指定参数,Serve 将使用该参数的默认值。
例如,以下应用程序代码包含一个名为 ExampleDeployment 的单独部署
@serve.deployment(num_replicas=2, graceful_shutdown_timeout_s=6)
class ExampleDeployment:
...
example_app = ExampleDeployment.bind()
然后,您使用以下配置文件部署应用程序
applications:
- name: default
import_path: models:example_app
deployments:
- name: ExampleDeployment
num_replicas: 5
Serve 使用配置文件中设置的值 num_replicas=5,并使用应用程序代码中设置的值 graceful_shutdown_timeout_s=6。所有其他部署设置都使用 Serve 默认值,因为您未在代码或配置文件中指定它们。例如,health_check_period_s=10,因为默认情况下 Serve 每 10 秒检查一次部署的健康状况。
提示
请记住,ray_actor_options 算作一个设置。配置文件中的整个 ray_actor_options 字典会覆盖图中代码中的整个 ray_actor_options 字典。如果您在代码中设置了 ray_actor_options 中的单个选项(例如 runtime_env、num_gpus、memory)但在配置文件中未设置,如果配置文件中存在 ray_actor_options 字典,Serve 仍不会使用代码中的设置。它会将这些缺失的选项视为用户从未设置过,而是使用默认值。这种字典覆盖行为也适用于 user_config 和 autoscaling_config。