命令行界面#

集群命令行界面#

天空发射#

启动一个集群或任务。

如果ENTRYPOINT指向一个有效的YAML文件,它将被读取为任务规范。否则,它将被解释为bash命令。

在这两种情况下,命令都在任务的工作目录下运行(如果指定了),并且它们会经过作业队列调度。

sky launch [OPTIONS] [ENTRYPOINT]...

选项

-c, --cluster <cluster>#

集群名称。如果提供,则重用具有该名称的现有集群或使用该名称配置新集群。否则,使用自动生成的名称配置新集群。

--dryrun#

如果为True,则实际上不运行作业。

-s, --detach-setup#

如果为True,作为作业本身的一部分以非交互模式运行设置。您可以安全地使用ctrl-c来脱离日志记录,这不会中断设置过程。要在脱离后再次查看日志,请使用sky logs。要取消设置,请通过sky cancel取消作业。这对于长时间运行的设置命令非常有用。

-d, --detach-run#

如果为True,一旦作业提交,立即从此调用返回,并且不流式传输执行日志。

-n, --name <name>#

任务名称。如果同时提供了YAML中的“name”配置,则覆盖它。

--workdir <workdir>#

如果指定,将此目录同步到远程工作目录,任务将在该目录中调用。如果同时提供了“workdir”配置,则覆盖YAML中的“workdir”配置。

--cloud <cloud>#

使用的云。如果指定,将覆盖“resources.cloud”配置。传递“none”将重置配置。

--region <region>#

使用的区域。如果指定,将覆盖“resources.region”配置。传递“none”将重置配置。

--zone <zone>#

使用的区域。如果指定,将覆盖“resources.zone”配置。传递“none”将重置配置。

--num-nodes <num_nodes>#

执行任务的节点数量。如果同时提供了YAML中的“num_nodes”配置,则覆盖该配置。

--cpus <cpus>#

每个实例必须拥有的vCPU数量(例如,--cpus=4(正好4个)或--cpus=4+(至少4个))。这用于自动选择实例类型。

--memory <memory>#

每个实例必须拥有的内存量,单位为GB(例如,--memory=16(正好16GB),--memory=16+(至少16GB))

--disk-size <disk_size>#

操作系统磁盘大小,单位为GB。

--disk-tier <disk_tier>#

操作系统磁盘层级。可能是 low、medium、high、ultra、best、none 中的一个。如果指定了 best,则使用最佳的磁盘层级。如果指定了 none,则强制使用默认值并覆盖任务 YAML 中的选项。默认值:medium

Options:

低 | 中 | 高 | 超 | 最佳 | 无

--use-spot, --no-use-spot#

是否请求现货实例。如果指定,将覆盖“resources.use_spot”配置。

--image-id <image_id>#

用于启动实例的自定义镜像ID。传递“none”将重置配置。

--env-file <env_file>#

指向一个包含环境变量的dotenv文件的路径,这些环境变量将在远程节点上设置。

如果--env-file中的任何值与--env设置的值冲突,将优先使用--env的值。

--env <env>#

要在远程节点上设置的环境变量。 可以多次指定。 示例:

1. --env MY_ENV=1: set $MY_ENV on the cluster to be 1.

2. --env MY_ENV2=$HOME: 在集群上设置 $MY_ENV2 为运行 CLI 命令的本地环境中 $HOME 的相同值。

3. --env MY_ENV3: 将集群中的 $MY_ENV3 设置为与本地环境中的 $MY_ENV3 相同的值。

--gpus <gpus>#

使用的GPU类型和数量。示例值:“V100:8”,“V100”(表示数量为1的简写),或“V100:0.5”(调度框架支持分数数量)。如果此命令启动一个新集群,这是要配置的资源。如果重用现有集群,这被视为任务需求,必须适合集群的总资源,并用于调度任务。如果同时提供了YAML中的“accelerators”配置,则覆盖该配置。传递“none”将重置配置。

-t, --instance-type <instance_type>#

要使用的实例类型。如果指定,将覆盖“resources.instance_type”配置。传递“none”将重置配置。

--ports <ports>#

集群上要打开的端口。如果指定,将覆盖YAML中的“ports”配置。

-i, --idle-minutes-to-autostop <idle_minutes_to_autostop>#

在集群空闲这么多分钟后自动停止集群,即集群作业队列中没有正在运行或挂起的作业。每当在作业队列中发现设置/运行/挂起的作业时,空闲时间将被重置。设置此标志相当于运行 sky launch -d ... 然后运行 sky autostop -i 。如果未设置,集群将不会自动停止。

--down#

自动关闭集群:在所有作业完成后(无论是成功还是异常)拆除集群。如果同时设置了–idle-minutes-to-autostop,集群将在指定的空闲时间后被拆除。请注意,如果在配置/数据同步/设置过程中发生错误,集群将不会被拆除以便进行调试。

-r, --retry-until-up#

是否无限重试配置,直到集群启动,如果由于不可用错误而无法在任何可能的区域/云上启动集群。

-y, --yes#

跳过确认提示。

--no-setup#

在(重新)启动集群时跳过设置阶段。

--clone-disk-from, --clone <clone_disk_from>#

[实验性] 从现有集群克隆磁盘以启动新集群。当新集群需要在启动磁盘上拥有与现有集群相同的数据时,这非常有用。

--fast#

[实验性] 如果集群已经启动并可用,跳过配置和设置步骤。

参数

ENTRYPOINT#

可选参数

sky exec#

在现有集群上执行任务或命令。

