skypilot-nightly 1.0.0.dev20250219__py3-none-any.whl → 1.0.0.dev20250221__py3-none-any.whl

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 (35) hide show
  1. sky/__init__.py +4 -2
  2. sky/adaptors/nebius.py +85 -0
  3. sky/backends/backend_utils.py +8 -0
  4. sky/backends/cloud_vm_ray_backend.py +10 -2
  5. sky/client/sdk.py +8 -3
  6. sky/clouds/__init__.py +2 -0
  7. sky/clouds/nebius.py +294 -0
  8. sky/clouds/service_catalog/constants.py +1 -1
  9. sky/clouds/service_catalog/nebius_catalog.py +116 -0
  10. sky/jobs/controller.py +17 -0
  11. sky/jobs/server/core.py +31 -3
  12. sky/provision/__init__.py +1 -0
  13. sky/provision/kubernetes/instance.py +5 -1
  14. sky/provision/kubernetes/utils.py +8 -7
  15. sky/provision/nebius/__init__.py +11 -0
  16. sky/provision/nebius/config.py +11 -0
  17. sky/provision/nebius/instance.py +285 -0
  18. sky/provision/nebius/utils.py +310 -0
  19. sky/server/common.py +5 -7
  20. sky/server/requests/executor.py +94 -87
  21. sky/server/server.py +10 -5
  22. sky/server/stream_utils.py +8 -11
  23. sky/setup_files/dependencies.py +9 -1
  24. sky/skylet/constants.py +3 -6
  25. sky/task.py +6 -0
  26. sky/templates/jobs-controller.yaml.j2 +3 -0
  27. sky/templates/nebius-ray.yml.j2 +79 -0
  28. sky/utils/common_utils.py +38 -0
  29. sky/utils/controller_utils.py +66 -2
  30. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/METADATA +8 -4
  31. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/RECORD +35 -27
  32. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/LICENSE +0 -0
  33. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/WHEEL +0 -0
  34. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/entry_points.txt +0 -0
  35. {skypilot_nightly-1.0.0.dev20250219.dist-info → skypilot_nightly-1.0.0.dev20250221.dist-info}/top_level.txt +0 -0
@@ -68,7 +68,7 @@ async def log_streamer(request_id: Optional[str],
68
68
  # Sleep 0 to yield, so other coroutines can run. This busy waiting
69
69
  # loop is performance critical for short-running requests, so we do
70
70
  # not want to yield too long.
71
- await asyncio.sleep(0)
71
+ await asyncio.sleep(0.1)
72
72
  request_task = requests_lib.get_request(request_id)
73
73
  if not follow:
74
74
  break
@@ -88,6 +88,9 @@ async def log_streamer(request_id: Optional[str],
88
88
  yield line_str
89
89
 
90
90
  while True:
91
+ # Sleep 0 to yield control to allow other coroutines to run,
92
+ # while keeps the loop tight to make log stream responsive.
93
+ await asyncio.sleep(0)
91
94
  line: Optional[bytes] = await f.readline()
92
95
  if not line:
93
96
  if request_id is not None:
@@ -100,24 +103,18 @@ async def log_streamer(request_id: Optional[str],
100
103
  break
101
104
  if not follow:
102
105
  break
103
-
104
- # Sleep 0 to yield, so other coroutines can run. This busy
105
- # waiting loop is performance critical for short-running
106
- # requests, so we do not want to yield too long.
107
- await asyncio.sleep(0)
106
+ # Sleep shortly to avoid storming the DB and CPU, this has
107
+ # little impact on the responsivness here since we are waiting
108
+ # for a new line to come in.
109
+ await asyncio.sleep(0.1)
108
110
  continue
109
111
  line_str = line.decode('utf-8')
110
112
  if plain_logs:
111
113
  is_payload, line_str = message_utils.decode_payload(
112
114
  line_str, raise_for_mismatch=False)
113
115
  if is_payload:
114
- # Sleep 0 to yield, so other coroutines can run. This busy
115
- # waiting loop is performance critical for short-running
116
- # requests, so we do not want to yield too long.
117
- await asyncio.sleep(0)
118
116
  continue
119
117
  yield line_str
120
- await asyncio.sleep(0) # Allow other tasks to run
121
118
 
122
119
 
123
120
  def stream_response(
@@ -5,6 +5,7 @@ This file is imported by setup.py, so:
5
5
  correct.
6
6
  - It should not import any dependencies, as they may not be installed yet.
7
7
  """
8
+ import sys
8
9
  from typing import Dict, List
9
10
 
10
11
  install_requires = [
@@ -146,6 +147,13 @@ extras_require: Dict[str, List[str]] = {
146
147
  # docs instead.
147
148
  # 'vsphere-automation-sdk @ git+https://github.com/vmware/vsphere-automation-sdk-python.git@v8.0.1.0' pylint: disable=line-too-long
148
149
  ],
150
+ 'nebius': ['nebius>=0.2.0',]
149
151
  }
150
152
 
151
- extras_require['all'] = sum(extras_require.values(), [])
153
+ # Nebius needs python3.10. If python 3.9 [all] will not install nebius
154
+ if sys.version_info < (3, 10):
155
+ filtered_keys = [k for k in extras_require if k != 'nebius']
156
+ extras_require['all'] = sum(
157
+ [v for k, v in extras_require.items() if k != 'nebius'], [])
158
+ else:
159
+ extras_require['all'] = sum(extras_require.values(), [])
sky/skylet/constants.py CHANGED
@@ -281,12 +281,9 @@ FILE_MOUNTS_REMOTE_TMP_DIR = '/tmp/sky-{}-filemounts-files'
281
281
  # linking. E.g., in our API server deployment on k8s, ~/.sky/ is mounted from a
282
282
  # persistent volume, so any contents in ~/.sky/ cannot be hard linked elsewhere.
283
283
  FILE_MOUNTS_LOCAL_TMP_BASE_PATH = '~/.sky/tmp/'
284
-
285
- # Used when an managed jobs are created and
286
- # files are synced up to the cloud.
287
- FILE_MOUNTS_WORKDIR_SUBPATH = 'job-{run_id}/workdir'
288
- FILE_MOUNTS_SUBPATH = 'job-{run_id}/local-file-mounts/{i}'
289
- FILE_MOUNTS_TMP_SUBPATH = 'job-{run_id}/tmp-files'
284
+ # Base path for two-hop file mounts translation. See
285
+ # controller_utils.translate_local_file_mounts_to_two_hop().
286
+ FILE_MOUNTS_CONTROLLER_TMP_BASE_PATH = '~/.sky/tmp/controller'
290
287
 
291
288
  # Used when an managed jobs are created and
292
289
  # files are synced up to the cloud.
sky/task.py CHANGED
@@ -1132,6 +1132,12 @@ class Task:
1132
1132
  raise ValueError(f'Storage Type {store_type} '
1133
1133
  'does not exist!')
1134
1134
 
1135
+ # TODO: Delete from storage_mounts, now that the storage is
1136
+ # translated into file_mounts. Note: as is, this will break
1137
+ # controller_utils.
1138
+ # _maybe_translate_local_file_mounts_and_sync_up(), which still
1139
+ # needs the storage, but not the file_mounts.
1140
+
1135
1141
  def get_local_to_remote_file_mounts(self) -> Optional[Dict[str, str]]:
1136
1142
  """Returns file mounts of the form (dst=VM path, src=local path).
1137
1143
 
@@ -10,6 +10,9 @@ file_mounts:
10
10
  {%- for remote_catalog_path, local_catalog_path in modified_catalogs.items() %}
11
11
  {{remote_catalog_path}}: {{local_catalog_path}}
12
12
  {%- endfor %}
13
+ {%- for controller_file_mount_path, local_file_mount_path in local_to_controller_file_mounts.items() %}
14
+ {{controller_file_mount_path}}: {{local_file_mount_path}}
15
+ {%- endfor %}
13
16
 
14
17
  setup: |
15
18
  {{ sky_activate_python_env }}
@@ -0,0 +1,79 @@
1
+ cluster_name: {{cluster_name_on_cloud}}
2
+
3
+ # The maximum number of workers nodes to launch in addition to the head node.
4
+ max_workers: {{num_nodes - 1}}
5
+ upscaling_speed: {{num_nodes - 1}}
6
+ idle_timeout_minutes: 60
7
+
8
+ provider:
9
+ type: external
10
+ module: sky.provision.nebius
11
+ region: "{{region}}"
12
+
13
+ auth:
14
+ ssh_user: ubuntu
15
+ ssh_private_key: {{ssh_private_key}}
16
+
17
+ available_node_types:
18
+ ray_head_default:
19
+ resources: {}
20
+ node_config:
21
+ InstanceType: {{instance_type}}
22
+ ImageId: {{image_id}}
23
+ DiskSize: {{disk_size}}
24
+ UserData: |
25
+ users:
26
+ - name: skypilot:ssh_user
27
+ shell: /bin/bash
28
+ sudo: ALL=(ALL) NOPASSWD:ALL
29
+ ssh_authorized_keys:
30
+ - |-
31
+ skypilot:ssh_public_key_content
32
+
33
+ head_node_type: ray_head_default
34
+
35
+ # Format: `REMOTE_PATH : LOCAL_PATH`
36
+ file_mounts: {
37
+ "{{sky_ray_yaml_remote_path}}": "{{sky_ray_yaml_local_path}}",
38
+ "{{sky_remote_path}}/{{sky_wheel_hash}}": "{{sky_local_path}}",
39
+ {%- for remote_path, local_path in credentials.items() %}
40
+ "{{remote_path}}": "{{local_path}}",
41
+ {%- endfor %}
42
+ }
43
+
44
+ rsync_exclude: []
45
+
46
+ initialization_commands: []
47
+
48
+ # List of shell commands to run to set up nodes.
49
+ # NOTE: these are very performance-sensitive. Each new item opens/closes an SSH
50
+ # connection, which is expensive. Try your best to co-locate commands into fewer
51
+ # items!
52
+ #
53
+ # Increment the following for catching performance bugs easier:
54
+ # current num items (num SSH connections): 1
55
+ setup_commands:
56
+ # Disable `unattended-upgrades` to prevent apt-get from hanging. It should be called at the beginning before the process started to avoid being blocked. (This is a temporary fix.)
57
+ # Create ~/.ssh/config file in case the file does not exist in the image.
58
+ # Line 'rm ..': there is another installation of pip.
59
+ # Line 'sudo bash ..': set the ulimit as suggested by ray docs for performance. https://docs.ray.io/en/latest/cluster/vms/user-guides/large-cluster-best-practices.html#system-configuration
60
+ # Line 'sudo grep ..': set the number of threads per process to unlimited to avoid ray job submit stucking issue when the number of running ray jobs increase.
61
+ # Line 'mkdir -p ..': disable host key check
62
+ # Line 'python3 -c ..': patch the buggy ray files and enable `-o allow_other` option for `goofys`
63
+ - {%- for initial_setup_command in initial_setup_commands %}
64
+ {{ initial_setup_command }}
65
+ {%- endfor %}
66
+ sudo systemctl stop unattended-upgrades || true;
67
+ sudo systemctl disable unattended-upgrades || true;
68
+ sudo sed -i 's/Unattended-Upgrade "1"/Unattended-Upgrade "0"/g' /etc/apt/apt.conf.d/20auto-upgrades || true;
69
+ sudo kill -9 `sudo lsof /var/lib/dpkg/lock-frontend | awk '{print $2}' | tail -n 1` || true;
70
+ sudo pkill -9 apt-get;
71
+ sudo pkill -9 dpkg;
72
+ sudo dpkg --configure -a;
73
+ mkdir -p ~/.ssh; touch ~/.ssh/config;
74
+ {{ conda_installation_commands }}
75
+ {{ ray_skypilot_installation_commands }}
76
+ sudo bash -c 'rm -rf /etc/security/limits.d; echo "* soft nofile 1048576" >> /etc/security/limits.conf; echo "* hard nofile 1048576" >> /etc/security/limits.conf';
77
+ sudo grep -e '^DefaultTasksMax' /etc/systemd/system.conf || (sudo bash -c 'echo "DefaultTasksMax=infinity" >> /etc/systemd/system.conf'); sudo systemctl set-property user-$(id -u $(whoami)).slice TasksMax=infinity; sudo systemctl daemon-reload;
78
+ mkdir -p ~/.ssh; (grep -Pzo -q "Host \*\n StrictHostKeyChecking no" ~/.ssh/config) || printf "Host *\n StrictHostKeyChecking no\n" >> ~/.ssh/config;
79
+ [ -f /etc/fuse.conf ] && sudo sed -i 's/#user_allow_other/user_allow_other/g' /etc/fuse.conf || (sudo sh -c 'echo "user_allow_other" > /etc/fuse.conf');
sky/utils/common_utils.py CHANGED
@@ -18,6 +18,7 @@ import uuid
18
18
 
19
19
  import jinja2
20
20
  import jsonschema
21
+ import psutil
21
22
  import yaml
22
23
 
23
24
  from sky import exceptions
@@ -755,3 +756,40 @@ def is_port_available(port: int, reuse_addr: bool = True) -> bool:
755
756
  return True
756
757
  except OSError:
757
758
  return False
759
+
760
+
761
+ # TODO(aylei): should be aware of cgroups
762
+ def get_cpu_count() -> int:
763
+ """Get the number of CPUs.
764
+
765
+ If the API server is deployed as a pod in k8s cluster, we assume the
766
+ number of CPUs is provided by the downward API.
767
+ """
768
+ cpu_count = os.getenv('SKYPILOT_POD_CPU_CORE_LIMIT')
769
+ if cpu_count is not None:
770
+ try:
771
+ return int(float(cpu_count))
772
+ except ValueError as e:
773
+ with ux_utils.print_exception_no_traceback():
774
+ raise ValueError(
775
+ f'Failed to parse the number of CPUs from {cpu_count}'
776
+ ) from e
777
+ return psutil.cpu_count()
778
+
779
+
780
+ # TODO(aylei): should be aware of cgroups
781
+ def get_mem_size_gb() -> float:
782
+ """Get the memory size in GB.
783
+
784
+ If the API server is deployed as a pod in k8s cluster, we assume the
785
+ memory size is provided by the downward API.
786
+ """
787
+ mem_size = os.getenv('SKYPILOT_POD_MEMORY_GB_LIMIT')
788
+ if mem_size is not None:
789
+ try:
790
+ return float(mem_size)
791
+ except ValueError as e:
792
+ with ux_utils.print_exception_no_traceback():
793
+ raise ValueError(
794
+ f'Failed to parse the memory size from {mem_size}') from e
795
+ return psutil.virtual_memory().total / (1024**3)
@@ -662,6 +662,66 @@ def replace_skypilot_config_path_in_file_mounts(
662
662
  f'with the real path in file mounts: {file_mounts}')
663
663
 
664
664
 
665
+ def _generate_run_uuid() -> str:
666
+ """Generates a unique run id for the job."""
667
+ return common_utils.base36_encode(uuid.uuid4().hex)[:8]
668
+
669
+
670
+ def translate_local_file_mounts_to_two_hop(
671
+ task: 'task_lib.Task') -> Dict[str, str]:
672
+ """Translates local->VM mounts into two-hop file mounts.
673
+
674
+ This strategy will upload the local files to the controller first, using a
675
+ normal rsync as part of sky.launch() for the controller. Then, when the
676
+ controller launches the task, it will also use local file_mounts from the
677
+ destination path of the first hop.
678
+
679
+ Local machine/API server Controller Job cluster
680
+ ------------------------ ----------------------- --------------------
681
+ | local path ----|--|-> controller path --|--|-> job dst path |
682
+ ------------------------ ----------------------- --------------------
683
+
684
+ Returns:
685
+ A dict mapping from controller file mount path to local file mount path
686
+ for the first hop. The task is updated in-place to do the second hop.
687
+ """
688
+ first_hop_file_mounts = {}
689
+ second_hop_file_mounts = {}
690
+
691
+ run_id = _generate_run_uuid()
692
+ base_tmp_dir = os.path.join(constants.FILE_MOUNTS_CONTROLLER_TMP_BASE_PATH,
693
+ run_id)
694
+
695
+ # Use a simple counter to create unique paths within the base_tmp_dir for
696
+ # each mount.
697
+ file_mount_id = 0
698
+
699
+ file_mounts_to_translate = task.file_mounts or {}
700
+ if task.workdir is not None:
701
+ file_mounts_to_translate[constants.SKY_REMOTE_WORKDIR] = task.workdir
702
+ task.workdir = None
703
+
704
+ for job_cluster_path, local_path in file_mounts_to_translate.items():
705
+ if data_utils.is_cloud_store_url(
706
+ local_path) or data_utils.is_cloud_store_url(job_cluster_path):
707
+ raise exceptions.NotSupportedError(
708
+ 'Cloud-based file_mounts are specified, but no cloud storage '
709
+ 'is available. Please specify local file_mounts only.')
710
+
711
+ controller_path = os.path.join(base_tmp_dir, f'{file_mount_id}')
712
+ file_mount_id += 1
713
+ first_hop_file_mounts[controller_path] = local_path
714
+ second_hop_file_mounts[job_cluster_path] = controller_path
715
+
716
+ # Use set_file_mounts to override existing file mounts, if they exist.
717
+ task.set_file_mounts(second_hop_file_mounts)
718
+
719
+ # Return the first hop info so that it can be added to the jobs-controller
720
+ # YAML.
721
+ return first_hop_file_mounts
722
+
723
+
724
+ # (maybe translate local file mounts) and (sync up)
665
725
  def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
666
726
  task_type: str) -> None:
667
727
  """Translates local->VM mounts into Storage->VM, then syncs up any Storage.
@@ -695,7 +755,7 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
695
755
  # We should not use common_utils.get_usage_run_id() here, because when
696
756
  # Python API is used, the run id will be the same across multiple
697
757
  # jobs.launch/serve.up calls after the sky is imported.
698
- run_id = common_utils.base36_encode(uuid.uuid4().hex)[:8]
758
+ run_id = _generate_run_uuid()
699
759
  user_hash = common_utils.get_user_hash()
700
760
  original_file_mounts = task.file_mounts if task.file_mounts else {}
701
761
  original_storage_mounts = task.storage_mounts if task.storage_mounts else {}
@@ -854,7 +914,11 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
854
914
  # Step 4: Upload storage from sources
855
915
  # Upload the local source to a bucket. The task will not be executed
856
916
  # locally, so we need to upload the files/folders to the bucket manually
857
- # here before sending the task to the remote jobs controller.
917
+ # here before sending the task to the remote jobs controller. This will
918
+ # also upload any storage mounts that are not translated. After
919
+ # sync_storage_mounts, we will also have file_mounts in the task, but
920
+ # these aren't used since the storage_mounts for the same paths take
921
+ # precedence.
858
922
  if task.storage_mounts:
859
923
  # There may be existing (non-translated) storage mounts, so log this
860
924
  # whenever task.storage_mounts is non-empty.
@@ -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>
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=eSspYNfxrf0xj8B8E1z5prY7j2xz0DdjEeOO8s5sMLU,6391
1
+ sky/__init__.py,sha256=pGbies6z8Ql6Y42iPemF9_7b3Eh9REx7qkqNefvh6Aw,6428
2
2
  sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
3
3
  sky/authentication.py,sha256=hCEqi77nprQEg3ktfRL51xiiw16zwZOmFEDB_Z7fWVU,22384
4
4
  sky/check.py,sha256=NDKx_Zm7YRxPjMv82wz3ESLnGIPljaACyqVdVNM0PzY,11258
@@ -14,7 +14,7 @@ sky/optimizer.py,sha256=C82l9N3umdrJ2AaM-pSg0aK5rpOAX3lEAfFU7r6hqPo,60183
14
14
  sky/resources.py,sha256=f2Qo_Wt0kFruKmYm6cgYbICH_wn0Zkb8uIv6LA82SRs,72153
15
15
  sky/sky_logging.py,sha256=pID2RINjH62n7SZpv70DuN8BSFYdCfTJ2ScGQpVmugg,5725
16
16
  sky/skypilot_config.py,sha256=bt1vSis2aKKdQfPz80-KcjM9vNIg_qYKLNXur782Poo,8693
17
- sky/task.py,sha256=Wvn1rQ4HvaKIOcpt2oySsNBU8ESPOtSQ0OwTxc2VthQ,54638
17
+ sky/task.py,sha256=elzRNKy0twCOgz4VaCpd4k-EQZ3ZKy4N6nNg0yldnYo,54969
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  sky/adaptors/aws.py,sha256=iH55Cm6eXWwufAG0Dgk7LTQcADawNa3ELrBH1m6yuSY,7617
20
20
  sky/adaptors/azure.py,sha256=r8xkjRgZZQfsSExNdguFa6c5fCLcUhZrFV8zs62VExo,21986
@@ -26,14 +26,15 @@ sky/adaptors/docker.py,sha256=_kzpZ0fkWHqqQAVVl0llTsCE31KYz3Sjn8psTBQHVkA,468
26
26
  sky/adaptors/gcp.py,sha256=OQ9RaqjR0r0iaWYpjvEtIx5vnEhyB4LhUCwbtdxsmVk,3115
27
27
  sky/adaptors/ibm.py,sha256=H87vD6izq_wQI8oQC7cx9iVtRgPi_QkAcrfa1Z3PNqU,4906
28
28
  sky/adaptors/kubernetes.py,sha256=fvNeqqyW4WbUDT-isU_fWLN-zqywayyRkVsj7sJ4Vc8,6645
29
+ sky/adaptors/nebius.py,sha256=bZR7ybfqIyUbNFiMfwC7qpOmSWDM9uExxWhm-MT_PqU,2259
29
30
  sky/adaptors/oci.py,sha256=LfMSFUmkkNT6Yoz9FZHNl6UFSg4X1lJO4-x4ZbDdXTs,2831
30
31
  sky/adaptors/runpod.py,sha256=4Nt_BfZhJAKQNA3wO8cxvvNI8x4NsDGHu_4EhRDlGYQ,225
31
32
  sky/adaptors/vast.py,sha256=tpvmHi7IkQNzbbHVkeo04kUSajoEpSzXr2XgeO_I1LU,695
32
33
  sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
33
34
  sky/backends/__init__.py,sha256=UDjwbUgpTRApbPJnNfR786GadUuwgRk3vsWoVu5RB_c,536
34
35
  sky/backends/backend.py,sha256=4BOqKZ-bwBTpjNnZF4JAHX2m2Iga7EmEn8Ao3tEivaM,7527
35
- sky/backends/backend_utils.py,sha256=5fTUT4GCF-Q_YNNmRV-kqfiU8k_TU0a4EY4u_cRNLnE,132927
36
- sky/backends/cloud_vm_ray_backend.py,sha256=aCKJsfjCKtHbrb6UVDz2TOuKAYKKfYDRfYciTsVQJxU,247114
36
+ sky/backends/backend_utils.py,sha256=egi4xOu1NKZi8HBUTz8hhCOLx-QtEokcM_v6Ix6OUdA,133199
37
+ sky/backends/cloud_vm_ray_backend.py,sha256=B8sH-m5pujvkTN_sLENsHw-SWpbaWwlHda26yI_1wnk,247459
37
38
  sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,8358
38
39
  sky/backends/local_docker_backend.py,sha256=nSYCjms3HOPjPNOrcCqsUKm1WV3AAovRFjEQ7hcEXW4,17021
39
40
  sky/backends/wheel_utils.py,sha256=5BUzBqfYz7p1ME6_0PXGmcsAkLVb8NrFt317p7a4X8s,8278
@@ -44,8 +45,8 @@ sky/benchmark/benchmark_utils.py,sha256=o4RymqSceq5mLEZL0upQM6NVEzJJQzj9s9tTm49u
44
45
  sky/client/__init__.py,sha256=pz6xvVSd9X-gwqbsDL0E9QOojYqM0KAD0j-NCyCIF1k,38
45
46
  sky/client/cli.py,sha256=iwYBgEt3tgsYmOIp-ivPmL2FHoalvhH4Ng--C31ubws,218201
46
47
  sky/client/common.py,sha256=axDic7WOG1e78SdFm5XIwdhX7YNvf3g4k7INrsW3X4s,14611
47
- sky/client/sdk.py,sha256=q5R0_AquHAiLSLXpha8fIecQ9cgqqFba436xVzJ48oI,66943
48
- sky/clouds/__init__.py,sha256=taKUCz6gWoKZhqHLYJXX-d0Ux6ZSQZEwxcNFdniupL0,1365
48
+ sky/client/sdk.py,sha256=XYjiVnxZFcNYHgWEHerSqpHyMLLg0HHZPUIklUnAyWw,67068
49
+ sky/clouds/__init__.py,sha256=OW6mJ-9hpJSBORCgt2LippLQEYZHNfnBW1mooRNNvxo,1416
49
50
  sky/clouds/aws.py,sha256=J8tczaTDL239UowN9tUlhI92SeHw01wtFucSckvG63w,54112
50
51
  sky/clouds/azure.py,sha256=bawEw6wOLAVyrjxMD-4UjLCuMj1H5_jH8qggpfZYS54,31703
51
52
  sky/clouds/cloud.py,sha256=Ej6WH6VElYdG3PG1-Sp6lFVsJ42uskV4dAg7kmoY4JA,35376
@@ -56,6 +57,7 @@ sky/clouds/gcp.py,sha256=0QpsI0Dso1xs3LhGlUq-Sq6WK-u11wN-57-vfcyhI5I,55154
56
57
  sky/clouds/ibm.py,sha256=R4JR96YfXstZ2B_IgFNVEX2SBAq3q0lSWz4y7FoFoeE,21474
57
58
  sky/clouds/kubernetes.py,sha256=7ki_zJZKnkhOPrHgVFq6azy5UhNKeeBOCSTjKCgj3vk,31709
58
59
  sky/clouds/lambda_cloud.py,sha256=ejqA_Wj5-325Y_QjQ__FY4HMO8sv_2tSRsufmaldcmI,12699
60
+ sky/clouds/nebius.py,sha256=Z439DIaLCOqpCDBq8QhgiFyn5vIaZ7Rj7O6yZ1rjQ5g,12289
59
61
  sky/clouds/oci.py,sha256=irINbQsQ6YxRxGTMaCNsms3mZkIun2oJMMA1fMCRJyA,27072
60
62
  sky/clouds/paperspace.py,sha256=O7bH8YaHBLFuyj6rDz2bPDz_6OYWmNB9OLqnZH70yfY,10922
61
63
  sky/clouds/runpod.py,sha256=hzYB4td6qaged83xMAVKZ96bH40oZnrHXL7a_CKxXIw,11926
@@ -67,7 +69,7 @@ sky/clouds/service_catalog/aws_catalog.py,sha256=PbYD37rU_8m-Y_5xTglW21ppxI0GecM
67
69
  sky/clouds/service_catalog/azure_catalog.py,sha256=5Q51x_WEKvQ2YSgJvZHRH3URlbwIstYuwpjaWW_wJlw,8149
68
70
  sky/clouds/service_catalog/common.py,sha256=jpz2SmPnEjhy3ZUvn_EVoQQa3JUnoyi7g1Cq1t11Sw0,27708
69
71
  sky/clouds/service_catalog/config.py,sha256=ylzqewdEBjDg4awvFek6ldYmFrnvD2bVGLZuLPvEVYA,1793
70
- sky/clouds/service_catalog/constants.py,sha256=Pu0OJxqGKsC9kN-FpkvmIYnw0Ti_rZLxwO9wX9xsB0o,425
72
+ sky/clouds/service_catalog/constants.py,sha256=zxl8uEszOZbXYDWGYvzxeAot2i0i2_yOwWeNzapCsYw,435
71
73
  sky/clouds/service_catalog/cudo_catalog.py,sha256=V_takvL6dWTGQaTLCEvjKIotCDPnMujiNUZ87kZKGVI,4673
72
74
  sky/clouds/service_catalog/do_catalog.py,sha256=Cug2QaQlSN6nFhba7f1ksyzs6z0ICTj6vSiR-792WnI,3698
73
75
  sky/clouds/service_catalog/fluidstack_catalog.py,sha256=21-cvrYEYTIi7n3ZNF2e7_0QX-PF4BkhlVJUWQOvKrY,5059
@@ -75,6 +77,7 @@ sky/clouds/service_catalog/gcp_catalog.py,sha256=jJEfWjZ4ItsE657LjIf9mruJVZERFeg
75
77
  sky/clouds/service_catalog/ibm_catalog.py,sha256=1iK0KvbI82U7sySb7chr-qm_16x3tTnZ6nIo7o76ouc,4493
76
78
  sky/clouds/service_catalog/kubernetes_catalog.py,sha256=oqVuCkIhDb-0Aw1FgocIF-ExR8kRQd04P3ZgjU1tG00,13536
77
79
  sky/clouds/service_catalog/lambda_catalog.py,sha256=2R-ccu63BbdvO6X80MtxiniA-jLewXb6I0Ye1rYD9fY,5302
80
+ sky/clouds/service_catalog/nebius_catalog.py,sha256=SEPyR9kCvirp6astnEUOfEMru48uyX_EIC6nbL1YBUA,4507
78
81
  sky/clouds/service_catalog/oci_catalog.py,sha256=cyA6ZqwHGOKuPxUl_dKmFGdeWdQGMrvl_-o2MtyF998,8580
79
82
  sky/clouds/service_catalog/paperspace_catalog.py,sha256=MOlfoGRChjEwMzu4nRAho8DrIwwUJ3QlRzrMA1RLqvE,3789
80
83
  sky/clouds/service_catalog/runpod_catalog.py,sha256=oWYVgSMiK3DxBE5AgROyExIq9kCTaOr3hDLSc31kqTU,4205
@@ -105,7 +108,7 @@ sky/data/storage.py,sha256=mTgMGdfSV6Gia076Dvgmc18ZlqF6eObima558UShiXA,207165
105
108
  sky/data/storage_utils.py,sha256=zB99nRTJjh8isU0UmqERmlwwRNgfig91IwrwVH8CcNw,12383
106
109
  sky/jobs/__init__.py,sha256=qoI53-xXE0-SOkrLWigvhgFXjk7dWE0OTqGPYIk-kmM,1458
107
110
  sky/jobs/constants.py,sha256=HrQbQA41Khor89ZoH112kjHRgehge-k4o0R9T9UbbaM,3088
108
- sky/jobs/controller.py,sha256=qq7FcZXPWby7ajsxydYPSiMDptRjV0HjkEu99f_olg4,28913
111
+ sky/jobs/controller.py,sha256=4G1CKI7M7D1BgJLbJMeqzg0iDDv7FR4ObB1BKZFFjhk,29585
109
112
  sky/jobs/recovery_strategy.py,sha256=RLrqq8B1likxTknPzt3_BqO26sFVpoatxzUuGfwc18A,26170
110
113
  sky/jobs/scheduler.py,sha256=IUW0a_69Pkvs4jqsWCXkeMDIZn-TTuPNyZvPLGRUYUM,12306
111
114
  sky/jobs/state.py,sha256=y9X1JGWpCokWBIwHZGB55fx39ZsilB1NZTbN_U8mPjA,43528
@@ -116,10 +119,10 @@ sky/jobs/dashboard/dashboard.py,sha256=kUKSXMAWAvPwJ_W_JK3wyz65Uope90_rNvhl8rZ1I
116
119
  sky/jobs/dashboard/static/favicon.ico,sha256=uYlvgxSM7gjBmXpZ8wydvZUPAbJiiix-rc2Xe5mma9s,15086
117
120
  sky/jobs/dashboard/templates/index.html,sha256=tz95q8O2pF7IvfY6yv0rnPyhj4DX8WX4RIVVxqFKV1Y,28519
118
121
  sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
119
- sky/jobs/server/core.py,sha256=zMLSSdNFQkP-RsfzCZ9jIcHNCL0lSvRd7PH3Sie0yPA,22615
122
+ sky/jobs/server/core.py,sha256=r9wrwVHrmuqgYAMoEEp4UfCLw8eYaD2RHGIBViHy9cc,23985
120
123
  sky/jobs/server/dashboard_utils.py,sha256=2Mbx40W1pQqPEPHsSDbHeaF0j5cgyKy-_A9Owdwp_AQ,2315
121
124
  sky/jobs/server/server.py,sha256=s3wULAh4u4drdIz2VA8l0HiXxHWdUzsBDYCstzU0Vxs,7411
122
- sky/provision/__init__.py,sha256=jiTOawg_wpy0s3Z-SEoOf7r280arLHUZzj-KPh-w7ek,6424
125
+ sky/provision/__init__.py,sha256=LzOo5LjkRXwSf29dUqN14YbjzQu3liXLQcmweTeZ4dE,6457
123
126
  sky/provision/common.py,sha256=E8AlSUFcn0FYQq1erNmoVfMAdsF9tP2yxfyk-9PLvQU,10286
124
127
  sky/provision/constants.py,sha256=oc_XDUkcoLQ_lwDy5yMeMSWviKS0j0s1c0pjlvpNeWY,800
125
128
  sky/provision/docker_utils.py,sha256=ENm0LkyrYWic3Ikyacho8X5uDMvGsbkZQsb6kNH1DuI,19629
@@ -159,16 +162,20 @@ sky/provision/gcp/mig_utils.py,sha256=oFpcFZoapHMILSE4iIm8V5bxP1RhbMHRF7cciqq8qA
159
162
  sky/provision/kubernetes/__init__.py,sha256=y6yVfii81WYG3ROxv4hiIj-ydinS5-xGxLvXnARVQoI,719
160
163
  sky/provision/kubernetes/config.py,sha256=bXwOGdSAnXCkDreew0KsSUqSv3ZrptNeevqat76LLts,29012
161
164
  sky/provision/kubernetes/constants.py,sha256=dZCUV8FOO9Gct80sdqeubKnxeW3CGl-u5mxKeIb-B0M,411
162
- sky/provision/kubernetes/instance.py,sha256=QWyO6PVQ0gu2oJo9G3iTzS-AnomnRGjM1i2qFYu1SfM,50319
165
+ sky/provision/kubernetes/instance.py,sha256=oag17OtuiqU-1RjkgW9NvEpxSGUFIYdI7M61S-YmPu8,50503
163
166
  sky/provision/kubernetes/network.py,sha256=EpNjRQ131CXepqbdkoRKFu4szVrm0oKEpv1l8EgOkjU,12364
164
167
  sky/provision/kubernetes/network_utils.py,sha256=52BZY_5ynCH6IXlivKObYyAHDgQCJyAJIjmM7J4MpFo,11393
165
- sky/provision/kubernetes/utils.py,sha256=8QV0QiPHlPkrNZZBYAyqQZZPGsuin4yRLXqQlwl_OiE,109431
168
+ sky/provision/kubernetes/utils.py,sha256=6s7xM2NTOBkBpOzk0KvecNvF1IUakNMQZdevSwC9Kaw,109460
166
169
  sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml,sha256=AMzYzlY0JIlfBWj5eX054Rc1XDW2thUcLSOGMJVhIdA,229
167
170
  sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml,sha256=RtTq4F1QUmR2Uunb6zuuRaPhV7hpesz4saHjn3Ncsb4,2010
168
171
  sky/provision/lambda_cloud/__init__.py,sha256=6EEvSgtUeEiup9ivIFevHmgv0GqleroO2X0K7TRa2nE,612
169
172
  sky/provision/lambda_cloud/config.py,sha256=jq1iLzp4Up61r4JGxvtpVbJlgXnea3LHYQhCQyyl7ik,272
170
173
  sky/provision/lambda_cloud/instance.py,sha256=fkIiUMt8TlEBJnyDuM02YYmTQmFDGOahiSDphY0PNw0,9279
171
174
  sky/provision/lambda_cloud/lambda_utils.py,sha256=H2Qx4xdJyyEu2IXaj5AyppuPJW385nF5_KXFOk8j9RI,9858
175
+ sky/provision/nebius/__init__.py,sha256=30I3181mu0W5g9fNvaWMPoBJZoGZ9RibuTpBH9P2pDg,558
176
+ sky/provision/nebius/config.py,sha256=LK9kTDp2w6zZrn3vNdcSGgsgS-dL_j63Nh4_u3pqNiA,321
177
+ sky/provision/nebius/instance.py,sha256=kfpZqwh56XV7h6XsX5dGJYilsVdRhC1EUgk0flaCo_E,11889
178
+ sky/provision/nebius/utils.py,sha256=BxA7Hh6P7dKcXSw4tx2dyYd1txm-c7Psym3rRCAGLic,12785
172
179
  sky/provision/oci/__init__.py,sha256=5E6EUtTK3mqGVREw5TuVl5DxteBYTZigIii7c8gHExU,612
173
180
  sky/provision/oci/config.py,sha256=diSDTyHLokcuXGB2XgZCHFvsXa8bah1PP2XuMouW_UU,1650
174
181
  sky/provision/oci/instance.py,sha256=rVGee5y0qkoeLIP5vPDmLq1N8G1n8mru62VHb0Bv5iY,16784
@@ -221,13 +228,13 @@ sky/serve/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
221
228
  sky/serve/server/core.py,sha256=pRvFadEIH_WTUkTtSmuFoPBP4JFq8Obt68ifi9DWuog,36865
222
229
  sky/serve/server/server.py,sha256=gQGVU9nHYdGbaLhGjIUNIYn4xwKjRASRJkiiTL5AI1Y,3283
223
230
  sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
224
- sky/server/common.py,sha256=64sg18ehgkGadkiG18ekqEbqNN_8S4Ca1BLgiFvQ8b8,17397
231
+ sky/server/common.py,sha256=uBshF4a-U8NGgm8XOHTW2YNSq0CsByfdIFgiybU5PEg,17321
225
232
  sky/server/constants.py,sha256=SqhWJMassFyvWAJn2UJHvuA_0_C6f5vngMzZ2KYLsKw,770
226
- sky/server/server.py,sha256=TZplXKA0KMs4UHLV3K5NSyhUPD0l2cmsiYgAZohn_Gs,41902
227
- sky/server/stream_utils.py,sha256=6jo1Dq8EtD0AHmJ3e3zCUNAiSYQlUKbPil4h8pA-2ac,5813
233
+ sky/server/server.py,sha256=0gcIn3jr_4DkHpBJYdNq--uPo9Im8bn2ftxgd8mBMcU,42225
234
+ sky/server/stream_utils.py,sha256=-3IX1YCgxAFfcvQIV0TCvOn1wbRLWovAx3ckCrsExWU,5651
228
235
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
229
236
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
- sky/server/requests/executor.py,sha256=4PVgEK11YqWGG4ihhVPK2MPVFlCDkE9U9D07q_TbdBA,18759
237
+ sky/server/requests/executor.py,sha256=NxVB0aFA05GddXDdt89wEwEYyJcIIrsQxE2wowklhUI,19597
231
238
  sky/server/requests/payloads.py,sha256=PeEkqQoTO3ellelkFX5yzPKbPkDV-NfVXkxHndYlrjE,15769
232
239
  sky/server/requests/requests.py,sha256=aMdjiK5kjSYP36pxdXFU6qgKOXcOmtViHbFm3V8Dvf8,19590
233
240
  sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -236,14 +243,14 @@ sky/server/requests/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
236
243
  sky/server/requests/serializers/decoders.py,sha256=iChUnvvXwnAArWm0AVT5eTLt5ZmPfkr4TT32orCSJCM,6624
237
244
  sky/server/requests/serializers/encoders.py,sha256=i4SAb5Oyp00CyMkyidbdA9dtxAzxZl40KTpL_x6pH0w,5679
238
245
  sky/setup_files/MANIFEST.in,sha256=cHYG6IdIp7RsDapL4Lrs-WTeYJftHn6qystSolmyyk8,581
239
- sky/setup_files/dependencies.py,sha256=k_w7otfEl-h-s2fykUC_MZyizs90i7kHLTUj69g2BKo,5960
246
+ sky/setup_files/dependencies.py,sha256=CbuSc7D1YFlonN-TF8qI0khq3jE0K7ueUEPG10RUNIY,6283
240
247
  sky/setup_files/setup.py,sha256=Q9f0RvsdPC0FLvyTKW-upQtRuA81jRO4TtN3VK-mP-Y,7436
241
248
  sky/skylet/LICENSE,sha256=BnFrJSvUFpMUoH5mOpWnEvaC5R6Uux8W6WXgrte8iYg,12381
242
249
  sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
250
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
244
251
  sky/skylet/autostop_lib.py,sha256=W4CtMira6QnmYToFT5kYTGjNPRZNC-bZPfsF1k3tluE,4480
245
252
  sky/skylet/configs.py,sha256=UtnpmEL0F9hH6PSjhsps7xgjGZ6qzPOfW1p2yj9tSng,1887
246
- sky/skylet/constants.py,sha256=ryV8H8aqAIDmPF00nt3Z_S8b6W2K3uqjSnFzObQzjyA,18030
253
+ sky/skylet/constants.py,sha256=eXT0Ule1N6ZYRGjJmC_idUAzZH3ymZ1JSzDL3USwTAE,17963
247
254
  sky/skylet/events.py,sha256=pnV3ZiwWhXqTHpU5B5Y9Xwam_7FQDI6IrxgSx7X_NVA,12743
248
255
  sky/skylet/job_lib.py,sha256=8W6GM2zxqGMIoD3AGiXcKsK_7-qouuTojiVL6upSeoA,43728
249
256
  sky/skylet/log_lib.py,sha256=DzOrgY8C7RdEMLC9O9kEKV-iLMb9wVMPSnDha8eMx28,20900
@@ -274,7 +281,7 @@ sky/templates/do-ray.yml.j2,sha256=sRKpn0tC-uPYtSZ20OB4fMzE7RbPQUr8kOCIbuJ4b4Q,4
274
281
  sky/templates/fluidstack-ray.yml.j2,sha256=4M3ONqrTaViv7tzN19bSaWT-7c16183DoRVXeZGqgv0,3756
275
282
  sky/templates/gcp-ray.yml.j2,sha256=CriBoM3XF80x9Rx8X-4VVQUFEo5osW6LRbz5ESrEcOg,9850
276
283
  sky/templates/ibm-ray.yml.j2,sha256=uehn7ZZPNIxIXMytqyiEUpTljmwfynCCkdNJURVN31Y,6877
277
- sky/templates/jobs-controller.yaml.j2,sha256=6c2qvp1Icutj0WdzK8N9fRKgW2hvQbjEwP7eUbw7_V4,2107
284
+ sky/templates/jobs-controller.yaml.j2,sha256=nYJBOqC0ZI4IOT4DDP54kdXoNUDRqiwtJiaQiJqQOCk,2289
278
285
  sky/templates/kubernetes-ingress.yml.j2,sha256=73iDklVDWBMbItg0IexCa6_ClXPJOxw7PWz3leku4nE,1340
279
286
  sky/templates/kubernetes-loadbalancer.yml.j2,sha256=IxrNYM366N01bbkJEbZ_UPYxUP8wyVEbRNFHRsBuLsw,626
280
287
  sky/templates/kubernetes-port-forward-proxy-command.sh,sha256=iw7mypHszg6Ggq9MbyiYMFOkSlXaQZulaxqC5IWYGCc,3381
@@ -282,6 +289,7 @@ sky/templates/kubernetes-ray.yml.j2,sha256=I_3ulhmBdAsHYn0fk24nGhaDYxLC6IZ0DzWU8
282
289
  sky/templates/kubernetes-ssh-jump.yml.j2,sha256=k5W5sOIMppU7dDkJMwPlqsUcb92y7L5_TVG3hkgMy8M,2747
283
290
  sky/templates/lambda-ray.yml.j2,sha256=IWUFROlaVV9qsH4tYInn0xgyE1WAP_dHZBnGkNpmpYM,4713
284
291
  sky/templates/local-ray.yml.j2,sha256=FNHeyHF6nW9nU9QLIZceUWfvrFTTcO51KqhTnYCEFaA,1185
292
+ sky/templates/nebius-ray.yml.j2,sha256=Hjyzjb47ryGWuoUCLluz7JktZfJ3RdB644X3DpXHJL8,3678
285
293
  sky/templates/oci-ray.yml.j2,sha256=pm1_sLC9r-mMj4NHGH1ogKqxG2-M6bu2NPWb6Z58zsU,4777
286
294
  sky/templates/paperspace-ray.yml.j2,sha256=oNjsBtDqGlLLWR7d0rsE-WNKNkbPK7LKiMMTkY1b6UI,4236
287
295
  sky/templates/runpod-ray.yml.j2,sha256=M-ypI029BWEU3w4dWm546xih4YloY0e-HwSdPDqDPQQ,4525
@@ -302,10 +310,10 @@ sky/utils/cluster_utils.py,sha256=s6DFRXktv6_gF_DnwDEXJ7CniifHp8CAPeGciRCbXgI,14
302
310
  sky/utils/command_runner.py,sha256=-7vxLvwZnTvYMQ_nScmuQWY6ZvQYv69yvvIp2uOaOqU,39063
303
311
  sky/utils/command_runner.pyi,sha256=mJOzCgcYZAfHwnY_6Wf1YwlTEJGb9ihzc2f0rE0Kw98,7751
304
312
  sky/utils/common.py,sha256=P4oVXFATUYgkruHX92cN12SJBtfb8DiOOYZtbN1kvP0,1927
305
- sky/utils/common_utils.py,sha256=wPECJDpeloyixalXNrdmVKXFyU1UKUtBES6D0mRd2mE,26180
313
+ sky/utils/common_utils.py,sha256=-O0GthIockeJy8LlA4heVYYtaUdQwNA-5mFMqHajRf8,27457
306
314
  sky/utils/config_utils.py,sha256=VQ2E3DQ2XysD-kul-diSrxn_pXWsDMfKAev91OiJQ1Q,9041
307
315
  sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
308
- sky/utils/controller_utils.py,sha256=4Nck10XV6gNJKjBl7y_CIxIGqP3bbISuZSVTHbBumgs,45725
316
+ sky/utils/controller_utils.py,sha256=Wth_esy2NX9nco-MK01bgQMIChAYky0Uq4T35jQkXxY,48472
309
317
  sky/utils/dag_utils.py,sha256=sAus0aL1wtuuFZSDnpO4LY-6WK4u5iJY952oWQzHo3Y,7532
310
318
  sky/utils/db_utils.py,sha256=K2-OHPg0FeHCarevMdWe0IWzm6wWumViEeYeJuGoFUE,3747
311
319
  sky/utils/env_options.py,sha256=aaD6GoYK0LaZIqjOEZ-R7eccQuiRriW3EuLWtOI5En8,1578
@@ -336,9 +344,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488
336
344
  sky/utils/kubernetes/kubernetes_deploy_utils.py,sha256=iAjfyPclOs8qlALACcfxLpRAO9CZ-h16leFqXZ6tNaY,10096
337
345
  sky/utils/kubernetes/rsync_helper.sh,sha256=h4YwrPFf9727CACnMJvF3EyK_0OeOYKKt4su_daKekw,1256
338
346
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
339
- skypilot_nightly-1.0.0.dev20250219.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
340
- skypilot_nightly-1.0.0.dev20250219.dist-info/METADATA,sha256=wO3b_7Wt5UkHrHx5QDuqB-UKy3tIumd6DsrdpHfr03c,18916
341
- skypilot_nightly-1.0.0.dev20250219.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
342
- skypilot_nightly-1.0.0.dev20250219.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
343
- skypilot_nightly-1.0.0.dev20250219.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
344
- skypilot_nightly-1.0.0.dev20250219.dist-info/RECORD,,
347
+ skypilot_nightly-1.0.0.dev20250221.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
348
+ skypilot_nightly-1.0.0.dev20250221.dist-info/METADATA,sha256=g1zIuQa9_hr9mfnZIQPKliYNNnNlomELACnPKREiPc8,19055
349
+ skypilot_nightly-1.0.0.dev20250221.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
350
+ skypilot_nightly-1.0.0.dev20250221.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
351
+ skypilot_nightly-1.0.0.dev20250221.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
352
+ skypilot_nightly-1.0.0.dev20250221.dist-info/RECORD,,