Metadata-Version: 2.4
Name: skypilot
Version: 0.12.2rc1
Summary: SkyPilot: Manage all your AI compute.
Author: SkyPilot Team
License: Apache 2.0
Project-URL: Homepage, https://github.com/skypilot-org/skypilot
Project-URL: Issues, https://github.com/skypilot-org/skypilot/issues
Project-URL: Discussion, https://github.com/skypilot-org/skypilot/discussions
Project-URL: Documentation, https://docs.skypilot.co/
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Distributed Computing
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: wheel>=0.46.3
Requires-Dist: setuptools
Requires-Dist: pip
Requires-Dist: cachetools
Requires-Dist: click<8.2.0,>=7.0
Requires-Dist: colorama
Requires-Dist: cryptography
Requires-Dist: jinja2>=3.0
Requires-Dist: jsonschema
Requires-Dist: networkx
Requires-Dist: pandas>=1.3.0
Requires-Dist: pendulum
Requires-Dist: PrettyTable>=2.0.0
Requires-Dist: python-dotenv
Requires-Dist: rich
Requires-Dist: tabulate
Requires-Dist: tqdm
Requires-Dist: typing_extensions
Requires-Dist: filelock>=3.15.0
Requires-Dist: packaging
Requires-Dist: psutil
Requires-Dist: pulp
Requires-Dist: pyyaml!=5.4.*,>3.13
Requires-Dist: ijson
Requires-Dist: orjson
Requires-Dist: requests
Requires-Dist: uvicorn[standard]<0.36.0,>=0.33.0
Requires-Dist: fastapi
Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3,>2
Requires-Dist: python-multipart
Requires-Dist: aiofiles
Requires-Dist: httpx
Requires-Dist: setproctitle
Requires-Dist: sqlalchemy>=2.0.0
Requires-Dist: psycopg2-binary
Requires-Dist: aiosqlite
Requires-Dist: asyncpg
Requires-Dist: greenlet
Requires-Dist: casbin
Requires-Dist: sqlalchemy_adapter
Requires-Dist: prometheus_client>=0.8.0
Requires-Dist: passlib
Requires-Dist: bcrypt==4.0.1
Requires-Dist: pyjwt
Requires-Dist: gitpython
Requires-Dist: paramiko
Requires-Dist: types-paramiko
Requires-Dist: alembic>=1.8.0
Requires-Dist: aiohttp>=3.13.3
Requires-Dist: anyio
Provides-Extra: aws
Requires-Dist: awscli>=1.27.10; extra == "aws"
Requires-Dist: botocore>=1.29.10; extra == "aws"
Requires-Dist: boto3>=1.26.1; extra == "aws"
Requires-Dist: colorama<0.4.7; extra == "aws"
Requires-Dist: casbin; extra == "aws"
Requires-Dist: sqlalchemy_adapter; extra == "aws"
Requires-Dist: passlib; extra == "aws"
Requires-Dist: pyjwt; extra == "aws"
Requires-Dist: aiohttp; extra == "aws"
Requires-Dist: anyio; extra == "aws"
Requires-Dist: grpcio>=1.63.0; extra == "aws"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "aws"
Requires-Dist: aiosqlite; extra == "aws"
Provides-Extra: azure
Requires-Dist: azure-cli>=2.65.0; extra == "azure"
Requires-Dist: azure-core>=1.31.0; extra == "azure"
Requires-Dist: azure-identity>=1.19.0; extra == "azure"
Requires-Dist: azure-mgmt-network>=27.0.0; extra == "azure"
Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "azure"
Requires-Dist: azure-storage-blob>=12.23.1; extra == "azure"
Requires-Dist: msgraph-sdk; extra == "azure"
Requires-Dist: msrestazure; extra == "azure"
Requires-Dist: casbin; extra == "azure"
Requires-Dist: sqlalchemy_adapter; extra == "azure"
Requires-Dist: passlib; extra == "azure"
Requires-Dist: pyjwt; extra == "azure"
Requires-Dist: aiohttp; extra == "azure"
Requires-Dist: anyio; extra == "azure"
Requires-Dist: grpcio>=1.63.0; extra == "azure"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "azure"
Requires-Dist: aiosqlite; extra == "azure"
Provides-Extra: gcp
Requires-Dist: google-api-python-client>=2.69.0; extra == "gcp"
Requires-Dist: google-cloud-storage; extra == "gcp"
Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "gcp"
Requires-Dist: casbin; extra == "gcp"
Requires-Dist: sqlalchemy_adapter; extra == "gcp"
Requires-Dist: passlib; extra == "gcp"
Requires-Dist: pyjwt; extra == "gcp"
Requires-Dist: aiohttp; extra == "gcp"
Requires-Dist: anyio; extra == "gcp"
Requires-Dist: grpcio>=1.63.0; extra == "gcp"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "gcp"
Requires-Dist: aiosqlite; extra == "gcp"
Provides-Extra: ibm
Requires-Dist: ibm-cloud-sdk-core; extra == "ibm"
Requires-Dist: ibm-vpc; extra == "ibm"
Requires-Dist: ibm-platform-services>=0.48.0; extra == "ibm"
Requires-Dist: ibm-cos-sdk; extra == "ibm"
Requires-Dist: ray[default]>=2.6.1; extra == "ibm"
Requires-Dist: casbin; extra == "ibm"
Requires-Dist: sqlalchemy_adapter; extra == "ibm"
Requires-Dist: passlib; extra == "ibm"
Requires-Dist: pyjwt; extra == "ibm"
Requires-Dist: aiohttp; extra == "ibm"
Requires-Dist: anyio; extra == "ibm"
Requires-Dist: grpcio>=1.63.0; extra == "ibm"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "ibm"
Requires-Dist: aiosqlite; extra == "ibm"
Provides-Extra: docker
Requires-Dist: docker; extra == "docker"
Requires-Dist: ray[default]>=2.6.1; extra == "docker"
Requires-Dist: casbin; extra == "docker"
Requires-Dist: sqlalchemy_adapter; extra == "docker"
Requires-Dist: passlib; extra == "docker"
Requires-Dist: pyjwt; extra == "docker"
Requires-Dist: aiohttp; extra == "docker"
Requires-Dist: anyio; extra == "docker"
Requires-Dist: grpcio>=1.63.0; extra == "docker"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "docker"
Requires-Dist: aiosqlite; extra == "docker"
Provides-Extra: lambda
Requires-Dist: casbin; extra == "lambda"
Requires-Dist: sqlalchemy_adapter; extra == "lambda"
Requires-Dist: passlib; extra == "lambda"
Requires-Dist: pyjwt; extra == "lambda"
Requires-Dist: aiohttp; extra == "lambda"
Requires-Dist: anyio; extra == "lambda"
Requires-Dist: grpcio>=1.63.0; extra == "lambda"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "lambda"
Requires-Dist: aiosqlite; extra == "lambda"
Provides-Extra: cloudflare
Requires-Dist: awscli>=1.27.10; extra == "cloudflare"
Requires-Dist: botocore>=1.29.10; extra == "cloudflare"
Requires-Dist: boto3>=1.26.1; extra == "cloudflare"
Requires-Dist: colorama<0.4.7; extra == "cloudflare"
Requires-Dist: casbin; extra == "cloudflare"
Requires-Dist: sqlalchemy_adapter; extra == "cloudflare"
Requires-Dist: passlib; extra == "cloudflare"
Requires-Dist: pyjwt; extra == "cloudflare"
Requires-Dist: aiohttp; extra == "cloudflare"
Requires-Dist: anyio; extra == "cloudflare"
Requires-Dist: grpcio>=1.63.0; extra == "cloudflare"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "cloudflare"
Requires-Dist: aiosqlite; extra == "cloudflare"
Provides-Extra: coreweave
Requires-Dist: awscli>=1.27.10; extra == "coreweave"
Requires-Dist: botocore>=1.29.10; extra == "coreweave"
Requires-Dist: boto3>=1.26.1; extra == "coreweave"
Requires-Dist: colorama<0.4.7; extra == "coreweave"
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "coreweave"
Requires-Dist: websockets; extra == "coreweave"
Requires-Dist: python-dateutil; extra == "coreweave"
Requires-Dist: casbin; extra == "coreweave"
Requires-Dist: sqlalchemy_adapter; extra == "coreweave"
Requires-Dist: passlib; extra == "coreweave"
Requires-Dist: pyjwt; extra == "coreweave"
Requires-Dist: aiohttp; extra == "coreweave"
Requires-Dist: anyio; extra == "coreweave"
Requires-Dist: grpcio>=1.63.0; extra == "coreweave"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "coreweave"
Requires-Dist: aiosqlite; extra == "coreweave"
Provides-Extra: scp
Requires-Dist: ray[default]>=2.6.1; extra == "scp"
Requires-Dist: casbin; extra == "scp"
Requires-Dist: sqlalchemy_adapter; extra == "scp"
Requires-Dist: passlib; extra == "scp"
Requires-Dist: pyjwt; extra == "scp"
Requires-Dist: aiohttp; extra == "scp"
Requires-Dist: anyio; extra == "scp"
Requires-Dist: grpcio>=1.63.0; extra == "scp"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "scp"
Requires-Dist: aiosqlite; extra == "scp"
Provides-Extra: oci
Requires-Dist: oci; extra == "oci"
Requires-Dist: casbin; extra == "oci"
Requires-Dist: sqlalchemy_adapter; extra == "oci"
Requires-Dist: passlib; extra == "oci"
Requires-Dist: pyjwt; extra == "oci"
Requires-Dist: aiohttp; extra == "oci"
Requires-Dist: anyio; extra == "oci"
Requires-Dist: grpcio>=1.63.0; extra == "oci"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "oci"
Requires-Dist: aiosqlite; extra == "oci"
Provides-Extra: kubernetes
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "kubernetes"
Requires-Dist: websockets; extra == "kubernetes"
Requires-Dist: python-dateutil; extra == "kubernetes"
Requires-Dist: casbin; extra == "kubernetes"
Requires-Dist: sqlalchemy_adapter; extra == "kubernetes"
Requires-Dist: passlib; extra == "kubernetes"
Requires-Dist: pyjwt; extra == "kubernetes"
Requires-Dist: aiohttp; extra == "kubernetes"
Requires-Dist: anyio; extra == "kubernetes"
Requires-Dist: grpcio>=1.63.0; extra == "kubernetes"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "kubernetes"
Requires-Dist: aiosqlite; extra == "kubernetes"
Provides-Extra: ssh
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "ssh"
Requires-Dist: websockets; extra == "ssh"
Requires-Dist: python-dateutil; extra == "ssh"
Requires-Dist: casbin; extra == "ssh"
Requires-Dist: sqlalchemy_adapter; extra == "ssh"
Requires-Dist: passlib; extra == "ssh"
Requires-Dist: pyjwt; extra == "ssh"
Requires-Dist: aiohttp; extra == "ssh"
Requires-Dist: anyio; extra == "ssh"
Requires-Dist: grpcio>=1.63.0; extra == "ssh"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "ssh"
Requires-Dist: aiosqlite; extra == "ssh"
Provides-Extra: runpod
Requires-Dist: runpod>=1.6.1; extra == "runpod"
Requires-Dist: tomli; extra == "runpod"
Requires-Dist: pycares<5; extra == "runpod"
Requires-Dist: casbin; extra == "runpod"
Requires-Dist: sqlalchemy_adapter; extra == "runpod"
Requires-Dist: passlib; extra == "runpod"
Requires-Dist: pyjwt; extra == "runpod"
Requires-Dist: aiohttp; extra == "runpod"
Requires-Dist: anyio; extra == "runpod"
Requires-Dist: grpcio>=1.63.0; extra == "runpod"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "runpod"
Requires-Dist: aiosqlite; extra == "runpod"
Provides-Extra: fluidstack
Requires-Dist: casbin; extra == "fluidstack"
Requires-Dist: sqlalchemy_adapter; extra == "fluidstack"
Requires-Dist: passlib; extra == "fluidstack"
Requires-Dist: pyjwt; extra == "fluidstack"
Requires-Dist: aiohttp; extra == "fluidstack"
Requires-Dist: anyio; extra == "fluidstack"
Requires-Dist: grpcio>=1.63.0; extra == "fluidstack"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "fluidstack"
Requires-Dist: aiosqlite; extra == "fluidstack"
Provides-Extra: cudo
Requires-Dist: cudo-compute>=0.1.10; extra == "cudo"
Requires-Dist: casbin; extra == "cudo"
Requires-Dist: sqlalchemy_adapter; extra == "cudo"
Requires-Dist: passlib; extra == "cudo"
Requires-Dist: pyjwt; extra == "cudo"
Requires-Dist: aiohttp; extra == "cudo"
Requires-Dist: anyio; extra == "cudo"
Requires-Dist: grpcio>=1.63.0; extra == "cudo"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "cudo"
Requires-Dist: aiosqlite; extra == "cudo"
Provides-Extra: paperspace
Requires-Dist: casbin; extra == "paperspace"
Requires-Dist: sqlalchemy_adapter; extra == "paperspace"
Requires-Dist: passlib; extra == "paperspace"
Requires-Dist: pyjwt; extra == "paperspace"
Requires-Dist: aiohttp; extra == "paperspace"
Requires-Dist: anyio; extra == "paperspace"
Requires-Dist: grpcio>=1.63.0; extra == "paperspace"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "paperspace"
Requires-Dist: aiosqlite; extra == "paperspace"
Provides-Extra: primeintellect
Requires-Dist: casbin; extra == "primeintellect"
Requires-Dist: sqlalchemy_adapter; extra == "primeintellect"
Requires-Dist: passlib; extra == "primeintellect"
Requires-Dist: pyjwt; extra == "primeintellect"
Requires-Dist: aiohttp; extra == "primeintellect"
Requires-Dist: anyio; extra == "primeintellect"
Requires-Dist: grpcio>=1.63.0; extra == "primeintellect"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "primeintellect"
Requires-Dist: aiosqlite; extra == "primeintellect"
Provides-Extra: do
Requires-Dist: pydo>=0.3.0; extra == "do"
Requires-Dist: azure-core>=1.24.0; extra == "do"
Requires-Dist: azure-common; extra == "do"
Requires-Dist: casbin; extra == "do"
Requires-Dist: sqlalchemy_adapter; extra == "do"
Requires-Dist: passlib; extra == "do"
Requires-Dist: pyjwt; extra == "do"
Requires-Dist: aiohttp; extra == "do"
Requires-Dist: anyio; extra == "do"
Requires-Dist: grpcio>=1.63.0; extra == "do"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "do"
Requires-Dist: aiosqlite; extra == "do"
Provides-Extra: vast
Requires-Dist: vastai-sdk>=0.1.12; extra == "vast"
Requires-Dist: casbin; extra == "vast"
Requires-Dist: sqlalchemy_adapter; extra == "vast"
Requires-Dist: passlib; extra == "vast"
Requires-Dist: pyjwt; extra == "vast"
Requires-Dist: aiohttp; extra == "vast"
Requires-Dist: anyio; extra == "vast"
Requires-Dist: grpcio>=1.63.0; extra == "vast"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "vast"
Requires-Dist: aiosqlite; extra == "vast"
Provides-Extra: vsphere
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "vsphere"
Requires-Dist: casbin; extra == "vsphere"
Requires-Dist: sqlalchemy_adapter; extra == "vsphere"
Requires-Dist: passlib; extra == "vsphere"
Requires-Dist: pyjwt; extra == "vsphere"
Requires-Dist: aiohttp; extra == "vsphere"
Requires-Dist: anyio; extra == "vsphere"
Requires-Dist: grpcio>=1.63.0; extra == "vsphere"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "vsphere"
Requires-Dist: aiosqlite; extra == "vsphere"
Provides-Extra: vastdata
Requires-Dist: awscli>=1.27.10; extra == "vastdata"
Requires-Dist: botocore>=1.29.10; extra == "vastdata"
Requires-Dist: boto3>=1.26.1; extra == "vastdata"
Requires-Dist: colorama<0.4.7; extra == "vastdata"
Requires-Dist: casbin; extra == "vastdata"
Requires-Dist: sqlalchemy_adapter; extra == "vastdata"
Requires-Dist: passlib; extra == "vastdata"
Requires-Dist: pyjwt; extra == "vastdata"
Requires-Dist: aiohttp; extra == "vastdata"
Requires-Dist: anyio; extra == "vastdata"
Requires-Dist: grpcio>=1.63.0; extra == "vastdata"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "vastdata"
Requires-Dist: aiosqlite; extra == "vastdata"
Provides-Extra: nebius
Requires-Dist: nebius>=0.3.12; extra == "nebius"
Requires-Dist: grpcio>=1.63.0; extra == "nebius"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "nebius"
Requires-Dist: awscli>=1.27.10; extra == "nebius"
Requires-Dist: botocore>=1.29.10; extra == "nebius"
Requires-Dist: boto3>=1.26.1; extra == "nebius"
Requires-Dist: colorama<0.4.7; extra == "nebius"
Requires-Dist: casbin; extra == "nebius"
Requires-Dist: sqlalchemy_adapter; extra == "nebius"
Requires-Dist: passlib; extra == "nebius"
Requires-Dist: pyjwt; extra == "nebius"
Requires-Dist: aiohttp; extra == "nebius"
Requires-Dist: anyio; extra == "nebius"
Requires-Dist: grpcio>=1.63.0; extra == "nebius"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "nebius"
Requires-Dist: aiosqlite; extra == "nebius"
Provides-Extra: hyperbolic
Requires-Dist: casbin; extra == "hyperbolic"
Requires-Dist: sqlalchemy_adapter; extra == "hyperbolic"
Requires-Dist: passlib; extra == "hyperbolic"
Requires-Dist: pyjwt; extra == "hyperbolic"
Requires-Dist: aiohttp; extra == "hyperbolic"
Requires-Dist: anyio; extra == "hyperbolic"
Requires-Dist: grpcio>=1.63.0; extra == "hyperbolic"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "hyperbolic"
Requires-Dist: aiosqlite; extra == "hyperbolic"
Provides-Extra: seeweb
Requires-Dist: ecsapi==0.4.0; extra == "seeweb"
Requires-Dist: casbin; extra == "seeweb"
Requires-Dist: sqlalchemy_adapter; extra == "seeweb"
Requires-Dist: passlib; extra == "seeweb"
Requires-Dist: pyjwt; extra == "seeweb"
Requires-Dist: aiohttp; extra == "seeweb"
Requires-Dist: anyio; extra == "seeweb"
Requires-Dist: grpcio>=1.63.0; extra == "seeweb"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "seeweb"
Requires-Dist: aiosqlite; extra == "seeweb"
Provides-Extra: mithril
Requires-Dist: casbin; extra == "mithril"
Requires-Dist: sqlalchemy_adapter; extra == "mithril"
Requires-Dist: passlib; extra == "mithril"
Requires-Dist: pyjwt; extra == "mithril"
Requires-Dist: aiohttp; extra == "mithril"
Requires-Dist: anyio; extra == "mithril"
Requires-Dist: grpcio>=1.63.0; extra == "mithril"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "mithril"
Requires-Dist: aiosqlite; extra == "mithril"
Provides-Extra: shadeform
Requires-Dist: casbin; extra == "shadeform"
Requires-Dist: sqlalchemy_adapter; extra == "shadeform"
Requires-Dist: passlib; extra == "shadeform"
Requires-Dist: pyjwt; extra == "shadeform"
Requires-Dist: aiohttp; extra == "shadeform"
Requires-Dist: anyio; extra == "shadeform"
Requires-Dist: grpcio>=1.63.0; extra == "shadeform"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "shadeform"
Requires-Dist: aiosqlite; extra == "shadeform"
Provides-Extra: slurm
Requires-Dist: python-hostlist; extra == "slurm"
Requires-Dist: casbin; extra == "slurm"
Requires-Dist: sqlalchemy_adapter; extra == "slurm"
Requires-Dist: passlib; extra == "slurm"
Requires-Dist: pyjwt; extra == "slurm"
Requires-Dist: aiohttp; extra == "slurm"
Requires-Dist: anyio; extra == "slurm"
Requires-Dist: grpcio>=1.63.0; extra == "slurm"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "slurm"
Requires-Dist: aiosqlite; extra == "slurm"
Provides-Extra: yotta
Requires-Dist: casbin; extra == "yotta"
Requires-Dist: sqlalchemy_adapter; extra == "yotta"
Requires-Dist: passlib; extra == "yotta"
Requires-Dist: pyjwt; extra == "yotta"
Requires-Dist: aiohttp; extra == "yotta"
Requires-Dist: anyio; extra == "yotta"
Requires-Dist: grpcio>=1.63.0; extra == "yotta"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "yotta"
Requires-Dist: aiosqlite; extra == "yotta"
Provides-Extra: verda
Requires-Dist: casbin; extra == "verda"
Requires-Dist: sqlalchemy_adapter; extra == "verda"
Requires-Dist: passlib; extra == "verda"
Requires-Dist: pyjwt; extra == "verda"
Requires-Dist: aiohttp; extra == "verda"
Requires-Dist: anyio; extra == "verda"
Requires-Dist: grpcio>=1.63.0; extra == "verda"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "verda"
Requires-Dist: aiosqlite; extra == "verda"
Provides-Extra: all
Requires-Dist: ibm-cloud-sdk-core; extra == "all"
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
Requires-Dist: boto3>=1.26.1; extra == "all"
Requires-Dist: runpod>=1.6.1; extra == "all"
Requires-Dist: azure-common; extra == "all"
Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
Requires-Dist: docker; extra == "all"
Requires-Dist: oci; extra == "all"
Requires-Dist: azure-core>=1.31.0; extra == "all"
Requires-Dist: sqlalchemy_adapter; extra == "all"
Requires-Dist: pyjwt; extra == "all"
Requires-Dist: ibm-cos-sdk; extra == "all"
Requires-Dist: anyio; extra == "all"
Requires-Dist: grpcio>=1.63.0; extra == "all"
Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
Requires-Dist: nebius>=0.3.12; extra == "all"
Requires-Dist: casbin; extra == "all"
Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
Requires-Dist: colorama<0.4.7; extra == "all"
Requires-Dist: python-hostlist; extra == "all"
Requires-Dist: tomli; extra == "all"
Requires-Dist: azure-identity>=1.19.0; extra == "all"
Requires-Dist: msgraph-sdk; extra == "all"
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
Requires-Dist: ibm-vpc; extra == "all"
Requires-Dist: pydo>=0.3.0; extra == "all"
Requires-Dist: pycares<5; extra == "all"
Requires-Dist: passlib; extra == "all"
Requires-Dist: python-dateutil; extra == "all"
Requires-Dist: cudo-compute>=0.1.10; extra == "all"
Requires-Dist: aiosqlite; extra == "all"
Requires-Dist: msrestazure; extra == "all"
Requires-Dist: azure-storage-blob>=12.23.1; extra == "all"
Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
Requires-Dist: awscli>=1.27.10; extra == "all"
Requires-Dist: google-cloud-storage; extra == "all"
Requires-Dist: ecsapi==0.4.0; extra == "all"
Requires-Dist: botocore>=1.29.10; extra == "all"
Requires-Dist: azure-core>=1.24.0; extra == "all"
Requires-Dist: ray[default]>=2.6.1; extra == "all"
Requires-Dist: azure-cli>=2.65.0; extra == "all"
Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
Requires-Dist: websockets; extra == "all"
Provides-Extra: remote
Requires-Dist: grpcio>=1.63.0; extra == "remote"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "remote"
Provides-Extra: server
Requires-Dist: casbin; extra == "server"
Requires-Dist: sqlalchemy_adapter; extra == "server"
Requires-Dist: passlib; extra == "server"
Requires-Dist: pyjwt; extra == "server"
Requires-Dist: aiohttp; extra == "server"
Requires-Dist: anyio; extra == "server"
Requires-Dist: grpcio>=1.63.0; extra == "server"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "server"
Requires-Dist: aiosqlite; extra == "server"
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: summary

