skypilot-nightly 1.0.0.dev20241023__tar.gz → 1.0.0.dev20241024__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.dev20241023/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241024}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/__init__.py +4 -2
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/azure.py +11 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/cli.py +23 -15
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/cloud.py +4 -0
- skypilot_nightly-1.0.0.dev20241024/sky/clouds/cloud_registry.py +76 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/kubernetes.py +1 -1
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/azure/config.py +1 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/azure/instance.py +160 -87
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/azure-ray.yml.j2 +2 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024/skypilot_nightly.egg-info}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/skypilot_nightly.egg-info/SOURCES.txt +0 -1
- skypilot_nightly-1.0.0.dev20241024/tests/test_api.py +20 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_cli.py +37 -1
- skypilot_nightly-1.0.0.dev20241023/sky/clouds/cloud_registry.py +0 -31
- skypilot_nightly-1.0.0.dev20241023/sky/provision/azure/azure-vm-template.json +0 -301
- skypilot_nightly-1.0.0.dev20241023/tests/test_api.py +0 -7
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/backend_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/cloud_vm_ray_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/mounting_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/exceptions.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/oci/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/oci/query_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/oci/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/cluster_yaml_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/common_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/controller_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/skypilot_nightly.egg-info/requires.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/tests/test_yaml_parser.py +0 -0
@@ -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 = 'cbf5c0022ad920edb4f41cfad65a2cf4909d5930'
|
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.dev20241024'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
@@ -128,6 +128,7 @@ GCP = clouds.GCP
|
|
128
128
|
Lambda = clouds.Lambda
|
129
129
|
SCP = clouds.SCP
|
130
130
|
Kubernetes = clouds.Kubernetes
|
131
|
+
K8s = Kubernetes
|
131
132
|
OCI = clouds.OCI
|
132
133
|
Paperspace = clouds.Paperspace
|
133
134
|
RunPod = clouds.RunPod
|
@@ -143,6 +144,7 @@ __all__ = [
|
|
143
144
|
'GCP',
|
144
145
|
'IBM',
|
145
146
|
'Kubernetes',
|
147
|
+
'K8s',
|
146
148
|
'Lambda',
|
147
149
|
'OCI',
|
148
150
|
'Paperspace',
|
{skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/adaptors/azure.py
RENAMED
@@ -69,6 +69,17 @@ def exceptions():
|
|
69
69
|
return azure_exceptions
|
70
70
|
|
71
71
|
|
72
|
+
@functools.lru_cache()
|
73
|
+
@common.load_lazy_modules(modules=_LAZY_MODULES)
|
74
|
+
def azure_mgmt_models(name: str):
|
75
|
+
if name == 'compute':
|
76
|
+
from azure.mgmt.compute import models
|
77
|
+
return models
|
78
|
+
elif name == 'network':
|
79
|
+
from azure.mgmt.network import models
|
80
|
+
return models
|
81
|
+
|
82
|
+
|
72
83
|
# We should keep the order of the decorators having 'lru_cache' followed
|
73
84
|
# by 'load_lazy_modules' as we need to make sure a caller can call
|
74
85
|
# 'get_client.cache_clear', which is a function provided by 'lru_cache'
|
@@ -339,7 +339,6 @@ def _get_shell_complete_args(complete_fn):
|
|
339
339
|
|
340
340
|
|
341
341
|
_RELOAD_ZSH_CMD = 'source ~/.zshrc'
|
342
|
-
_RELOAD_FISH_CMD = 'source ~/.config/fish/config.fish'
|
343
342
|
_RELOAD_BASH_CMD = 'source ~/.bashrc'
|
344
343
|
|
345
344
|
|
@@ -378,7 +377,9 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
|
|
378
377
|
cmd = '_SKY_COMPLETE=fish_source sky > \
|
379
378
|
~/.config/fish/completions/sky.fish'
|
380
379
|
|
381
|
-
|
380
|
+
# Fish does not need to be reloaded and will automatically pick up
|
381
|
+
# completions.
|
382
|
+
reload_cmd = None
|
382
383
|
|
383
384
|
elif value == 'zsh':
|
384
385
|
install_cmd = f'_SKY_COMPLETE=zsh_source sky > \
|
@@ -398,9 +399,10 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
|
|
398
399
|
check=True,
|
399
400
|
executable=shutil.which('bash'))
|
400
401
|
click.secho(f'Shell completion installed for {value}', fg='green')
|
401
|
-
|
402
|
-
|
403
|
-
|
402
|
+
if reload_cmd is not None:
|
403
|
+
click.echo(
|
404
|
+
'Completion will take effect once you restart the terminal: ' +
|
405
|
+
click.style(f'{reload_cmd}', bold=True))
|
404
406
|
except subprocess.CalledProcessError as e:
|
405
407
|
click.secho(f'> Installation failed with code {e.returncode}', fg='red')
|
406
408
|
ctx.exit()
|
@@ -431,7 +433,9 @@ def _uninstall_shell_completion(ctx: click.Context, param: click.Parameter,
|
|
431
433
|
|
432
434
|
elif value == 'fish':
|
433
435
|
cmd = 'rm -f ~/.config/fish/completions/sky.fish'
|
434
|
-
|
436
|
+
# Fish does not need to be reloaded and will automatically pick up
|
437
|
+
# completions.
|
438
|
+
reload_cmd = None
|
435
439
|
|
436
440
|
elif value == 'zsh':
|
437
441
|
cmd = 'sed -i"" -e "/# For SkyPilot shell completion/d" ~/.zshrc && \
|
@@ -447,8 +451,10 @@ def _uninstall_shell_completion(ctx: click.Context, param: click.Parameter,
|
|
447
451
|
try:
|
448
452
|
subprocess.run(cmd, shell=True, check=True)
|
449
453
|
click.secho(f'Shell completion uninstalled for {value}', fg='green')
|
450
|
-
|
451
|
-
|
454
|
+
if reload_cmd is not None:
|
455
|
+
click.echo(
|
456
|
+
'Changes will take effect once you restart the terminal: ' +
|
457
|
+
click.style(f'{reload_cmd}', bold=True))
|
452
458
|
except subprocess.CalledProcessError as e:
|
453
459
|
click.secho(f'> Uninstallation failed with code {e.returncode}',
|
454
460
|
fg='red')
|
@@ -3056,7 +3062,8 @@ def show_gpus(
|
|
3056
3062
|
|
3057
3063
|
# This will validate 'cloud' and raise if not found.
|
3058
3064
|
cloud_obj = sky_clouds.CLOUD_REGISTRY.from_str(cloud)
|
3059
|
-
|
3065
|
+
cloud_name = cloud_obj.canonical_name() if cloud_obj is not None else None
|
3066
|
+
service_catalog.validate_region_zone(region, None, clouds=cloud_name)
|
3060
3067
|
show_all = all
|
3061
3068
|
if show_all and accelerator_str is not None:
|
3062
3069
|
raise click.UsageError('--all is only allowed without a GPU name.')
|
@@ -3142,8 +3149,8 @@ def show_gpus(
|
|
3142
3149
|
# Optimization - do not poll for Kubernetes API for fetching
|
3143
3150
|
# common GPUs because that will be fetched later for the table after
|
3144
3151
|
# common GPUs.
|
3145
|
-
clouds_to_list =
|
3146
|
-
if
|
3152
|
+
clouds_to_list = cloud_name
|
3153
|
+
if cloud_name is None:
|
3147
3154
|
clouds_to_list = [
|
3148
3155
|
c for c in service_catalog.ALL_CLOUDS if c != 'kubernetes'
|
3149
3156
|
]
|
@@ -3153,7 +3160,8 @@ def show_gpus(
|
|
3153
3160
|
# Collect k8s related messages in k8s_messages and print them at end
|
3154
3161
|
print_section_titles = False
|
3155
3162
|
# If cloud is kubernetes, we want to show real-time capacity
|
3156
|
-
if kubernetes_is_enabled and (
|
3163
|
+
if kubernetes_is_enabled and (cloud_name is None or
|
3164
|
+
cloud_is_kubernetes):
|
3157
3165
|
if region:
|
3158
3166
|
context = region
|
3159
3167
|
else:
|
@@ -3263,8 +3271,8 @@ def show_gpus(
|
|
3263
3271
|
name, quantity = accelerator_str, None
|
3264
3272
|
|
3265
3273
|
print_section_titles = False
|
3266
|
-
if (kubernetes_is_enabled and
|
3267
|
-
|
3274
|
+
if (kubernetes_is_enabled and
|
3275
|
+
(cloud_name is None or cloud_is_kubernetes) and not show_all):
|
3268
3276
|
# Print section title if not showing all and instead a specific
|
3269
3277
|
# accelerator is requested
|
3270
3278
|
print_section_titles = True
|
@@ -3336,7 +3344,7 @@ def show_gpus(
|
|
3336
3344
|
if len(result) == 0:
|
3337
3345
|
quantity_str = (f' with requested quantity {quantity}'
|
3338
3346
|
if quantity else '')
|
3339
|
-
cloud_str = f' on {cloud_obj}.' if
|
3347
|
+
cloud_str = f' on {cloud_obj}.' if cloud_name else ' in cloud catalogs.'
|
3340
3348
|
yield f'Resources \'{name}\'{quantity_str} not found{cloud_str} '
|
3341
3349
|
yield 'To show available accelerators, run: sky show-gpus --all'
|
3342
3350
|
return
|
@@ -0,0 +1,76 @@
|
|
1
|
+
"""Clouds need to be registered in CLOUD_REGISTRY to be discovered"""
|
2
|
+
|
3
|
+
import typing
|
4
|
+
from typing import Callable, Dict, List, Optional, overload, Type, Union
|
5
|
+
|
6
|
+
from sky.utils import ux_utils
|
7
|
+
|
8
|
+
if typing.TYPE_CHECKING:
|
9
|
+
from sky.clouds import cloud
|
10
|
+
|
11
|
+
|
12
|
+
class _CloudRegistry(dict):
|
13
|
+
"""Registry of clouds."""
|
14
|
+
|
15
|
+
def __init__(self) -> None:
|
16
|
+
super().__init__()
|
17
|
+
self.aliases: Dict[str, str] = {}
|
18
|
+
|
19
|
+
def from_str(self, name: Optional[str]) -> Optional['cloud.Cloud']:
|
20
|
+
"""Returns the cloud instance from the canonical name or alias."""
|
21
|
+
if name is None:
|
22
|
+
return None
|
23
|
+
|
24
|
+
search_name = name.lower()
|
25
|
+
|
26
|
+
if search_name in self:
|
27
|
+
return self[search_name]
|
28
|
+
|
29
|
+
if search_name in self.aliases:
|
30
|
+
return self[self.aliases[search_name]]
|
31
|
+
|
32
|
+
with ux_utils.print_exception_no_traceback():
|
33
|
+
raise ValueError(f'Cloud {name!r} is not a valid cloud among '
|
34
|
+
f'{[*self.keys(), *self.aliases.keys()]}')
|
35
|
+
|
36
|
+
@overload
|
37
|
+
def register(self, cloud_cls: Type['cloud.Cloud']) -> Type['cloud.Cloud']:
|
38
|
+
...
|
39
|
+
|
40
|
+
@overload
|
41
|
+
def register(
|
42
|
+
self,
|
43
|
+
cloud_cls: None = None,
|
44
|
+
aliases: Optional[List[str]] = None,
|
45
|
+
) -> Callable[[Type['cloud.Cloud']], Type['cloud.Cloud']]:
|
46
|
+
...
|
47
|
+
|
48
|
+
def register(
|
49
|
+
self,
|
50
|
+
cloud_cls: Optional[Type['cloud.Cloud']] = None,
|
51
|
+
aliases: Optional[List[str]] = None,
|
52
|
+
) -> Union[Type['cloud.Cloud'], Callable[[Type['cloud.Cloud']],
|
53
|
+
Type['cloud.Cloud']]]:
|
54
|
+
|
55
|
+
def _register(cloud_cls: Type['cloud.Cloud']) -> Type['cloud.Cloud']:
|
56
|
+
name = cloud_cls.canonical_name()
|
57
|
+
assert name not in self, f'{name} already registered'
|
58
|
+
self[name] = cloud_cls()
|
59
|
+
|
60
|
+
for alias in aliases or []:
|
61
|
+
alias = alias.lower()
|
62
|
+
assert alias not in self.aliases, (
|
63
|
+
f'alias {alias} already registered')
|
64
|
+
self.aliases[alias] = name
|
65
|
+
|
66
|
+
return cloud_cls
|
67
|
+
|
68
|
+
if cloud_cls is not None:
|
69
|
+
# invocation without parens (e.g. just `@register`)
|
70
|
+
return _register(cloud_cls)
|
71
|
+
|
72
|
+
# Invocation with parens (e.g. `@register(aliases=['alias'])`)
|
73
|
+
return _register
|
74
|
+
|
75
|
+
|
76
|
+
CLOUD_REGISTRY: _CloudRegistry = _CloudRegistry()
|
{skypilot_nightly-1.0.0.dev20241023 → skypilot_nightly-1.0.0.dev20241024}/sky/clouds/kubernetes.py
RENAMED
@@ -33,7 +33,7 @@ CREDENTIAL_PATH = os.environ.get('KUBECONFIG', DEFAULT_KUBECONFIG_PATH)
|
|
33
33
|
_SKYPILOT_SYSTEM_NAMESPACE = 'skypilot-system'
|
34
34
|
|
35
35
|
|
36
|
-
@clouds.CLOUD_REGISTRY.register
|
36
|
+
@clouds.CLOUD_REGISTRY.register(aliases=['k8s'])
|
37
37
|
class Kubernetes(clouds.Cloud):
|
38
38
|
"""Kubernetes."""
|
39
39
|
|
@@ -46,6 +46,7 @@ def bootstrap_instances(
|
|
46
46
|
region: str, cluster_name_on_cloud: str,
|
47
47
|
config: common.ProvisionConfig) -> common.ProvisionConfig:
|
48
48
|
"""See sky/provision/__init__.py"""
|
49
|
+
# TODO: use new azure sdk instead of ARM deployment.
|
49
50
|
del region # unused
|
50
51
|
provider_config = config.provider_config
|
51
52
|
subscription_id = provider_config.get('subscription_id')
|
@@ -2,10 +2,8 @@
|
|
2
2
|
import base64
|
3
3
|
import copy
|
4
4
|
import enum
|
5
|
-
import json
|
6
5
|
import logging
|
7
6
|
from multiprocessing import pool
|
8
|
-
import pathlib
|
9
7
|
import time
|
10
8
|
import typing
|
11
9
|
from typing import Any, Callable, Dict, List, Optional, Tuple
|
@@ -23,7 +21,9 @@ from sky.utils import ux_utils
|
|
23
21
|
|
24
22
|
if typing.TYPE_CHECKING:
|
25
23
|
from azure.mgmt import compute as azure_compute
|
26
|
-
from azure.mgmt import
|
24
|
+
from azure.mgmt import network as azure_network
|
25
|
+
from azure.mgmt.compute import models as azure_compute_models
|
26
|
+
from azure.mgmt.network import models as azure_network_models
|
27
27
|
|
28
28
|
logger = sky_logging.init_logger(__name__)
|
29
29
|
|
@@ -184,14 +184,150 @@ def _get_head_instance_id(instances: List) -> Optional[str]:
|
|
184
184
|
return head_instance_id
|
185
185
|
|
186
186
|
|
187
|
-
def
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
187
|
+
def _create_network_interface(
|
188
|
+
network_client: 'azure_network.NetworkManagementClient', vm_name: str,
|
189
|
+
provider_config: Dict[str,
|
190
|
+
Any]) -> 'azure_network_models.NetworkInterface':
|
191
|
+
network = azure.azure_mgmt_models('network')
|
192
|
+
compute = azure.azure_mgmt_models('compute')
|
193
|
+
logger.info(f'Start creating network interface for {vm_name}...')
|
194
|
+
if provider_config.get('use_internal_ips', False):
|
195
|
+
name = f'{vm_name}-nic-private'
|
196
|
+
ip_config = network.IPConfiguration(
|
197
|
+
name=f'ip-config-private-{vm_name}',
|
198
|
+
subnet=compute.SubResource(id=provider_config['subnet']),
|
199
|
+
private_ip_allocation_method=network.IPAllocationMethod.DYNAMIC)
|
200
|
+
else:
|
201
|
+
name = f'{vm_name}-nic-public'
|
202
|
+
public_ip_address = network.PublicIPAddress(
|
203
|
+
location=provider_config['location'],
|
204
|
+
public_ip_allocation_method='Static',
|
205
|
+
public_ip_address_version='IPv4',
|
206
|
+
sku=network.PublicIPAddressSku(name='Basic', tier='Regional'))
|
207
|
+
ip_poller = network_client.public_ip_addresses.begin_create_or_update(
|
208
|
+
resource_group_name=provider_config['resource_group'],
|
209
|
+
public_ip_address_name=f'{vm_name}-ip',
|
210
|
+
parameters=public_ip_address)
|
211
|
+
logger.info(f'Created public IP address {ip_poller.result().name} '
|
212
|
+
f'with address {ip_poller.result().ip_address}.')
|
213
|
+
ip_config = network.IPConfiguration(
|
214
|
+
name=f'ip-config-public-{vm_name}',
|
215
|
+
subnet=compute.SubResource(id=provider_config['subnet']),
|
216
|
+
private_ip_allocation_method=network.IPAllocationMethod.DYNAMIC,
|
217
|
+
public_ip_address=network.PublicIPAddress(id=ip_poller.result().id))
|
218
|
+
|
219
|
+
ni_poller = network_client.network_interfaces.begin_create_or_update(
|
220
|
+
resource_group_name=provider_config['resource_group'],
|
221
|
+
network_interface_name=name,
|
222
|
+
parameters=network.NetworkInterface(
|
223
|
+
location=provider_config['location'],
|
224
|
+
ip_configurations=[ip_config],
|
225
|
+
network_security_group=network.NetworkSecurityGroup(
|
226
|
+
id=provider_config['nsg'])))
|
227
|
+
logger.info(f'Created network interface {ni_poller.result().name}.')
|
228
|
+
return ni_poller.result()
|
229
|
+
|
230
|
+
|
231
|
+
def _create_vm(
|
232
|
+
compute_client: 'azure_compute.ComputeManagementClient', vm_name: str,
|
233
|
+
node_tags: Dict[str, str], provider_config: Dict[str, Any],
|
234
|
+
node_config: Dict[str, Any],
|
235
|
+
network_interface_id: str) -> 'azure_compute_models.VirtualMachine':
|
236
|
+
compute = azure.azure_mgmt_models('compute')
|
237
|
+
logger.info(f'Start creating VM {vm_name}...')
|
238
|
+
hardware_profile = compute.HardwareProfile(
|
239
|
+
vm_size=node_config['azure_arm_parameters']['vmSize'])
|
240
|
+
network_profile = compute.NetworkProfile(network_interfaces=[
|
241
|
+
compute.NetworkInterfaceReference(id=network_interface_id, primary=True)
|
242
|
+
])
|
243
|
+
public_key = node_config['azure_arm_parameters']['publicKey']
|
244
|
+
username = node_config['azure_arm_parameters']['adminUsername']
|
245
|
+
os_linux_custom_data = base64.b64encode(
|
246
|
+
node_config['azure_arm_parameters']['cloudInitSetupCommands'].encode(
|
247
|
+
'utf-8')).decode('utf-8')
|
248
|
+
os_profile = compute.OSProfile(
|
249
|
+
admin_username=username,
|
250
|
+
computer_name=vm_name,
|
251
|
+
admin_password=public_key,
|
252
|
+
linux_configuration=compute.LinuxConfiguration(
|
253
|
+
disable_password_authentication=True,
|
254
|
+
ssh=compute.SshConfiguration(public_keys=[
|
255
|
+
compute.SshPublicKey(
|
256
|
+
path=f'/home/{username}/.ssh/authorized_keys',
|
257
|
+
key_data=public_key)
|
258
|
+
])),
|
259
|
+
custom_data=os_linux_custom_data)
|
260
|
+
community_image_id = node_config['azure_arm_parameters'].get(
|
261
|
+
'communityGalleryImageId', None)
|
262
|
+
if community_image_id is not None:
|
263
|
+
# Prioritize using community gallery image if specified.
|
264
|
+
image_reference = compute.ImageReference(
|
265
|
+
community_gallery_image_id=community_image_id)
|
266
|
+
logger.info(
|
267
|
+
f'Used community_image_id: {community_image_id} for VM {vm_name}.')
|
268
|
+
else:
|
269
|
+
image_reference = compute.ImageReference(
|
270
|
+
publisher=node_config['azure_arm_parameters']['imagePublisher'],
|
271
|
+
offer=node_config['azure_arm_parameters']['imageOffer'],
|
272
|
+
sku=node_config['azure_arm_parameters']['imageSku'],
|
273
|
+
version=node_config['azure_arm_parameters']['imageVersion'])
|
274
|
+
storage_profile = compute.StorageProfile(
|
275
|
+
image_reference=image_reference,
|
276
|
+
os_disk=compute.OSDisk(
|
277
|
+
create_option=compute.DiskCreateOptionTypes.FROM_IMAGE,
|
278
|
+
managed_disk=compute.ManagedDiskParameters(
|
279
|
+
storage_account_type=node_config['azure_arm_parameters']
|
280
|
+
['osDiskTier']),
|
281
|
+
disk_size_gb=node_config['azure_arm_parameters']['osDiskSizeGB']))
|
282
|
+
vm_instance = compute.VirtualMachine(
|
283
|
+
location=provider_config['location'],
|
284
|
+
tags=node_tags,
|
285
|
+
hardware_profile=hardware_profile,
|
286
|
+
os_profile=os_profile,
|
287
|
+
storage_profile=storage_profile,
|
288
|
+
network_profile=network_profile,
|
289
|
+
identity=compute.VirtualMachineIdentity(
|
290
|
+
type='UserAssigned',
|
291
|
+
user_assigned_identities={provider_config['msi']: {}}))
|
292
|
+
vm_poller = compute_client.virtual_machines.begin_create_or_update(
|
293
|
+
resource_group_name=provider_config['resource_group'],
|
294
|
+
vm_name=vm_name,
|
295
|
+
parameters=vm_instance,
|
296
|
+
)
|
297
|
+
# poller.result() will block on async operation until it's done.
|
298
|
+
logger.info(f'Created VM {vm_poller.result().name}.')
|
299
|
+
# Configure driver extension for A10 GPUs. A10 GPUs requires a
|
300
|
+
# special type of drivers which is available at Microsoft HPC
|
301
|
+
# extension. Reference:
|
302
|
+
# https://forums.developer.nvidia.com/t/ubuntu-22-04-installation-driver-error-nvidia-a10/285195/2
|
303
|
+
# This can take more than 20mins for setting up the A10 GPUs
|
304
|
+
if node_config.get('need_nvidia_driver_extension', False):
|
305
|
+
ext_poller = compute_client.virtual_machine_extensions.\
|
306
|
+
begin_create_or_update(
|
307
|
+
resource_group_name=provider_config['resource_group'],
|
308
|
+
vm_name=vm_name,
|
309
|
+
vm_extension_name='NvidiaGpuDriverLinux',
|
310
|
+
extension_parameters=compute.VirtualMachineExtension(
|
311
|
+
location=provider_config['location'],
|
312
|
+
publisher='Microsoft.HpcCompute',
|
313
|
+
type_properties_type='NvidiaGpuDriverLinux',
|
314
|
+
type_handler_version='1.9',
|
315
|
+
auto_upgrade_minor_version=True,
|
316
|
+
settings='{}'))
|
317
|
+
logger.info(
|
318
|
+
f'Created VM extension {ext_poller.result().name} for VM {vm_name}.'
|
319
|
+
)
|
320
|
+
return vm_poller.result()
|
321
|
+
|
322
|
+
|
323
|
+
def _create_instances(compute_client: 'azure_compute.ComputeManagementClient',
|
324
|
+
network_client: 'azure_network.NetworkManagementClient',
|
325
|
+
cluster_name_on_cloud: str, resource_group: str,
|
326
|
+
provider_config: Dict[str, Any], node_config: Dict[str,
|
327
|
+
Any],
|
328
|
+
tags: Dict[str, str], count: int) -> List:
|
193
329
|
vm_id = uuid4().hex[:UNIQUE_ID_LEN]
|
194
|
-
|
330
|
+
all_tags = {
|
195
331
|
constants.TAG_RAY_CLUSTER_NAME: cluster_name_on_cloud,
|
196
332
|
constants.TAG_SKYPILOT_CLUSTER_NAME: cluster_name_on_cloud,
|
197
333
|
**constants.WORKER_NODE_TAGS,
|
@@ -199,83 +335,19 @@ def _create_instances(
|
|
199
335
|
**tags,
|
200
336
|
}
|
201
337
|
node_tags = node_config['tags'].copy()
|
202
|
-
node_tags.update(
|
203
|
-
|
204
|
-
# load the template file
|
205
|
-
current_path = pathlib.Path(__file__).parent
|
206
|
-
template_path = current_path.joinpath('azure-vm-template.json')
|
207
|
-
with open(template_path, 'r', encoding='utf-8') as template_fp:
|
208
|
-
template = json.load(template_fp)
|
209
|
-
|
210
|
-
vm_name = f'{cluster_name_on_cloud}-{vm_id}'
|
211
|
-
use_internal_ips = provider_config.get('use_internal_ips', False)
|
338
|
+
node_tags.update(all_tags)
|
212
339
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
template_params['vmCount'] = count
|
221
|
-
template_params['msi'] = provider_config['msi']
|
222
|
-
template_params['nsg'] = provider_config['nsg']
|
223
|
-
template_params['subnet'] = provider_config['subnet']
|
224
|
-
# In Azure, cloud-init script must be encoded in base64. For more
|
225
|
-
# information, see:
|
226
|
-
# https://learn.microsoft.com/en-us/azure/virtual-machines/custom-data
|
227
|
-
template_params['cloudInitSetupCommands'] = (base64.b64encode(
|
228
|
-
template_params['cloudInitSetupCommands'].encode('utf-8')).decode(
|
229
|
-
'utf-8'))
|
340
|
+
# Create VM instances in parallel.
|
341
|
+
def create_single_instance(vm_i):
|
342
|
+
vm_name = f'{cluster_name_on_cloud}-{vm_id}-{vm_i}'
|
343
|
+
network_interface = _create_network_interface(network_client, vm_name,
|
344
|
+
provider_config)
|
345
|
+
_create_vm(compute_client, vm_name, node_tags, provider_config,
|
346
|
+
node_config, network_interface.id)
|
230
347
|
|
231
|
-
|
232
|
-
# pylint: disable=line-too-long
|
233
|
-
# Configure driver extension for A10 GPUs. A10 GPUs requires a
|
234
|
-
# special type of drivers which is available at Microsoft HPC
|
235
|
-
# extension. Reference: https://forums.developer.nvidia.com/t/ubuntu-22-04-installation-driver-error-nvidia-a10/285195/2
|
236
|
-
for r in template['resources']:
|
237
|
-
if r['type'] == 'Microsoft.Compute/virtualMachines':
|
238
|
-
# Add a nested extension resource for A10 GPUs
|
239
|
-
r['resources'] = [
|
240
|
-
{
|
241
|
-
'type': 'extensions',
|
242
|
-
'apiVersion': '2015-06-15',
|
243
|
-
'location': '[variables(\'location\')]',
|
244
|
-
'dependsOn': [
|
245
|
-
'[concat(\'Microsoft.Compute/virtualMachines/\', parameters(\'vmName\'), copyIndex())]'
|
246
|
-
],
|
247
|
-
'name': 'NvidiaGpuDriverLinux',
|
248
|
-
'properties': {
|
249
|
-
'publisher': 'Microsoft.HpcCompute',
|
250
|
-
'type': 'NvidiaGpuDriverLinux',
|
251
|
-
'typeHandlerVersion': '1.9',
|
252
|
-
'autoUpgradeMinorVersion': True,
|
253
|
-
'settings': {},
|
254
|
-
},
|
255
|
-
},
|
256
|
-
]
|
257
|
-
break
|
258
|
-
|
259
|
-
parameters = {
|
260
|
-
'properties': {
|
261
|
-
'mode': azure.deployment_mode().incremental,
|
262
|
-
'template': template,
|
263
|
-
'parameters': {
|
264
|
-
key: {
|
265
|
-
'value': value
|
266
|
-
} for key, value in template_params.items()
|
267
|
-
},
|
268
|
-
}
|
269
|
-
}
|
270
|
-
|
271
|
-
create_or_update = _get_azure_sdk_function(
|
272
|
-
client=resource_client.deployments, function_name='create_or_update')
|
273
|
-
create_or_update(
|
274
|
-
resource_group_name=resource_group,
|
275
|
-
deployment_name=vm_name,
|
276
|
-
parameters=parameters,
|
277
|
-
).wait()
|
348
|
+
subprocess_utils.run_in_parallel(create_single_instance, range(count))
|
278
349
|
|
350
|
+
# Update disk performance tier
|
279
351
|
performance_tier = node_config.get('disk_performance_tier', None)
|
280
352
|
if performance_tier is not None:
|
281
353
|
disks = compute_client.disks.list_by_resource_group(resource_group)
|
@@ -286,12 +358,14 @@ def _create_instances(
|
|
286
358
|
f'az disk update -n {name} -g {resource_group} '
|
287
359
|
f'--set tier={performance_tier}')
|
288
360
|
|
361
|
+
# Validation
|
289
362
|
filters = {
|
290
363
|
constants.TAG_RAY_CLUSTER_NAME: cluster_name_on_cloud,
|
291
364
|
_TAG_SKYPILOT_VM_ID: vm_id
|
292
365
|
}
|
293
366
|
instances = _filter_instances(compute_client, resource_group, filters)
|
294
367
|
assert len(instances) == count, (len(instances), count)
|
368
|
+
|
295
369
|
return instances
|
296
370
|
|
297
371
|
|
@@ -303,7 +377,7 @@ def run_instances(region: str, cluster_name_on_cloud: str,
|
|
303
377
|
resource_group = provider_config['resource_group']
|
304
378
|
subscription_id = provider_config['subscription_id']
|
305
379
|
compute_client = azure.get_client('compute', subscription_id)
|
306
|
-
|
380
|
+
network_client = azure.get_client('network', subscription_id)
|
307
381
|
instances_to_resume = []
|
308
382
|
resumed_instance_ids: List[str] = []
|
309
383
|
created_instance_ids: List[str] = []
|
@@ -439,12 +513,11 @@ def run_instances(region: str, cluster_name_on_cloud: str,
|
|
439
513
|
to_start_count -= len(resumed_instance_ids)
|
440
514
|
|
441
515
|
if to_start_count > 0:
|
442
|
-
resource_client = azure.get_client('resource', subscription_id)
|
443
516
|
logger.debug(f'run_instances: Creating {to_start_count} instances.')
|
444
517
|
try:
|
445
518
|
created_instances = _create_instances(
|
446
519
|
compute_client=compute_client,
|
447
|
-
|
520
|
+
network_client=network_client,
|
448
521
|
cluster_name_on_cloud=cluster_name_on_cloud,
|
449
522
|
resource_group=resource_group,
|
450
523
|
provider_config=provider_config,
|
@@ -67,6 +67,8 @@ available_node_types:
|
|
67
67
|
imageOffer: {{image_offer}}
|
68
68
|
imageSku: "{{image_sku}}"
|
69
69
|
imageVersion: {{image_version}}
|
70
|
+
# Community Gallery Image ID
|
71
|
+
communityGalleryImageId: {{community_gallery_image_id}}
|
70
72
|
osDiskSizeGB: {{disk_size}}
|
71
73
|
osDiskTier: {{disk_tier}}
|
72
74
|
{%- if use_spot %}
|
@@ -120,7 +120,6 @@ sky/provision/aws/instance.py
|
|
120
120
|
sky/provision/aws/utils.py
|
121
121
|
sky/provision/azure/__init__.py
|
122
122
|
sky/provision/azure/azure-config-template.json
|
123
|
-
sky/provision/azure/azure-vm-template.json
|
124
123
|
sky/provision/azure/config.py
|
125
124
|
sky/provision/azure/instance.py
|
126
125
|
sky/provision/cudo/__init__.py
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import sky
|
2
|
+
from sky.clouds.cloud import Cloud
|
3
|
+
|
4
|
+
|
5
|
+
def test_sky_launch(enable_all_clouds):
|
6
|
+
task = sky.Task()
|
7
|
+
job_id, handle = sky.launch(task, dryrun=True)
|
8
|
+
assert job_id is None and handle is None
|
9
|
+
|
10
|
+
|
11
|
+
def test_k8s_alias(enable_all_clouds):
|
12
|
+
|
13
|
+
def dryrun_task_with_cloud(cloud: Cloud):
|
14
|
+
task = sky.Task()
|
15
|
+
task.set_resources_override({'cloud': cloud})
|
16
|
+
sky.launch(task, dryrun=True)
|
17
|
+
|
18
|
+
dryrun_task_with_cloud(sky.K8s())
|
19
|
+
|
20
|
+
dryrun_task_with_cloud(sky.Kubernetes())
|