自动配置GPU#
SkyPilot 配备了一个自动故障转移的配置器,如果请求的资源无法配置,它会自动重试在不同区域(或云)中配置集群。这种失败可能由多种原因引起:
容量不足(在某个区域或云中)
超出配额(在某个区域或云中)
自动故障转移对于配置稀缺资源(例如,GPU/TPU、高核数CPU、竞价实例)特别有用。用户无需手动搜索能够提供所需资源的区域(或云)。
提示
使用此功能无需任何操作。每当要配置新集群时,例如在sky
launch期间,自动故障转移会自动启用。
如果为任务请求了特定的cloud、region或zone,自动故障转移仅在指定位置内重试。
配置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
提示
列表项以前缀 - 指定,每个项是一个包含候选资源字段的字典。ordered 和 any_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]: