Metadata-Version: 2.4
Name: skypilot-nightly
Version: 1.0.0.dev20251024
Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
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.7
Classifier: Programming Language :: Python :: 3.8
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.0
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: 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: 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
Requires-Dist: psycopg2-binary
Requires-Dist: aiosqlite
Requires-Dist: asyncpg
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: types-paramiko
Requires-Dist: alembic
Requires-Dist: aiohttp
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.5; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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.5; 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"
Requires-Dist: greenlet; extra == "cloudflare"
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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; extra == "ssh"
Provides-Extra: runpod
Requires-Dist: runpod>=1.6.1; extra == "runpod"
Requires-Dist: tomli; python_version < "3.11" and 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; extra == "vsphere"
Provides-Extra: nebius
Requires-Dist: nebius>=0.2.47; 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.5; 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"
Requires-Dist: greenlet; 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"
Requires-Dist: greenlet; extra == "hyperbolic"
Provides-Extra: seeweb
Requires-Dist: ecsapi>=0.2.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"
Requires-Dist: greenlet; extra == "seeweb"
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"
Requires-Dist: greenlet; extra == "shadeform"
Provides-Extra: all
Requires-Dist: pydo>=0.3.0; extra == "all"
Requires-Dist: sqlalchemy_adapter; extra == "all"
Requires-Dist: greenlet; extra == "all"
Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
Requires-Dist: grpcio>=1.63.0; extra == "all"
Requires-Dist: ecsapi>=0.2.0; extra == "all"
Requires-Dist: anyio; extra == "all"
Requires-Dist: tomli; python_version < "3.11" and extra == "all"
Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
Requires-Dist: nebius>=0.2.47; extra == "all"
Requires-Dist: ray[default]>=2.6.1; extra == "all"
Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
Requires-Dist: colorama<0.4.5; extra == "all"
Requires-Dist: azure-identity>=1.19.0; extra == "all"
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
Requires-Dist: boto3>=1.26.1; extra == "all"
Requires-Dist: ibm-vpc; extra == "all"
Requires-Dist: pyjwt; extra == "all"
Requires-Dist: ibm-cloud-sdk-core; extra == "all"
Requires-Dist: google-cloud-storage; extra == "all"
Requires-Dist: aiosqlite; extra == "all"
Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
Requires-Dist: passlib; extra == "all"
Requires-Dist: msrestazure; extra == "all"
Requires-Dist: azure-cli>=2.65.0; extra == "all"
Requires-Dist: azure-common; extra == "all"
Requires-Dist: oci; extra == "all"
Requires-Dist: python-dateutil; extra == "all"
Requires-Dist: azure-core>=1.31.0; extra == "all"
Requires-Dist: casbin; extra == "all"
Requires-Dist: awscli>=1.27.10; extra == "all"
Requires-Dist: docker; extra == "all"
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: websockets; extra == "all"
Requires-Dist: msgraph-sdk; extra == "all"
Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
Requires-Dist: ibm-cos-sdk; extra == "all"
Requires-Dist: azure-core>=1.24.0; extra == "all"
Requires-Dist: botocore>=1.29.10; extra == "all"
Requires-Dist: runpod>=1.6.1; extra == "all"
Requires-Dist: cudo-compute>=0.1.10; extra == "all"
Requires-Dist: azure-storage-blob>=12.23.1; 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"
Requires-Dist: greenlet; 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">
    Simplify & scale any AI infrastructure
</h3>

<div align="center">

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

</div>



----