如果ENTRYPOINT指向一个有效的YAML文件,它将被读取为任务规范。否则,它将被解释为bash命令。

sky exec执行的操作:

  1. 工作目录同步,如果:

    • ENTRYPOINT 是一个包含指定 workdir 字段的 YAML 文件;或者

    • 标志 --workdir= 已设置。

  2. 执行指定任务的run命令 / bash命令。

sky exec 因此通常比 sky launch 更快,前提是集群已经存在。

所有设置步骤(配置、设置命令、文件挂载同步)都将被跳过。如果这些规范中的任何一项发生了变化,此命令将不会反映这些变化。要确保集群的设置是最新的,请使用sky launch代替。

执行和调度行为:

  • 任务/命令将经过作业队列调度,尊重任何指定的资源需求。它可以在集群中任何具有足够资源的节点上执行。

  • 任务/命令在工作目录下运行(如果指定了工作目录)。

  • 任务/命令以非交互方式运行(没有伪终端或pty),因此像htop这样的交互式命令无法工作。请改用ssh my_cluster

典型的工作流程:

# First command: set up the cluster once.
sky launch -c mycluster app.yaml

# For iterative development, simply execute the task on the launched
# cluster.
sky exec mycluster app.yaml

# Do "sky launch" again if anything other than Task.run is modified:
sky launch -c mycluster app.yaml

# Pass in commands for execution.
sky exec mycluster python train_cpu.py
sky exec mycluster --gpus=V100:1 python train_gpu.py

# Pass environment variables to the task.
sky exec mycluster --env WANDB_API_KEY python train_gpu.py
sky exec [OPTIONS] [CLUSTER] [ENTRYPOINT]...

选项

-d, --detach-run#

如果为True,一旦作业提交,立即从此调用返回,并且不流式传输执行日志。

-n, --name <name>#

任务名称。如果同时提供了YAML中的“name”配置,则覆盖它。

--workdir <workdir>#

如果指定,将此目录同步到远程工作目录,任务将在该目录中调用。如果同时提供了“workdir”配置,则覆盖YAML中的“workdir”配置。

--cloud <cloud>#

使用的云。如果指定,将覆盖“resources.cloud”配置。传递“none”将重置配置。

--region <region>#

使用的区域。如果指定,将覆盖“resources.region”配置。传递“none”将重置配置。

--zone <zone>#

使用的区域。如果指定,将覆盖“resources.zone”配置。传递“none”将重置配置。

--num-nodes <num_nodes>#

执行任务的节点数量。如果同时提供了YAML中的“num_nodes”配置,则覆盖该配置。

--cpus <cpus>#

每个实例必须拥有的vCPU数量(例如,--cpus=4(正好4个)或--cpus=4+(至少4个))。这用于自动选择实例类型。

--memory <memory>#

每个实例必须拥有的内存量,单位为GB(例如,--memory=16(正好16GB),--memory=16+(至少16GB))

--disk-size <disk_size>#

操作系统磁盘大小,单位为GB。

--disk-tier <disk_tier>#

操作系统磁盘层级。可能是 low、medium、high、ultra、best、none 中的一个。如果指定了 best,则使用最佳的磁盘层级。如果指定了 none,则强制使用默认值并覆盖任务 YAML 中的选项。默认值:medium

Options:

低 | 中 | 高 | 超 | 最佳 | 无

--use-spot, --no-use-spot#

是否请求现货实例。如果指定,将覆盖“resources.use_spot”配置。

--image-id <image_id>#

用于启动实例的自定义镜像ID。传递“none”将重置配置。

--env-file <env_file>#

指向一个包含环境变量的dotenv文件的路径,这些环境变量将在远程节点上设置。

如果--env-file中的任何值与--env设置的值冲突,将优先使用--env的值。

--env <env>#

要在远程节点上设置的环境变量。 可以多次指定。 示例:

1. --env MY_ENV=1: set $MY_ENV on the cluster to be 1.

2. --env MY_ENV2=$HOME: 在集群上设置 $MY_ENV2 为运行 CLI 命令的本地环境中 $HOME 的相同值。

3. --env MY_ENV3: 将集群中的 $MY_ENV3 设置为与本地环境中的 $MY_ENV3 相同的值。

--gpus <gpus>#

使用的GPU类型和数量。示例值:“V100:8”,“V100”(表示数量为1的简写),或“V100:0.5”(调度框架支持分数数量)。如果此命令启动一个新集群,这是要配置的资源。如果重用现有集群,这被视为任务需求,必须适合集群的总资源,并用于调度任务。如果同时提供了YAML中的“accelerators”配置,则覆盖该配置。传递“none”将重置配置。

-t, --instance-type <instance_type>#

要使用的实例类型。如果指定,将覆盖“resources.instance_type”配置。传递“none”将重置配置。

--ports <ports>#

集群上要打开的端口。如果指定,将覆盖YAML中的“ports”配置。

参数

CLUSTER#

可选参数

ENTRYPOINT#

可选参数

天空停止#

停止集群。

CLUSTER 是要停止的集群的名称(或通配符模式)。如果同时提供了 CLUSTER 和 --all,则后者优先。

当集群停止时,附加磁盘上的数据不会丢失。实例的计费将停止,而磁盘仍将收费。这些磁盘在重新启动集群时将重新附加。

目前,spot实例集群无法停止。

示例:

# Stop a specific cluster.
sky stop cluster_name

# Stop multiple clusters.
sky stop cluster1 cluster2

# Stop all clusters matching glob pattern 'cluster*'.
sky stop "cluster*"

