快速入门#

本指南将带领您了解如何

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

  • 配置集群并运行任务

  • 使用核心 SkyPilot CLI 命令

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

Hello, 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

此处列出了所有可能的集群状态

访问仪表盘#

SkyPilot 提供了一个用于查看所有 SkyPilot 启动的集群和作业的仪表盘。要打开仪表盘,运行 sky dashboard,它将自动在浏览器中打开一个仪表盘标签页。

从源码安装 SkyPilot 时启动仪表盘

如果您从源码安装 SkyPilot,在启动 API 服务器之前

  • 运行以下命令生成仪表盘构建

# Install all dependencies
$ npm --prefix sky/dashboard install
# Build
$ npm --prefix sky/dashboard run build
  • 使用 sky dashboard 启动仪表盘。

集群页面示例

Clusters dashboard

托管作业页面示例

Managed jobs dashboard

通过 SSH 连接到集群#

只需运行 ssh <cluster_name> 即可登录集群

$ 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

有关上传文件到集群的信息,请参阅同步代码和 Artifacts

停止/终止集群#

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

$ sky stop mycluster

要终止集群,请运行 sky down

$ sky down mycluster

注意

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

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

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

横向扩展#

到目前为止,我们使用 SkyPilot 的 CLI 向单个集群提交工作并与之交互。当您准备好进行横向扩展(例如,运行数十、数百或数千个作业)时,使用托管作业在自动管理的集群上运行,甚至可以使用 spot 实例。

$ for i in $(seq 100) # launch 100 jobs
    do sky jobs launch --use-spot --detach-run --yes -n hello-$i hello_sky.yaml
  done
...
$ sky jobs dashboard # check the jobs status
Managed jobs dashboard

SkyPilot 支持同时运行数千个托管作业

异步执行#

所有 SkyPilot CLI 和 API 都是异步请求,这意味着您可以随时中断它们,让它们在后台运行。例如,如果您 KeyInterrupt(按下 Ctrl+C)sky launch 命令,集群将继续在后台进行配置

$ sky launch -c mycluster hello_sky.yaml
^C
⚙︎ Request will continue running asynchronously.
├── View logs: sky api logs 73d316ac
├── Or, visit: http://127.0.0.1:46580/api/stream?request_id=73d316ac
└── To cancel the request, run: sky api cancel 73d316ac

更多详细信息请参阅异步执行

后续步骤#

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

后续步骤

我们邀请您在剩余文档中探索 SkyPilot 的独特功能。