配置 Ray Serve 部署#

Ray Serve 部署的默认值是一个很好的起点。要进一步定制扩展行为、资源管理或性能调优,您可以配置参数来更改 Ray Serve 部署的默认行为。

使用本指南了解部署配置的基础知识

  • 您可以为 Ray Serve 部署配置哪些参数

  • 指定参数的不同位置。

可配置参数#

您还可以参考 @serve.deployment 装饰器的 API 参考

  • name - 唯一标识应用程序中此部署的名称。如果未提供,则使用类名或函数名。

  • num_replicas - 控制运行以处理此部署请求的副本数量。可以是一个正整数,在这种情况下副本数量保持不变,或者 auto,在这种情况下副本数量将自动扩展(有关更多信息,请参阅 Ray Serve 自动扩展)。默认为 1。

  • ray_actor_options - 传递给 Ray Actor 装饰器的选项,例如资源要求。有效选项包括:accelerator_typememorynum_cpusnum_gpusobject_store_memoryresourcesruntime_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

如何指定参数#

您可以在两个位置指定上述参数

  1. 在您的应用程序代码中。

  2. 在 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

优先级顺序#

您可以在不同位置设置参数的不同值。对于每个参数,优先级顺序为(从高到低)

  1. Serve 配置文件

  2. 应用程序代码(通过 @serve.deployment 装饰器或通过 .options()

  3. 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_envnum_gpusmemory)但在配置文件中未设置,如果配置文件中存在 ray_actor_options 字典,Serve 仍不会使用代码中的设置。它会将这些缺失的选项视为用户从未设置过,而是使用默认值。这种字典覆盖行为也适用于 user_configautoscaling_config