# Stop all existing clusters.
sky stop -a
sky stop [OPTIONS] [CLUSTERS]...

选项

-a, --all#

停止所有现有的集群。

-y, --yes#

跳过确认提示。

参数

CLUSTERS#

可选参数

天空开始#

重启集群。

如果集群之前已停止(状态为STOPPED)或在配置/运行时安装过程中失败(状态为INIT),此命令将尝试启动集群。在后一种情况下,将重新尝试配置和运行时安装。

在重新启动已停止的集群时,不会使用自动故障转移配置。它将在之前选择的相同云、区域和区域上启动。

如果集群已经处于UP状态,此命令将无效。

示例:

# Restart a specific cluster.
sky start cluster_name

# Restart multiple clusters.
sky start cluster1 cluster2

# Restart all clusters.
sky start -a
sky start [OPTIONS] [CLUSTERS]...

选项

-a, --all#

启动所有现有的集群。

-y, --yes#

跳过确认提示。

-i, --idle-minutes-to-autostop <idle_minutes_to_autostop>#

在集群空闲这么多分钟后自动停止集群,即集群作业队列中没有正在运行或挂起的作业。每当在作业队列中发现设置/运行/挂起的作业时,空闲时间将被重置。设置此标志相当于运行 sky launch -d ... 然后运行 sky autostop -i 。如果未设置,集群将不会自动停止。

--down#

自动关闭集群:在所有作业完成(成功或异常)后,经过指定的空闲时间后关闭集群。需要设置 –idle-minutes-to-autostop。

-r, --retry-until-up#

如果由于不可用错误而无法启动集群,则无限重试配置,直到集群启动。

-f, --force#

即使集群已经启动,也要强制启动集群。这对于在集群上升级SkyPilot运行时非常有用。

参数

CLUSTERS#

可选参数

天空下降#

拆除集群。

CLUSTER 是要拆除的集群的名称(或全局模式)。如果同时提供了 CLUSTER 和 --all,则后者优先。

拆除集群将删除所有相关资源(所有计费停止),并且附加磁盘上的任何数据都将丢失。集群中的加速器(例如,TPU)也将被删除。

示例:

# Tear down a specific cluster.
sky down cluster_name

# Tear down multiple clusters.
sky down cluster1 cluster2

# Tear down all clusters matching glob pattern 'cluster*'.
sky down "cluster*"

# Tear down all existing clusters.
sky down -a
sky down [OPTIONS] [CLUSTERS]...

选项

-a, --all#

拆除所有现有的集群。

-y, --yes#

跳过确认提示。

-p, --purge#

(高级)强制从SkyPilot的集群表中移除集群,即使实际集群在云上终止失败。警告:此标志应仅在特定手动故障排除场景中谨慎使用;设置此标志后,用户有责任确保没有泄漏的实例和相关资源。

参数

CLUSTERS#

可选参数

天空状态#

显示集群。

如果提供了CLUSTERS,则显示这些集群。否则,显示所有集群。

如果指定了–ip,显示集群头节点的IP地址。 仅在CLUSTERS中恰好包含一个集群时可用,例如 sky status --ip mycluster

如果指定了–endpoints,显示集群中所有暴露的端点。 仅在CLUSTERS中恰好包含一个集群时可用,例如 sky status --endpoints mycluster。要查询单个端点,你可以使用 sky status mycluster --endpoint 8888

每个集群记录的字段如下:集群名称、自上次启动以来的时间、资源、区域、可用区、每小时价格、状态、自动停止、命令。

使用 sky status -a 显示所有字段。

每个集群可以有以下状态之一:

  • INIT: 集群可能处于运行或关闭状态。它可能发生在以下情况:

    • 正在进行的配置或运行时设置。(sky launch 已启动但尚未完成。)

    • 或者,集群处于异常状态,例如,一些集群节点宕机,或者SkyPilot运行时不健康。(要恢复集群,请尝试在其上再次运行sky launch。)

  • UP: 配置和运行时设置已成功,集群已启动。(最近的sky launch已成功完成。)

  • STOPPED: 集群已停止,存储已持久化。使用 sky start 来重启集群。

自动停止列:

  • 表示在集群空闲(没有进行中的作业)多少分钟后将自动停止。‘-’表示禁用。

  • 如果时间后面跟着‘(down)’,例如‘1m (down)’,集群将会自动关闭,而不是自动停止。

获取最新的集群状态:

  • 在正常情况下,当集群完全由SkyPilot管理(即没有在云控制台中进行手动操作)且未使用自动停止功能时,此命令返回的表将准确反映集群状态。

  • 在集群在SkyPilot之外被更改的情况下(例如,在云控制台中的手动操作;未管理的抢占式集群被抢占)或对于启用了自动停止的集群,使用--refresh从云提供商查询最新的集群状态。

sky status [OPTIONS] [CLUSTERS]...

选项

-a, --all#

显示所有完整信息。

-r, --refresh#

从云提供商查询最新的集群状态。

--ip#

获取集群头节点的IP地址。此选项将覆盖所有其他选项。对于Kubernetes集群,返回的IP地址是头pod的内部IP,可能无法从集群外部访问。

--endpoints#

获取集群的所有暴露端点和相应的URL。此选项将覆盖所有其他选项。

--endpoint <endpoint>#

获取集群上指定端口号的端点URL。此选项将覆盖所有其他选项。

--show-managed-jobs, --no-show-managed-jobs#

同时显示最近进行中的托管作业(如果有的话)。

--show-services, --no-show-services#

同时显示天空服务服务,如果有的话。

--kubernetes, --k8s#

