在现有机器上部署SkyPilot#
本指南将帮助您在现有机器上部署SkyPilot——无论它们是本地机器还是云提供商的预留实例。
给定一个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上测试)
从本地机器通过基于密钥的认证和无密码sudo访问所有远程机器的SSH
所有机器必须使用相同的SSH密钥和用户名
所有机器必须能够相互访问网络
端口6443必须可以从您的本地机器访问至少一个节点
部署SkyPilot#
创建一个文件
ips.txt,其中包含您机器的IP地址,每行一个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 sky local up --ips $IP_FILE --ssh-user SSH_USER --ssh-key-path $SSH_KEY
SkyPilot 将在远程机器上部署一个 Kubernetes 集群,设置 GPU 支持,在您的本地机器上配置 Kubernetes 凭证,并设置 SkyPilot 以与新集群一起运行。
sky local up的示例输出:$ sky local up --ips ips.txt --ssh-user gcpuser --ssh-key-path ~/.ssh/id_rsa Found existing kube config. It will be backed up to ~/.kube/config.bak. 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 TOTAL_GPUS TOTAL_FREE_GPUS L4 1, 2, 4 12 12 H100 1, 2, 4, 8 16 16 Kubernetes per node GPU availability NODE_NAME GPU_NAME TOTAL_GPUS FREE_GPUS my-cluster-0 L4 4 4 my-cluster-1 L4 4 4 my-cluster-2 L4 2 2 my-cluster-3 L4 2 2 my-cluster-4 H100 8 8 my-cluster-5 H100 8 8 $ sky launch --cloud k8s --gpus H100:1 -- nvidia-smi
提示
你也可以使用
kubectl来与集群进行交互并执行管理操作。
幕后发生了什么?#
当你运行 sky local up 时,SkyPilot 会执行以下操作:
在远程机器上安装并运行k3s Kubernetes发行版作为systemd服务。
[如果存在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 --ip $IP_FILE --ssh-user SSH_USER --ssh-key-path $SSH_KEY --cleanup
这将停止远程机器上的所有Kubernetes服务。