:fire: *News* :fire:
- [Jul 2025] Run **RL training for LLMs** with SkyRL on your Kubernetes or clouds: [**example**](./llm/skyrl/)
- [Oct 2025] Train and serve [Andrej Karpathy's](https://x.com/karpathy/status/1977755427569111362) **nanochat** - the best ChatGPT that $100 can buy: [**example**](./llm/nanochat)
- [Oct 2025] Run large-scale **LLM training with TorchTitan** on any AI infra: [**example**](./examples/training/torchtitan)
- [Sep 2025] Scaling AI infrastructure at Abridge - **10x faster development** with SkyPilot: [**blog**](https://blog.skypilot.co/abridge/)
- [Sep 2025] Network and Storage Benchmarks for LLM training on the cloud: [**blog**](https://maknee.github.io/blog/2025/Network-And-Storage-Training-Skypilot/)
- [Aug 2025] Serve and finetune **OpenAI GPT-OSS models** (gpt-oss-120b, gpt-oss-20b) with one command on any infra: [**serve**](./llm/gpt-oss/) + [**LoRA and full finetuning**](./llm/gpt-oss-finetuning/)
- [Jul 2025] Run distributed **RL training for LLMs** with Verl (PPO, GRPO) on any cloud: [**example**](./llm/verl/)
- [Jul 2025] Finetune **Llama4** on any distributed cluster/cloud: [**example**](./llm/llama-4-finetuning/)
- [Jul 2025] Two-part blog series, `The Evolution of AI Job Orchestration`: (1) [Running AI jobs on GPU Neoclouds](https://blog.skypilot.co/ai-job-orchestration-pt1-gpu-neoclouds/), (2) [The AI-Native Control Plane & Orchestration that Finally Works for ML](https://blog.skypilot.co/ai-job-orchestration-pt2-ai-control-plane/)
- [Apr 2025] Spin up **Qwen3** on your cluster/cloud: [**example**](./llm/qwen/)
- [Feb 2025] Prepare and serve **Retrieval Augmented Generation (RAG) with DeepSeek-R1**: [**blog post**](https://blog.skypilot.co/deepseek-rag), [**example**](./llm/rag/)


**LLM Finetuning Cookbooks**: Finetuning Llama 2 / Llama 3.1 in your own cloud environment, privately: Llama 2 [**example**](./llm/vicuna-llama-2/) and [**blog**](https://blog.skypilot.co/finetuning-llama2-operational-guide/); Llama 3.1 [**example**](./llm/llama-3_1-finetuning/) and [**blog**](https://blog.skypilot.co/finetune-llama-3_1-on-your-infra/)

----

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">

## Overview

SkyPilot **is easy to use for AI teams**:
- 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, or 16+ clouds
- [Flexible provisioning](https://docs.skypilot.co/en/latest/examples/auto-failover.html) of GPUs, TPUs, CPUs, with auto-retry
- [Team deployment](https://docs.skypilot.co/en/latest/reference/api-server/api-server.html) and resource sharing

SkyPilot **cuts your cloud costs & maximizes GPU availability**:
* Autostop: automatic cleanup of idle resources
* [Spot instance support](https://docs.skypilot.co/en/latest/examples/managed-jobs.html#running-on-spot-instances): 3-6x cost savings, with preemption auto-recovery
* Intelligent scheduling: automatically run on the cheapest & most available infra

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

Install with pip:
```bash
# Choose your clouds:
pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,seeweb]"
```
To get the latest features and fixes, use the nightly build or [install from source](https://docs.skypilot.co/en/latest/getting-started/installation.html):
```bash
# Choose your clouds:
pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,seeweb]"
```

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

Current supported infra: Kubernetes, AWS, GCP, Azure, OCI, Nebius, Lambda Cloud, RunPod, Fluidstack,
Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere, Seeweb, Prime Intellect.
<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
You can find our documentation [here](https://docs.skypilot.co/).
- [Installation](https://docs.skypilot.co/en/latest/getting-started/installation.html)
- [Quickstart](https://docs.skypilot.co/en/latest/getting-started/quickstart.html)
- [CLI reference](https://docs.skypilot.co/en/latest/reference/cli.html)

## 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, 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) |
| 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), [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) |

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).

## More information
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 / Twitter](https://twitter.com/skypilot_org)
- [LinkedIn](https://www.linkedin.com/company/skypilot-oss/)
- [SkyPilot Blog](https://blog.skypilot.co/) ([Introductory blog post](https://blog.skypilot.co/introducing-skypilot/))

Read the research:
- [SkyPilot paper](https://www.usenix.org/system/files/nsdi23-yang-zongheng.pdf) and [talk](https://www.usenix.org/conference/nsdi23/presentation/yang-zongheng) (NSDI 2023)
- [Sky Computing whitepaper](https://arxiv.org/abs/2205.07147)
- [Sky Computing vision paper](https://sigops.org/s/conferences/hotos/2021/papers/hotos21-s02-stoica.pdf) (HotOS 2021)
- [SkyServe: AI serving across regions and clouds](https://arxiv.org/pdf/2411.01438) (EuroSys 2025)
- [Managed jobs spot instance policy](https://www.usenix.org/conference/nsdi24/presentation/wu-zhanghao)  (NSDI 2024)

SkyPilot was initially started at the [Sky Computing Lab](https://sky.cs.berkeley.edu) at UC Berkeley and has since gained many industry contributors. To read about the project's origin and vision, see [Concept: Sky Computing](https://docs.skypilot.co/en/latest/sky-computing.html).

## 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.
