skypilot-nightly 1.0.0.dev20250106__tar.gz → 1.0.0.dev20250108__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {skypilot_nightly-1.0.0.dev20250106/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250108}/PKG-INFO +3 -3
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/cloud_vm_ray_backend.py +21 -7
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +10 -51
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/oci_utils.py +9 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/docker_utils.py +8 -3
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/oci/query_utils.py +17 -17
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/instance.py +10 -1
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/utils.py +170 -13
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/setup_files/dependencies.py +3 -1
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/command_runner.py +5 -7
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/runpod-ray.yml.j2 +13 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/schemas.py +3 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108/skypilot_nightly.egg-info}/PKG-INFO +3 -3
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/skypilot_nightly.egg-info/requires.txt +2 -2
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/backend_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/cloud_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/do_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/mounting_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/exceptions.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/do/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/do/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/do/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/do/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/do/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/api/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/api/commands.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/api/pods.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/do-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/cluster_yaml_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/common_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/controller_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20250106 → skypilot_nightly-1.0.0.dev20250108}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: skypilot-nightly
|
3
|
-
Version: 1.0.0.
|
3
|
+
Version: 1.0.0.dev20250108
|
4
4
|
Summary: SkyPilot: An intercloud broker for the clouds
|
5
5
|
Author: SkyPilot Team
|
6
6
|
License: Apache 2.0
|
@@ -90,7 +90,7 @@ Requires-Dist: grpcio!=1.48.0,<=1.51.3,>=1.42.0; (python_version >= "3.10" and s
|
|
90
90
|
Requires-Dist: protobuf!=3.19.5,>=3.15.3; extra == "remote"
|
91
91
|
Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3; extra == "remote"
|
92
92
|
Provides-Extra: runpod
|
93
|
-
Requires-Dist: runpod>=1.
|
93
|
+
Requires-Dist: runpod>=1.6.1; extra == "runpod"
|
94
94
|
Provides-Extra: fluidstack
|
95
95
|
Provides-Extra: cudo
|
96
96
|
Requires-Dist: cudo-compute>=0.1.10; extra == "cudo"
|
@@ -140,7 +140,7 @@ Requires-Dist: grpcio!=1.48.0,<=1.51.3,>=1.32.0; (python_version < "3.10" and sy
|
|
140
140
|
Requires-Dist: grpcio!=1.48.0,<=1.51.3,>=1.42.0; (python_version >= "3.10" and sys_platform != "darwin") and extra == "all"
|
141
141
|
Requires-Dist: protobuf!=3.19.5,>=3.15.3; extra == "all"
|
142
142
|
Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3; extra == "all"
|
143
|
-
Requires-Dist: runpod>=1.
|
143
|
+
Requires-Dist: runpod>=1.6.1; extra == "all"
|
144
144
|
Requires-Dist: cudo-compute>=0.1.10; extra == "all"
|
145
145
|
Requires-Dist: pydo>=0.3.0; extra == "all"
|
146
146
|
Requires-Dist: azure-core>=1.24.0; extra == "all"
|
@@ -5,7 +5,7 @@ from typing import Optional
|
|
5
5
|
import urllib.request
|
6
6
|
|
7
7
|
# Replaced with the current commit when building the wheels.
|
8
|
-
_SKYPILOT_COMMIT_SHA = '
|
8
|
+
_SKYPILOT_COMMIT_SHA = '2fa37ec2a68bdd1e69f3726ca46aaeebcaf07a2d'
|
9
9
|
|
10
10
|
|
11
11
|
def _get_git_commit():
|
@@ -35,7 +35,7 @@ def _get_git_commit():
|
|
35
35
|
|
36
36
|
|
37
37
|
__commit__ = _get_git_commit()
|
38
|
-
__version__ = '1.0.0.
|
38
|
+
__version__ = '1.0.0.dev20250108'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
@@ -4216,11 +4216,20 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
4216
4216
|
attempts = 0
|
4217
4217
|
while True:
|
4218
4218
|
logger.debug(f'instance statuses attempt {attempts + 1}')
|
4219
|
-
|
4220
|
-
|
4221
|
-
|
4222
|
-
|
4223
|
-
|
4219
|
+
try:
|
4220
|
+
node_status_dict = provision_lib.query_instances(
|
4221
|
+
repr(cloud),
|
4222
|
+
cluster_name_on_cloud,
|
4223
|
+
config['provider'],
|
4224
|
+
non_terminated_only=False)
|
4225
|
+
except Exception as e: # pylint: disable=broad-except
|
4226
|
+
if purge:
|
4227
|
+
logger.warning(
|
4228
|
+
f'Failed to query instances. Skipping since purge is '
|
4229
|
+
f'set. Details: '
|
4230
|
+
f'{common_utils.format_exception(e, use_bracket=True)}')
|
4231
|
+
break
|
4232
|
+
raise
|
4224
4233
|
|
4225
4234
|
unexpected_node_state: Optional[Tuple[str, str]] = None
|
4226
4235
|
for node_id, node_status in node_status_dict.items():
|
@@ -4239,8 +4248,13 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
4239
4248
|
time.sleep(_TEARDOWN_WAIT_BETWEEN_ATTEMPS_SECONDS)
|
4240
4249
|
else:
|
4241
4250
|
(node_id, node_status) = unexpected_node_state
|
4242
|
-
|
4243
|
-
|
4251
|
+
if purge:
|
4252
|
+
logger.warning(f'Instance {node_id} in unexpected '
|
4253
|
+
f'state {node_status}. Skipping since purge '
|
4254
|
+
'is set.')
|
4255
|
+
break
|
4256
|
+
raise RuntimeError(f'Instance {node_id} in unexpected '
|
4257
|
+
f'state {node_status}.')
|
4244
4258
|
|
4245
4259
|
global_user_state.remove_cluster(handle.cluster_name,
|
4246
4260
|
terminate=terminate)
|
@@ -47,10 +47,6 @@ TPU_RETRY_CNT = 3
|
|
47
47
|
TPU_V4_ZONES = ['us-central2-b']
|
48
48
|
# TPU v3 pods are available in us-east1-d, but hidden in the skus.
|
49
49
|
# We assume the TPU prices are the same as us-central1.
|
50
|
-
# TPU v6e's pricing info is not available on the SKUs. However, in
|
51
|
-
# https://cloud.google.com/tpu/pricing, it listed the price for 4 regions:
|
52
|
-
# us-east1, us-east5, europe-west4, and asia-northeast1. We hardcode them here
|
53
|
-
# and filtered out the other regions (us-central{1,2}, us-south1).
|
54
50
|
HIDDEN_TPU_DF = pd.read_csv(
|
55
51
|
io.StringIO(
|
56
52
|
textwrap.dedent("""\
|
@@ -62,49 +58,10 @@ HIDDEN_TPU_DF = pd.read_csv(
|
|
62
58
|
,tpu-v3-512,1,,,tpu-v3-512,512.0,153.6,us-east1,us-east1-d
|
63
59
|
,tpu-v3-1024,1,,,tpu-v3-1024,1024.0,307.2,us-east1,us-east1-d
|
64
60
|
,tpu-v3-2048,1,,,tpu-v3-2048,2048.0,614.4,us-east1,us-east1-d
|
65
|
-
,tpu-v6e-1,1,,,tpu-v6e-1,2.7,,us-east5,us-east5-b
|
66
|
-
,tpu-v6e-1,1,,,tpu-v6e-1,2.7,,us-east5,us-east5-c
|
67
|
-
,tpu-v6e-1,1,,,tpu-v6e-1,2.97,,europe-west4,europe-west4-a
|
68
|
-
,tpu-v6e-1,1,,,tpu-v6e-1,3.24,,asia-northeast1,asia-northeast1-b
|
69
|
-
,tpu-v6e-1,1,,,tpu-v6e-1,2.7,,us-east1,us-east1-d
|
70
|
-
,tpu-v6e-4,1,,,tpu-v6e-4,10.8,,us-east5,us-east5-b
|
71
|
-
,tpu-v6e-4,1,,,tpu-v6e-4,10.8,,us-east5,us-east5-c
|
72
|
-
,tpu-v6e-4,1,,,tpu-v6e-4,11.88,,europe-west4,europe-west4-a
|
73
|
-
,tpu-v6e-4,1,,,tpu-v6e-4,12.96,,asia-northeast1,asia-northeast1-b
|
74
|
-
,tpu-v6e-4,1,,,tpu-v6e-4,10.8,,us-east1,us-east1-d
|
75
|
-
,tpu-v6e-8,1,,,tpu-v6e-8,21.6,,us-east5,us-east5-b
|
76
|
-
,tpu-v6e-8,1,,,tpu-v6e-8,21.6,,us-east5,us-east5-c
|
77
|
-
,tpu-v6e-8,1,,,tpu-v6e-8,23.76,,europe-west4,europe-west4-a
|
78
|
-
,tpu-v6e-8,1,,,tpu-v6e-8,25.92,,asia-northeast1,asia-northeast1-b
|
79
|
-
,tpu-v6e-8,1,,,tpu-v6e-8,21.6,,us-east1,us-east1-d
|
80
|
-
,tpu-v6e-16,1,,,tpu-v6e-16,43.2,,us-east5,us-east5-b
|
81
|
-
,tpu-v6e-16,1,,,tpu-v6e-16,43.2,,us-east5,us-east5-c
|
82
|
-
,tpu-v6e-16,1,,,tpu-v6e-16,47.52,,europe-west4,europe-west4-a
|
83
|
-
,tpu-v6e-16,1,,,tpu-v6e-16,51.84,,asia-northeast1,asia-northeast1-b
|
84
|
-
,tpu-v6e-16,1,,,tpu-v6e-16,43.2,,us-east1,us-east1-d
|
85
|
-
,tpu-v6e-32,1,,,tpu-v6e-32,86.4,,us-east5,us-east5-b
|
86
|
-
,tpu-v6e-32,1,,,tpu-v6e-32,86.4,,us-east5,us-east5-c
|
87
|
-
,tpu-v6e-32,1,,,tpu-v6e-32,95.04,,europe-west4,europe-west4-a
|
88
|
-
,tpu-v6e-32,1,,,tpu-v6e-32,103.68,,asia-northeast1,asia-northeast1-b
|
89
|
-
,tpu-v6e-32,1,,,tpu-v6e-32,86.4,,us-east1,us-east1-d
|
90
|
-
,tpu-v6e-64,1,,,tpu-v6e-64,172.8,,us-east5,us-east5-b
|
91
|
-
,tpu-v6e-64,1,,,tpu-v6e-64,172.8,,us-east5,us-east5-c
|
92
|
-
,tpu-v6e-64,1,,,tpu-v6e-64,190.08,,europe-west4,europe-west4-a
|
93
|
-
,tpu-v6e-64,1,,,tpu-v6e-64,207.36,,asia-northeast1,asia-northeast1-b
|
94
|
-
,tpu-v6e-64,1,,,tpu-v6e-64,172.8,,us-east1,us-east1-d
|
95
|
-
,tpu-v6e-128,1,,,tpu-v6e-128,345.6,,us-east5,us-east5-b
|
96
|
-
,tpu-v6e-128,1,,,tpu-v6e-128,345.6,,us-east5,us-east5-c
|
97
|
-
,tpu-v6e-128,1,,,tpu-v6e-128,380.16,,europe-west4,europe-west4-a
|
98
|
-
,tpu-v6e-128,1,,,tpu-v6e-128,414.72,,asia-northeast1,asia-northeast1-b
|
99
|
-
,tpu-v6e-128,1,,,tpu-v6e-128,345.6,,us-east1,us-east1-d
|
100
|
-
,tpu-v6e-256,1,,,tpu-v6e-256,691.2,,us-east5,us-east5-b
|
101
|
-
,tpu-v6e-256,1,,,tpu-v6e-256,691.2,,us-east5,us-east5-c
|
102
|
-
,tpu-v6e-256,1,,,tpu-v6e-256,760.32,,europe-west4,europe-west4-a
|
103
|
-
,tpu-v6e-256,1,,,tpu-v6e-256,829.44,,asia-northeast1,asia-northeast1-b
|
104
|
-
,tpu-v6e-256,1,,,tpu-v6e-256,691.2,,us-east1,us-east1-d
|
105
61
|
""")))
|
106
62
|
|
107
|
-
|
63
|
+
# TPU V6e price for us-central2 is missing in the SKUs.
|
64
|
+
TPU_V6E_MISSING_REGIONS = ['us-central2']
|
108
65
|
|
109
66
|
# TPU V5 is not visible in specific zones. We hardcode the missing zones here.
|
110
67
|
# NOTE(dev): Keep the zones and the df in sync.
|
@@ -670,6 +627,8 @@ def get_tpu_df(gce_skus: List[Dict[str, Any]],
|
|
670
627
|
return 'TpuV5p'
|
671
628
|
assert tpu_version == 'v5litepod', tpu_version
|
672
629
|
return 'TpuV5e'
|
630
|
+
if tpu_version.startswith('v6e'):
|
631
|
+
return 'TpuV6e'
|
673
632
|
return f'Tpu-{tpu_version}'
|
674
633
|
|
675
634
|
def get_tpu_price(row: pd.Series, spot: bool) -> Optional[float]:
|
@@ -684,10 +643,10 @@ def get_tpu_df(gce_skus: List[Dict[str, Any]],
|
|
684
643
|
# whether the TPU is a single device or a pod.
|
685
644
|
# For TPU-v4, the pricing is uniform, and thus the pricing API
|
686
645
|
# only provides the price of TPU-v4 pods.
|
687
|
-
# The price shown for v5 TPU is per chip hour, so there is
|
688
|
-
# keyword in the description.
|
646
|
+
# The price shown for v5 & v6e TPU is per chip hour, so there is
|
647
|
+
# no 'Pod' keyword in the description.
|
689
648
|
is_pod = ((num_cores > 8 or tpu_version == 'v4') and
|
690
|
-
not tpu_version.startswith('v5'))
|
649
|
+
not tpu_version.startswith('v5') and tpu_version != 'v6e')
|
691
650
|
|
692
651
|
for sku in gce_skus + tpu_skus:
|
693
652
|
if tpu_region not in sku['serviceRegions']:
|
@@ -718,7 +677,9 @@ def get_tpu_df(gce_skus: List[Dict[str, Any]],
|
|
718
677
|
# for v5e. Reference here:
|
719
678
|
# https://cloud.google.com/tpu/docs/v5p#using-accelerator-type
|
720
679
|
# https://cloud.google.com/tpu/docs/v5e#tpu-v5e-config
|
721
|
-
|
680
|
+
# v6e is also per chip price. Reference here:
|
681
|
+
# https://cloud.google.com/tpu/docs/v6e#configurations
|
682
|
+
core_per_sku = (1 if tpu_version in ['v5litepod', 'v6e'] else
|
722
683
|
2 if tpu_version == 'v5p' else 8)
|
723
684
|
tpu_core_price = tpu_device_price / core_per_sku
|
724
685
|
tpu_price = num_cores * tpu_core_price
|
@@ -738,8 +699,6 @@ def get_tpu_df(gce_skus: List[Dict[str, Any]],
|
|
738
699
|
spot_str = 'spot ' if spot else ''
|
739
700
|
print(f'The {spot_str}price of {tpu_name} in {tpu_region} is '
|
740
701
|
'not found in SKUs or hidden TPU price DF.')
|
741
|
-
# TODO(tian): Hack. Should investigate how to retrieve the price
|
742
|
-
# for TPU-v6e.
|
743
702
|
if (tpu_name.startswith('tpu-v6e') and
|
744
703
|
tpu_region in TPU_V6E_MISSING_REGIONS):
|
745
704
|
if not spot:
|
@@ -10,6 +10,8 @@ History:
|
|
10
10
|
from ubuntu 20.04 to ubuntu 22.04, including:
|
11
11
|
- GPU: skypilot:gpu-ubuntu-2004 -> skypilot:gpu-ubuntu-2204
|
12
12
|
- CPU: skypilot:cpu-ubuntu-2004 -> skypilot:cpu-ubuntu-2204
|
13
|
+
- Hysun He (hysun.he@oracle.com) @ Jan.01, 2025: Support reuse existing
|
14
|
+
VCN for SkyServe.
|
13
15
|
"""
|
14
16
|
import os
|
15
17
|
|
@@ -109,8 +111,15 @@ class OCIConfig:
|
|
109
111
|
('oci', region, 'compartment_ocid'), default_compartment_ocid)
|
110
112
|
return compartment
|
111
113
|
|
114
|
+
@classmethod
|
115
|
+
def get_vcn_ocid(cls, region):
|
116
|
+
# Will reuse the regional VCN if specified.
|
117
|
+
vcn = skypilot_config.get_nested(('oci', region, 'vcn_ocid'), None)
|
118
|
+
return vcn
|
119
|
+
|
112
120
|
@classmethod
|
113
121
|
def get_vcn_subnet(cls, region):
|
122
|
+
# Will reuse the subnet if specified.
|
114
123
|
vcn = skypilot_config.get_nested(('oci', region, 'vcn_subnet'), None)
|
115
124
|
return vcn
|
116
125
|
|
@@ -38,6 +38,13 @@ class DockerLoginConfig:
|
|
38
38
|
password: str
|
39
39
|
server: str
|
40
40
|
|
41
|
+
def format_image(self, image: str) -> str:
|
42
|
+
"""Format the image name with the server prefix."""
|
43
|
+
server_prefix = f'{self.server}/'
|
44
|
+
if not image.startswith(server_prefix):
|
45
|
+
return f'{server_prefix}{image}'
|
46
|
+
return image
|
47
|
+
|
41
48
|
@classmethod
|
42
49
|
def from_env_vars(cls, d: Dict[str, str]) -> 'DockerLoginConfig':
|
43
50
|
return cls(
|
@@ -220,9 +227,7 @@ class DockerInitializer:
|
|
220
227
|
wait_for_docker_daemon=True)
|
221
228
|
# We automatically add the server prefix to the image name if
|
222
229
|
# the user did not add it.
|
223
|
-
|
224
|
-
if not specific_image.startswith(server_prefix):
|
225
|
-
specific_image = f'{server_prefix}{specific_image}'
|
230
|
+
specific_image = docker_login_config.format_image(specific_image)
|
226
231
|
|
227
232
|
if self.docker_config.get('pull_before_run', True):
|
228
233
|
assert specific_image, ('Image must be included in config if ' +
|
@@ -7,6 +7,8 @@ History:
|
|
7
7
|
find_compartment: allow search subtree when find a compartment.
|
8
8
|
- Hysun He (hysun.he@oracle.com) @ Nov.12, 2024: Add methods to
|
9
9
|
Add/remove security rules: create_nsg_rules & remove_nsg
|
10
|
+
- Hysun He (hysun.he@oracle.com) @ Jan.01, 2025: Support reuse existing
|
11
|
+
VCN for SkyServe.
|
10
12
|
"""
|
11
13
|
from datetime import datetime
|
12
14
|
import functools
|
@@ -17,7 +19,6 @@ import traceback
|
|
17
19
|
import typing
|
18
20
|
from typing import List, Optional, Tuple
|
19
21
|
|
20
|
-
from sky import exceptions
|
21
22
|
from sky import sky_logging
|
22
23
|
from sky.adaptors import common as adaptors_common
|
23
24
|
from sky.adaptors import oci as oci_adaptor
|
@@ -496,26 +497,25 @@ class QueryHelper:
|
|
496
497
|
|
497
498
|
compartment = cls.find_compartment(region)
|
498
499
|
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
raise exceptions.ResourcesUnavailableError(
|
507
|
-
'The VCN is not available')
|
500
|
+
vcn_id = oci_utils.oci_config.get_vcn_ocid(region)
|
501
|
+
if vcn_id is None:
|
502
|
+
list_vcns_resp = net_client.list_vcns(
|
503
|
+
compartment_id=compartment,
|
504
|
+
display_name=oci_utils.oci_config.VCN_NAME,
|
505
|
+
lifecycle_state='AVAILABLE',
|
506
|
+
)
|
508
507
|
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
508
|
+
# Get the primary vnic. The vnic might be an empty list for the
|
509
|
+
# corner case when the cluster was exited during provision.
|
510
|
+
if not list_vcns_resp.data:
|
511
|
+
return None
|
513
512
|
|
514
|
-
|
513
|
+
vcn = list_vcns_resp.data[0]
|
514
|
+
vcn_id = vcn.id
|
515
515
|
|
516
516
|
list_nsg_resp = net_client.list_network_security_groups(
|
517
517
|
compartment_id=compartment,
|
518
|
-
vcn_id=
|
518
|
+
vcn_id=vcn_id,
|
519
519
|
limit=1,
|
520
520
|
display_name=nsg_name,
|
521
521
|
)
|
@@ -532,7 +532,7 @@ class QueryHelper:
|
|
532
532
|
create_network_security_group_details=oci_adaptor.oci.core.models.
|
533
533
|
CreateNetworkSecurityGroupDetails(
|
534
534
|
compartment_id=compartment,
|
535
|
-
vcn_id=
|
535
|
+
vcn_id=vcn_id,
|
536
536
|
display_name=nsg_name,
|
537
537
|
))
|
538
538
|
get_nsg_resp = net_client.get_network_security_group(
|
@@ -83,7 +83,8 @@ def run_instances(region: str, cluster_name_on_cloud: str,
|
|
83
83
|
node_type = 'head' if head_instance_id is None else 'worker'
|
84
84
|
try:
|
85
85
|
instance_id = utils.launch(
|
86
|
-
|
86
|
+
cluster_name=cluster_name_on_cloud,
|
87
|
+
node_type=node_type,
|
87
88
|
instance_type=config.node_config['InstanceType'],
|
88
89
|
region=region,
|
89
90
|
disk_size=config.node_config['DiskSize'],
|
@@ -92,6 +93,8 @@ def run_instances(region: str, cluster_name_on_cloud: str,
|
|
92
93
|
public_key=config.node_config['PublicKey'],
|
93
94
|
preemptible=config.node_config['Preemptible'],
|
94
95
|
bid_per_gpu=config.node_config['BidPerGPU'],
|
96
|
+
docker_login_config=config.provider_config.get(
|
97
|
+
'docker_login_config'),
|
95
98
|
)
|
96
99
|
except Exception as e: # pylint: disable=broad-except
|
97
100
|
logger.warning(f'run_instances error: {e}')
|
@@ -145,6 +148,8 @@ def terminate_instances(
|
|
145
148
|
"""See sky/provision/__init__.py"""
|
146
149
|
del provider_config # unused
|
147
150
|
instances = _filter_instances(cluster_name_on_cloud, None)
|
151
|
+
template_name, registry_auth_id = utils.get_registry_auth_resources(
|
152
|
+
cluster_name_on_cloud)
|
148
153
|
for inst_id, inst in instances.items():
|
149
154
|
logger.debug(f'Terminating instance {inst_id}: {inst}')
|
150
155
|
if worker_only and inst['name'].endswith('-head'):
|
@@ -157,6 +162,10 @@ def terminate_instances(
|
|
157
162
|
f'Failed to terminate instance {inst_id}: '
|
158
163
|
f'{common_utils.format_exception(e, use_bracket=False)}'
|
159
164
|
) from e
|
165
|
+
if template_name is not None:
|
166
|
+
utils.delete_pod_template(template_name)
|
167
|
+
if registry_auth_id is not None:
|
168
|
+
utils.delete_register_auth(registry_auth_id)
|
160
169
|
|
161
170
|
|
162
171
|
def get_cluster_info(
|
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
import base64
|
4
4
|
import time
|
5
|
-
from typing import Any, Dict, List, Optional
|
5
|
+
from typing import Any, Dict, List, Optional, Tuple
|
6
6
|
|
7
7
|
from sky import sky_logging
|
8
8
|
from sky.adaptors import runpod
|
9
|
+
from sky.provision import docker_utils
|
9
10
|
import sky.provision.runpod.api.commands as runpod_commands
|
10
11
|
from sky.skylet import constants
|
11
12
|
from sky.utils import common_utils
|
@@ -47,6 +48,11 @@ GPU_NAME_MAP = {
|
|
47
48
|
}
|
48
49
|
|
49
50
|
|
51
|
+
def _construct_docker_login_template_name(cluster_name: str) -> str:
|
52
|
+
"""Constructs the registry auth template name."""
|
53
|
+
return f'{cluster_name}-docker-login-template'
|
54
|
+
|
55
|
+
|
50
56
|
def retry(func):
|
51
57
|
"""Decorator to retry a function."""
|
52
58
|
|
@@ -66,9 +72,83 @@ def retry(func):
|
|
66
72
|
return wrapper
|
67
73
|
|
68
74
|
|
75
|
+
# Adapted from runpod.api.queries.pods.py::QUERY_POD.
|
76
|
+
# Adding containerRegistryAuthId to the query.
|
77
|
+
_QUERY_POD = """
|
78
|
+
query myPods {
|
79
|
+
myself {
|
80
|
+
pods {
|
81
|
+
id
|
82
|
+
containerDiskInGb
|
83
|
+
containerRegistryAuthId
|
84
|
+
costPerHr
|
85
|
+
desiredStatus
|
86
|
+
dockerArgs
|
87
|
+
dockerId
|
88
|
+
env
|
89
|
+
gpuCount
|
90
|
+
imageName
|
91
|
+
lastStatusChange
|
92
|
+
machineId
|
93
|
+
memoryInGb
|
94
|
+
name
|
95
|
+
podType
|
96
|
+
port
|
97
|
+
ports
|
98
|
+
uptimeSeconds
|
99
|
+
vcpuCount
|
100
|
+
volumeInGb
|
101
|
+
volumeMountPath
|
102
|
+
runtime {
|
103
|
+
ports{
|
104
|
+
ip
|
105
|
+
isIpPublic
|
106
|
+
privatePort
|
107
|
+
publicPort
|
108
|
+
type
|
109
|
+
}
|
110
|
+
}
|
111
|
+
machine {
|
112
|
+
gpuDisplayName
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
"""
|
118
|
+
|
119
|
+
|
120
|
+
def _sky_get_pods() -> dict:
|
121
|
+
"""List all pods with extra registry auth information.
|
122
|
+
|
123
|
+
Adapted from runpod.get_pods() to include containerRegistryAuthId.
|
124
|
+
"""
|
125
|
+
raw_return = runpod.runpod.api.graphql.run_graphql_query(_QUERY_POD)
|
126
|
+
cleaned_return = raw_return['data']['myself']['pods']
|
127
|
+
return cleaned_return
|
128
|
+
|
129
|
+
|
130
|
+
_QUERY_POD_TEMPLATE_WITH_REGISTRY_AUTH = """
|
131
|
+
query myself {
|
132
|
+
myself {
|
133
|
+
podTemplates {
|
134
|
+
name
|
135
|
+
containerRegistryAuthId
|
136
|
+
}
|
137
|
+
}
|
138
|
+
}
|
139
|
+
"""
|
140
|
+
|
141
|
+
|
142
|
+
def _list_pod_templates_with_container_registry() -> dict:
|
143
|
+
"""List all pod templates."""
|
144
|
+
raw_return = runpod.runpod.api.graphql.run_graphql_query(
|
145
|
+
_QUERY_POD_TEMPLATE_WITH_REGISTRY_AUTH)
|
146
|
+
return raw_return['data']['myself']['podTemplates']
|
147
|
+
|
148
|
+
|
69
149
|
def list_instances() -> Dict[str, Dict[str, Any]]:
|
70
150
|
"""Lists instances associated with API key."""
|
71
|
-
instances =
|
151
|
+
instances = _sky_get_pods()
|
72
152
|
|
73
153
|
instance_dict: Dict[str, Dict[str, Any]] = {}
|
74
154
|
for instance in instances:
|
@@ -100,14 +180,75 @@ def list_instances() -> Dict[str, Dict[str, Any]]:
|
|
100
180
|
return instance_dict
|
101
181
|
|
102
182
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
183
|
+
def delete_pod_template(template_name: str) -> None:
|
184
|
+
"""Deletes a pod template."""
|
185
|
+
try:
|
186
|
+
runpod.runpod.api.graphql.run_graphql_query(
|
187
|
+
f'mutation {{deleteTemplate(templateName: "{template_name}")}}')
|
188
|
+
except runpod.runpod.error.QueryError as e:
|
189
|
+
logger.warning(f'Failed to delete template {template_name}: {e}'
|
190
|
+
'Please delete it manually.')
|
191
|
+
|
192
|
+
|
193
|
+
def delete_register_auth(registry_auth_id: str) -> None:
|
194
|
+
"""Deletes a registry auth."""
|
195
|
+
try:
|
196
|
+
runpod.runpod.delete_container_registry_auth(registry_auth_id)
|
197
|
+
except runpod.runpod.error.QueryError as e:
|
198
|
+
logger.warning(f'Failed to delete registry auth {registry_auth_id}: {e}'
|
199
|
+
'Please delete it manually.')
|
200
|
+
|
201
|
+
|
202
|
+
def _create_template_for_docker_login(
|
203
|
+
cluster_name: str,
|
204
|
+
image_name: str,
|
205
|
+
docker_login_config: Optional[Dict[str, str]],
|
206
|
+
) -> Tuple[str, Optional[str]]:
|
207
|
+
"""Creates a template for the given image with the docker login config.
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
formatted_image_name: The formatted image name.
|
211
|
+
template_id: The template ID. None for no docker login config.
|
212
|
+
"""
|
213
|
+
if docker_login_config is None:
|
214
|
+
return image_name, None
|
215
|
+
login_config = docker_utils.DockerLoginConfig(**docker_login_config)
|
216
|
+
container_registry_auth_name = f'{cluster_name}-registry-auth'
|
217
|
+
container_template_name = _construct_docker_login_template_name(
|
218
|
+
cluster_name)
|
219
|
+
# The `name` argument is only for display purpose and the registry server
|
220
|
+
# will be splitted from the docker image name (Tested with AWS ECR).
|
221
|
+
# Here we only need the username and password to create the registry auth.
|
222
|
+
# TODO(tian): Now we create a template and a registry auth for each cluster.
|
223
|
+
# Consider create one for each server and reuse them. Challenges including
|
224
|
+
# calculate the reference count and delete them when no longer needed.
|
225
|
+
create_auth_resp = runpod.runpod.create_container_registry_auth(
|
226
|
+
name=container_registry_auth_name,
|
227
|
+
username=login_config.username,
|
228
|
+
password=login_config.password,
|
229
|
+
)
|
230
|
+
registry_auth_id = create_auth_resp['id']
|
231
|
+
create_template_resp = runpod.runpod.create_template(
|
232
|
+
name=container_template_name,
|
233
|
+
image_name=None,
|
234
|
+
registry_auth_id=registry_auth_id,
|
235
|
+
)
|
236
|
+
return login_config.format_image(image_name), create_template_resp['id']
|
237
|
+
|
238
|
+
|
239
|
+
def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
|
240
|
+
disk_size: int, image_name: str, ports: Optional[List[int]],
|
241
|
+
public_key: str, preemptible: Optional[bool], bid_per_gpu: float,
|
242
|
+
docker_login_config: Optional[Dict[str, str]]) -> str:
|
106
243
|
"""Launches an instance with the given parameters.
|
107
244
|
|
108
245
|
Converts the instance_type to the RunPod GPU name, finds the specs for the
|
109
246
|
GPU, and launches the instance.
|
247
|
+
|
248
|
+
Returns:
|
249
|
+
instance_id: The instance ID.
|
110
250
|
"""
|
251
|
+
name = f'{cluster_name}-{node_type}'
|
111
252
|
gpu_type = GPU_NAME_MAP[instance_type.split('_')[1]]
|
112
253
|
gpu_quantity = int(instance_type.split('_')[0].replace('x', ''))
|
113
254
|
cloud_type = instance_type.split('_')[2]
|
@@ -139,21 +280,24 @@ def launch(name: str, instance_type: str, region: str, disk_size: int,
|
|
139
280
|
# Use base64 to deal with the tricky quoting issues caused by runpod API.
|
140
281
|
encoded = base64.b64encode(setup_cmd.encode('utf-8')).decode('utf-8')
|
141
282
|
|
283
|
+
docker_args = (f'bash -c \'echo {encoded} | base64 --decode > init.sh; '
|
284
|
+
f'bash init.sh\'')
|
285
|
+
|
142
286
|
# Port 8081 is occupied for nginx in the base image.
|
143
287
|
custom_ports_str = ''
|
144
288
|
if ports is not None:
|
145
289
|
custom_ports_str = ''.join([f'{p}/tcp,' for p in ports])
|
290
|
+
ports_str = (f'22/tcp,'
|
291
|
+
f'{custom_ports_str}'
|
292
|
+
f'{constants.SKY_REMOTE_RAY_DASHBOARD_PORT}/http,'
|
293
|
+
f'{constants.SKY_REMOTE_RAY_PORT}/http')
|
146
294
|
|
147
|
-
|
148
|
-
|
149
|
-
ports = (f'22/tcp,'
|
150
|
-
f'{custom_ports_str}'
|
151
|
-
f'{constants.SKY_REMOTE_RAY_DASHBOARD_PORT}/http,'
|
152
|
-
f'{constants.SKY_REMOTE_RAY_PORT}/http')
|
295
|
+
image_name_formatted, template_id = _create_template_for_docker_login(
|
296
|
+
cluster_name, image_name, docker_login_config)
|
153
297
|
|
154
298
|
params = {
|
155
299
|
'name': name,
|
156
|
-
'image_name':
|
300
|
+
'image_name': image_name_formatted,
|
157
301
|
'gpu_type_id': gpu_type,
|
158
302
|
'cloud_type': cloud_type,
|
159
303
|
'container_disk_in_gb': disk_size,
|
@@ -161,9 +305,10 @@ def launch(name: str, instance_type: str, region: str, disk_size: int,
|
|
161
305
|
'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
|
162
306
|
'gpu_count': gpu_quantity,
|
163
307
|
'country_code': region,
|
164
|
-
'ports':
|
308
|
+
'ports': ports_str,
|
165
309
|
'support_public_ip': True,
|
166
310
|
'docker_args': docker_args,
|
311
|
+
'template_id': template_id,
|
167
312
|
}
|
168
313
|
|
169
314
|
if preemptible is None or not preemptible:
|
@@ -177,6 +322,18 @@ def launch(name: str, instance_type: str, region: str, disk_size: int,
|
|
177
322
|
return new_instance['id']
|
178
323
|
|
179
324
|
|
325
|
+
def get_registry_auth_resources(
|
326
|
+
cluster_name: str) -> Tuple[Optional[str], Optional[str]]:
|
327
|
+
"""Gets the registry auth resources."""
|
328
|
+
container_registry_auth_name = _construct_docker_login_template_name(
|
329
|
+
cluster_name)
|
330
|
+
for template in _list_pod_templates_with_container_registry():
|
331
|
+
if template['name'] == container_registry_auth_name:
|
332
|
+
return container_registry_auth_name, template[
|
333
|
+
'containerRegistryAuthId']
|
334
|
+
return None, None
|
335
|
+
|
336
|
+
|
180
337
|
def remove(instance_id: str) -> None:
|
181
338
|
"""Terminates the given instance."""
|
182
339
|
runpod.runpod.terminate_pod(instance_id)
|
@@ -123,7 +123,9 @@ extras_require: Dict[str, List[str]] = {
|
|
123
123
|
'oci': ['oci'] + local_ray,
|
124
124
|
'kubernetes': ['kubernetes>=20.0.0'],
|
125
125
|
'remote': remote,
|
126
|
-
|
126
|
+
# For the container registry auth api. Reference:
|
127
|
+
# https://github.com/runpod/runpod-python/releases/tag/1.6.1
|
128
|
+
'runpod': ['runpod>=1.6.1'],
|
127
129
|
'fluidstack': [], # No dependencies needed for fluidstack
|
128
130
|
'cudo': ['cudo-compute>=0.1.10'],
|
129
131
|
'paperspace': [], # No dependencies needed for paperspace
|
@@ -25,7 +25,7 @@ def docker_start_cmds(
|
|
25
25
|
docker_cmd,
|
26
26
|
):
|
27
27
|
"""Generating docker start command without --rm.
|
28
|
-
|
28
|
+
|
29
29
|
The code is borrowed from `ray.autoscaler._private.docker`.
|
30
30
|
|
31
31
|
Changes we made:
|
@@ -159,19 +159,17 @@ class SkyDockerCommandRunner(DockerCommandRunner):
|
|
159
159
|
return True
|
160
160
|
|
161
161
|
# SkyPilot: Docker login if user specified a private docker registry.
|
162
|
-
if
|
162
|
+
if 'docker_login_config' in self.docker_config:
|
163
163
|
# TODO(tian): Maybe support a command to get the login password?
|
164
|
-
docker_login_config: docker_utils.DockerLoginConfig =
|
165
|
-
|
164
|
+
docker_login_config: docker_utils.DockerLoginConfig = (
|
165
|
+
self.docker_config['docker_login_config'])
|
166
166
|
self._run_with_retry(
|
167
167
|
f'{self.docker_cmd} login --username '
|
168
168
|
f'{docker_login_config.username} --password '
|
169
169
|
f'{docker_login_config.password} {docker_login_config.server}')
|
170
170
|
# We automatically add the server prefix to the image name if
|
171
171
|
# the user did not add it.
|
172
|
-
|
173
|
-
if not specific_image.startswith(server_prefix):
|
174
|
-
specific_image = f'{server_prefix}{specific_image}'
|
172
|
+
specific_image = docker_login_config.format_image(specific_image)
|
175
173
|
|
176
174
|
if self.docker_config.get('pull_before_run', True):
|
177
175
|
assert specific_image, ('Image must be included in config if '
|
@@ -10,6 +10,19 @@ provider:
|
|
10
10
|
module: sky.provision.runpod
|
11
11
|
region: "{{region}}"
|
12
12
|
disable_launch_config_check: true
|
13
|
+
# For RunPod, we directly set the image id for the docker as runtime environment
|
14
|
+
# support, thus we need to avoid the DockerInitializer detects the docker field
|
15
|
+
# and performs the initialization. Therefore we put the docker login config in
|
16
|
+
# the provider config here.
|
17
|
+
{%- if docker_login_config is not none %}
|
18
|
+
docker_login_config:
|
19
|
+
username: |-
|
20
|
+
{{docker_login_config.username}}
|
21
|
+
password: |-
|
22
|
+
{{docker_login_config.password}}
|
23
|
+
server: |-
|
24
|
+
{{docker_login_config.server}}
|
25
|
+
{%- endif %}
|
13
26
|
|
14
27
|
auth:
|
15
28
|
ssh_user: root
|