<p align="center">
  <img alt="SkyPilot" src="https://raw.githubusercontent.com/skypilot-org/skypilot/master/docs/source/images/skypilot-wide-light-1k.png" width=55%>
</p>

<p align="center">
  <a href="https://docs.skypilot.co/">
    <img alt="Documentation" src="https://img.shields.io/badge/docs-gray?logo=readthedocs&logoColor=f5f5f5">
  </a>

  <a href="https://github.com/skypilot-org/skypilot/releases">
    <img alt="GitHub Release" src="https://img.shields.io/github/release/skypilot-org/skypilot.svg">
  </a>

  <a href="http://slack.skypilot.co">
    <img alt="Join Slack" src="https://img.shields.io/badge/SkyPilot-Join%20Slack-blue?logo=slack">
  </a>

  <a href="https://github.com/skypilot-org/skypilot/releases">
    <img alt="Downloads" src="https://img.shields.io/pypi/dm/skypilot">
  </a>

</p>

<h3 align="center">
    Manage all your AI compute
</h3>

<div align="center">

#### [🌟 **SkyPilot Demo** 🌟: Click to see a 1-minute tour](https://demo.skypilot.co/dashboard/)

</div>


SkyPilot is a system to run, manage, and scale AI workloads on any AI infrastructure.