[实验性] 在当前 Kubernetes 上下文中显示所有 SkyPilot 资源(包括来自其他用户的资源)。

参数

CLUSTERS#

可选参数

天空自动停止#

为集群安排自动停止或自动关闭。

自动停止/自动关闭功能将在集群空闲达到指定时长后自动停止或拆除集群。空闲意味着集群的任务队列中没有进行中(待处理/运行中)的任务。

CLUSTERS 是要停止的集群的名称(或通配符模式)。如果同时提供了 CLUSTERS 和 --all,则后者优先。

当以下任何情况发生时,集群的空闲时间将重置为零:

  • 提交了一个任务(sky launchsky exec)。

  • 集群已重新启动。

  • 设置了自动停止的空闲时间。

示例1:假设一个设置了2小时自动停止的集群已经空闲了1小时,然后将自动停止时间重置为30分钟。集群不会立即自动停止。相反,当提交了30分钟的第二个自动停止设置时,空闲计时器会重新开始计数。

示例2:假设一个没有任何自动停止设置的集群已经空闲了1小时,然后设置了30分钟的自动停止。集群不会立即自动停止。相反,空闲计时器只在自动停止设置之后才开始计数。

典型用法:

# Autostop this cluster after 60 minutes of idleness.
sky autostop cluster_name -i 60

# Cancel autostop for a specific cluster.
sky autostop cluster_name --cancel

# Autodown this cluster after 60 minutes of idleness.
sky autostop cluster_name -i 60 --down
sky autostop [OPTIONS] [CLUSTERS]...

选项

-a, --all#

将此命令应用于所有现有集群。

-i, --idle-minutes <idle_minutes>#

设置集群自动停止前的空闲分钟数。有关详细语义,请参阅上面的文档。

--cancel#

取消集群中任何当前活动的自动{停止,关闭}设置。如果没有活动设置,则不执行任何操作。

--down#

使用autodown(关闭集群;不可重启),而不是autostop(可重启)。

-y, --yes#

跳过确认提示。

参数

CLUSTERS#

可选参数

天空队列#

显示集群的作业队列。

sky queue [OPTIONS] [CLUSTERS]...

选项

-a, --all-users#

显示所有用户的完整信息。

-s, --skip-finished#

仅显示待处理/运行中的作业信息。

参数

CLUSTERS#

可选参数

天空日志#

跟踪作业的日志。

如果未提供JOB_ID,则将使用集群上的最新作业。

1. 如果没有提供标志,则跟踪指定的job_id的日志。最多只能提供一个job_id。

2. 如果指定了 --status,则打印作业的状态并在作业成功时以返回码 0 退出,否则以 1 退出。最多只能指定一个 job_id。

3. 如果指定了 --sync-down,作业的日志将从集群下载并保存到本地机器的 ~/sky_logs 目录下。可以指定多个 job_ids。

sky logs [OPTIONS] CLUSTER [JOB_IDS]...

选项

-s, --sync-down#

将作业的日志同步到本地机器。对于分布式作业,将从每个工作节点下载单独的日志文件。

--status#

如果指定,则不显示日志,而是根据作业的状态退出并返回状态码:0 表示成功,1 表示所有其他状态。

--follow, --no-follow#

跟踪作业的日志。如果指定了–no-follow,则打印到目前为止的日志并退出。[默认值:–follow]

--tail <tail>#

从日志文件末尾显示的行数。默认值为0,表示打印所有行。

参数

CLUSTER#

必需的参数

JOB_IDS#

可选参数

天空取消#

取消作业。

示例用法:


# Cancel specific jobs on a cluster.
sky cancel cluster_name 1
sky cancel cluster_name 1 2 3

# Cancel all jobs on a cluster.
sky cancel cluster_name -a

# Cancel the latest running job on a cluster.
sky cancel cluster_name

作业ID可以通过sky queue cluster_name查找。

sky cancel [OPTIONS] CLUSTER [JOBS]...

选项

-a, --all#

取消指定集群上的所有作业。

-y, --yes#

跳过确认提示。

参数

CLUSTER#

必需的参数

JOBS#

可选参数

托管(Spot)作业 CLI#

天空作业启动#

从YAML或命令启动托管作业。

如果ENTRYPOINT指向一个有效的YAML文件,它将被读取为任务规范。否则,它将被解释为bash命令。

示例:

# You can use normal task YAMLs.
sky jobs launch task.yaml

sky jobs launch 'echo hello!'
sky jobs launch [OPTIONS] ENTRYPOINT...

选项

-n, --name <name>#

任务名称。如果同时提供了YAML中的“name”配置,则覆盖它。

--workdir <workdir>#

如果指定,将此目录同步到远程工作目录,任务将在该目录中调用。如果同时提供了“workdir”配置,则覆盖YAML中的“workdir”配置。

--cloud <cloud>#

使用的云。如果指定,将覆盖“resources.cloud”配置。传递“none”将重置配置。

--region <region>#

使用的区域。如果指定,将覆盖“resources.region”配置。传递“none”将重置配置。

--zone <zone>#

使用的区域。如果指定,将覆盖“resources.zone”配置。传递“none”将重置配置。

--num-nodes <num_nodes>#

执行任务的节点数量。如果同时提供了YAML中的“num_nodes”配置,则覆盖该配置。

--cpus <cpus>#

每个实例必须拥有的vCPU数量(例如,--cpus=4(正好4个)或--cpus=4+(至少4个))。这用于自动选择实例类型。

--memory <memory>#

