在现有机器上部署SkyPilot#

本指南将帮助您在现有机器上部署SkyPilot——无论它们是本地机器还是云提供商的预留实例。

给定一个IP地址列表和SSH凭据, SkyPilot 将在远程机器上安装必要的依赖项,并配置自身以在集群上运行作业和服务。

Deploying SkyPilot on existing machines

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

Deploying SkyPilot on existing machines

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

注意

在幕后,SkyPilot 使用 k3s 在远程机器上部署了一个轻量级的 Kubernetes 集群。

请注意,运行本指南不需要Kubernetes知识。 SkyPilot 抽象了 Kubernetes 的复杂性,并提供了一个简单的界面来运行您的作业和服务。

先决条件#

本地机器(通常是您的笔记本电脑):

远程机器(您的集群,可选带有GPU):

  • 基于Debian的操作系统(已在Debian 11上测试)

  • 从本地机器通过基于密钥的认证和无密码sudo访问所有远程机器的SSH

  • 所有机器必须使用相同的SSH密钥和用户名

  • 所有机器必须能够相互访问网络

  • 端口6443必须可以从您的本地机器访问至少一个节点

部署SkyPilot#

  1. 创建一个文件 ips.txt,其中包含您机器的IP地址,每行一个IP。 第一个节点将用作头节点——此节点必须可以从您的本地机器访问端口6443。

    这是一个示例 ips.txt 文件:

    192.168.1.1
    192.168.1.2
    192.168.1.3
    

    在这个例子中,第一个节点(192.168.1.1)打开了端口6443,并将被用作头节点。

  2. 运行 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.
    
  1. 要验证集群是否正在运行,请运行:

    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 会执行以下操作:

  1. 在远程机器上安装并运行k3s Kubernetes发行版作为systemd服务。

  2. [如果存在GPU] 在新配置的k3s集群上安装Nvidia GPU Operator。请注意,此步骤不会修改您本地的nvidia驱动程序/cuda安装,仅在集群内部运行。

  3. 在头节点上通过端口6443暴露Kubernetes API服务器。此端口上的API调用通过集群生成的密钥对进行保护。

  4. 在您的本地机器上配置 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服务。