程序化集群扩缩容#

ray.autoscaler.sdk.request_resources#

在 Ray 程序中,您可以使用 request_resources() 调用命令自动扩缩容器将集群扩容到期望的大小。集群将立即尝试扩缩容以满足请求的资源,绕过正常的扩容速度限制。

ray.autoscaler.sdk.request_resources(num_cpus: int | None = None, bundles: List[dict] | None = None, bundle_label_selectors: List[dict] | None = None) None[source]

命令自动扩缩容器以满足指定的请求。

集群将立即尝试扩缩容以满足请求的资源,绕过正常的扩缩容速度限制。此操作会考虑现有的资源使用情况。

例如,假设您调用 request_resources(num_cpus=100),并且当前有 45 个正在运行的任务,每个任务需要 1 个 CPU。然后,将添加足够的节点以使最多 100 个任务可以同时运行。它 **不** 会添加足够的节点以使 145 个任务可以运行。

此调用仅对自动扩缩容器发出提示。实际的集群大小可能会比预期略大或略小,具体取决于内部装箱算法和最大工作节点数量限制。

参数:
  • num_cpus – 扩容集群以确保有指定数量的 CPU 可用。此请求是持久的,直到进行另一次 request_resources() 调用进行覆盖。

  • bundles (List[ResourceDict]) – 扩容集群以确保这组资源形状能够容纳。此请求是持久的,直到进行另一次 request_resources() 调用进行覆盖。

  • bundle_label_selectors – 标签选择器列表,应用于 bundles 列表的相同索引中的每个 bundle。对于没有标签要求的 bundle,列表中的相应项是空字典。对于每个 bundle。标签选择器由零个或多个键值对组成,其中键是标签,值是运算符(in、!in 等)和标签值。

示例

>>> from ray.autoscaler.sdk import request_resources
>>> # Request 1000 CPUs.
>>> request_resources(num_cpus=1000) 
>>> # Request 64 CPUs and also fit a 1-GPU/4-CPU task.
>>> request_resources( 
...     num_cpus=64, bundles=[{"GPU": 1, "CPU": 4}])
>>> # Same as requesting num_cpus=3.
>>> request_resources( 
...     bundles=[{"CPU": 1}, {"CPU": 1}, {"CPU": 1}])
>>> # Requests 2 num_cpus=1 bundles, the first with
>>> # label_selector={"accelerator-type": "in(A100)"} and second with
>>> # label_selector={"market-type": "spot"}.
>>> request_resources( 
...     bundles=[{"CPU": 1}, {"CPU": 1}]),
...     bundle_label_selectors=[{"accelerator-type": "in(A100)"},
...                            {"market-type": "spot"}])

DeveloperAPI: 此 API 在 Ray 的次要版本之间可能会发生变化。