每个实例必须拥有的内存量,单位为GB(例如,--memory=16(正好16GB),--memory=16+(至少16GB))

--disk-size <disk_size>#

操作系统磁盘大小,单位为GB。

--disk-tier <disk_tier>#

操作系统磁盘层级。可能是 low、medium、high、ultra、best、none 中的一个。如果指定了 best,则使用最佳的磁盘层级。如果指定了 none,则强制使用默认值并覆盖任务 YAML 中的选项。默认值:medium

Options:

低 | 中 | 高 | 超 | 最佳 | 无

--use-spot, --no-use-spot#

是否请求现货实例。如果指定,将覆盖“resources.use_spot”配置。

--image-id <image_id>#

用于启动实例的自定义镜像ID。传递“none”将重置配置。

--env-file <env_file>#

指向一个包含环境变量的dotenv文件的路径,这些环境变量将在远程节点上设置。

如果--env-file中的任何值与--env设置的值冲突,将优先使用--env的值。

--env <env>#

要在远程节点上设置的环境变量。 可以多次指定。 示例:

1. --env MY_ENV=1: set $MY_ENV on the cluster to be 1.

2. --env MY_ENV2=$HOME: 在集群上设置 $MY_ENV2 为运行 CLI 命令的本地环境中 $HOME 的相同值。

3. --env MY_ENV3: 将集群中的 $MY_ENV3 设置为与本地环境中的 $MY_ENV3 相同的值。

--gpus <gpus>#

使用的GPU类型和数量。示例值:“V100:8”,“V100”(表示数量为1的简写),或“V100:0.5”(调度框架支持分数数量)。如果此命令启动一个新集群,这是要配置的资源。如果重用现有集群,这被视为任务需求,必须适合集群的总资源,并用于调度任务。如果同时提供了YAML中的“accelerators”配置,则覆盖该配置。传递“none”将重置配置。

-t, --instance-type <instance_type>#

要使用的实例类型。如果指定,将覆盖“resources.instance_type”配置。传递“none”将重置配置。

--ports <ports>#

集群上要打开的端口。如果指定,将覆盖YAML中的“ports”配置。

--job-recovery <job_recovery>#

用于管理作业的恢复策略。

-d, --detach-run#

如果为True,一旦作业提交,立即从此调用返回,并且不流式传输执行日志。

-r, --retry-until-up, -no-r, --no-retry-until-up#

(默认值:True;此标志已弃用,将在未来的版本中移除。)如果遇到不可用错误,是否无限重试配置,直到集群启动。这适用于启动所有托管作业(包括初始和任何恢复尝试),但不适用于作业控制器。

-y, --yes#

跳过确认提示。

--fast#

[已弃用] 无操作。之前的标志行为现在默认启用。

参数

ENTRYPOINT#

必需的参数

天空作业队列#

显示托管作业的状态。

每个托管作业可以有以下状态之一:

  • PENDING: 任务正在等待作业控制器上的空闲插槽以被接受。

  • SUBMITTED: 作业已提交并被作业控制器接受。

  • STARTING: 任务正在启动(为任务配置集群)。

  • RUNNING: 任务正在运行。

  • RECOVERING: 作业的集群正在从抢占中恢复。

  • SUCCEEDED: 任务成功。

  • CANCELLING: 用户请求取消作业,取消操作正在进行中。

  • CANCELLED: 作业被用户取消。

  • FAILED: 作业由于作业本身的错误而失败。

  • FAILED_SETUP: 由于作业的setup命令出错,作业失败。

  • FAILED_PRECHECKS: 作业失败,原因是我们的预检查出错,例如指定了无效的集群名称或不可行的资源。

  • FAILED_NO_RESOURCE: 作业因资源在最大重试次数后不可用而失败。

  • FAILED_CONTROLLER: 由于spot控制器中的意外错误,作业失败。

如果作业失败,无论是由于用户代码还是资源不可用,错误日志可以通过sky jobs logs --controller找到,例如:

sky jobs logs --controller job_id

这也显示了用于配置以及任何抢占和恢复尝试的日志。

(提示)要每60秒获取作业状态,请使用 watch

watch -n60 sky jobs queue
sky jobs queue [OPTIONS]

选项

-a, --all#

显示所有完整信息。

-r, --refresh#

查询最新状态,如果作业控制器停止则重新启动。

-s, --skip-finished#

仅显示待处理/运行中的作业信息。

sky jobs cancel#

取消托管作业。

您可以提供一个作业名称或一个要取消的作业ID列表。 它们是互斥的选项。

示例:

# Cancel managed job with name 'my-job'
$ sky jobs cancel -n my-job

# Cancel managed jobs with IDs 1, 2, 3
$ sky jobs cancel 1 2 3
sky jobs cancel [OPTIONS] [JOB_IDS]...

选项

-n, --name <name>#

要取消的托管作业名称。

-a, --all#

取消所有托管作业。

-y, --yes#

跳过确认提示。

参数

JOB_IDS#

可选参数

天空作业日志#

跟踪托管作业的日志。

sky jobs logs [OPTIONS] [JOB_ID]

选项

-n, --name <name>#

托管作业名称。

--follow, --no-follow#

跟踪作业的日志。[默认:–follow] 如果指定了–no-follow,则打印到目前为止的日志并退出。

--controller#

显示此作业的控制器日志;对于调试启动/恢复等非常有用。

-r, --refresh#

查询最新的作业日志,如果作业控制器已停止,则重新启动。

参数

JOB_ID#

可选参数

SkyServe 命令行界面#

sky serve up#

启动一个SkyServe服务。

