在现有机器上部署 SkyPilot#
本指南将帮助您在现有机器上部署 SkyPilot — 无论这些机器是本地的还是云提供商上的预留实例。
提示
要在您的本地机器上运行 SkyPilot,请使用 sky local up
通过 kind 部署一个 Kubernetes 集群。
给定 IP 地址列表和 SSH 凭据, SkyPilot 将在远程机器上安装必要的依赖项,并配置自身以在集群上运行作业和服务。

给定 IP 地址列表和 SSH 密钥,sky local up
将在远程机器上安装必要的依赖项,并配置 SkyPilot 以在集群上运行作业和服务。#

给定 IP 地址列表和 SSH 密钥,sky local up
将在远程机器上安装必要的依赖项,并配置 SkyPilot 以在集群上运行作业和服务。#
注意
在幕后,SkyPilot 使用 k3s 在远程机器上部署一个轻量级 Kubernetes 集群。
请注意,运行本指南不需要任何 Kubernetes 知识。 SkyPilot 抽象了 Kubernetes 的复杂性,并提供了一个简单的接口来运行您的作业和服务。
先决条件#
本地机器(通常是您的笔记本电脑)
远程机器(您的集群,可选带有 GPU)
基于 Debian 的操作系统(在 Debian 11 上测试)
从本地机器通过基于密钥的身份验证访问所有远程机器的 SSH 权限
建议所有远程机器都使用无密码 sudo。如果无法使用无密码 sudo,则所有机器必须使用相同的 SSH 用户名和密码才能使用 sudo。
所有机器必须使用相同的 SSH 密钥和用户名
所有机器必须能够相互访问网络
您的本地机器必须至少能访问一个节点的 6443 端口
部署 SkyPilot#
创建一个名为
ips.txt
的文件,每行包含一个机器的 IP 地址。第一个节点将用作头节点 — 您的本地机器必须能够访问该节点的 6443 端口。以下是一个
ips.txt
示例文件192.168.1.1 192.168.1.2 192.168.1.3
在此示例中,第一个节点 (
192.168.1.1
) 的 6443 端口已打开,并将用作头节点。运行
sky local up
并将ips.txt
文件、SSH 用户名和 SSH 密钥作为参数传递IP_FILE=ips.txt SSH_USER=username SSH_KEY=path/to/ssh/key CONTEXT_NAME=mycluster # Optional, sets the context name in the kubeconfig. Defaults to "default". sky local up --ips $IP_FILE --ssh-user $SSH_USER --ssh-key-path $SSH_KEY --context-name $CONTEXT_NAME
提示
如果您的集群没有无密码 sudo,请使用
--password
选项指定 sudo 密码PASSWORD=password sky local up --ips $IP_FILE --ssh-user $SSH_USER --ssh-key-path $SSH_KEY --context-name $CONTEXT_NAME --password $PASSWORD
SkyPilot 将在远程机器上部署一个 Kubernetes 集群,设置 GPU 支持,在您的本地机器上配置 Kubernetes 凭据,并设置 SkyPilot 以使用新的集群进行操作。
sky local up
的示例输出$ sky local up --ips ips.txt --ssh-user gcpuser --ssh-key-path ~/.ssh/id_rsa --context-name mycluster To view detailed progress: tail -n100 -f ~/sky_logs/sky-2024-09-23-18-53-14-165534/local_up.log ✔ K3s successfully deployed on head node. ✔ K3s successfully deployed on worker node. ✔ kubectl configured for the remote cluster. ✔ Remote k3s is running. ✔ Nvidia GPU Operator installed successfully. Cluster deployment done. You can now run tasks on this cluster. E.g., run a task with: sky launch --cloud kubernetes -- echo hello world. 🎉 Remote cluster deployed successfully.
要验证集群是否正在运行,请运行
sky check kubernetes
您现在可以使用 SkyPilot 在您自己的基础设施上启动您的开发集群和训练作业。
$ sky show-gpus --cloud k8s Kubernetes GPUs GPU REQUESTABLE_QTY_PER_NODE UTILIZATION L4 1, 2, 4 12 of 12 H100 1, 2, 4, 8 16 of 16 Kubernetes per node GPU availability NODE GPU UTILIZATION my-cluster-0 L4 4 of 4 my-cluster-1 L4 4 of 4 my-cluster-2 L4 2 of 2 my-cluster-3 L4 2 of 2 my-cluster-4 H100 8 of 8 my-cluster-5 H100 8 of 8 $ sky launch --cloud k8s --gpus H100:1 -- nvidia-smi
提示
为了实现对 Kubernetes 集群的共享访问,您可以部署一个SkyPilot API 服务器。
幕后发生了什么?#
当您运行 sky local up
时,SkyPilot 会执行以下操作
在远程机器上安装并以 systemd 服务形式运行 k3s Kubernetes 分发版。
[如果存在 GPU] 在新配置的 k3s 集群上安装 Nvidia GPU Operator。请注意,此步骤不会修改您的本地 nvidia 驱动程序/cuda 安装,仅在集群内部运行。
通过 6443 端口在头节点上暴露 Kubernetes API 服务器。此端口上的 API 调用使用集群生成的密钥对进行保护。
在您的本地机器上配置
kubectl
以连接到远程集群。
清理#
要清理 SkyPilot 在您的机器上创建的所有状态,请使用 --cleanup
标志
IP_FILE=ips.txt
SSH_USER=username
SSH_KEY=path/to/ssh/key
sky local up --ips $IP_FILE --ssh-user $SSH_USER --ssh-key-path $SSH_KEY --cleanup
提示
如果您的集群没有无密码 sudo,请使用 --password
选项指定 sudo 密码
PASSWORD=password
sky local up --ips $IP_FILE --ssh-user $SSH_USER --ssh-key-path $SSH_KEY --password $PASSWORD --cleanup
这将停止远程机器上的所有 Kubernetes 服务。
设置多个集群#
您可以通过为每个集群使用不同的 context-name
值来使用 SkyPilot 设置多个 Kubernetes 集群
# Set up first cluster and save the kubeconfig
sky local up --ips cluster1-ips.txt --ssh-user user1 --ssh-key-path key1.pem --context-name cluster1
# Set up second cluster
sky local up --ips cluster2-ips.txt --ssh-user user2 --ssh-key-path key2.pem --context-name cluster2
然后,通过将它们添加到 ~/.sky/config.yaml
文件中的 allowed_contexts
,您可以配置 SkyPilot 以使用多个 Kubernetes 集群
# ~/.sky/config.yaml
allowed_contexts:
- cluster1
- cluster2
# Run on cluster1
sky launch --cloud k8s --region cluster1 -- echo "Running on cluster 1"
# Run on cluster2
sky launch --cloud k8s --region cluster2 -- echo "Running on cluster 2"
# Let SkyPilot automatically select the cluster with available resources
sky launch --cloud k8s -- echo "Running on SkyPilot selected cluster"
您可以使用以下命令查看可用的集群和 GPU
# List GPUs on cluster1
sky show-gpus --cloud k8s --region cluster1
# List GPUs on cluster2
sky show-gpus --cloud k8s --region cluster2