skypilot-nightly 1.0.0.dev20250219__tar.gz → 1.0.0.dev20250221__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 (372) hide show
  1. {skypilot_nightly-1.0.0.dev20250219/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250221}/PKG-INFO +8 -4
  2. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/README.md +4 -3
  3. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/__init__.py +4 -2
  4. skypilot_nightly-1.0.0.dev20250221/sky/adaptors/nebius.py +85 -0
  5. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/backend_utils.py +8 -0
  6. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/cloud_vm_ray_backend.py +10 -2
  7. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/client/sdk.py +8 -3
  8. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/__init__.py +2 -0
  9. skypilot_nightly-1.0.0.dev20250221/sky/clouds/nebius.py +294 -0
  10. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/constants.py +1 -1
  11. skypilot_nightly-1.0.0.dev20250221/sky/clouds/service_catalog/nebius_catalog.py +116 -0
  12. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/controller.py +17 -0
  13. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/server/core.py +31 -3
  14. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/__init__.py +1 -0
  15. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/instance.py +5 -1
  16. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/utils.py +8 -7
  17. skypilot_nightly-1.0.0.dev20250221/sky/provision/nebius/__init__.py +11 -0
  18. skypilot_nightly-1.0.0.dev20250221/sky/provision/nebius/config.py +11 -0
  19. skypilot_nightly-1.0.0.dev20250221/sky/provision/nebius/instance.py +285 -0
  20. skypilot_nightly-1.0.0.dev20250221/sky/provision/nebius/utils.py +310 -0
  21. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/common.py +5 -7
  22. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/executor.py +94 -87
  23. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/server.py +10 -5
  24. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/stream_utils.py +8 -11
  25. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/setup_files/dependencies.py +9 -1
  26. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/constants.py +3 -6
  27. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/task.py +6 -0
  28. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/jobs-controller.yaml.j2 +3 -0
  29. skypilot_nightly-1.0.0.dev20250221/sky/templates/nebius-ray.yml.j2 +79 -0
  30. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/common_utils.py +38 -0
  31. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/controller_utils.py +66 -2
  32. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221/skypilot_nightly.egg-info}/PKG-INFO +8 -4
  33. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/skypilot_nightly.egg-info/SOURCES.txt +8 -0
  34. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/skypilot_nightly.egg-info/requires.txt +4 -0
  35. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_cli.py +1 -1
  36. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_list_accelerators.py +1 -1
  37. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/LICENSE +0 -0
  38. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/MANIFEST.in +0 -0
  39. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/pyproject.toml +0 -0
  40. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/setup.cfg +0 -0
  41. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/setup.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/__init__.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/aws.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/azure.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/cloudflare.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/common.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/cudo.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/do.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/docker.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/gcp.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/ibm.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/kubernetes.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/oci.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/runpod.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/vast.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/adaptors/vsphere.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/admin_policy.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/authentication.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/__init__.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/backend.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/docker_utils.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/local_docker_backend.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/backends/wheel_utils.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/benchmark/__init__.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/benchmark/benchmark_state.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/benchmark/benchmark_utils.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/check.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/cli.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/client/__init__.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/client/cli.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/client/common.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/cloud_stores.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/aws.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/azure.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/cloud.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/cudo.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/do.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/fluidstack.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/gcp.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/ibm.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/kubernetes.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/lambda_cloud.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/oci.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/paperspace.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/runpod.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/scp.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/__init__.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/common.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/config.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/do_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/__init__.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/aws_utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/azure_utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/gcp_utils.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/oci_utils.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/utils/scp_utils.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/vast.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/clouds/vsphere.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/core.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/dag.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/__init__.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/data_transfer.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/data_utils.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/mounting_utils.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/storage.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/data/storage_utils.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/exceptions.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/execution.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/global_user_state.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/__init__.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/client/__init__.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/client/sdk.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/constants.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/dashboard/dashboard.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/dashboard/static/favicon.ico +0 -0
  140. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/dashboard/templates/index.html +0 -0
  141. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/recovery_strategy.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/scheduler.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/server/__init__.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/server/dashboard_utils.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/server/server.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/state.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/jobs/utils.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/models.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/optimizer.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/aws/__init__.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/aws/config.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/aws/instance.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/aws/utils.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/azure/__init__.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/azure/azure-config-template.json +0 -0
  156. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/azure/config.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/azure/instance.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/common.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/constants.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/__init__.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/config.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/cudo_machine_type.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/cudo_utils.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/cudo_wrapper.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/cudo/instance.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/do/__init__.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/do/config.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/do/constants.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/do/instance.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/do/utils.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/docker_utils.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/fluidstack/__init__.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/fluidstack/config.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/fluidstack/instance.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/__init__.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/config.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/constants.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/instance.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/instance_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/gcp/mig_utils.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/instance_setup.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/__init__.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/config.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/constants.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  187. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  188. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/network.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/kubernetes/network_utils.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/lambda_cloud/__init__.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/lambda_cloud/config.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/lambda_cloud/instance.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/logging.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/metadata_utils.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/oci/__init__.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/oci/config.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/oci/instance.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/oci/query_utils.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/paperspace/__init__.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/paperspace/config.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/paperspace/constants.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/paperspace/instance.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/paperspace/utils.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/provisioner.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/api/__init__.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/api/commands.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/api/pods.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/config.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/instance.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/runpod/utils.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vast/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vast/config.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vast/instance.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vast/utils.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/__init__.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/__init__.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/custom_script.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/id_generator.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/service_manager.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/common/vim_utils.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/config.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/instance.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/provision/vsphere/vsphere_utils.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/resources.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/__init__.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/autoscalers.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/client/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/client/sdk.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/constants.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/controller.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/load_balancer.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/load_balancing_policies.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/replica_managers.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/serve_state.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/serve_utils.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/server/__init__.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/server/core.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/server/server.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/service.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/serve/service_spec.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/__init__.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/constants.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/html/log.html +0 -0
  252. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/payloads.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/queues/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/queues/mp_queue.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/requests.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/serializers/__init__.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/serializers/decoders.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/server/requests/serializers/encoders.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/setup_files/MANIFEST.in +0 -0
  261. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/setup_files/setup.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/sky_logging.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/LICENSE +0 -0
  264. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/__init__.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/attempt_skylet.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/autostop_lib.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/configs.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/events.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/job_lib.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/log_lib.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/log_lib.pyi +0 -0
  272. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/__init__.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/command_runner.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/ibm/__init__.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/ibm/node_provider.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/ibm/utils.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/scp/__init__.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/scp/config.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/providers/scp/node_provider.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/__init__.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  283. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/cli.py.patch +0 -0
  284. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  285. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  286. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  287. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/updater.py.patch +0 -0
  288. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/ray_patches/worker.py.patch +0 -0
  289. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/skylet.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skylet/subprocess_daemon.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/skypilot_config.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/aws-ray.yml.j2 +0 -0
  293. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/azure-ray.yml.j2 +0 -0
  294. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/cudo-ray.yml.j2 +0 -0
  295. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/do-ray.yml.j2 +0 -0
  296. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  297. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/gcp-ray.yml.j2 +0 -0
  298. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/ibm-ray.yml.j2 +0 -0
  299. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  300. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  301. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  302. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  303. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  304. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/lambda-ray.yml.j2 +0 -0
  305. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/local-ray.yml.j2 +0 -0
  306. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/oci-ray.yml.j2 +0 -0
  307. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/paperspace-ray.yml.j2 +0 -0
  308. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/runpod-ray.yml.j2 +0 -0
  309. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/scp-ray.yml.j2 +0 -0
  310. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  311. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  312. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/vast-ray.yml.j2 +0 -0
  313. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/vsphere-ray.yml.j2 +0 -0
  314. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/templates/websocket_proxy.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/usage/__init__.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/usage/constants.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/usage/usage_lib.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/__init__.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/accelerator_registry.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/admin_policy_utils.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/annotations.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/cli_utils/__init__.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/cli_utils/status_utils.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/cluster_utils.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/command_runner.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/command_runner.pyi +0 -0
  327. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/common.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/config_utils.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/control_master_utils.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/dag_utils.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/db_utils.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/env_options.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/__init__.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/create_cluster.sh +0 -0
  335. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  336. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  337. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  340. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  342. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  343. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  345. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/kubernetes_enums.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/log_utils.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/message_utils.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/registry.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/resources_utils.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/rich_utils.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/schemas.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/status_lib.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/subprocess_utils.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/timeline.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/ux_utils.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/sky/utils/validator.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  359. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  360. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/skypilot_nightly.egg-info/top_level.txt +0 -0
  361. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_api.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_config.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_global_user_state.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_jobs.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_jobs_and_serve.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_optimizer_dryruns.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_optimizer_random_dag.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_serve_autoscaler.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_smoke.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_storage.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_wheels.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250219 → skypilot_nightly-1.0.0.dev20250221}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250219
3
+ Version: 1.0.0.dev20250221
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -107,6 +107,8 @@ Provides-Extra: vast
107
107
  Requires-Dist: vastai-sdk>=0.1.12; extra == "vast"
108
108
  Provides-Extra: vsphere
109
109
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "vsphere"
110
+ Provides-Extra: nebius
111
+ Requires-Dist: nebius>=0.2.0; extra == "nebius"
110
112
  Provides-Extra: all
111
113
  Requires-Dist: urllib3<2; extra == "all"
112
114
  Requires-Dist: awscli>=1.27.10; extra == "all"
@@ -150,6 +152,7 @@ Requires-Dist: azure-core>=1.24.0; extra == "all"
150
152
  Requires-Dist: azure-common; extra == "all"
151
153
  Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
152
154
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
155
+ Requires-Dist: nebius>=0.2.0; extra == "all"
153
156
  Dynamic: author
154
157
  Dynamic: classifier
155
158
  Dynamic: description
@@ -224,15 +227,16 @@ SkyPilot supports your existing GPU, TPU, and CPU workloads, with no code change
224
227
  Install with pip:
225
228
  ```bash
226
229
  # Choose your clouds:
227
- pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
230
+ pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,nebius]"
228
231
  ```
229
232
  To get the latest features and fixes, use the nightly build or [install from source](https://docs.skypilot.co/en/latest/getting-started/installation.html):
230
233
  ```bash
231
234
  # Choose your clouds:
232
- pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
235
+ pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,nebius]"
233
236
  ```
234
237
 
235
- [Current supported infra](https://docs.skypilot.co/en/latest/getting-started/installation.html) (Kubernetes; AWS, GCP, Azure, OCI, Lambda Cloud, Fluidstack, RunPod, Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere):
238
+
239
+ [Current supported infra](https://docs.skypilot.co/en/latest/getting-started/installation.html) (Kubernetes; AWS, GCP, Azure, OCI, Lambda Cloud, Fluidstack, RunPod, Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere, Nebius):
236
240
  <p align="center">
237
241
  <img alt="SkyPilot" src="https://raw.githubusercontent.com/skypilot-org/skypilot/master/docs/source/images/cloud-logos-light.png" width=85%>
238
242
  </p>
@@ -65,15 +65,16 @@ SkyPilot supports your existing GPU, TPU, and CPU workloads, with no code change
65
65
  Install with pip:
66
66
  ```bash
67
67
  # Choose your clouds:
68
- pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
68
+ pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,nebius]"
69
69
  ```
70
70
  To get the latest features and fixes, use the nightly build or [install from source](https://docs.skypilot.co/en/latest/getting-started/installation.html):
71
71
  ```bash
72
72
  # Choose your clouds:
73
- pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
73
+ pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,nebius]"
74
74
  ```
75
75
 
76
- [Current supported infra](https://docs.skypilot.co/en/latest/getting-started/installation.html) (Kubernetes; AWS, GCP, Azure, OCI, Lambda Cloud, Fluidstack, RunPod, Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere):
76
+
77
+ [Current supported infra](https://docs.skypilot.co/en/latest/getting-started/installation.html) (Kubernetes; AWS, GCP, Azure, OCI, Lambda Cloud, Fluidstack, RunPod, Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai, VMware vSphere, Nebius):
77
78
  <p align="center">
78
79
  <picture>
79
80
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/skypilot-org/skypilot/master/docs/source/images/cloud-logos-dark.png">
@@ -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 = '0ec86b2b1ec8aeaae0514b5a7ce4eb99caaa0728'
8
+ _SKYPILOT_COMMIT_SHA = 'aa3c387f04fbdd4468751b7d66fcb381bd3449dc'
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.dev20250219'
38
+ __version__ = '1.0.0.dev20250221'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -143,6 +143,7 @@ RunPod = clouds.RunPod
143
143
  Vast = clouds.Vast
144
144
  Vsphere = clouds.Vsphere
145
145
  Fluidstack = clouds.Fluidstack
146
+ Nebius = clouds.Nebius
146
147
 
147
148
  __all__ = [
148
149
  '__version__',
@@ -161,6 +162,7 @@ __all__ = [
161
162
  'SCP',
162
163
  'Vsphere',
163
164
  'Fluidstack',
165
+ 'Nebius',
164
166
  'Optimizer',
165
167
  'OptimizeTarget',
166
168
  'backends',
@@ -0,0 +1,85 @@
1
+ """Nebius cloud adaptor."""
2
+ import os
3
+
4
+ from sky.adaptors import common
5
+
6
+ NEBIUS_TENANT_ID_FILENAME = 'NEBIUS_TENANT_ID.txt'
7
+ NEBIUS_IAM_TOKEN_FILENAME = 'NEBIUS_IAM_TOKEN.txt'
8
+ NEBIUS_TENANT_ID_PATH = '~/.nebius/' + NEBIUS_TENANT_ID_FILENAME
9
+ NEBIUS_IAM_TOKEN_PATH = '~/.nebius/' + NEBIUS_IAM_TOKEN_FILENAME
10
+
11
+ MAX_RETRIES_TO_DISK_CREATE = 120
12
+ MAX_RETRIES_TO_INSTANCE_STOP = 120
13
+ MAX_RETRIES_TO_INSTANCE_START = 120
14
+ MAX_RETRIES_TO_INSTANCE_READY = 240
15
+
16
+ MAX_RETRIES_TO_DISK_DELETE = 120
17
+ MAX_RETRIES_TO_INSTANCE_WAIT = 120 # Maximum number of retries
18
+
19
+ POLL_INTERVAL = 5
20
+
21
+ _iam_token = None
22
+ _tenant_id = None
23
+
24
+ nebius = common.LazyImport(
25
+ 'nebius',
26
+ import_error_message='Failed to import dependencies for Nebius AI Cloud. '
27
+ 'Try running: pip install "skypilot[nebius]"',
28
+ # https://github.com/grpc/grpc/issues/37642 to avoid spam in console
29
+ set_loggers=lambda: os.environ.update({'GRPC_VERBOSITY': 'NONE'}))
30
+
31
+
32
+ def request_error():
33
+ return nebius.aio.service_error.RequestError
34
+
35
+
36
+ def compute():
37
+ # pylint: disable=import-outside-toplevel
38
+ from nebius.api.nebius.compute import v1 as compute_v1
39
+ return compute_v1
40
+
41
+
42
+ def iam():
43
+ # pylint: disable=import-outside-toplevel
44
+ from nebius.api.nebius.iam import v1 as iam_v1
45
+ return iam_v1
46
+
47
+
48
+ def nebius_common():
49
+ # pylint: disable=import-outside-toplevel
50
+ from nebius.api.nebius.common import v1 as common_v1
51
+ return common_v1
52
+
53
+
54
+ def vpc():
55
+ # pylint: disable=import-outside-toplevel
56
+ from nebius.api.nebius.vpc import v1 as vpc_v1
57
+ return vpc_v1
58
+
59
+
60
+ def get_iam_token():
61
+ global _iam_token
62
+ if _iam_token is None:
63
+ try:
64
+ with open(os.path.expanduser(NEBIUS_IAM_TOKEN_PATH),
65
+ encoding='utf-8') as file:
66
+ _iam_token = file.read().strip()
67
+ except FileNotFoundError:
68
+ return None
69
+ return _iam_token
70
+
71
+
72
+ def get_tenant_id():
73
+ global _tenant_id
74
+ if _tenant_id is None:
75
+ try:
76
+ with open(os.path.expanduser(NEBIUS_TENANT_ID_PATH),
77
+ encoding='utf-8') as file:
78
+ _tenant_id = file.read().strip()
79
+ except FileNotFoundError:
80
+ return None
81
+ return _tenant_id
82
+
83
+
84
+ def sdk():
85
+ return nebius.sdk.SDK(credentials=get_iam_token())
@@ -197,6 +197,9 @@ def _get_yaml_path_from_cluster_name(cluster_name: str,
197
197
  return str(output_path)
198
198
 
199
199
 
200
+ # Add retry for the file mounts optimization, as the underlying cp command may
201
+ # experience transient errors, #4758.
202
+ @common_utils.retry
200
203
  def _optimize_file_mounts(yaml_path: str) -> None:
201
204
  """Optimize file mounts in the given ray yaml file.
202
205
 
@@ -206,6 +209,10 @@ def _optimize_file_mounts(yaml_path: str) -> None:
206
209
  - wheel
207
210
  - credentials
208
211
  Format is {dst: src}.
212
+
213
+ Raises:
214
+ subprocess.CalledProcessError: If the file mounts are failed to be
215
+ copied.
209
216
  """
210
217
  yaml_config = common_utils.read_yaml(yaml_path)
211
218
 
@@ -863,6 +870,7 @@ def _add_auth_to_cluster_config(cloud: clouds.Cloud, cluster_config_file: str):
863
870
  clouds.Paperspace,
864
871
  clouds.Azure,
865
872
  clouds.DO,
873
+ clouds.Nebius,
866
874
  )):
867
875
  config = auth.configure_ssh_info(config)
868
876
  elif isinstance(cloud, clouds.GCP):
@@ -191,7 +191,8 @@ def _get_cluster_config_template(cloud):
191
191
  clouds.Kubernetes: 'kubernetes-ray.yml.j2',
192
192
  clouds.Vsphere: 'vsphere-ray.yml.j2',
193
193
  clouds.Vast: 'vast-ray.yml.j2',
194
- clouds.Fluidstack: 'fluidstack-ray.yml.j2'
194
+ clouds.Fluidstack: 'fluidstack-ray.yml.j2',
195
+ clouds.Nebius: 'nebius-ray.yml.j2'
195
196
  }
196
197
  return cloud_to_template[type(cloud)]
197
198
 
@@ -3233,7 +3234,14 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3233
3234
  all_file_mounts: Optional[Dict[Path, Path]],
3234
3235
  storage_mounts: Optional[Dict[Path, storage_lib.Storage]],
3235
3236
  ) -> None:
3236
- """Mounts all user files to the remote nodes."""
3237
+ """Mounts all user files to the remote nodes.
3238
+
3239
+ Note: This does not handle COPY storage_mounts. These should have
3240
+ already been translated into file_mounts by task.sync_storage_mounts().
3241
+
3242
+ TODO: Delete COPY storage_mounts in task.sync_storage_mounts(), and
3243
+ assert here that all storage_mounts are MOUNT mode.
3244
+ """
3237
3245
  with rich_utils.safe_status(ux_utils.spinner_message('Syncing files')):
3238
3246
  controller_utils.replace_skypilot_config_path_in_file_mounts(
3239
3247
  handle.launched_resources.cloud, all_file_mounts)
@@ -1503,14 +1503,14 @@ def stream_and_get(
1503
1503
 
1504
1504
  @usage_lib.entrypoint
1505
1505
  @annotations.client_api
1506
- def api_cancel(request_ids: Optional[List[str]] = None,
1506
+ def api_cancel(request_ids: Optional[Union[str, List[str]]] = None,
1507
1507
  all_users: bool = False,
1508
1508
  silent: bool = False) -> server_common.RequestId:
1509
1509
  """Aborts a request or all requests.
1510
1510
 
1511
1511
  Args:
1512
- request_id: The prefix of the request ID of the request to abort.
1513
- all: Whether to abort all requests.
1512
+ request_ids: The request ID(s) to abort. Can be a single string or a
1513
+ list of strings.
1514
1514
  all_users: Whether to abort all requests from all users.
1515
1515
  silent: Whether to suppress the output.
1516
1516
 
@@ -1528,6 +1528,11 @@ def api_cancel(request_ids: Optional[List[str]] = None,
1528
1528
  user_id = None
1529
1529
  if not all_users:
1530
1530
  user_id = common_utils.get_user_hash()
1531
+
1532
+ # Convert single request ID to list if needed
1533
+ if isinstance(request_ids, str):
1534
+ request_ids = [request_ids]
1535
+
1531
1536
  body = payloads.RequestCancelBody(request_ids=request_ids, user_id=user_id)
1532
1537
  if all_users:
1533
1538
  echo('Cancelling all users\' requests...')
@@ -20,6 +20,7 @@ from sky.clouds.gcp import GCP
20
20
  from sky.clouds.ibm import IBM
21
21
  from sky.clouds.kubernetes import Kubernetes
22
22
  from sky.clouds.lambda_cloud import Lambda
23
+ from sky.clouds.nebius import Nebius
23
24
  from sky.clouds.oci import OCI
24
25
  from sky.clouds.paperspace import Paperspace
25
26
  from sky.clouds.runpod import RunPod
@@ -49,6 +50,7 @@ __all__ = [
49
50
  'ProvisionerVersion',
50
51
  'StatusVersion',
51
52
  'Fluidstack',
53
+ 'Nebius',
52
54
  # Utility functions
53
55
  'cloud_in_iterable',
54
56
  ]
@@ -0,0 +1,294 @@
1
+ """ Nebius Cloud. """
2
+ import logging
3
+ import typing
4
+ from typing import Dict, Iterator, List, Optional, Tuple, Union
5
+
6
+ from sky import clouds
7
+ from sky.adaptors import nebius
8
+ from sky.clouds import service_catalog
9
+ from sky.utils import registry
10
+ from sky.utils import resources_utils
11
+
12
+ if typing.TYPE_CHECKING:
13
+ from sky import resources as resources_lib
14
+
15
+ _CREDENTIAL_FILES = [
16
+ # credential files for Nebius
17
+ nebius.NEBIUS_TENANT_ID_FILENAME,
18
+ nebius.NEBIUS_IAM_TOKEN_FILENAME
19
+ ]
20
+
21
+
22
+ @registry.CLOUD_REGISTRY.register
23
+ class Nebius(clouds.Cloud):
24
+ """Nebius GPU Cloud"""
25
+ _REPR = 'Nebius'
26
+ _CLOUD_UNSUPPORTED_FEATURES = {
27
+ clouds.CloudImplementationFeatures.AUTO_TERMINATE:
28
+ ('Autodown and Autostop not supported. Can\'t delete disk.'),
29
+ # Autostop functionality can be implemented, but currently,
30
+ # there is only a single flag for both autostop and autodown.
31
+ clouds.CloudImplementationFeatures.SPOT_INSTANCE:
32
+ ('Spot is not supported, as Nebius API does not implement spot.'),
33
+ clouds.CloudImplementationFeatures.CLONE_DISK_FROM_CLUSTER:
34
+ (f'Migrating disk is currently not supported on {_REPR}.'),
35
+ clouds.CloudImplementationFeatures.DOCKER_IMAGE:
36
+ (f'Docker image is currently not supported on {_REPR}. '
37
+ 'You can try running docker command inside the '
38
+ '`run` section in task.yaml.'),
39
+ clouds.CloudImplementationFeatures.CUSTOM_DISK_TIER:
40
+ (f'Custom disk tier is currently not supported on {_REPR}.'),
41
+ }
42
+ # Nebius maximum instance name length defined as <= 63 as a hostname length
43
+ # 63 - 8 - 5 = 50 characters since
44
+ # we add 4 character from UUID to make uniq `-xxxx`
45
+ # our provisioner adds additional `-worker`.
46
+ _MAX_CLUSTER_NAME_LEN_LIMIT = 50
47
+ _regions: List[clouds.Region] = []
48
+
49
+ # Using the latest SkyPilot provisioner API to provision and check status.
50
+ PROVISIONER_VERSION = clouds.ProvisionerVersion.SKYPILOT
51
+ STATUS_VERSION = clouds.StatusVersion.SKYPILOT
52
+
53
+ @classmethod
54
+ def _unsupported_features_for_resources(
55
+ cls, resources: 'resources_lib.Resources'
56
+ ) -> Dict[clouds.CloudImplementationFeatures, str]:
57
+ del resources # unused
58
+ return cls._CLOUD_UNSUPPORTED_FEATURES
59
+
60
+ @classmethod
61
+ def _max_cluster_name_length(cls) -> Optional[int]:
62
+ return cls._MAX_CLUSTER_NAME_LEN_LIMIT
63
+
64
+ @classmethod
65
+ def regions_with_offering(cls, instance_type: str,
66
+ accelerators: Optional[Dict[str, int]],
67
+ use_spot: bool, region: Optional[str],
68
+ zone: Optional[str]) -> List[clouds.Region]:
69
+ assert zone is None, 'Nebius does not support zones.'
70
+ del accelerators, zone # unused
71
+ if use_spot:
72
+ return []
73
+ regions = service_catalog.get_region_zones_for_instance_type(
74
+ instance_type, use_spot, 'nebius')
75
+
76
+ if region is not None:
77
+ regions = [r for r in regions if r.name == region]
78
+ return regions
79
+
80
+ @classmethod
81
+ def get_vcpus_mem_from_instance_type(
82
+ cls,
83
+ instance_type: str,
84
+ ) -> Tuple[Optional[float], Optional[float]]:
85
+ return service_catalog.get_vcpus_mem_from_instance_type(instance_type,
86
+ clouds='nebius')
87
+
88
+ @classmethod
89
+ def zones_provision_loop(
90
+ cls,
91
+ *,
92
+ region: str,
93
+ num_nodes: int,
94
+ instance_type: str,
95
+ accelerators: Optional[Dict[str, int]] = None,
96
+ use_spot: bool = False,
97
+ ) -> Iterator[None]:
98
+ del num_nodes # unused
99
+ regions = cls.regions_with_offering(instance_type,
100
+ accelerators,
101
+ use_spot,
102
+ region=region,
103
+ zone=None)
104
+ for r in regions:
105
+ assert r.zones is None, r
106
+ yield r.zones
107
+
108
+ def instance_type_to_hourly_cost(self,
109
+ instance_type: str,
110
+ use_spot: bool,
111
+ region: Optional[str] = None,
112
+ zone: Optional[str] = None) -> float:
113
+ return service_catalog.get_hourly_cost(instance_type,
114
+ use_spot=use_spot,
115
+ region=region,
116
+ zone=zone,
117
+ clouds='nebius')
118
+
119
+ def accelerators_to_hourly_cost(self,
120
+ accelerators: Dict[str, int],
121
+ use_spot: bool,
122
+ region: Optional[str] = None,
123
+ zone: Optional[str] = None) -> float:
124
+ """Returns the hourly cost of the accelerators, in dollars/hour."""
125
+ del accelerators, use_spot, region, zone # unused
126
+ return 0.0
127
+
128
+ def get_egress_cost(self, num_gigabytes: float) -> float:
129
+ return 0.0
130
+
131
+ def __repr__(self):
132
+ return self._REPR
133
+
134
+ def is_same_cloud(self, other: clouds.Cloud) -> bool:
135
+ # Returns true if the two clouds are the same cloud type.
136
+ return isinstance(other, Nebius)
137
+
138
+ @classmethod
139
+ def get_default_instance_type(
140
+ cls,
141
+ cpus: Optional[str] = None,
142
+ memory: Optional[str] = None,
143
+ disk_tier: Optional[resources_utils.DiskTier] = None
144
+ ) -> Optional[str]:
145
+ """Returns the default instance type for Nebius."""
146
+ return service_catalog.get_default_instance_type(cpus=cpus,
147
+ memory=memory,
148
+ disk_tier=disk_tier,
149
+ clouds='nebius')
150
+
151
+ @classmethod
152
+ def get_accelerators_from_instance_type(
153
+ cls,
154
+ instance_type: str,
155
+ ) -> Optional[Dict[str, Union[int, float]]]:
156
+ return service_catalog.get_accelerators_from_instance_type(
157
+ instance_type, clouds='nebius')
158
+
159
+ @classmethod
160
+ def get_zone_shell_cmd(cls) -> Optional[str]:
161
+ return None
162
+
163
+ def make_deploy_resources_variables(
164
+ self,
165
+ resources: 'resources_lib.Resources',
166
+ cluster_name: resources_utils.ClusterName,
167
+ region: 'clouds.Region',
168
+ zones: Optional[List['clouds.Zone']],
169
+ num_nodes: int,
170
+ dryrun: bool = False) -> Dict[str, Optional[str]]:
171
+ del dryrun, cluster_name
172
+ assert zones is None, ('Nebius does not support zones', zones)
173
+
174
+ r = resources
175
+ acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
176
+ custom_resources = resources_utils.make_ray_custom_resources_str(
177
+ acc_dict)
178
+ platform, _ = resources.instance_type.split('_')
179
+
180
+ if platform in ('cpu-d3', 'cpu-e2'):
181
+ image_family = 'ubuntu22.04-driverless'
182
+ elif platform in ('gpu-h100-sxm', 'gpu-h200-sxm', 'gpu-l40s-a'):
183
+ image_family = 'ubuntu22.04-cuda12'
184
+ else:
185
+ raise RuntimeError('Unsupported instance type for Nebius cloud:'
186
+ f' {resources.instance_type}')
187
+ return {
188
+ 'instance_type': resources.instance_type,
189
+ 'custom_resources': custom_resources,
190
+ 'region': region.name,
191
+ 'image_id': image_family,
192
+ # Nebius does not support specific zones.
193
+ 'zones': None,
194
+ }
195
+
196
+ def _get_feasible_launchable_resources(
197
+ self, resources: 'resources_lib.Resources'
198
+ ) -> 'resources_utils.FeasibleResources':
199
+ """Returns a list of feasible resources for the given resources."""
200
+ if resources.instance_type is not None:
201
+ assert resources.is_launchable(), resources
202
+ resources = resources.copy(accelerators=None)
203
+ return resources_utils.FeasibleResources([resources], [], None)
204
+
205
+ def _make(instance_list):
206
+ resource_list = []
207
+ for instance_type in instance_list:
208
+ r = resources.copy(
209
+ cloud=Nebius(),
210
+ instance_type=instance_type,
211
+ accelerators=None,
212
+ cpus=None,
213
+ )
214
+ resource_list.append(r)
215
+ return resource_list
216
+
217
+ # Currently, handle a filter on accelerators only.
218
+ accelerators = resources.accelerators
219
+ if accelerators is None:
220
+ # Return a default instance type
221
+ default_instance_type = Nebius.get_default_instance_type(
222
+ cpus=resources.cpus,
223
+ memory=resources.memory,
224
+ disk_tier=resources.disk_tier)
225
+ if default_instance_type is None:
226
+ # TODO: Add hints to all return values in this method to help
227
+ # users understand why the resources are not launchable.
228
+ return resources_utils.FeasibleResources([], [], None)
229
+ else:
230
+ return resources_utils.FeasibleResources(
231
+ _make([default_instance_type]), [], None)
232
+
233
+ assert len(accelerators) == 1, resources
234
+ acc, acc_count = list(accelerators.items())[0]
235
+ (instance_list, fuzzy_candidate_list
236
+ ) = service_catalog.get_instance_type_for_accelerator(
237
+ acc,
238
+ acc_count,
239
+ use_spot=resources.use_spot,
240
+ cpus=resources.cpus,
241
+ region=resources.region,
242
+ zone=resources.zone,
243
+ clouds='nebius')
244
+ if instance_list is None:
245
+ return resources_utils.FeasibleResources([], fuzzy_candidate_list,
246
+ None)
247
+ return resources_utils.FeasibleResources(_make(instance_list),
248
+ fuzzy_candidate_list, None)
249
+
250
+ @classmethod
251
+ def check_credentials(cls) -> Tuple[bool, Optional[str]]:
252
+ """ Verify that the user has valid credentials for Nebius. """
253
+ logging.debug('Nebius cloud check credentials')
254
+ token = nebius.get_iam_token()
255
+ token_msg = (' Credentials can be set up by running: \n'\
256
+ f' $ nebius iam get-access-token > {nebius.NEBIUS_IAM_TOKEN_PATH} \n') # pylint: disable=line-too-long
257
+ tenant_msg = (' Copy your tenat ID from the web console and save it to file \n' # pylint: disable=line-too-long
258
+ f' $ nebius --format json iam whoami|jq -r \'.user_profile.tenants[0].tenant_id\' > {nebius.NEBIUS_TENANT_ID_PATH} \n') # pylint: disable=line-too-long
259
+ if token is None:
260
+ return False, f'{token_msg}'
261
+ sdk = nebius.sdk()
262
+ tenant_id = nebius.get_tenant_id()
263
+ if tenant_id is None:
264
+ return False, f'{tenant_msg}'
265
+ try:
266
+ service = nebius.iam().ProjectServiceClient(sdk)
267
+ service.list(
268
+ nebius.iam().ListProjectsRequest(parent_id=tenant_id)).wait()
269
+ except nebius.request_error() as e:
270
+ return False, (
271
+ f'{e.status} \n' # First line is indented by 4 spaces
272
+ f'{token_msg}'
273
+ f'{tenant_msg}')
274
+ return True, None
275
+
276
+ def get_credential_file_mounts(self) -> Dict[str, str]:
277
+ return {
278
+ f'~/.nebius/{filename}': f'~/.nebius/{filename}'
279
+ for filename in _CREDENTIAL_FILES
280
+ }
281
+
282
+ @classmethod
283
+ def get_current_user_identity(cls) -> Optional[List[str]]:
284
+ # NOTE: used for very advanced SkyPilot functionality
285
+ # Can implement later if desired
286
+ return None
287
+
288
+ def instance_type_exists(self, instance_type: str) -> bool:
289
+ return service_catalog.instance_type_exists(instance_type, 'nebius')
290
+
291
+ def validate_region_zone(self, region: Optional[str], zone: Optional[str]):
292
+ return service_catalog.validate_region_zone(region,
293
+ zone,
294
+ clouds='nebius')
@@ -4,4 +4,4 @@ CATALOG_SCHEMA_VERSION = 'v6'
4
4
  CATALOG_DIR = '~/.sky/catalogs'
5
5
  ALL_CLOUDS = ('aws', 'azure', 'gcp', 'ibm', 'lambda', 'scp', 'oci',
6
6
  'kubernetes', 'runpod', 'vast', 'vsphere', 'cudo', 'fluidstack',
7
- 'paperspace', 'do')
7
+ 'paperspace', 'do', 'nebius')