SERVICE_YAML 必须指向一个有效的 YAML 文件。

一个常规的任务YAML可以通过添加一个service字段转换为服务YAML。例如,

# service.yaml
service:
  ports: 8080
  readiness_probe:
    path: /health
    initial_delay_seconds: 20
  replicas: 1

resources:
  cpus: 2+

run: python -m http.server 8080

示例:

sky serve up service.yaml
sky serve up [OPTIONS] SERVICE_YAML...

选项

-n, --service-name <service_name>#

服务名称。每个服务都是唯一的。如果未提供,将自动生成一个唯一的名称。

--workdir <workdir>#

如果指定,将此目录同步到远程工作目录,任务将在该目录中调用。如果同时提供了“workdir”配置,则覆盖YAML中的“workdir”配置。

--cloud <cloud>#

使用的云。如果指定,将覆盖“resources.cloud”配置。传递“none”将重置配置。

--region <region>#

使用的区域。如果指定,将覆盖“resources.region”配置。传递“none”将重置配置。

--zone <zone>#

使用的区域。如果指定,将覆盖“resources.zone”配置。传递“none”将重置配置。

--num-nodes <num_nodes>#

执行任务的节点数量。如果同时提供了YAML中的“num_nodes”配置,则覆盖该配置。

--cpus <cpus>#

每个实例必须拥有的vCPU数量(例如,--cpus=4(正好4个)或--cpus=4+(至少4个))。这用于自动选择实例类型。

--memory <memory>#

每个实例必须拥有的内存量,单位为GB(例如,--memory=16(正好16GB),--memory=16+(至少16GB))

--disk-size <disk_size>#

操作系统磁盘大小,单位为GB。

--disk-tier <disk_tier>#

操作系统磁盘层级。可能是 low、medium、high、ultra、best、none 中的一个。如果指定了 best,则使用最佳的磁盘层级。如果指定了 none,则强制使用默认值并覆盖任务 YAML 中的选项。默认值:medium

Options:

低 | 中 | 高 | 超 | 最佳 | 无

--use-spot, --no-use-spot#

是否请求现货实例。如果指定,将覆盖“resources.use_spot”配置。

--image-id <image_id>#

用于启动实例的自定义镜像ID。传递“none”将重置配置。

--env-file <env_file>#

指向一个包含环境变量的dotenv文件的路径,这些环境变量将在远程节点上设置。

如果--env-file中的任何值与--env设置的值冲突,将优先使用--env的值。

--env <env>#

要在远程节点上设置的环境变量。 可以多次指定。 示例:

1. --env MY_ENV=1: set $MY_ENV on the cluster to be 1.

2. --env MY_ENV2=$HOME: 在集群上设置 $MY_ENV2 为运行 CLI 命令的本地环境中 $HOME 的相同值。

3. --env MY_ENV3: 将集群中的 $MY_ENV3 设置为与本地环境中的 $MY_ENV3 相同的值。

--gpus <gpus>#

使用的GPU类型和数量。示例值:“V100:8”,“V100”(表示数量为1的简写),或“V100:0.5”(调度框架支持分数数量)。如果此命令启动一个新集群,这是要配置的资源。如果重用现有集群,这被视为任务需求,必须适合集群的总资源,并用于调度任务。如果同时提供了YAML中的“accelerators”配置,则覆盖该配置。传递“none”将重置配置。

-t, --instance-type <instance_type>#

要使用的实例类型。如果指定,将覆盖“resources.instance_type”配置。传递“none”将重置配置。

--ports <ports>#

集群上要打开的端口。如果指定,将覆盖YAML中的“ports”配置。

-y, --yes#

跳过确认提示。

参数

SERVICE_YAML#

必需的参数

天空服务关闭#

拆除服务或副本。

SERVICE_NAMES 是要拆除的服务的名称(或通配符模式)。如果同时提供了 SERVICE_NAMES 和 --all,则后者优先。

拆除服务将删除其所有副本和相关资源。

示例:

# Tear down a specific service.
sky serve down my-service

# Tear down multiple services.
sky serve down my-service1 my-service2

# Tear down all services matching glob pattern 'service-*'.
sky serve down "service-*"

# Tear down all existing services.
sky serve down -a

# Forcefully tear down a service in failed status.
sky serve down failed-service --purge

# Tear down a specific replica
sky serve down my-service --replica-id 1

# Forcefully tear down a specific replica, even in failed status.
sky serve down my-service --replica-id 1 --purge
sky serve down [OPTIONS] [SERVICE_NAMES]...

选项

-a, --all#

拆除所有服务。

-p, --purge#

拆除处于失败状态的服务。

-y, --yes#

跳过确认提示。

--replica-id <replica_id>#

拆除给定的副本

参数

SERVICE_NAMES#

可选参数

天空服务状态#

显示SkyServe服务的状态。

显示一个或多个服务的详细状态。如果未提供SERVICE_NAME,则显示所有服务的状态。如果指定了–endpoint,则仅输出服务的端点。

每个服务可以有以下状态之一:

  • CONTROLLER_INIT: 控制器正在初始化。

  • REPLICA_INIT: 控制器已完成初始化,目前没有可用的副本。这也表明尚未检测到副本故障。

  • CONTROLLER_FAILED: 控制器启动失败或处于异常状态;或者控制器和负载均衡器进程未运行。

  • READY: 服务已准备好处理请求。至少有一个副本处于READY状态(即已通过就绪探针)。

  • SHUTTING_DOWN: 服务正在关闭。这通常发生在调用sky serve down命令时。

  • FAILED: 至少有一个副本失败且没有副本准备就绪。这可能是由以下几个原因引起的:

    • 副本的启动过程失败。

    • 在初始延迟秒数内没有通过就绪探针。

    • 副本在服务请求一段时间后持续失败。

    • 用户代码失败。

  • FAILED_CLEANUP: 服务关闭时发生了一些错误。这通常表示资源泄漏。如果您看到这样的状态,请登录云控制台并仔细检查。

  • NO_REPLICAS: The service has no replicas. This usually happens when

    min_replicas 设置为 0,并且系统没有流量。

