skypilot-nightly 1.0.0.dev20240901__tar.gz → 1.0.0.dev20240903__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.
Files changed (298) hide show
  1. {skypilot_nightly-1.0.0.dev20240901/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20240903}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/cloud_vm_ray_backend.py +54 -14
  4. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/cli.py +8 -2
  5. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/aws.py +13 -5
  6. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/azure.py +9 -6
  7. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/cloud.py +1 -1
  8. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/gcp.py +14 -3
  9. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/oci.py +16 -1
  10. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/azure_catalog.py +2 -1
  11. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/oci_catalog.py +6 -1
  12. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/exceptions.py +4 -0
  13. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/optimizer.py +10 -0
  14. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/aws-ray.yml.j2 +3 -1
  15. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/gcp-ray.yml.j2 +3 -0
  16. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/resources_utils.py +1 -0
  17. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  18. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_optimizer_dryruns.py +7 -0
  19. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_smoke.py +45 -7
  20. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/LICENSE +0 -0
  21. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/MANIFEST.in +0 -0
  22. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/README.md +0 -0
  23. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/pyproject.toml +0 -0
  24. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/setup.cfg +0 -0
  25. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/setup.py +0 -0
  26. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/__init__.py +0 -0
  27. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/aws.py +0 -0
  28. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/azure.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/cloudflare.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/common.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/cudo.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/docker.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/gcp.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/ibm.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/kubernetes.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/oci.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/runpod.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/adaptors/vsphere.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/authentication.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/__init__.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/backend.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/backend_utils.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/docker_utils.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/local_docker_backend.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/backends/wheel_utils.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/benchmark/__init__.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/benchmark/benchmark_state.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/benchmark/benchmark_utils.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/check.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/cloud_stores.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/__init__.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/cloud_registry.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/cudo.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/fluidstack.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/ibm.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/kubernetes.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/lambda_cloud.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/paperspace.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/runpod.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/scp.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/__init__.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/common.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/config.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/constants.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/__init__.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/aws_utils.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/gcp_utils.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/lambda_utils.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/oci_utils.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/utils/scp_utils.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/clouds/vsphere.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/core.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/dag.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/__init__.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/data_transfer.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/data_utils.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/mounting_utils.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/storage.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/data/storage_utils.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/execution.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/global_user_state.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/__init__.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/constants.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/controller.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/core.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/dashboard/dashboard.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/dashboard/static/favicon.ico +0 -0
  108. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/dashboard/templates/index.html +0 -0
  109. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/recovery_strategy.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/state.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/jobs/utils.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/__init__.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/aws/__init__.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/aws/config.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/aws/instance.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/aws/utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/azure/__init__.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/azure/azure-config-template.json +0 -0
  119. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/azure/azure-vm-template.json +0 -0
  120. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/azure/config.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/azure/instance.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/common.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/constants.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/__init__.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/config.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/cudo_machine_type.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/cudo_utils.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/cudo_wrapper.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/cudo/instance.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/docker_utils.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/fluidstack/__init__.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/fluidstack/config.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/fluidstack/instance.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/__init__.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/config.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/constants.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/instance.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/instance_utils.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/gcp/mig_utils.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/instance_setup.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/__init__.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/config.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/instance.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  146. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  147. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/network.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/network_utils.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/kubernetes/utils.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/logging.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/metadata_utils.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/paperspace/__init__.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/paperspace/config.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/paperspace/constants.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/paperspace/instance.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/paperspace/utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/provisioner.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/runpod/__init__.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/runpod/config.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/runpod/instance.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/runpod/utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/__init__.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/__init__.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/custom_script.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/id_generator.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/service_manager.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/common/vim_utils.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/config.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/instance.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/provision/vsphere/vsphere_utils.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/resources.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/__init__.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/autoscalers.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/constants.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/controller.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/core.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/load_balancer.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/load_balancing_policies.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/replica_managers.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/serve_state.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/serve_utils.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/service.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/serve/service_spec.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/setup_files/MANIFEST.in +0 -0
  191. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/setup_files/setup.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/sky_logging.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/LICENSE +0 -0
  194. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/__init__.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/attempt_skylet.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/autostop_lib.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/configs.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/constants.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/events.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/job_lib.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/log_lib.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/log_lib.pyi +0 -0
  203. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/__init__.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/command_runner.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/ibm/__init__.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/ibm/node_provider.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/ibm/utils.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/lambda_cloud/__init__.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/lambda_cloud/node_provider.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/oci/__init__.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/oci/node_provider.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/oci/query_helper.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/oci/utils.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/scp/__init__.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/scp/config.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/providers/scp/node_provider.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/__init__.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  220. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/cli.py.patch +0 -0
  221. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  222. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  223. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  224. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/updater.py.patch +0 -0
  225. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/ray_patches/worker.py.patch +0 -0
  226. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/skylet.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skylet/subprocess_daemon.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/skypilot_config.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/status_lib.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/task.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/azure-ray.yml.j2 +0 -0
  232. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/cudo-ray.yml.j2 +0 -0
  233. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  234. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/ibm-ray.yml.j2 +0 -0
  235. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/jobs-controller.yaml.j2 +0 -0
  236. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  237. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  238. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  239. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  240. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  241. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/lambda-ray.yml.j2 +0 -0
  242. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/local-ray.yml.j2 +0 -0
  243. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/oci-ray.yml.j2 +0 -0
  244. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/paperspace-ray.yml.j2 +0 -0
  245. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/runpod-ray.yml.j2 +0 -0
  246. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/scp-ray.yml.j2 +0 -0
  247. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  248. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/templates/vsphere-ray.yml.j2 +0 -0
  249. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/usage/__init__.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/usage/constants.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/usage/usage_lib.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/accelerator_registry.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/cli_utils/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/cli_utils/status_utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/cluster_yaml_utils.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/command_runner.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/command_runner.pyi +0 -0
  259. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/common_utils.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/controller_utils.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/dag_utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/db_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/env_options.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/__init__.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/create_cluster.sh +0 -0
  266. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  267. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  269. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  271. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  272. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  273. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/kubernetes_enums.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/log_utils.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/rich_utils.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/schemas.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/subprocess_utils.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/timeline.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/ux_utils.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/sky/utils/validator.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
  283. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  284. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  285. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/skypilot_nightly.egg-info/requires.txt +0 -0
  286. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/skypilot_nightly.egg-info/top_level.txt +0 -0
  287. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_api.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_cli.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_config.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_global_user_state.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_jobs.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_jobs_and_serve.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_list_accelerators.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_optimizer_random_dag.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_serve_autoscaler.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_storage.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/tests/test_wheels.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20240901 → skypilot_nightly-1.0.0.dev20240903}/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.dev20240901
