安装#
注意
对于Mac电脑,安装SkyPilot需要macOS版本大于等于10.15。基于Apple Silicon的设备(例如Apple M1)在安装SkyPilot之前必须运行pip uninstall grpcio; conda install -c conda-forge grpcio=1.43.0。
使用 pip 安装 SkyPilot:
# Recommended: use a new conda env to avoid package conflicts.
# SkyPilot requires 3.7 <= python <= 3.11.
conda create -y -n sky python=3.10
conda activate sky
# Choose your cloud:
pip install "skypilot[aws]"
pip install "skypilot[gcp]"
pip install "skypilot[azure]"
pip install "skypilot[oci]"
pip install "skypilot[lambda]"
pip install "skypilot[runpod]"
pip install "skypilot[fluidstack]"
pip install "skypilot[paperspace]"
pip install "skypilot[cudo]"
pip install "skypilot[ibm]"
pip install "skypilot[scp]"
pip install "skypilot[vsphere]"
pip install "skypilot[kubernetes]"
pip install "skypilot[all]"
# Recommended: use a new conda env to avoid package conflicts.
# SkyPilot requires 3.7 <= python <= 3.11.
conda create -y -n sky python=3.10
conda activate sky
# Choose your cloud:
pip install "skypilot-nightly[aws]"
pip install "skypilot-nightly[gcp]"
pip install "skypilot-nightly[azure]"
pip install "skypilot-nightly[oci]"
pip install "skypilot-nightly[lambda]"
pip install "skypilot-nightly[runpod]"
pip install "skypilot-nightly[fluidstack]"
pip install "skypilot-nightly[paperspace]"
pip install "skypilot-nightly[do]"
pip install "skypilot-nightly[cudo]"
pip install "skypilot-nightly[ibm]"
pip install "skypilot-nightly[scp]"
pip install "skypilot-nightly[vsphere]"
pip install "skypilot-nightly[kubernetes]"
pip install "skypilot-nightly[all]"
# Recommended: use a new conda env to avoid package conflicts.
# SkyPilot requires 3.7 <= python <= 3.11.
conda create -y -n sky python=3.10
conda activate sky
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot
# Choose your cloud:
pip install -e ".[aws]"
pip install -e ".[gcp]"
pip install -e ".[azure]"
pip install -e ".[oci]"
pip install -e ".[lambda]"
pip install -e ".[runpod]"
pip install -e ".[fluidstack]"
pip install -e ".[paperspace]"
pip install -e ".[cudo]"
pip install -e ".[ibm]"
pip install -e ".[scp]"
pip install -e ".[vsphere]"
pip install -e ".[kubernetes]"
pip install -e ".[all]"
要使用多个云,请组合 pip 附加功能:
pip install -U "skypilot[aws,gcp]"
pip install -U "skypilot-nightly[aws,gcp]"
pip install -e ".[aws,gcp]"
另外,我们还提供了一个Docker镜像作为快速尝试SkyPilot的方法。
验证云访问#
安装后,运行 sky check 以验证凭据是否正确设置:
sky check
这将产生一个类似于以下的摘要:
Checking credentials to enable clouds for SkyPilot.
AWS: enabled
GCP: enabled
Azure: enabled
OCI: enabled
Lambda: enabled
RunPod: enabled
Paperspace: enabled
Fluidstack: enabled
Cudo: enabled
IBM: enabled
SCP: enabled
vSphere: enabled
Cloudflare (for R2 object store): enabled
Kubernetes: enabled
SkyPilot will use only the enabled clouds to run tasks. To change this, configure cloud credentials, and run sky check.
如果缺少任何云的凭据或依赖项,sky check 将输出如何解决它们的提示。您也可以参考下面的云设置部分 below。
提示
如果你的云显示 enabled — 🎉 🎉 恭喜你! 🎉 🎉 你现在可以前往
Quickstart 开始使用 SkyPilot。
提示
要仅检查特定云的凭据,请将云作为参数传递:sky check aws gcp
云账户设置#
SkyPilot 目前支持这些云服务提供商:AWS、GCP、Azure、OCI、Lambda Cloud、RunPod、Fluidstack、Paperspace、Cudo、IBM、SCP、VMware vSphere 和 Cloudflare(用于 R2 对象存储)。
如果您已经在本地机器上设置了云访问,请运行 sky check 以 验证 SkyPilot 是否可以正确访问您启用的云服务。
否则,请按照以下指南配置至少一个云的访问权限。
亚马逊网络服务 (AWS)#
要获取aws configure所需的AWS访问密钥,请前往AWS IAM管理控制台并点击“访问密钥”下拉菜单(详细说明此处)。默认区域名称 [无]: 和 默认输出格式 [无]: 字段是可选的,可以留空以选择默认值。
# Install boto
pip install boto3
# Configure your AWS credentials
aws configure
要使用AWS IAM Identity Center(AWS SSO),请参阅这里获取说明。
可选:要为SkyPilot创建一个具有最小权限的新AWS用户,请参阅AWS用户创建。
谷歌云平台 (GCP)#
conda install -c conda-forge google-cloud-sdk
gcloud init
# Run this if you don't have a credentials file.
# This will generate ~/.config/gcloud/application_default_credentials.json.
gcloud auth application-default login
提示
如果您正在使用多个GCP项目,请通过gcloud projects list列出所有项目,并通过gcloud config set project 激活一个项目(参见GCP文档)。
Common GCP installation errors
以下是一些常见的错误及其修复方法:
RemoveError: 'requests' 是 conda 的依赖项,无法从 conda 的操作环境中移除当运行conda install -c conda-forge google-cloud-sdk时 — 先运行conda update --force conda然后重新运行命令。Authorization Error (Error 400: invalid_request)与由gcloud auth login生成的URL — 在本地机器(打开了浏览器的机器)上安装最新版本的 Google Cloud SDK(例如,使用conda install -c conda-forge google-cloud-sdk),然后重新运行命令。
可选:要在本地机器上创建并使用长期有效的服务账户,请参见这里。
可选:要为SkyPilot创建一个具有最小权限的新GCP用户,请参阅GCP用户创建。
Azure#
# Login
az login
# Set the subscription to use
az account set -s <subscription_id>
提示:运行 az account subscription list 以获取您账户下的订阅ID列表。
Oracle 云基础设施 (OCI)#
要访问Oracle云基础设施(OCI),请按照本指南设置凭证。完成指南中的步骤后,~/.oci文件夹应包含以下文件:
~/.oci/config
~/.oci/oci_api_key.pem
~/.oci/config 文件应包含以下字段:
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaa
fingerprint=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn:oo:pp
tenancy=ocid1.tenancy.oc1..aaaaaaaa
region=us-sanjose-1
# Note that we should avoid using full home path for the key_file configuration, e.g. use ~/.oci instead of /home/username/.oci
key_file=~/.oci/oci_api_key.pem
默认情况下,配置的节点将位于根compartment中。要指定非根的compartment,请创建/编辑文件~/.sky/config.yaml,将compartment的OCID放入其中,如下所示:
oci:
default:
compartment_ocid: ocid1.compartment.oc1..aaaaaaaa......
Lambda 云#
Lambda Cloud 是一家提供低成本GPU的云服务提供商。要配置Lambda Cloud访问权限,请前往Lambda控制台的API Keys页面生成一个密钥,然后将其添加到~/.lambda_cloud/lambda_keys中:
mkdir -p ~/.lambda_cloud
echo "api_key = <your_api_key_here>" > ~/.lambda_cloud/lambda_keys
论文空间#
Paperspace 是一个云服务提供商,提供对GPU加速虚拟机的访问。要配置Paperspace访问,请按照这些说明生成API密钥。使用以下方式添加API密钥:
mkdir -p ~/.paperspace
echo "{'api_key' : <your_api_key_here>}" > ~/.paperspace/config.json
RunPod#
RunPod 是一家专门提供低成本 GPU 的 AI 云服务提供商。要配置 RunPod 访问权限,请前往 RunPod 控制台的 设置 页面并生成一个 API 密钥。然后,运行:
pip install "runpod>=1.5.1"
runpod config
Fluidstack#
Fluidstack 是一家提供低成本 GPU 的云服务提供商。要配置 Fluidstack 访问权限,请前往 Fluidstack 控制台的 主页 生成 API 密钥,然后将 API key 添加到 ~/.fluidstack/api_key 中:
mkdir -p ~/.fluidstack
echo "your_api_key_here" > ~/.fluidstack/api_key
Cudo 计算#
Cudo Compute 提供由绿色能源驱动的低成本GPU。
创建一个计费账户。
创建一个项目。
创建一个API Key。
下载并安装cudoctl命令行工具
运行
cudoctl init:cudoctl init ✔ api key: my-api-key ✔ project: my-project ✔ billing account: my-billing-account ✔ context: default config file saved ~/.config/cudo/cudo.yml pip install "cudo-compute>=0.1.10"
如果你想使用不同的Cudo Compute账户或项目来使用SkyPilot,请再次运行cudoctl init。
IBM#
要访问IBM的VPC服务,请将以下字段存储在~/.ibm/credentials.yaml中:
iam_api_key: <user_personal_api_key>
resource_group_id: <resource_group_user_is_a_member_of>
注意
目前,库存镜像并未提供开箱即用的ML工具。 通过遵循此文档中的IBM部分,创建包含必要工具(例如CUDA)的私有镜像。
要访问IBM的云对象存储(COS),请将以下字段附加到凭据文件中:
access_key_id: <access_key_id>
secret_access_key: <secret_key_id>
要获取 access_key_id 和 secret_access_key,请使用 IBM 网页控制台:
从web控制台创建/选择一个COS实例。
从“服务凭证”选项卡中,点击“新建凭证”并切换“包含HMAC凭证”。
将“secret_access_key”和“access_key_id”复制到文件中。
最后,通过以下方式安装 rclone:curl https://rclone.org/install.sh | sudo bash
注意
sky check 不反映 IBM COS 的启用状态。IBM: enabled 仅保证 IBM VM 实例已启用。
三星云平台 (SCP)#
三星云平台(SCP)为企业客户提供优化的云服务。您可以在此了解更多关于SCP的信息。
要配置SCP访问,您需要访问密钥和您的任务将运行的项目的ID。前往SCP控制台上的访问密钥管理页面生成访问密钥,并前往项目概览页面获取项目ID。然后,通过运行以下命令将它们添加到~/.scp/scp_credential中:
# Create directory if required
mkdir -p ~/.scp
# Add the lines for "access_key", "secret_key", and "project_id" to scp_credential file
echo "access_key = <your_access_key>" >> ~/.scp/scp_credential
echo "secret_key = <your_secret_key>" >> ~/.scp/scp_credential
echo "project_id = <your_project_id>" >> ~/.scp/scp_credential
注意
SCP目前不支持多节点集群。
VMware vSphere#
要配置VMware vSphere访问,请将vSphere凭据存储在~/.vsphere/credential.yaml中:
mkdir -p ~/.vsphere
touch ~/.vsphere/credential.yaml
以下是凭证文件中的配置示例:
vcenters:
- name: <your_vsphere_server_ip_01>
username: <your_vsphere_user_name>
password: <your_vsphere_user_passwd>
skip_verification: true # If your vcenter have valid certificate then change to 'false' here
# Clusters that can be used by SkyPilot:
# [] means all the clusters in the vSphere can be used by Skypilot
# Instead, you can specify the clusters in a list:
# clusters:
# - name: <your_vsphere_cluster_name1>
# - name: <your_vsphere_cluster_name2>
clusters: []
# If you are configuring only one vSphere instance, omit the following line.
- name: <your_vsphere_server_ip_02>
username: <your_vsphere_user_name>
password: <your_vsphere_user_passwd>
skip_verification: true
clusters: []
配置vSphere凭据后,请确保完成vSphere的必要准备工作。请参阅本指南以获取更多信息:Cloud Preparation for vSphere
Cloudflare R2#
Cloudflare 提供 R2,一种与 S3 兼容的对象存储,没有任何出口费用。 SkyPilot 可以下载/上传数据到 R2 存储桶,并将它们挂载为 SkyPilot 启动的集群上的本地文件系统。要设置 R2 支持,请运行:
# Install boto
pip install boto3
# Configure your R2 credentials
AWS_SHARED_CREDENTIALS_FILE=~/.cloudflare/r2.credentials aws configure --profile r2
在提示中,输入您的 R2 访问密钥 ID 和秘密访问密钥(参见生成 R2 凭证的说明)。选择 auto 作为默认区域,选择 json 作为默认输出格式。
AWS Access Key ID [None]: <access_key_id>
AWS Secret Access Key [None]: <access_key_secret>
Default region name [None]: auto
Default output format [None]: json
接下来,从您的R2仪表板获取您的Account ID并将其存储在~/.cloudflare/accountid中,使用以下命令:
mkdir -p ~/.cloudflare
echo <YOUR_ACCOUNT_ID_HERE> > ~/.cloudflare/accountid
Kubernetes#
SkyPilot 也可以在本地或云托管的 Kubernetes 集群(例如,EKS、GKE)上运行任务。唯一的要求是在 ~/.kube/config 处有一个有效的 kubeconfig。
# Place your kubeconfig at ~/.kube/config
mkdir -p ~/.kube
cp /path/to/kubeconfig ~/.kube/config
更多信息请参见SkyPilot on Kubernetes。
首次用户申请配额#
如果您的云账户之前没有用于启动实例,相应的配额可能设置为零或较低的限制。对于GPU实例尤其如此。
请按照请求配额增加来检查配额并在继续之前请求配额增加。
快速替代方案:在Docker中尝试#
作为在笔记本电脑上安装SkyPilot的快速替代方案,我们还提供了一个Docker镜像,其中自动克隆了SkyPilot的主分支。 你可以简单地运行:
# NOTE: '--platform linux/amd64' is needed for Apple silicon Macs
docker run --platform linux/amd64 \
-td --rm --name sky \
-v "$HOME/.sky:/root/.sky:rw" \
-v "$HOME/.aws:/root/.aws:rw" \
-v "$HOME/.config/gcloud:/root/.config/gcloud:rw" \
berkeleyskypilot/skypilot
docker exec -it sky /bin/bash
如果您的云CLI已经设置好,您的凭证(AWS和GCP)将被挂载到容器中,您可以继续到快速开始。否则,您可以按照容器内的云账户设置中的说明来设置您的云账户。
一旦你完成了对SkyPilot的实验,记得删除你可能使用以下命令创建的任何集群和存储资源:
# Run inside the container:
sky down -a -y
sky storage delete -a -y
最后,您可以使用以下命令停止容器:
docker stop sky
查看有关开发容器镜像 berkeleyskypilot/skypilot-nightly 的更多详细信息 这里。
启用Shell自动补全#
SkyPilot 支持 Bash(版本 4.4 及以上)、Zsh 和 Fish 的 shell 自动补全。这仅适用于 click 版本 8.0 及以上(使用 pip install click==8.0.4 进行安装)。
安装SkyPilot后,要启用shell自动补全,您需要修改您的shell配置。
SkyPilot使用--install-shell-completion选项自动完成此过程,您应该使用适当的shell名称或auto来调用它:
sky --install-shell-completion auto
# sky --install-shell-completion zsh
# sky --install-shell-completion bash
# sky --install-shell-completion fish
在某些shell和机器上,Shell补全可能表现不佳。
如果在安装后遇到任何问题,您可以使用--uninstall-shell-completion选项来卸载它,您应该同样使用适当的shell名称或auto来调用它:
sky --uninstall-shell-completion auto
# sky --uninstall-shell-completion zsh
# sky --uninstall-shell-completion bash
# sky --uninstall-shell-completion fish