团队部署#

SkyPilot 采用客户端-服务器架构。当用户运行命令或调用 SDK 时,SkyPilot 客户端向SkyPilot API 服务器提交异步请求,该服务器处理所有请求。

本地 API 服务器(个人用户)#

对于个人用户,SkyPilot 可以作为普通命令行工具使用。当运行 SkyPilot 命令且未检测到 API 服务器时,SkyPilot 会自动在后台启动一个本地运行的 SkyPilot API 服务器。无需用户操作。默认情况下,您可以通过 http://127.0.0.1:46580/dashboard 访问仪表盘。

SkyPilot API server local mode

远程 API 服务器(多用户团队)#

对于多用户团队,SkyPilot 可以部署为远程服务。组织中的多个用户可以共享同一个 SkyPilot API 服务器。这样做的好处包括:

  • 一次部署,无缝入职:设置一个 SkyPilot API 服务器(在云端或 Kubernetes 上),团队成员可以通过一个单一端点轻松入职。

  • 多租户:在团队成员之间安全地共享集群、作业和服务。

  • 统一视图和管理:在一个单一视图中查看组织内以及所有可用基础设施上运行的所有集群和作业。

  • 容错和云原生:SkyPilot API 服务器部署是云原生的,并且完全容错,消除了工作负载丢失的风险。

  • 与工作流编排器集成:使用编排器(如 Airflow 或 Temporal)调度工作流,并让 SkyPilot 管理您的多样化基础设施。

SkyPilot API server remote mode

开始使用远程 API 服务器#

👋 连接到 API 服务器

已经部署了 API 服务器?使用 sky api login 连接它。

⚙️ 部署 SkyPilot API 服务器

按照这些说明在您的基础设施上部署 API 服务器。

连接到 API 服务器#

部署 API 服务器后,您可以配置本地 SkyPilot 连接到它。我们建议为 SkyPilot 客户端使用 Python 3.9 或 3.10 环境。请参阅 uvconda 创建具有不同 Python 版本的环境。

在本地机器上安装 SkyPilot 客户端

$ pip install -U skypilot-nightly

运行 sky api login 连接到 API 服务器。

$ sky api login
Enter your SkyPilot API server endpoint: http://skypilot:[email protected]:30050

这将把 API 服务器端点保存到您的 ~/.sky/config.yaml 文件中。

要验证 API 服务器是否正常工作,运行 sky api info

$ sky api info
Using SkyPilot API server: http://127.0.0.1:46580 Dashboard: http://127.0.0.1:46580/dashboard
├── Status: healthy, commit: xxxxx, version: 1.0.0-dev0
└── User: skypilot-user (xxxxxx)

提示

您也可以使用 SKYPILOT_API_SERVER_ENDPOINT 环境变量设置 API 服务器端点。它将覆盖 ~/.sky/config.yaml 中设置的值。

$ export SKYPILOT_API_SERVER_ENDPOINT=http://skypilot:[email protected]:30050
$ sky api info
Using SkyPilot API server: http://myendpoint.com:30050 Dashboard: http://myendpoint.com:30050/dashboard
├── Status: healthy, commit: xxxxx, version: 1.0.0-dev0
└── User: skypilot-user (xxxxxx)

默认情况下,连接到 API 服务器的每个用户只能看到自己的资源。

要查看其他用户的集群以及作业/服务控制器,请使用 -u 标志。

$ sky status -u
Clusters
NAME                          USER        LAUNCHED      RESOURCES                         STATUS   AUTOSTOP  COMMAND
my-cluster-2                  my-user     2 hrs ago     1x GCP(n2-standard-8)             STOPPED  -         sky launch task-2.yaml
other-cluster                 other-user  1 week ago    1x AWS(m6i.16xlarge)              UP       -         sky launch --cloud aws...
my-cluster-1                  my-user     2 months ago  1x AWS(m6i.4xlarge)               STOPPED  -         sky launch task-1.yaml
sky-jobs-controller-7c3d4ff7  root        2 days ago    1x AWS(r6i.xlarge, disk_size=50)  STOPPED  10m       sky jobs launch --env PART...

$ sky jobs queue -u
Fetching managed job statuses...
Managed jobs
ID  TASK  NAME       USER        RESOURCES  SUBMITTED   TOT. DURATION  JOB DURATION  #RECOVERIES  STATUS
3   -     job-2      my-user     1x[CPU:2]  2 days ago  2m 10s         1m 14s        0            CANCELLED
2   -     other-job  other-user  1x[CPU:2]  2 days ago  11m 54s        10m 52s       0            CANCELLED
1   -     job-1      my-use      1x[CPU:2]  5 days ago  1m 7s          3s            0            SUCCEEDED