3
+ Version: 1.0.0.dev20240903
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.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 = '50f68d2093cbe9dc7da6d53c3c17c45e0b97b84c'
8
+ _SKYPILOT_COMMIT_SHA = '0203971a36dbcf0a6d3615e6ed25f3f6d11b53f6'
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.dev20240901'
38
+ __version__ = '1.0.0.dev20240903'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -3112,7 +3112,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3112
3112
  setup_script = log_lib.make_task_bash_script(setup,
3113
3113
  env_vars=setup_envs)
3114
3114
  encoded_script = shlex.quote(setup_script)
3115
- if detach_setup or _is_command_length_over_limit(encoded_script):
3115
+
3116
+ def _dump_setup_script(setup_script: str) -> None:
3116
3117
  with tempfile.NamedTemporaryFile('w', prefix='sky_setup_') as f:
3117
3118
  f.write(setup_script)
3118
3119
  f.flush()
@@ -3121,6 +3122,9 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3121
3122
  target=remote_setup_file_name,
3122
3123
  up=True,
3123
3124
  stream_logs=False)
3125
+
3126
+ if detach_setup or _is_command_length_over_limit(encoded_script):
3127
+ _dump_setup_script(setup_script)
3124
3128
  create_script_code = 'true'
3125
3129
  else:
3126
3130
  create_script_code = (f'{{ echo {encoded_script} > '
@@ -3128,20 +3132,42 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3128
3132
 
3129
3133
  if detach_setup:
3130
3134
  return
3135
+
3131
3136
  setup_log_path = os.path.join(self.log_dir,
3132
3137
  f'setup-{runner.node_id}.log')
3133
- returncode = runner.run(
3134
- f'{create_script_code} && {setup_cmd}',
3135
- log_path=setup_log_path,
3136
- process_stream=False,
3137
- # We do not source bashrc for setup, since bashrc is sourced
3138
- # in the script already.
3139
- # Skip an empty line and two lines due to the /bin/bash -i and
3140
- # source ~/.bashrc in the setup_cmd.
3141
- # bash: cannot set terminal process group (7398): Inappropriate ioctl for device # pylint: disable=line-too-long
3142
- # bash: no job control in this shell
3143
- skip_lines=3,
3144
- )
3138
+
3139
+ def _run_setup(setup_cmd: str) -> int:
3140
+ returncode = runner.run(
3141
+ setup_cmd,
3142
+ log_path=setup_log_path,
3143
+ process_stream=False,
3144
+ # We do not source bashrc for setup, since bashrc is sourced
3145
+ # in the script already.
3146
+ # Skip an empty line and two lines due to the /bin/bash -i
3147
+ # and source ~/.bashrc in the setup_cmd.
3148
+ # bash: cannot set terminal process group (7398): Inappropriate ioctl for device # pylint: disable=line-too-long
3149
+ # bash: no job control in this shell
3150
+ skip_lines=3)
3151
+ return returncode
3152
+
3153
+ returncode = _run_setup(f'{create_script_code} && {setup_cmd}',)
3154
+ if returncode == 255:
3155
+ is_message_too_long = False
3156
+ with open(setup_log_path, 'r', encoding='utf-8') as f:
3157
+ if 'too long' in f.read():
3158
+ is_message_too_long = True
3159
+
3160
+ if is_message_too_long:
3161
+ # If the setup script is too long, we retry it with dumping
3162
+ # the script to a file and running it with SSH. We use a
3163
+ # general length limit check before but it could be
3164
+ # inaccurate on some systems.
3165
+ logger.debug(
3166
+ 'Failed to run setup command inline due to '
3167
+ 'command length limit. Dumping setup script to '
3168
+ 'file and running it with SSH.')
3169
+ _dump_setup_script(setup_script)
3170
+ returncode = _run_setup(setup_cmd)
3145
3171
 
3146
3172
  def error_message() -> str:
3147
3173
  # Use the function to avoid tailing the file in success case
@@ -3223,7 +3249,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3223
3249
 
3224
3250
  code = job_lib.JobLibCodeGen.queue_job(job_id, job_submit_cmd)
3225
3251
  job_submit_cmd = ' && '.join([mkdir_code, create_script_code, code])
3226
- if _is_command_length_over_limit(job_submit_cmd):
3252
+
3253
+ def _dump_code_to_file(codegen: str) -> None:
3227
3254
  runners = handle.get_command_runners()
3228
3255
  head_runner = runners[0]
3229
3256
  with tempfile.NamedTemporaryFile('w', prefix='sky_app_') as fp:
@@ -3238,6 +3265,9 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3238
3265
  target=script_path,
3239
3266
  up=True,
3240
3267
  stream_logs=False)
3268
+
3269
+ if _is_command_length_over_limit(job_submit_cmd):
3270
+ _dump_code_to_file(codegen)
3241
3271
  job_submit_cmd = f'{mkdir_code} && {code}'
3242
3272
 
3243
3273
  if managed_job_dag is not None:
@@ -3263,6 +3293,16 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3263
3293
  job_submit_cmd,
3264
3294
  stream_logs=False,
3265
3295
  require_outputs=True)
3296
+ if returncode == 255 and 'too long' in stdout + stderr:
3297
+ # If the setup script is too long, we retry it with dumping
3298
+ # the script to a file and running it with SSH. We use a general
3299
+ # length limit check before but it could be inaccurate on some
3300
+ # systems.
3301
+ _dump_code_to_file(codegen)
3302
+ returncode, stdout, stderr = self.run_on_head(handle,
3303
+ job_submit_cmd,
3304
+ stream_logs=False,
3305
+ require_outputs=True)
3266
3306
 
3267
3307
  # Happens when someone calls `sky exec` but remote is outdated
3268
3308
  # necessitating calling `sky launch`.
@@ -29,6 +29,7 @@ import functools
29
29
  import multiprocessing
30
30
  import os
31
31
  import shlex