每个副本可以有以下状态之一:

  • PENDING: 已达到同时启动的最大数量,副本启动过程正在等待。

  • PROVISIONING: 副本正在配置中。

  • STARTING: 副本配置已成功,副本正在初始化,例如,安装依赖项或加载模型权重。

  • READY: 副本已准备好处理请求(即已通过就绪探针)。

  • NOT_READY: 副本未能通过就绪探针,但尚未连续一段时间未能通过探针(否则它将被关闭)。这通常发生在副本遭受不良网络连接或请求过多导致副本不堪重负时。

  • SHUTTING_DOWN: 副本正在关闭。这通常发生在副本被缩减规模、发生某些错误或调用sky serve down命令时。SkyServe将终止所有出错的副本。

  • FAILED: 当副本正在处理请求时发生了一些错误。 这表明副本已经关闭。(否则,它是 SHUTTING_DOWN。)

  • FAILED_CLEANUP: 在副本关闭时发生了一些错误。这通常表示资源泄漏,因为终止没有正确完成。当看到此状态时,请登录云控制台并检查是否有泄漏的虚拟机/资源。

  • PREEMPTED: 副本被云提供商抢占,sky serve 正在恢复此副本。这种情况仅在副本是 spot 实例时发生。

示例:

# Show status for all services
sky serve status

# Show detailed status for all services
sky serve status -a

# Only show status of my-service
sky serve status my-service
sky serve status [OPTIONS] [SERVICE_NAMES]...

选项

-a, --all#

显示所有完整信息。

--endpoint#

显示服务端点。

参数

SERVICE_NAMES#

可选参数

天空服务日志#

跟踪服务的日志。

示例:

# Tail the controller logs of a service
sky serve logs --controller [SERVICE_NAME]

# Print the load balancer logs so far and exit
sky serve logs --load-balancer --no-follow [SERVICE_NAME]

# Tail the logs of replica 1
sky serve logs [SERVICE_NAME] 1
sky serve logs [OPTIONS] SERVICE_NAME [REPLICA_ID]

选项

--follow, --no-follow#

跟踪作业的日志。[默认:–follow] 如果指定了–no-follow,则打印到目前为止的日志并退出。

--controller#

显示此服务的控制器日志。

--load-balancer#

显示此服务的负载均衡器日志。

参数

SERVICE_NAME#

必需的参数

REPLICA_ID#

可选参数

sky serve 更新#

更新一个SkyServe服务。

service_yaml 必须指向一个有效的 YAML 文件。

如果仅更改了服务部分且未指定文件挂载,SkyServe 将重用旧的副本。

否则,SkyServe 将终止旧副本并启动新副本。

支持两种更新模式:

  • “rolling”: (default) SkyServe will update the service with rolling update,

    即,每当一个新的副本准备就绪时,它将终止一个旧的副本。流量可以在旧的和新的副本之间混合。

  • “blue_green”: SkyServe will update the service with blue-green update,

    即,它将等待新副本准备就绪,然后终止旧副本。只有在足够的新副本准备就绪后,流量才会从旧副本切换到新副本。

示例:

# Update an existing service with rolling update
sky serve update sky-service-16aa new_service.yaml
# Use blue-green update
sky serve update --mode blue_green sky-service-16aa new_service.yaml
sky serve update [OPTIONS] SERVICE_NAME SERVICE_YAML...

选项

--workdir <workdir>#

如果指定,将此目录同步到远程工作目录,任务将在该目录中调用。如果同时提供了“workdir”配置,则覆盖YAML中的“workdir”配置。

--cloud <cloud>#

使用的云。如果指定,将覆盖“resources.cloud”配置。传递“none”将重置配置。

--region <region>#

使用的区域。如果指定,将覆盖“resources.region”配置。传递“none”将重置配置。

--zone <zone>#

使用的区域。如果指定,将覆盖“resources.zone”配置。传递“none”将重置配置。

--num-nodes <num_nodes>#

执行任务的节点数量。如果同时提供了YAML中的“num_nodes”配置,则覆盖该配置。

--cpus <cpus>#

每个实例必须拥有的vCPU数量(例如,--cpus=4(正好4个)或--cpus=4+(至少4个))。这用于自动选择实例类型。

--memory <memory>#

每个实例必须拥有的内存量,单位为GB(例如,--memory=16(正好16GB),--memory=16+(至少16GB))

--disk-size <disk_size>#

操作系统磁盘大小,单位为GB。

--disk-tier <disk_tier>#

操作系统磁盘层级。可能是 low、medium、high、ultra、best、none 中的一个。如果指定了 best,则使用最佳的磁盘层级。如果指定了 none,则强制使用默认值并覆盖任务 YAML 中的选项。默认值:medium

Options:

低 | 中 | 高 | 超 | 最佳 | 无

--use-spot, --no-use-spot#

是否请求现货实例。如果指定,将覆盖“resources.use_spot”配置。

--image-id <image_id>#

用于启动实例的自定义镜像ID。传递“none”将重置配置。

