自动配置GPU#

SkyPilot 配备了一个自动故障转移的配置器,如果请求的资源无法配置,它会自动重试在不同区域(或云)中配置集群。这种失败可能由多种原因引起:

  • 容量不足(在某个区域或云中)

  • 超出配额(在某个区域或云中)

自动故障转移对于配置稀缺资源(例如,GPU/TPU、高核数CPU、竞价实例)特别有用。用户无需手动搜索能够提供所需资源的区域(或云)。

提示

使用此功能无需任何操作。每当要配置新集群时,例如在sky launch期间,自动故障转移会自动启用。

如果为任务请求了特定的cloudregionzone,自动故障转移仅在指定位置内重试。

配置GPU#

要配置GPU或其他加速器,如果您使用的是任务YAML,请使用resources.accelerators字段:

resources:
  accelerators: A100
  # accelerators: A100:1
  # accelerators: A100:8
  # accelerators: A100-80GB:8

同样地,你可以在 sky launch 中使用 CLI argument --gpus 来指定加速器:

sky launch --gpus A100
sky launch --gpus A100:1
sky launch --gpus A100:8
sky launch --gpus A100-80GB:8

使用 sky show-gpus 查看所有支持的加速器名称。

跨区域故障转移#

供应程序首先在任务选择的云中的所有区域进行重试。

在AI中常用的高端GPU是NVIDIA A100 GPU。这些GPU通常需求量大且难以获得。让我们看看SkyPilot的自动故障转移配置器如何处理这样的请求:

$ sky launch -c gpu --gpus A100

...
Launching a new cluster 'gpu'. Proceed? [Y/n]:
⚙️ Launching on GCP us-central1 (us-central1-a).
W 10-11 18:25:57 instance_utils.py:112] Got return codes 'VM_MIN_COUNT_NOT_REACHED', 'ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS' in us-central1-a: 'Requested minimum count of 1 VMs could not be created'; "The zone 'projects/xxxxxx/zones/us-central1-a' does not have enough resources available to fulfill the request.  '(resource type:compute)'"
...

⚙️ Launching on GCP us-central1 (us-central1-f)
...

⚙️ Launching on GCP us-west1 (us-west1-a)
...
✓ Cluster launched: a100-8.  View logs at: ~/sky_logs/sky-2024-10-11-18-32-48-894132/provision.log

GCP被选为运行任务的最佳云平台。由于美国中部地区没有任何容量,自动故障转移配置器转而选择了美国西部,从而使我们的实例得以成功配置。

跨云故障转移#

如果所选云中的所有区域都失败,配置器将在下一个最便宜的云上重试。

这是一个请求8个A100 GPU时的跨云故障转移示例。Azure中的所有区域都未能提供资源,因此配置器切换到了GCP,在一个区域后成功获取了资源:

$ sky launch -c a100-8 --gpus A100:8

Considered resources (1 node):
----------------------------------------------------------------------------------------------------
 CLOUD   INSTANCE              vCPUs   Mem(GB)   ACCELERATORS   REGION/ZONE     COST ($)   CHOSEN
----------------------------------------------------------------------------------------------------
 Azure   Standard_ND96asr_v4   96      900       A100:8         eastus          27.20         ✔
 GCP     a2-highgpu-8g         96      680       A100:8         us-central1-a   29.39
 AWS     p4d.24xlarge          96      1152      A100:8         us-east-1       32.77
----------------------------------------------------------------------------------------------------
Launching a new cluster 'a100-8'. Proceed? [Y/n]:

...
⚙️ Launching on Azure eastus.
E 10-11 18:24:59 instance.py:457] Failed to create instances: [azure.core.exceptions.HttpResponseError] (InvalidTemplateDeployment)
sky.exceptions.ResourcesUnavailableError: Failed to acquire resources in all zones in eastus
...