32
+ import shutil
32
33
  import signal
33
34
  import subprocess
34
35
  import sys
@@ -368,7 +369,9 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
368
369
  echo "{bashrc_diff}" >> ~/.bashrc'
369
370
 
370
371
  cmd = (f'(grep -q "SkyPilot" ~/.bashrc) || '
371
- f'[[ ${{BASH_VERSINFO[0]}} -ge 4 ]] && ({install_cmd})')
372
+ f'([[ ${{BASH_VERSINFO[0]}} -ge 4 ]] && ({install_cmd}) || '
373
+ f'(echo "Bash must be version 4 or above." && exit 1))')
374
+
372
375
  reload_cmd = _RELOAD_BASH_CMD
373
376
 
374
377
  elif value == 'fish':
@@ -390,7 +393,10 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
390
393
  ctx.exit()
391
394
 
392
395
  try:
393
- subprocess.run(cmd, shell=True, check=True, executable='/bin/bash')
396
+ subprocess.run(cmd,
397
+ shell=True,
398
+ check=True,
399
+ executable=shutil.which('bash'))
394
400
  click.secho(f'Shell completion installed for {value}', fg='green')
395
401
  click.echo(
396
402
  'Completion will take effect once you restart the terminal: ' +
@@ -798,7 +798,11 @@ class AWS(clouds.Cloud):
798
798
 
799
799
  @classmethod
800
800
  def _get_disk_type(cls, disk_tier: resources_utils.DiskTier) -> str:
801
- return 'standard' if disk_tier == resources_utils.DiskTier.LOW else 'gp3'
801
+ if disk_tier == resources_utils.DiskTier.LOW:
802
+ return 'standard'
803
+ if disk_tier == resources_utils.DiskTier.ULTRA:
804
+ return 'io2'
805
+ return 'gp3'
802
806
 
803
807
  @classmethod
804
808
  def _get_disk_specs(
@@ -806,15 +810,19 @@ class AWS(clouds.Cloud):
806
810
  disk_tier: Optional[resources_utils.DiskTier]) -> Dict[str, Any]:
807
811
  tier = cls._translate_disk_tier(disk_tier)
808
812
  tier2iops = {
813
+ resources_utils.DiskTier.ULTRA: 20000,
809
814
  resources_utils.DiskTier.HIGH: 7000,
810
815
  resources_utils.DiskTier.MEDIUM: 3500,
811
- resources_utils.DiskTier.LOW: 0, # only gp3 is required to set iops
816
+ resources_utils.DiskTier.LOW: 0, # iops is not required on standard disk
812
817
  }
813
818
  return {
814
819
  'disk_tier': cls._get_disk_type(tier),
815
- 'disk_iops': tier2iops[tier],
816
- 'disk_throughput': tier2iops[tier] // 16,
817
- 'custom_disk_perf': tier != resources_utils.DiskTier.LOW,
820
+ 'disk_iops': tier2iops[tier]
821
+ if cls._get_disk_type(tier) != 'standard' else None,
822
+ # Custom disk throughput is only available for gp3
823
+ # see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html
824
+ 'disk_throughput': tier2iops[tier] // 16
825
+ if cls._get_disk_type(tier) == 'gp3' else None,
818
826
  }
819
827
 
820
828
  @classmethod
@@ -60,9 +60,10 @@ class Azure(clouds.Cloud):
60
60
  _MAX_CLUSTER_NAME_LEN_LIMIT = 42
61
61
  _BEST_DISK_TIER = resources_utils.DiskTier.MEDIUM
62
62
  _DEFAULT_DISK_TIER = resources_utils.DiskTier.MEDIUM
63
- # Azure does not support high disk tier.
64
- _SUPPORTED_DISK_TIERS = (set(resources_utils.DiskTier) -
65
- {resources_utils.DiskTier.HIGH})
63
+ # Azure does not support high disk and ultra disk tier.
64
+ _SUPPORTED_DISK_TIERS = (
65
+ set(resources_utils.DiskTier) -
66
+ {resources_utils.DiskTier.HIGH, resources_utils.DiskTier.ULTRA})
66
67
 
67
68
  _INDENT_PREFIX = ' ' * 4
68
69
 
@@ -599,9 +600,10 @@ class Azure(clouds.Cloud):
599
600
  disk_tier: Optional[resources_utils.DiskTier]) -> Tuple[bool, str]:
