快速入门#

本指南将引导您完成:

  • 以简单的YAML格式定义任务

  • 配置集群并运行任务

  • 使用核心的SkyPilot CLI命令

在继续本指南之前,请确保先完成安装说明

你好,SkyPilot!#

让我们定义我们的第一个任务,一个简单的Hello, SkyPilot!程序。

在您的机器上的任何位置创建一个目录:

$ mkdir hello-sky
$ cd hello-sky

将以下YAML复制到hello_sky.yaml文件中:

resources:
  # Optional; if left out, automatically pick the cheapest cloud.
  cloud: aws
  # 8x NVIDIA A100 GPU
  accelerators: A100:8

# Working directory (optional) containing the project codebase.
# Its contents are synced to ~/sky_workdir/ on the cluster.
workdir: .

# Typical use: pip install -r requirements.txt
# Invoked under the workdir (i.e., can use its files).
setup: |
  echo "Running setup."

# Typical use: make use of resources, such as running training.
# Invoked under the workdir (i.e., can use its files).
run: |
  echo "Hello, SkyPilot!"
  conda env list

这定义了一个包含以下组件的任务:

  • resources: 任务必须运行的云资源(例如,加速器、实例类型等)

  • workdir: 包含项目代码的工作目录,这些代码将被同步到配置的实例中

  • setup: 在任务执行之前必须运行的命令(在工作目录下调用)

  • run: 运行实际任务的命令(在工作目录下调用)

所有这些字段都是可选的。

要启动集群并运行任务,请使用 sky launch

$ sky launch -c mycluster hello_sky.yaml

提示

第一次运行可能需要几分钟。请随意继续阅读本指南。

提示

你可以使用-c标志为集群指定一个易于记忆的名称。如果未指定,将自动生成一个名称。

如果集群名称是sky status中显示的现有集群,则该集群将被重用。

sky launch 命令执行了大量的繁重工作:

  • 根据指定的资源约束选择合适的云和虚拟机;

  • 在该云上提供(或重用)一个集群;

  • 同步 workdir;

  • 执行setup命令;并且

  • 执行run命令。

几分钟后,集群将完成配置,任务将被执行。 输出将显示 Hello, SkyPilot! 以及已安装的 Conda 环境列表。

在现有集群上执行任务#

一旦你有了一个现有的集群,使用 sky exec 在其上执行任务:

$ sky exec mycluster hello_sky.yaml

sky exec 命令更加轻量级;它

  • 同步workdir(以便任务可以使用更新的代码);并且

  • 执行run命令。

配置和setup命令被跳过。

Bash 命令也受支持,例如:

$ sky exec mycluster python train_cpu.py
$ sky exec mycluster --gpus=A100:8 python train_gpu.py

对于交互式/监控命令,例如 htopgpustat -i,请使用 ssh(见下文)以避免作业提交的开销。

查看所有集群#

使用 sky status 查看所有集群(跨区域和云)在一个表格中:

$ sky status

如果您创建了多个集群,这可能会显示多个集群:

NAME       LAUNCHED     RESOURCES                          COMMAND                            STATUS
mygcp      1 day ago    1x GCP(n1-highmem-8)               sky launch -c mygcp --cloud gcp    STOPPED
mycluster  4 mins ago   1x AWS(p4d.24xlarge, {'A100': 8})  sky exec mycluster hello_sky.yaml  UP

请参阅此处以获取所有可能的集群状态列表。

SSH 进入集群#

只需运行 ssh 即可登录到集群:

$ ssh mycluster

多节点集群 也可以工作:

# Assuming 3 nodes.

# Head node.
$ ssh mycluster

# Worker nodes.
$ ssh mycluster-worker1
$ ssh mycluster-worker2

上述内容通过向~/.ssh/config添加适当的条目来实现。

因为SkyPilot暴露了集群的SSH访问权限,这意味着集群可以轻松地在诸如Visual Studio Code Remote等工具中使用。

传输文件#

任务执行后,使用 rsyncscp 下载文件(例如,检查点):

$ rsync -Pavz mycluster:/remote/source /local/dest  # copy from remote VM

要将文件上传到集群,请参阅同步代码和工件

停止/终止集群#

完成后,使用sky stop停止集群:

$ sky stop mycluster

要终止集群,请运行 sky down

$ sky down mycluster

注意

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

终止集群将删除所有相关资源(所有计费停止),并且附加磁盘上的任何数据都将丢失。已终止的集群无法重新启动。

CLI参考中查找更多管理集群生命周期的命令。

扩展#

到目前为止,我们已经使用SkyPilot的CLI来提交工作并与单个集群进行交互。 当你准备好扩展时(例如,运行10个或100个任务),SkyPilot支持两种选项:

  • 在你的集群上使用 sky exec 排队多个作业(参见 Job Queue);

  • 使用Managed Spot Jobs在自动管理的spot实例上运行 (用户无需与底层集群交互)

托管Spot作业运行在更便宜的Spot实例上,具有自动抢占恢复功能。尝试使用:

$ sky jobs launch --use-spot hello_sky.yaml

下一步#

恭喜!在这个快速入门中,您已经启动了一个集群,运行了一个任务,并与SkyPilot的CLI进行了交互。

下一步:

我们邀请您在文档的其余部分探索SkyPilot的独特功能。