SkyPilot gives **AI teams** a simple interface to run jobs on any infra.
**Infra teams** get a unified control plane to manage any AI compute — with advanced scheduling, scaling, and orchestration.

<img src="./docs/source/images/skypilot-abstractions-long-2.png" alt="SkyPilot Abstractions">

-----

:fire: *News* :fire:
- [Mar 2026] **Scaling Karpathy's Autoresearch**: Autoresearch runs 1 experiment at a time. We gave it 16 GPUs and let it run in parallel: [**blog**](https://blog.skypilot.co/scaling-autoresearch/), [**HackerNews**](https://news.ycombinator.com/item?id=47442435)
- [Mar 2026] **SkyPilot Agent Skills**: GPU access and job management for AI agents: [**docs**](https://docs.skypilot.co/en/latest/getting-started/skill.html)
- [Jan 2026] **Shopify case study**: Shopify runs all AI training workloads on SkyPilot: [**case study**](https://shopify.engineering/skypilot)
- [Dec 2025] **SkyPilot v0.11** released: Multi-Cloud Pools, Fast Managed Jobs, Enterprise-Readiness at Large Scale, Programmability. [**Release notes**](https://github.com/skypilot-org/skypilot/releases/tag/v0.11.0)
- [Dec 2025] Train **an agent to use Google Search** as a tool with RL on your Kubernetes or clouds: [**blog**](https://blog.skypilot.co/verl-tool-calling/), [**example**](./llm/verl/)
- [Oct 2025] Run **RL training for LLMs** with SkyRL on your Kubernetes or clouds: [**example**](./llm/skyrl/)

## Overview

SkyPilot **is easy to use for AI users**:
- Quickly spin up compute on your own infra
- Environment and job as code — simple and portable
- Easy job management: queue, run, and auto-recover many jobs

SkyPilot **makes Kubernetes easy for AI & Infra teams**:

- Slurm-like ease of use, cloud-native robustness
- Local dev experience on K8s: SSH into pods, sync code, or connect IDE
- Turbocharge your clusters: gang scheduling, multi-cluster, and scaling

SkyPilot **unifies multiple clusters, clouds, and hardware**:
- One interface to use reserved GPUs, Kubernetes clusters, Slurm clusters, or 20+ clouds
- [Flexible provisioning](https://docs.skypilot.co/en/latest/examples/auto-failover.html) of GPUs, TPUs, CPUs, with smart failover
- [Team deployment](https://docs.skypilot.co/en/latest/reference/api-server/api-server.html) and resource sharing

SkyPilot **maximizes GPU fleet utilization**:
* Autostop: automatic cleanup of idle resources
* Binpacking: workload binpacking on shared clusters
* Intelligent scheduler: automatically schedule on the most available infra

SkyPilot supports your existing GPU, TPU, and CPU workloads, with no code changes.

Install with uv ([also supported](https://docs.skypilot.co/en/latest/getting-started/installation.html): pip, nightly, from source)
```bash
# Choose your clouds:
uv pip install "skypilot[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,seeweb,shadeform,verda]"
```

To use SkyPilot directly with your agent (Claude Code, Codex, etc.), install the [SkyPilot Skill](https://docs.skypilot.co/en/latest/getting-started/skill.html). Tell your agent:
```
Fetch and follow https://github.com/skypilot-org/skypilot/blob/HEAD/agent/INSTALL.md to install the skypilot skill
```

<p align="center">
  <img src="docs/source/_static/intro.gif" alt="SkyPilot">
</p>

Current supported infra: Kubernetes, Slurm, AWS, GCP, Azure, OCI, CoreWeave, Nebius, Lambda Cloud, RunPod, Fluidstack,
Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere, Seeweb, Prime Intellect, Shadeform, Verda Cloud, VastData, Crusoe.
<p align="center">
  <img alt="SkyPilot" src="https://raw.githubusercontent.com/skypilot-org/skypilot/master/docs/source/images/cloud-logos-light.png" width=85%>
</p>
<!-- source xcf file: https://drive.google.com/drive/folders/1S_acjRsAD3T14qMeEnf6FFrIwHu_Gs_f?usp=drive_link -->


## Getting started

[Install SkyPilot](https://docs.skypilot.co/en/latest/getting-started/installation.html) in 1 minute. Then, launch your first cluster in 2 minutes in [Quickstart](https://docs.skypilot.co/en/latest/getting-started/quickstart.html).

SkyPilot is BYOC: Everything is launched within your cloud accounts, VPCs, and clusters.

## Benefits of SkyPilot on Kubernetes

SkyPilot makes Kubernetes AI-native.

It turbocharges your existing Kubernetes clusters by **accelerating AI/ML velocity**:

- AI-friendly interface to launch jobs and deployments
- Much simplified interactive dev for K8s (SSH / sync code / connect IDE to pods)

...and **optimizing GPU scheduling, utilization, and scaling**:

- Advanced scheduling: Gang scheduling, multi-node jobs, and queueing
- Multi-cluster support: Bring all your clusters under one control plane
- Multi-cloud support: One consistent interface to manage many providers

See [SkyPilot vs Vanilla Kubernetes](https://docs.skypilot.co/en/latest/reference/kubernetes/skypilot-and-vanilla-k8s.html) and this [blog post](https://blog.skypilot.co/ai-on-kubernetes/) for more details.

## SkyPilot in 1 minute

A SkyPilot task specifies: resource requirements, data to be synced, setup commands, and the task commands.

Once written in this [**unified interface**](https://docs.skypilot.co/en/latest/reference/yaml-spec.html) (YAML or Python API), the task can be launched on any available infra (Kubernetes, Slurm, cloud, etc.).  This avoids vendor lock-in, and allows easily moving jobs to a different provider.

Paste the following into a file `my_task.yaml`:

```yaml
resources:
  accelerators: A100:8  # 8x NVIDIA A100 GPU

num_nodes: 1  # Number of VMs to launch

# Working directory (optional) containing the project codebase.
# Its contents are synced to ~/sky_workdir/ on the cluster.
workdir: ~/torch_examples

# Commands to be run before executing the job.
# Typical use: pip install -r requirements.txt, git clone, etc.
setup: |
  cd mnist
  pip install -r requirements.txt

# Commands to run as a job.
# Typical use: launch the main program.
run: |
  cd mnist
  python main.py --epochs 1
```

Prepare the workdir by cloning:
```bash
git clone https://github.com/pytorch/examples.git ~/torch_examples
```

Launch with `sky launch` (note: [access to GPU instances](https://docs.skypilot.co/en/latest/cloud-setup/quota.html) is needed for this example):
```bash
sky launch my_task.yaml
```

SkyPilot then performs the heavy-lifting for you, including:
1. Find the cheapest & available infra across your clusters or clouds
2. Provision the GPUs (pods or VMs), with auto-failover if the infra returned capacity errors
3. Sync your local `workdir` to the provisioned cluster
4. Auto-install dependencies by running the task's `setup` commands
5. Run the task's `run` commands, and stream logs

See [Quickstart](https://docs.skypilot.co/en/latest/getting-started/quickstart.html) to get started with SkyPilot.

## Runnable examples

See [**SkyPilot examples**](https://docs.skypilot.co/en/docs-examples/examples/index.html) that cover: development, training, serving, LLM models, AI apps, and common frameworks.

Latest featured examples:

| Task | Examples |
|----------|----------|
| Training | [Verl](https://docs.skypilot.co/en/latest/examples/training/verl.html), [Finetune Llama 4](https://docs.skypilot.co/en/latest/examples/training/llama-4-finetuning.html), [TorchTitan](https://docs.skypilot.co/en/latest/examples/training/torchtitan.html), [PyTorch](https://docs.skypilot.co/en/latest/getting-started/tutorial.html), [DeepSpeed](https://docs.skypilot.co/en/latest/examples/training/deepspeed.html), [NeMo](https://docs.skypilot.co/en/latest/examples/training/nemo.html), [Ray](https://docs.skypilot.co/en/latest/examples/training/ray.html), [Unsloth](https://docs.skypilot.co/en/latest/examples/training/unsloth.html), [Jax/TPU](https://docs.skypilot.co/en/latest/examples/training/tpu.html), [OpenRLHF](https://docs.skypilot.co/en/latest/examples/training/openrlhf.html) |
| Serving | [vLLM](https://docs.skypilot.co/en/latest/examples/serving/vllm.html), [SGLang](https://docs.skypilot.co/en/latest/examples/serving/sglang.html), [Ollama](https://docs.skypilot.co/en/latest/examples/serving/ollama.html) |
| Models | [DeepSeek-R1](https://docs.skypilot.co/en/latest/examples/models/deepseek-r1.html), [Llama 4](https://docs.skypilot.co/en/latest/examples/models/llama-4.html), [Llama 3](https://docs.skypilot.co/en/latest/examples/models/llama-3.html), [CodeLlama](https://docs.skypilot.co/en/latest/examples/models/codellama.html), [Qwen](https://docs.skypilot.co/en/latest/examples/models/qwen.html), [Kimi-K2](https://docs.skypilot.co/en/latest/examples/models/kimi-k2.html), [Kimi-K2-Thinking](https://docs.skypilot.co/en/latest/examples/models/kimi-k2-thinking.html), [Mixtral](https://docs.skypilot.co/en/latest/examples/models/mixtral.html) |
| AI apps | [RAG](https://docs.skypilot.co/en/latest/examples/applications/rag.html), [vector databases](https://docs.skypilot.co/en/latest/examples/applications/vector_database.html) (ChromaDB, CLIP) |
| Common frameworks | [Airflow](https://docs.skypilot.co/en/latest/examples/frameworks/airflow.html), [Jupyter](https://docs.skypilot.co/en/latest/examples/frameworks/jupyter.html), [marimo](https://docs.skypilot.co/en/latest/examples/frameworks/marimo.html)  |

Source files can be found in [`llm/`](https://github.com/skypilot-org/skypilot/tree/master/llm) and [`examples/`](https://github.com/skypilot-org/skypilot/tree/master/examples).

## Learn more
To learn more, see [SkyPilot Overview](https://docs.skypilot.co/en/latest/overview.html), [SkyPilot docs](https://docs.skypilot.co/en/latest/), and [SkyPilot blog](https://blog.skypilot.co/).

SkyPilot adopters: [Testimonials and Case Studies](https://blog.skypilot.co/case-studies/)

Partners and integrations: [Community Spotlights](https://blog.skypilot.co/community/)

Follow updates:
- [Slack](http://slack.skypilot.co)
- [X](https://twitter.com/skypilot_org)
- [LinkedIn](https://www.linkedin.com/company/skypilot-oss/)
- [YouTube](https://www.youtube.com/@skypilot-org)
- [SkyPilot Blog](https://blog.skypilot.co/)

## Questions and feedback
We are excited to hear your feedback:
* For issues and feature requests, please [open a GitHub issue](https://github.com/skypilot-org/skypilot/issues/new).
* For questions, please use [GitHub Discussions](https://github.com/skypilot-org/skypilot/discussions).

For general discussions, join us on the [SkyPilot Slack](http://slack.skypilot.co).

## Contributing
We welcome all contributions to the project! See [CONTRIBUTING](CONTRIBUTING.md) for how to get involved.