⚙️ Launching on GCP us-central1 (us-central1-a).
W 10-11 18:25:57 instance_utils.py:112] Got return codes 'VM_MIN_COUNT_NOT_REACHED', 'ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS' in us-central1-a: 'Requested minimum count of 1 VMs could not be created'; "The zone 'projects/xxxxxx/zones/us-central1-a' does not have enough resources available to fulfill the request.  '(resource type:compute)'"
...

⚙️ Launching on GCP us-central1 (us-central1-b).
  Instance is up.
✓ Cluster launched: a100-8.  View logs at: ~/sky_logs/sky-2024-10-11-18-24-14-357884/provision.log

多个候选GPU#

如果一个任务可以在不同的GPU上运行,用户可以指定多个候选GPU,SkyPilot将自动找到最便宜的可用GPU。

为了让SkyPilot能够选择任何候选GPU,请在任务yaml中指定一组候选GPU:

resources:
  accelerators: {A10:1, L4:1, A10g:1}

在上面的例子中,SkyPilot 将尝试在 A10、L4 和 A10g GPU 集合中提供任何最便宜的可用 GPU,使用 sky launch task.yaml

$ sky launch task.yaml
...
-----------------------------------------------------------------------------------------------------
 CLOUD   INSTANCE                 vCPUs   Mem(GB)   ACCELERATORS   REGION/ZONE   COST ($)   CHOSEN
-----------------------------------------------------------------------------------------------------
 Azure   Standard_NV6ads_A10_v5   6       55        A10:1          eastus        0.45          ✔
 GCP     g2-standard-4            4       16        L4:1           us-east4-a    0.70
 AWS     g5.xlarge                4       16        A10G:1         us-east-1     1.01
-----------------------------------------------------------------------------------------------------

要指定偏好顺序,请在任务yaml中使用候选GPU列表:

resources:
  accelerators: [A10:1, A10g:1, L4:1]

在上述示例中,SkyPilot 将首先尝试配置 A10 GPU,然后是 A10g GPU,最后是 L4 GPU。

多个候选资源#

如果一个任务想要指定多个候选资源(不仅仅是GPU),用户可以使用偏好注释来指定候选资源列表:

resources:
  ordered: # Candidate resources in a preference order
    - cloud: gcp
      accelerators: A100-80GB
    - instance_type: g5.xlarge
    - cloud: azure
      region: eastus
      accelerators: A100
resources:
  any_of: # Candidate resources that can be chosen in any order
    - cloud: gcp
      accelerators: A100-80GB
    - instance_type: g5.xlarge
    - cloud: azure
      region: eastus
      accelerators: A100

提示

列表项以前缀 - 指定,每个项是一个包含候选资源字段的字典。orderedany_of 表示对候选资源的偏好。

示例: 仅允许使用以下任意一种GPU启动一组区域/云:A10g:8, A10:8, L4:8, 和 A100:8:

resources:
  accelerators: {A10g:8, A10:8, L4:8, A100:8}
  any_of:
    # AWS:
    - region: us-east-1
    - region: us-east-2
    - region: us-west-1
    - region: us-west-2
    # GCP
    - region: us-central1
    - region: us-east1
    - region: us-east4
    - region: us-west1
    - region: us-west2
    - region: us-west3
    - region: us-west4

提示

指定的区域如果没有加速器将被自动忽略。

这将生成以下输出:

$ sky launch -c mycluster task.yaml
...

Considered resources (1 node):
---------------------------------------------------------------------------------------------
 CLOUD   INSTANCE         vCPUs   Mem(GB)   ACCELERATORS   REGION/ZONE   COST ($)   CHOSEN
---------------------------------------------------------------------------------------------
 GCP     g2-standard-96   96      384       L4:8           us-east4-a    7.98          ✔
 AWS     g5.48xlarge      192     768       A10G:8         us-east-1     16.29
 GCP     a2-highgpu-8g    96      680       A100:8         us-east1-b    29.39
 AWS     p4d.24xlarge     96      1152      A100:8         us-east-1     32.77
---------------------------------------------------------------------------------------------

Launching a new cluster 'mycluster'. Proceed? [Y/n]: