配置来源与覆盖#

SkyPilot 允许您通过多种来源设置配置,从而提供了管理配置的灵活性。

它还实现了一种覆盖优先级机制,用于在分层配置时合并来自不同来源的配置。

例如,您可以有一个项目配置用于存储项目中所有任务的默认值,一个应用于所有项目的全局用户配置,以及针对特定任务的 Task YAML 覆盖。

Configuration Sources
Configuration Sources

配置来源#

配置类型

配置位置

描述

服务器配置

API 服务器上的 ~/.sky/config.yaml

适用于对 SkyPilot API 服务器发出的所有请求。

用户配置

~/.sky/config.yaml

适用于所有 SkyPilot 调用。

项目配置

$pwd/.sky.yaml

适用于当前目录中的所有 SkyPilot 调用。

SkyPilot YAML

SkyPilot YAML 中的 config 字段

适用于特定的 SkyPilot 任务。

CLI 标志

使用 --config CLI 标志

覆盖特定命令的配置。

所有配置都使用配置语法。任何新的配置更改都不会影响现有集群。

您可以叠加来自多个来源的配置。当指定多个来源时,SkyPilot 会合并它们

注意

如果在客户端指定,以下字段将被忽略

提示

如果您是 SkyPilot API 服务器的管理员,您可以通过执行管理员策略来禁用覆盖或仅允许覆盖特定字段。

服务器配置#

如果您使用的是远程SkyPilot API 服务器,它会在 API 服务器实例/容器中查找 ~/.sky/config.yaml 以找到服务器配置。

如果您使用的是本地 API 服务器,您可以使用用户配置来设置全局配置。

用户配置#

SkyPilot 客户端会在 ~/.sky/config.yaml 中查找用户配置。

项目配置#

SkyPilot 客户端会在 $pwd/.sky.yaml 中查找当前项目配置。

要指定不同的文件,请将 SKYPILOT_PROJECT_CONFIG 环境变量设置为所需路径。

SkyPilot YAML#

您可以在 SkyPilot YAML 文件中的 config 字段中指定内联配置选项。

SkyPilot YAML 内联配置支持以下字段

示例

# In your SkyPilot YAML
config:
  docker:
    run_options: ...
  kubernetes:
    pod_config: ...
    provision_timeout: ...
  gcp:
    managed_instance_group: ...
  nvidia_gpus:
    disable_ecc: ...

CLI 标志#

您可以使用 --config 标志将配置参数传递给 CLI。

--config 标志可以是配置 YAML 文件的路径,也可以是键值对的点列表。如果传入的是配置文件,则只能提供一个 --config 标志。

示例

# pass a config file
sky launch --config my_config.yaml ...
# pass individual config options
sky launch --config 'kubernetes.provision_timeout=600' --config 'kubernetes.pod_config.spec.priorityClassName=high-priority' ...
sky launch --config 'kubernetes.custom_metadata.annotations.myannotation1=myvalue1' --config 'kubernetes.custom_metadata.annotations.myannotation2=myvalue2' ...

配置覆盖#

如果在多个配置来源中指定了相同的配置字段,则根据以下优先级顺序进行配置覆盖

  1. CLI 标志 (最高优先级)

  2. SkyPilot YAML

  3. 项目配置

  4. 用户配置

  5. 服务器配置 (最低优先级)

合并规则

  • 列表会被优先级更高的配置来源覆盖。

    • 例外:kubernetes.pod_config 中的列表会附加到现有列表中。

  • 字典会被合并,其中单个键会被优先级更高的配置来源覆盖。

覆盖示例#

如果以下配置在用户配置文件

kubernetes:
  allowed_contexts: [context1, context2]
  provision_timeout: 600
aws:
  labels:
    map-migrated: my-value
    Owner: user-unique-name

并且以下配置在项目配置文件

# project config overrides user config
kubernetes:
  allowed_contexts: [context3, context4]
  provision_timeout: 300
aws:
  labels:
    Owner: project-unique-name

合并后的配置为

kubernetes:
  # lists are overridden by config sources with higher priority
  allowed_contexts: [context3, context4]
  provision_timeout: 300
  aws:
    # dicts are merged, with individual keys overridden by
    # config sources with higher priority
    labels:
      map-migrated: my-value
      Owner: project-unique-name