600
601
  if disk_tier is None or disk_tier == resources_utils.DiskTier.BEST:
601
602
  return True, ''
602
- if disk_tier == resources_utils.DiskTier.HIGH:
603
- return False, ('Azure disk_tier=high is not supported now. '
604
- 'Please use disk_tier={low, medium} instead.')
603
+ if disk_tier == resources_utils.DiskTier.HIGH or disk_tier == resources_utils.DiskTier.ULTRA:
604
+ return False, (
605
+ 'Azure disk_tier={high, ultra} is not supported now. '
606
+ 'Please use disk_tier={low, medium, best} instead.')
605
607
  # Only S-series supported premium ssd
606
608
  # see https://stackoverflow.com/questions/48590520/azure-requested-operation-cannot-be-performed-because-storage-account-type-pre # pylint: disable=line-too-long
607
609
  if cls._get_disk_type(
@@ -628,6 +630,7 @@ class Azure(clouds.Cloud):
628
630
  # TODO(tian): Maybe use PremiumV2_LRS/UltraSSD_LRS? Notice these two
629
631
  # cannot be used as OS disks so we might need data disk support
630
632
  tier2name = {
633
+ resources_utils.DiskTier.ULTRA: 'Disabled',
631
634
  resources_utils.DiskTier.HIGH: 'Disabled',
632
635
  resources_utils.DiskTier.MEDIUM: 'Premium_LRS',
633
636
  resources_utils.DiskTier.LOW: 'Standard_LRS',
@@ -117,7 +117,7 @@ class Cloud:
117
117
 
118
118
  _REPR = '<Cloud>'
119
119
  _DEFAULT_DISK_TIER = resources_utils.DiskTier.MEDIUM
120
- _BEST_DISK_TIER = resources_utils.DiskTier.HIGH
120
+ _BEST_DISK_TIER = resources_utils.DiskTier.ULTRA
121
121
  _SUPPORTED_DISK_TIERS = {resources_utils.DiskTier.BEST}
122
122
  _SUPPORTS_SERVICE_ACCOUNT_ON_REMOTE = False
123
123
 
@@ -7,7 +7,7 @@ import re
7
7
  import subprocess
8
8
  import time
9
9
  import typing
10
- from typing import Dict, Iterator, List, Optional, Set, Tuple
10
+ from typing import Any, Dict, Iterator, List, Optional, Set, Tuple
11
11
 
12
12
  import colorama
13
13
 
@@ -437,6 +437,7 @@ class GCP(clouds.Cloud):
437
437
  'custom_resources': None,
438
438
  'use_spot': r.use_spot,
439
439
  'gcp_project_id': self.get_project_id(dryrun),
440
+ **GCP._get_disk_specs(r.disk_tier),
440
441
  }
441
442
  accelerators = r.accelerators
442
443
  if accelerators is not None:
@@ -495,8 +496,6 @@ class GCP(clouds.Cloud):
495
496
  resources_vars['machine_image'] = image_id
496
497
  resources_vars['image_id'] = None
497
498
 
498
- resources_vars['disk_tier'] = GCP._get_disk_type(r.disk_tier)
499
-
500
499
  firewall_rule = None
501
500
  if resources.ports is not None:
502
501
  firewall_rule = (USER_PORTS_FIREWALL_RULE_NAME.format(
@@ -917,12 +916,24 @@ class GCP(clouds.Cloud):
917
916
  disk_tier: Optional[resources_utils.DiskTier]) -> str:
918
917
  tier = cls._translate_disk_tier(disk_tier)
919
918
  tier2name = {
919
+ resources_utils.DiskTier.ULTRA: 'pd-extreme',
920
920
  resources_utils.DiskTier.HIGH: 'pd-ssd',
921
921
  resources_utils.DiskTier.MEDIUM: 'pd-balanced',
922
922
  resources_utils.DiskTier.LOW: 'pd-standard',
923
923
  }
924
924
  return tier2name[tier]
925
925
 
926
+ @classmethod
927
+ def _get_disk_specs(
928
+ cls,
929
+ disk_tier: Optional[resources_utils.DiskTier]) -> Dict[str, Any]:
930
+ specs: Dict[str, Any] = {'disk_tier': cls._get_disk_type(disk_tier)}
931
+ if disk_tier == resources_utils.DiskTier.ULTRA:
932
+ # Only pd-extreme supports custom iops.
933
+ # see https://cloud.google.com/compute/docs/disks#disk-types
934
+ specs['disk_iops'] = 20000
935
+ return specs
936
+
926
937
  @classmethod
927
938
  def _label_filter_str(cls, tag_filters: Dict[str, str]) -> str:
928
939
  return ' '.join(f'labels.{k}={v}' for k, v in tag_filters.items())
@@ -42,7 +42,9 @@ class OCI(clouds.Cloud):
42
42
 
43
43
  _INDENT_PREFIX = ' '
44
44
 
45
- _SUPPORTED_DISK_TIERS = set(resources_utils.DiskTier)
45
+ _SUPPORTED_DISK_TIERS = (set(resources_utils.DiskTier) -
46
+ {resources_utils.DiskTier.ULTRA})
47
+ _BEST_DISK_TIER = resources_utils.DiskTier.HIGH
46
48
 
47
49
  @classmethod
48
50
  def _unsupported_features_for_resources(
@@ -414,6 +416,19 @@ class OCI(clouds.Cloud):
414
416
  f'{cls._INDENT_PREFIX}Error details: '
415
417
  f'{common_utils.format_exception(e, use_bracket=True)}')
416
418
 
419
+ @classmethod
420
+ def check_disk_tier(
421
+ cls, instance_type: Optional[str],
422
+ disk_tier: Optional[resources_utils.DiskTier]) -> Tuple[bool, str]:
423
+ del instance_type # Unused.
424
+ if disk_tier is None or disk_tier == resources_utils.DiskTier.BEST:
425
+ return True, ''
426
+ if disk_tier == resources_utils.DiskTier.ULTRA:
427
+ return False, ('OCI disk_tier=ultra is not supported now. '
428
+ 'Please use disk_tier={low, medium, high, best} '
429
+ 'instead.')
430
+ return True, ''
431
+
417
432
  def get_credential_file_mounts(self) -> Dict[str, str]:
418
433
  """Returns a dict of credential file paths to mount paths."""
419
434
  oci_cfg_file = oci_adaptor.get_config_file()
@@ -110,7 +110,8 @@ def get_default_instance_type(
110
110
  _DEFAULT_INSTANCE_FAMILY)]
111
111
 
112
112
  def _filter_disk_type(instance_type: str) -> bool:
113
- return Azure.check_disk_tier(instance_type, disk_tier)[0]
113
+ valid, _ = Azure.check_disk_tier(instance_type, disk_tier)
114
+ return valid
114
115
 
115
116
  df = df.loc[df['InstanceType'].apply(_filter_disk_type)]
116
117
  return common.get_instance_type_for_cpus_mem_impl(df, cpus,
@@ -15,6 +15,7 @@ import typing
15
15
  from typing import Dict, List, Optional, Tuple
16
16
 
17
17
  from sky.adaptors import oci as oci_adaptor
18
+ from sky.clouds import OCI
18
19
  from sky.clouds.service_catalog import common
19
20
  from sky.clouds.utils import oci_utils
20
21
  from sky.utils import resources_utils
@@ -102,7 +103,6 @@ def get_default_instance_type(
102
103
  cpus: Optional[str] = None,
103
104
  memory: Optional[str] = None,
104
105
  disk_tier: Optional[resources_utils.DiskTier] = None) -> Optional[str]:
105
- del disk_tier # unused
106
106
  if cpus is None:
107
107
  cpus = f'{oci_utils.oci_config.DEFAULT_NUM_VCPUS}+'
108
108
 
@@ -111,12 +111,17 @@ def get_default_instance_type(
111
111
  else:
112
112
  memory_gb_or_ratio = memory
113
113
 
114
+ def _filter_disk_type(instance_type: str) -> bool:
115
+ valid, _ = OCI.check_disk_tier(instance_type, disk_tier)
116
+ return valid
117
+
114
118
  instance_type_prefix = tuple(
115
119
  f'{family}' for family in oci_utils.oci_config.DEFAULT_INSTANCE_FAMILY)
116
120
 
117
121
  df = _get_df()
118
122
  df = df[df['InstanceType'].notna()]
119
123
  df = df[df['InstanceType'].str.startswith(instance_type_prefix)]
124
+ df = df.loc[df['InstanceType'].apply(_filter_disk_type)]
120
125
 
121
126
  logger.debug(f'# get_default_instance_type: {df}')
122
127
  return common.get_instance_type_for_cpus_mem_impl(df, cpus,
@@ -100,9 +100,13 @@ class CommandError(Exception):
100
100
  self.command = command
101
101
  self.error_msg = error_msg
102
102
  self.detailed_reason = detailed_reason
103
+
103
104
  if not command:
104
105
  message = error_msg
105
106
  else:
107
+ if len(command) > 100:
108
+ # Chunck the command to avoid overflow.
109
+ command = command[:100] + '...'
106
110
  message = (f'Command {command} failed with return code '
107
111
  f'{returncode}.\n{error_msg}')
108
112
  super().__init__(message)
@@ -19,6 +19,7 @@ from sky import task as task_lib
19
19
  from sky.adaptors import common as adaptors_common
20
20
  from sky.utils import env_options
21
21
  from sky.utils import log_utils
22
+ from sky.utils import resources_utils
22
23
  from sky.utils import rich_utils
23
24
  from sky.utils import subprocess_utils
24
25
  from sky.utils import ux_utils
@@ -935,6 +936,15 @@ class Optimizer:
935
936
  table.add_rows(rows)
936
937
  logger.info(f'{table}\n')
937
938
 
939
+ # Warning message for using disk_tier=ultra
940
+ # TODO(yi): Consider price of disks in optimizer and
941
+ # move this warning there.
942
+ if chosen_resources.disk_tier == resources_utils.DiskTier.ULTRA:
943
+ logger.warning(
944
+ 'Using disk_tier=ultra will utilize more advanced disks '
945
+ '(io2 Block Express on AWS and extreme persistent disk on '
946
+ 'GCP), which can lead to significant higher costs (~$2/h).')
947
+
938
948
  @staticmethod
939
949
  def _print_candidates(node_to_candidate_map: _TaskToPerCloudCandidates):
940
950
  for node, candidate_set in node_to_candidate_map.items():
@@ -73,8 +73,10 @@ available_node_types:
73
73
  VolumeSize: {{disk_size}}
74
74
  VolumeType: {{disk_tier}}
75
75
  Encrypted: {{disk_encrypted}}
76
- {% if custom_disk_perf %}
76
+ {% if disk_iops %}
77
77
  Iops: {{disk_iops}}
78
+ {% endif %}
79
+ {% if disk_throughput %}
78
80
  Throughput: {{disk_throughput}}
79
81
  {% endif %}
80
82
  {% if use_spot %}
@@ -124,6 +124,9 @@ available_node_types:
124
124
  sourceImage: {{image_id}}
125
125
  {%- endif %}
126
126
  diskType: zones/{{zones}}/diskTypes/{{disk_tier}}
127
+ {%- if disk_iops %}
128
+ provisionedIops: {{disk_iops}}
129
+ {%- endif %}
127
130
  {%- if gpu is not none %}
128
131
  guestAccelerators:
129
132
  - acceleratorType: projects/{{gcp_project_id}}/zones/{{zones}}/acceleratorTypes/{{gpu}}
@@ -24,6 +24,7 @@ class DiskTier(enum.Enum):
24
24
  LOW = 'low'
25
25
  MEDIUM = 'medium'
26
26
  HIGH = 'high'
27
+ ULTRA = 'ultra'
27
28
  BEST = 'best'
28
29
 
29
30
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20240901
3
+ Version: 1.0.0.dev20240903
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -771,3 +771,10 @@ def test_optimize_disk_tier(enable_all_clouds):
771
771
  assert high_tier_candidates == set(
772
772
  map(clouds.CLOUD_REGISTRY.get,
773
773
  ['aws', 'gcp', 'oci'])), high_tier_candidates
774
+
775
+ # Only AWS, GCP supports ULTRA disk tier.
776
+ ultra_tier_resources = sky.Resources(
777
+ disk_tier=resources_utils.DiskTier.ULTRA)
778
+ ultra_tier_candidates = _get_all_candidate_cloud(ultra_tier_resources)
779
+ assert ultra_tier_candidates == set(
780
+ map(clouds.CLOUD_REGISTRY.get, ['aws', 'gcp'])), ultra_tier_candidates
@@ -34,6 +34,7 @@ import shutil
34
34
  import subprocess
35
35
  import sys
36
36
  import tempfile
37
+ import textwrap
37
38
  import time
38
39
  from typing import Dict, List, NamedTuple, Optional, Tuple
39
40
  import urllib.parse
@@ -3304,11 +3305,11 @@ def test_aws_disk_tier():
3304
3305
  f'Reservations[].Instances[].InstanceId --output text`; ' +
3305
3306
  _get_aws_query_command(region, '$id', 'VolumeType',
3306
3307
  specs['disk_tier']) +
3307
- ('' if disk_tier == resources_utils.DiskTier.LOW else
3308
- (_get_aws_query_command(region, '$id', 'Iops',
3309
- specs['disk_iops']) +
3310
- _get_aws_query_command(region, '$id', 'Throughput',
3311
- specs['disk_throughput']))),
3308
+ ('' if specs['disk_tier']
3309
+ == 'standard' else _get_aws_query_command(
3310
+ region, '$id', 'Iops', specs['disk_iops'])) +
3311
+ ('' if specs['disk_tier'] != 'gp3' else _get_aws_query_command(
3312
+ region, '$id', 'Throughput', specs['disk_throughput'])),
3312
3313
  ],
3313
3314
  f'sky down -y {name}',
3314
3315
  timeout=10 * 60, # 10 mins (it takes around ~6 mins)
@@ -3344,8 +3345,8 @@ def test_gcp_disk_tier():
3344
3345
  @pytest.mark.azure
3345
3346
  def test_azure_disk_tier():
3346
3347
  for disk_tier in list(resources_utils.DiskTier):
3347
- if disk_tier == resources_utils.DiskTier.HIGH:
3348
- # Azure does not support high disk tier.
3348
+ if disk_tier == resources_utils.DiskTier.HIGH or disk_tier == resources_utils.DiskTier.ULTRA:
3349
+ # Azure does not support high and ultra disk tier.
3349
3350
  continue
3350
3351
  type = Azure._get_disk_type(disk_tier)
3351
3352
  name = _get_cluster_name() + '-' + disk_tier.value
@@ -3436,6 +3437,43 @@ def test_gcp_zero_quota_failover():
3436
3437
  run_one_test(test)
3437
3438
 
3438
3439
 
3440
+ def test_long_setup_run_script(generic_cloud: str):
3441
+ name = _get_cluster_name()
3442
+ with tempfile.NamedTemporaryFile('w', prefix='sky_app_',
3443
+ suffix='.yaml') as f:
3444
+ f.write(
3445
+ textwrap.dedent(""" \
3446
+ setup: |
3447
+ echo "start long setup"
3448
+ """))
3449
+ for i in range(1024 * 120):
3450
+ f.write(f' echo {i}\n')
3451
+ f.write(' echo "end long setup"\n')
3452
+ f.write(
3453
+ textwrap.dedent(""" \
3454
+ run: |
3455
+ echo "run"
3456
+ """))
3457
+ for i in range(1024 * 120):
3458
+ f.write(f' echo {i}\n')
3459
+ f.write(' echo "end run"\n')
3460
+ f.flush()
3461
+
3462
+ test = Test(
3463
+ 'long-setup-run-script',
3464
+ [
3465
+ f'sky launch -y -c {name} --cloud {generic_cloud} --detach-setup --detach-run --cpus 2+ {f.name}',
3466
+ f'sky exec --detach-run {name} "echo hello"',
3467
+ f'sky exec --detach-run {name} {f.name}',
3468
+ f'sky logs {name} --status 1',
3469
+ f'sky logs {name} --status 2',
3470
+ f'sky logs {name} --status 3',
3471
+ ],
3472
+ f'sky down -y {name}',
3473
+ )
3474
+ run_one_test(test)
3475
+
3476
+
3439
3477
  # ---------- Testing skyserve ----------
3440
3478
 
3441
3479