--env-file <env_file>#

指向一个包含环境变量的dotenv文件的路径,这些环境变量将在远程节点上设置。

如果--env-file中的任何值与--env设置的值冲突,将优先使用--env的值。

--env <env>#

要在远程节点上设置的环境变量。 可以多次指定。 示例:

1. --env MY_ENV=1: set $MY_ENV on the cluster to be 1.

2. --env MY_ENV2=$HOME: 在集群上设置 $MY_ENV2 为运行 CLI 命令的本地环境中 $HOME 的相同值。

3. --env MY_ENV3: 将集群中的 $MY_ENV3 设置为与本地环境中的 $MY_ENV3 相同的值。

--gpus <gpus>#

使用的GPU类型和数量。示例值:“V100:8”,“V100”(表示数量为1的简写),或“V100:0.5”(调度框架支持分数数量)。如果此命令启动一个新集群,这是要配置的资源。如果重用现有集群,这被视为任务需求,必须适合集群的总资源,并用于调度任务。如果同时提供了YAML中的“accelerators”配置,则覆盖该配置。传递“none”将重置配置。

-t, --instance-type <instance_type>#

要使用的实例类型。如果指定,将覆盖“resources.instance_type”配置。传递“none”将重置配置。

--ports <ports>#

集群上要打开的端口。如果指定,将覆盖YAML中的“ports”配置。

--mode <mode>#

更新模式。如果为“rolling”,SkyServe将使用滚动更新来更新服务。如果为“blue_green”,SkyServe将使用蓝绿更新来更新服务。

Options:

滚动 | 蓝绿

-y, --yes#

跳过确认提示。

参数

SERVICE_NAME#

必需的参数

SERVICE_YAML#

必需的参数

存储CLI#

天空存储列表#

列出由SkyPilot管理的存储对象。

sky storage ls [OPTIONS]

选项

-a, --all#

显示所有完整信息。

天空存储删除#

删除存储对象。

示例:

# Delete two storage objects.
sky storage delete imagenet cifar10

# Delete all storage objects matching glob pattern 'imagenet*'.
sky storage delete "imagenet*"

# Delete all storage objects.
sky storage delete -a
sky storage delete [OPTIONS] [NAMES]...

选项

-a, --all#

删除所有存储对象。

-y, --yes#

跳过确认提示。

参数

NAMES#

可选参数

工具: show-gpus/check/cost-report#

天空显示-GPUs#

显示支持的GPU/TPU/加速器及其价格。

显示的名称和数量可以在任务YAML中的accelerators字段或CLI命令中的--gpus标志中设置。例如,如果此表显示支持8个V100,则上述内容将接受字符串V100:8

要显示GPU/TPU类型的详细信息(其价格、哪些云提供它、每种虚拟机类型的数量等),请使用sky show-gpus

要显示所有加速器,包括不太常见的加速器及其详细信息,请使用 sky show-gpus --all

要显示指定加速器的所有区域,请使用 sky show-gpus --all-regions

如果未指定--region--all-regions,则显示的每种实例类型的价格是所有区域中按需实例和竞价实例的最低价格。可能有多个区域具有相同的最低价格。

如果指定了--cloud kubernetes--cloud k8s,它将显示单个节点上可用的GPU的最大数量以及Kubernetes集群中所有节点的GPU实时可用性。

某些字段的定义:

  • DEVICE_MEM: 单个设备的内存;不依赖于实例(VM)的设备数量。

  • HOST_MEM: 主机实例(VM)的内存。

  • QTY_PER_NODE(仅限Kubernetes):可以在单个节点上请求的GPU数量。

  • TOTAL_GPUS (仅限Kubernetes): Kubernetes集群中可用的GPU总数。

  • TOTAL_FREE_GPUS (仅限Kubernetes): Kubernetes集群中当前空闲的GPU数量。这是实时获取的,当其他用户使用集群时可能会发生变化。

sky show-gpus [OPTIONS] [ACCELERATOR_STR]

选项

-a, --all#

显示所有GPU/TPU/加速器产品的详细信息。

--cloud <cloud>#

要查询的云提供商。

--region <region>#

使用的区域。如果未指定,则显示所有区域的加速器。

--all-regions#

显示指定加速器在所有区域和云中的定价和实例详细信息。

参数

ACCELERATOR_STR#

可选参数

天空检查#

检查哪些云可供使用。

这将检查SkyPilot支持的所有云的访问凭证。如果检测到某个云无法访问,将显示原因和纠正步骤。

如果指定了CLOUDS,则仅检查这些云的凭据。

启用的云被缓存并形成每个任务要考虑的“搜索空间”。

示例:

# Check credentials for all supported clouds.
sky check

# Check only specific clouds - AWS and GCP.
sky check aws gcp
sky check [OPTIONS] [CLOUDS]...

选项

-v, --verbose#

显示每个云的已激活账户。

参数

CLOUDS#

可选参数

天空成本报告#

显示已启动集群的预估成本。

对于每个集群,这里显示:集群名称、资源、启动时间、集群运行时长以及总估计成本。

估计成本列显示了基于所使用的资源类型和到目前为止的使用时长的集群价格。这意味着如果集群处于运行状态,连续调用成本报告将显示不断增加的价格。

此CLI是实验性的。估计的成本是基于集群状态的本地缓存计算的,可能不准确,适用于以下情况:

  • 设置了自动停止/使用spot的集群;或

  • 在云控制台上终止/停止的集群。

sky cost-report [OPTIONS]

选项

-a, --all#

显示所有完整信息。