skypilot-nightly 1.0.0.dev20241228__py3-none-any.whl → 1.0.0.dev20241230__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.
sky/skylet/constants.py CHANGED
@@ -268,12 +268,16 @@ CLUSTER_NAME_VALID_REGEX = '[a-zA-Z]([-_.a-zA-Z0-9]*[a-zA-Z0-9])?'
268
268
  # Used for translate local file mounts to cloud storage. Please refer to
269
269
  # sky/execution.py::_maybe_translate_local_file_mounts_and_sync_up for
270
270
  # more details.
271
- WORKDIR_BUCKET_NAME = 'skypilot-workdir-{username}-{id}'
272
- FILE_MOUNTS_BUCKET_NAME = 'skypilot-filemounts-folder-{username}-{id}'
273
- FILE_MOUNTS_FILE_ONLY_BUCKET_NAME = 'skypilot-filemounts-files-{username}-{id}'
271
+ FILE_MOUNTS_BUCKET_NAME = 'skypilot-filemounts-{username}-{id}'
274
272
  FILE_MOUNTS_LOCAL_TMP_DIR = 'skypilot-filemounts-files-{id}'
275
273
  FILE_MOUNTS_REMOTE_TMP_DIR = '/tmp/sky-{}-filemounts-files'
276
274
 
275
+ # Used when an managed jobs are created and
276
+ # files are synced up to the cloud.
277
+ FILE_MOUNTS_WORKDIR_SUBPATH = 'job-{run_id}/workdir'
278
+ FILE_MOUNTS_SUBPATH = 'job-{run_id}/local-file-mounts/{i}'
279
+ FILE_MOUNTS_TMP_SUBPATH = 'job-{run_id}/tmp-files'
280
+
277
281
  # The default idle timeout for SkyPilot controllers. This include spot
278
282
  # controller and sky serve controller.
279
283
  # TODO(tian): Refactor to controller_utils. Current blocker: circular import.
sky/task.py CHANGED
@@ -948,12 +948,22 @@ class Task:
948
948
  store_type = storage_lib.StoreType.from_cloud(storage_cloud_str)
949
949
  return store_type, storage_region
950
950
 
951
- def sync_storage_mounts(self) -> None:
951
+ def sync_storage_mounts(self, force_sync: bool = False) -> None:
952
952
  """(INTERNAL) Eagerly syncs storage mounts to cloud storage.
953
953
 
954
954
  After syncing up, COPY-mode storage mounts are translated into regular
955
955
  file_mounts of the form ``{ /remote/path: {s3,gs,..}://<bucket path>
956
956
  }``.
957
+
958
+ Args:
959
+ force_sync: If True, forces the synchronization of storage mounts.
960
+ If the store object is added via storage.add_store(),
961
+ the sync will happen automatically via add_store.
962
+ However, if it is passed via the construction function
963
+ of storage, it is usually because the user passed an
964
+ intermediate bucket name in the config and we need to
965
+ construct from the user config. In this case, set
966
+ force_sync to True.
957
967
  """
958
968
  for storage in self.storage_mounts.values():
959
969
  if not storage.stores:
@@ -961,6 +971,8 @@ class Task:
961
971
  self.storage_plans[storage] = store_type
962
972
  storage.add_store(store_type, store_region)
963
973
  else:
974
+ if force_sync:
975
+ storage.sync_all_stores()
964
976
  # We will download the first store that is added to remote.
965
977
  self.storage_plans[storage] = list(storage.stores.keys())[0]
966
978
 
@@ -977,6 +989,7 @@ class Task:
977
989
  else:
978
990
  assert storage.name is not None, storage
979
991
  blob_path = 's3://' + storage.name
992
+ blob_path = storage.get_bucket_sub_path_prefix(blob_path)
980
993
  self.update_file_mounts({
981
994
  mnt_path: blob_path,
982
995
  })
@@ -987,6 +1000,7 @@ class Task:
987
1000
  else:
988
1001
  assert storage.name is not None, storage
989
1002
  blob_path = 'gs://' + storage.name
1003
+ blob_path = storage.get_bucket_sub_path_prefix(blob_path)
990
1004
  self.update_file_mounts({
991
1005
  mnt_path: blob_path,
992
1006
  })
@@ -1005,6 +1019,7 @@ class Task:
1005
1019
  blob_path = data_utils.AZURE_CONTAINER_URL.format(
1006
1020
  storage_account_name=storage_account_name,
1007
1021
  container_name=storage.name)
1022
+ blob_path = storage.get_bucket_sub_path_prefix(blob_path)
1008
1023
  self.update_file_mounts({
1009
1024
  mnt_path: blob_path,
1010
1025
  })
@@ -1015,6 +1030,7 @@ class Task:
1015
1030
  blob_path = storage.source
1016
1031
  else:
1017
1032
  blob_path = 'r2://' + storage.name
1033
+ blob_path = storage.get_bucket_sub_path_prefix(blob_path)
1018
1034
  self.update_file_mounts({
1019
1035
  mnt_path: blob_path,
1020
1036
  })
@@ -1030,7 +1046,18 @@ class Task:
1030
1046
  cos_region = data_utils.Rclone.get_region_from_rclone(
1031
1047
  storage.name, data_utils.Rclone.RcloneClouds.IBM)
1032
1048
  blob_path = f'cos://{cos_region}/{storage.name}'
1049
+ blob_path = storage.get_bucket_sub_path_prefix(blob_path)
1033
1050
  self.update_file_mounts({mnt_path: blob_path})
1051
+ elif store_type is storage_lib.StoreType.OCI:
1052
+ if storage.source is not None and not isinstance(
1053
+ storage.source,
1054
+ list) and storage.source.startswith('oci://'):
1055
+ blob_path = storage.source
1056
+ else:
1057
+ blob_path = 'oci://' + storage.name
1058
+ self.update_file_mounts({
1059
+ mnt_path: blob_path,
1060
+ })
1034
1061
  else:
1035
1062
  with ux_utils.print_exception_no_traceback():
1036
1063
  raise ValueError(f'Storage Type {store_type} '
@@ -649,10 +649,27 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
649
649
  still sync up any storage mounts with local source paths (which do not
650
650
  undergo translation).
651
651
  """
652
+
652
653
  # ================================================================
653
654
  # Translate the workdir and local file mounts to cloud file mounts.
654
655
  # ================================================================
655
656
 
657
+ def _sub_path_join(sub_path: Optional[str], path: str) -> str:
658
+ if sub_path is None:
659
+ return path
660
+ return os.path.join(sub_path, path).strip('/')
661
+
662
+ def assert_no_bucket_creation(store: storage_lib.AbstractStore) -> None:
663
+ if store.is_sky_managed:
664
+ # Bucket was created, this should not happen since use configured
665
+ # the bucket and we assumed it already exists.
666
+ store.delete()
667
+ with ux_utils.print_exception_no_traceback():
668
+ raise exceptions.StorageBucketCreateError(
669
+ f'Jobs bucket {store.name!r} does not exist. '
670
+ 'Please check jobs.bucket configuration in '
671
+ 'your SkyPilot config.')
672
+
656
673
  run_id = common_utils.get_usage_run_id()[:8]
657
674
  original_file_mounts = task.file_mounts if task.file_mounts else {}
658
675
  original_storage_mounts = task.storage_mounts if task.storage_mounts else {}
@@ -679,11 +696,27 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
679
696
  ux_utils.spinner_message(
680
697
  f'Translating {msg} to SkyPilot Storage...'))
681
698
 
699
+ # Get the bucket name for the workdir and file mounts,
700
+ # we store all these files in same bucket from config.
701
+ bucket_wth_prefix = skypilot_config.get_nested(('jobs', 'bucket'), None)
702
+ store_kwargs: Dict[str, Any] = {}
703
+ if bucket_wth_prefix is None:
704
+ store_type = store_cls = sub_path = None
705
+ storage_account_name = region = None
706
+ bucket_name = constants.FILE_MOUNTS_BUCKET_NAME.format(
707
+ username=common_utils.get_cleaned_username(), id=run_id)
708
+ else:
709
+ store_type, store_cls, bucket_name, sub_path, storage_account_name, \
710
+ region = storage_lib.StoreType.get_fields_from_store_url(
711
+ bucket_wth_prefix)
712
+ if storage_account_name is not None:
713
+ store_kwargs['storage_account_name'] = storage_account_name
714
+ if region is not None:
715
+ store_kwargs['region'] = region
716
+
682
717
  # Step 1: Translate the workdir to SkyPilot storage.
683
718
  new_storage_mounts = {}
684
719
  if task.workdir is not None:
685
- bucket_name = constants.WORKDIR_BUCKET_NAME.format(
686
- username=common_utils.get_cleaned_username(), id=run_id)
687
720
  workdir = task.workdir
688
721
  task.workdir = None
689
722
  if (constants.SKY_REMOTE_WORKDIR in original_file_mounts or
@@ -691,14 +724,28 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
691
724
  raise ValueError(
692
725
  f'Cannot mount {constants.SKY_REMOTE_WORKDIR} as both the '
693
726
  'workdir and file_mounts contains it as the target.')
694
- new_storage_mounts[
695
- constants.
696
- SKY_REMOTE_WORKDIR] = storage_lib.Storage.from_yaml_config({
697
- 'name': bucket_name,
698
- 'source': workdir,
699
- 'persistent': False,
700
- 'mode': 'COPY',
701
- })
727
+ bucket_sub_path = _sub_path_join(
728
+ sub_path,
729
+ constants.FILE_MOUNTS_WORKDIR_SUBPATH.format(run_id=run_id))
730
+ stores = None
731
+ if store_type is not None:
732
+ assert store_cls is not None
733
+ with sky_logging.silent():
734
+ stores = {
735
+ store_type: store_cls(name=bucket_name,
736
+ source=workdir,
737
+ _bucket_sub_path=bucket_sub_path,
738
+ **store_kwargs)
739
+ }
740
+ assert_no_bucket_creation(stores[store_type])
741
+
742
+ storage_obj = storage_lib.Storage(name=bucket_name,
743
+ source=workdir,
744
+ persistent=False,
745
+ mode=storage_lib.StorageMode.COPY,
746
+ stores=stores,
747
+ _bucket_sub_path=bucket_sub_path)
748
+ new_storage_mounts[constants.SKY_REMOTE_WORKDIR] = storage_obj
702
749
  # Check of the existence of the workdir in file_mounts is done in
703
750
  # the task construction.
704
751
  logger.info(f' {colorama.Style.DIM}Workdir: {workdir!r} '
@@ -716,27 +763,37 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
716
763
  if os.path.isfile(os.path.abspath(os.path.expanduser(src))):
717
764
  copy_mounts_with_file_in_src[dst] = src
718
765
  continue
719
- bucket_name = constants.FILE_MOUNTS_BUCKET_NAME.format(
720
- username=common_utils.get_cleaned_username(),
721
- id=f'{run_id}-{i}',
722
- )
723
- new_storage_mounts[dst] = storage_lib.Storage.from_yaml_config({
724
- 'name': bucket_name,
725
- 'source': src,
726
- 'persistent': False,
727
- 'mode': 'COPY',
728
- })
766
+ bucket_sub_path = _sub_path_join(
767
+ sub_path, constants.FILE_MOUNTS_SUBPATH.format(i=i, run_id=run_id))
768
+ stores = None
769
+ if store_type is not None:
770
+ assert store_cls is not None
771
+ with sky_logging.silent():
772
+ store = store_cls(name=bucket_name,
773
+ source=src,
774
+ _bucket_sub_path=bucket_sub_path,
775
+ **store_kwargs)
776
+
777
+ stores = {store_type: store}
778
+ assert_no_bucket_creation(stores[store_type])
779
+ storage_obj = storage_lib.Storage(name=bucket_name,
780
+ source=src,
781
+ persistent=False,
782
+ mode=storage_lib.StorageMode.COPY,
783
+ stores=stores,
784
+ _bucket_sub_path=bucket_sub_path)
785
+ new_storage_mounts[dst] = storage_obj
729
786
  logger.info(f' {colorama.Style.DIM}Folder : {src!r} '
730
787
  f'-> storage: {bucket_name!r}.{colorama.Style.RESET_ALL}')
731
788
 
732
789
  # Step 3: Translate local file mounts with file in src to SkyPilot storage.
733
790
  # Hard link the files in src to a temporary directory, and upload folder.
791
+ file_mounts_tmp_subpath = _sub_path_join(
792
+ sub_path, constants.FILE_MOUNTS_TMP_SUBPATH.format(run_id=run_id))
734
793
  local_fm_path = os.path.join(
735
794
  tempfile.gettempdir(),
736
795
  constants.FILE_MOUNTS_LOCAL_TMP_DIR.format(id=run_id))
737
796
  os.makedirs(local_fm_path, exist_ok=True)
738
- file_bucket_name = constants.FILE_MOUNTS_FILE_ONLY_BUCKET_NAME.format(
739
- username=common_utils.get_cleaned_username(), id=run_id)
740
797
  file_mount_remote_tmp_dir = constants.FILE_MOUNTS_REMOTE_TMP_DIR.format(
741
798
  path)
742
799
  if copy_mounts_with_file_in_src:
@@ -745,14 +802,27 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
745
802
  src_to_file_id[src] = i
746
803
  os.link(os.path.abspath(os.path.expanduser(src)),
747
804
  os.path.join(local_fm_path, f'file-{i}'))
748
-
749
- new_storage_mounts[
750
- file_mount_remote_tmp_dir] = storage_lib.Storage.from_yaml_config({
751
- 'name': file_bucket_name,
752
- 'source': local_fm_path,
753
- 'persistent': False,
754
- 'mode': 'MOUNT',
755
- })
805
+ stores = None
806
+ if store_type is not None:
807
+ assert store_cls is not None
808
+ with sky_logging.silent():
809
+ stores = {
810
+ store_type: store_cls(
811
+ name=bucket_name,
812
+ source=local_fm_path,
813
+ _bucket_sub_path=file_mounts_tmp_subpath,
814
+ **store_kwargs)
815
+ }
816
+ assert_no_bucket_creation(stores[store_type])
817
+ storage_obj = storage_lib.Storage(
818
+ name=bucket_name,
819
+ source=local_fm_path,
820
+ persistent=False,
821
+ mode=storage_lib.StorageMode.MOUNT,
822
+ stores=stores,
823
+ _bucket_sub_path=file_mounts_tmp_subpath)
824
+
825
+ new_storage_mounts[file_mount_remote_tmp_dir] = storage_obj
756
826
  if file_mount_remote_tmp_dir in original_storage_mounts:
757
827
  with ux_utils.print_exception_no_traceback():
758
828
  raise ValueError(
@@ -762,8 +832,9 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
762
832
  sources = list(src_to_file_id.keys())
763
833
  sources_str = '\n '.join(sources)
764
834
  logger.info(f' {colorama.Style.DIM}Files (listed below) '
765
- f' -> storage: {file_bucket_name}:'
835
+ f' -> storage: {bucket_name}:'
766
836
  f'\n {sources_str}{colorama.Style.RESET_ALL}')
837
+
767
838
  rich_utils.force_update_status(
768
839
  ux_utils.spinner_message('Uploading translated local files/folders'))
769
840
  task.update_storage_mounts(new_storage_mounts)
@@ -779,7 +850,7 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
779
850
  ux_utils.spinner_message('Uploading local sources to storage[/] '
780
851
  '[dim]View storages: sky storage ls'))
781
852
  try:
782
- task.sync_storage_mounts()
853
+ task.sync_storage_mounts(force_sync=bucket_wth_prefix is not None)
783
854
  except (ValueError, exceptions.NoCloudAccessError) as e:
784
855
  if 'No enabled cloud for storage' in str(e) or isinstance(
785
856
  e, exceptions.NoCloudAccessError):
@@ -809,10 +880,11 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
809
880
  # file_mount_remote_tmp_dir will only exist when there are files in
810
881
  # the src for copy mounts.
811
882
  storage_obj = task.storage_mounts[file_mount_remote_tmp_dir]
812
- store_type = list(storage_obj.stores.keys())[0]
813
- store_object = storage_obj.stores[store_type]
883
+ curr_store_type = list(storage_obj.stores.keys())[0]
884
+ store_object = storage_obj.stores[curr_store_type]
814
885
  bucket_url = storage_lib.StoreType.get_endpoint_url(
815
- store_object, file_bucket_name)
886
+ store_object, bucket_name)
887
+ bucket_url += f'/{file_mounts_tmp_subpath}'
816
888
  for dst, src in copy_mounts_with_file_in_src.items():
817
889
  file_id = src_to_file_id[src]
818
890
  new_file_mounts[dst] = bucket_url + f'/file-{file_id}'
@@ -829,8 +901,8 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
829
901
  store_types = list(storage_obj.stores.keys())
830
902
  assert len(store_types) == 1, (
831
903
  'We only support one store type for now.', storage_obj.stores)
832
- store_type = store_types[0]
833
- store_object = storage_obj.stores[store_type]
904
+ curr_store_type = store_types[0]
905
+ store_object = storage_obj.stores[curr_store_type]
834
906
  storage_obj.source = storage_lib.StoreType.get_endpoint_url(
835
907
  store_object, storage_obj.name)
836
908
  storage_obj.force_delete = True
@@ -847,8 +919,8 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
847
919
  store_types = list(storage_obj.stores.keys())
848
920
  assert len(store_types) == 1, (
849
921
  'We only support one store type for now.', storage_obj.stores)
850
- store_type = store_types[0]
851
- store_object = storage_obj.stores[store_type]
922
+ curr_store_type = store_types[0]
923
+ store_object = storage_obj.stores[curr_store_type]
852
924
  source = storage_lib.StoreType.get_endpoint_url(
853
925
  store_object, storage_obj.name)
854
926
  new_storage = storage_lib.Storage.from_yaml_config({
sky/utils/schemas.py CHANGED
@@ -299,6 +299,12 @@ def get_storage_schema():
299
299
  mode.value for mode in storage.StorageMode
300
300
  ]
301
301
  },
302
+ '_is_sky_managed': {
303
+ 'type': 'boolean',
304
+ },
305
+ '_bucket_sub_path': {
306
+ 'type': 'string',
307
+ },
302
308
  '_force_delete': {
303
309
  'type': 'boolean',
304
310
  }
@@ -721,6 +727,11 @@ def get_config_schema():
721
727
  'resources': resources_schema,
722
728
  }
723
729
  },
730
+ 'bucket': {
731
+ 'type': 'string',
732
+ 'pattern': '^(https|s3|gs|r2|cos)://.+',
733
+ 'required': [],
734
+ }
724
735
  }
725
736
  }
726
737
  cloud_configs = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20241228
3
+ Version: 1.0.0.dev20241230
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,9 +1,9 @@
1
- sky/__init__.py,sha256=WODlsll2yLWrEk-Yvb2gHOqseo6Ug14AvH_5HTHVZLQ,5944
1
+ sky/__init__.py,sha256=WeXENb3tDEP2mwenC0klQEk6pc8lRYU2JGdEP0xsocM,5944
2
2
  sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
3
3
  sky/authentication.py,sha256=kACHmiZgWgRpYd1wx1ofbXRMErfMcFmWrkw4a9NxYrY,20988
4
4
  sky/check.py,sha256=s8deMVL-k9y8gd519K7NWZc3DqWsEySwiAr0uH3Vvcc,9459
5
5
  sky/cli.py,sha256=eFlx0PM6k2XnWN9DFOaqrfHVR8D7KkiGBACI1NIGExg,214034
6
- sky/cloud_stores.py,sha256=kqWqnldCtGJvGFmwspLsNF9AGEub1MyzvmYWZBUhARw,21147
6
+ sky/cloud_stores.py,sha256=WKy9u-ZVs07A4tQIFK9UVKI-NUUM6lD75r8TwTbDfWs,23276
7
7
  sky/core.py,sha256=CPwNZQlC5WKLzTb2Tjo2Uogg0EvOt-yLCRlegqK_92A,38598
8
8
  sky/dag.py,sha256=f3sJlkH4bE6Uuz3ozNtsMhcBpRx7KmC9Sa4seDKt4hU,3104
9
9
  sky/exceptions.py,sha256=rUi_au7QBNn3_wvwa8Y_MSHN3QDRpVLry8Mfa56LyGk,9197
@@ -14,7 +14,7 @@ sky/resources.py,sha256=zgUHgqCZGxvAABTe3JYukl4HrzQZi67D7ULFzAMk9YY,70325
14
14
  sky/sky_logging.py,sha256=7Zk9mL1TDxFkGsy3INMBKYlqsbognVGSMzAsHZdZlhw,5891
15
15
  sky/skypilot_config.py,sha256=FN93hSG-heQCHBnemlIK2TwrJngKbpx4vMXNUzPIzV8,9087
16
16
  sky/status_lib.py,sha256=J7Jb4_Dz0v2T64ttOdyUgpokvl4S0sBJrMfH7Fvo51A,1457
17
- sky/task.py,sha256=lS8ajVgqMZ1AtIWRzao2BXF2_KL4tPEdlmWg31TPhIo,49760
17
+ sky/task.py,sha256=zri5_Ghh5-fjDf2rl997ZmL4IlXetW9u9XXJIRUJ3Qg,51353
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  sky/adaptors/aws.py,sha256=jz3E8YyeGscgLZvFE6A1SkxpH6o_inZ-0NiXdRnxSGA,6863
20
20
  sky/adaptors/azure.py,sha256=yjM8nAPW-mlSXfmA8OmJNnSIrZ9lQx2-GxiI-TIVrwE,21910
@@ -25,7 +25,7 @@ sky/adaptors/docker.py,sha256=_kzpZ0fkWHqqQAVVl0llTsCE31KYz3Sjn8psTBQHVkA,468
25
25
  sky/adaptors/gcp.py,sha256=OQ9RaqjR0r0iaWYpjvEtIx5vnEhyB4LhUCwbtdxsmVk,3115
26
26
  sky/adaptors/ibm.py,sha256=H87vD6izq_wQI8oQC7cx9iVtRgPi_QkAcrfa1Z3PNqU,4906
27
27
  sky/adaptors/kubernetes.py,sha256=5pRyPmXYpA0CrU5JFjh88TxC9TNemIaSUkSvaXysrCY,6510
28
- sky/adaptors/oci.py,sha256=stQ-BRukZsk_r4yjdeVedeHTJSW4lYSlLBMJPBCTfig,1772
28
+ sky/adaptors/oci.py,sha256=LfMSFUmkkNT6Yoz9FZHNl6UFSg4X1lJO4-x4ZbDdXTs,2831
29
29
  sky/adaptors/runpod.py,sha256=4Nt_BfZhJAKQNA3wO8cxvvNI8x4NsDGHu_4EhRDlGYQ,225
30
30
  sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
31
31
  sky/backends/__init__.py,sha256=UDjwbUgpTRApbPJnNfR786GadUuwgRk3vsWoVu5RB_c,536
@@ -88,10 +88,10 @@ sky/clouds/utils/gcp_utils.py,sha256=h_ezG7uq2FogLJCPSu8GIEYLOEHmUtC_Xzt4fLOw19s
88
88
  sky/clouds/utils/oci_utils.py,sha256=e3k6GR0DBP6ansLtA3f1ojJXKrUbP-hBsLKZjJOjRtA,5792
89
89
  sky/clouds/utils/scp_utils.py,sha256=r4lhRLtNgoz5nmkfN2ctAXYugF_-Et8TYH6ZlbbFfo8,15791
90
90
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
91
- sky/data/data_transfer.py,sha256=MBmjey9_p2L3IKNKTi8um09SlZe32n4wK3CkVnlTVvo,7346
92
- sky/data/data_utils.py,sha256=JTvhmB3Es9vTmWaRRCQJJ-ynKCzJl487Os65Lzrf0l0,28507
93
- sky/data/mounting_utils.py,sha256=HwBGg1NmX-2IJZV_6h2r1U3ajTGOyfmA3MqboA7znqU,11004
94
- sky/data/storage.py,sha256=osFIiFSsNHQqKccOmtAgL0m-KD8GHIuoMwg7URbLZ6k,165891
91
+ sky/data/data_transfer.py,sha256=wixC4_3_JaeJFdGKOp-O5ulcsMugDSgrCR0SnPpugGc,8946
92
+ sky/data/data_utils.py,sha256=GbHJy52f-iPmuWDGcwS4ftAXtFNR7xiDceUvY_ElN8c,28851
93
+ sky/data/mounting_utils.py,sha256=FfOYpu4Rvj8WT4NNLAZPP8nj5k9MQQCXlEgmoid_lus,14455
94
+ sky/data/storage.py,sha256=07ccD5YaQ9j6R_zPkvNk7qXnW3awDkCn9V-Sx-KXGvo,201715
95
95
  sky/data/storage_utils.py,sha256=cM3kxlffYE7PnJySDu8huyUsMX_JYsf9uer8r5OYsjo,9556
96
96
  sky/jobs/__init__.py,sha256=yucibSB_ZimtJMvOhMxn6ZqwBIYNfcwmc6pSXtCqmNQ,1483
97
97
  sky/jobs/constants.py,sha256=YLgcCg_RHSYr_rfsI_4UIdXk78KKKOK29Oem88t5j8I,1350
@@ -198,7 +198,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
199
199
  sky/skylet/autostop_lib.py,sha256=JPDHmByuhoNYXSUHl-OnyeJUkOFWn7gDM1FrS7Kr3E8,4478
200
200
  sky/skylet/configs.py,sha256=UtnpmEL0F9hH6PSjhsps7xgjGZ6qzPOfW1p2yj9tSng,1887
201
- sky/skylet/constants.py,sha256=CkqTIz9hYrb3jhuI_v13Fo5ATpNM073iEV7UtfQcpiw,15921
201
+ sky/skylet/constants.py,sha256=1h5nhXsAvryo9THpfQ0wQKPSDjXcY9GeN6oX378yAyM,16021
202
202
  sky/skylet/events.py,sha256=A09E7LmmwzcGrSG0n8K7d3EZ1ZJr1mmmzoGyhnArYJA,12303
203
203
  sky/skylet/job_lib.py,sha256=9YO4N_0cSn4Pp8nia1iTGESWUd1eO06H4vvjr-s0UCE,43840
204
204
  sky/skylet/log_lib.py,sha256=fcQzEe4OK8exsNVBhbdYe4uIq2cdSHszsKZTtX8a3-Q,20453
@@ -253,7 +253,7 @@ sky/utils/command_runner.py,sha256=ewDjFxcCOv0OeG2aUOIfVWmTls65up9DvSnAXURvGfM,3
253
253
  sky/utils/command_runner.pyi,sha256=mJOzCgcYZAfHwnY_6Wf1YwlTEJGb9ihzc2f0rE0Kw98,7751
254
254
  sky/utils/common_utils.py,sha256=Kh0iymQl9I4HXxYSc3TTcv-xeso27pU_1hGNOc9Xw2o,25370
255
255
  sky/utils/control_master_utils.py,sha256=90hnxiAUP20gbJ9e3MERh7rb04ZO_I3LsljNjR26H5I,1416
256
- sky/utils/controller_utils.py,sha256=t6PkhrGt7fRUzRqdSox0a-825Cy9b-xACk64exr5HRc,40698
256
+ sky/utils/controller_utils.py,sha256=Vk699btzusqPgBYpmqgo2FvIMODZpsrH4nIZP9hE3kM,44286
257
257
  sky/utils/dag_utils.py,sha256=R1yhJssvzDg13p6PJIC8OkYFBiR64eIx5xQeRpAG9n4,6099
258
258
  sky/utils/db_utils.py,sha256=AOvMmBEN9cF4I7CoXihPCtus4mU2VDGjBQSVMMgzKlA,2786
259
259
  sky/utils/env_options.py,sha256=E5iwRFBUY2Iq6e0y0c1Mv5OSQ4MRNdk0-p38xUyVerc,1366
@@ -261,7 +261,7 @@ sky/utils/kubernetes_enums.py,sha256=imGqHSa8O07zD_6xH1SDMM7dBU5lF5fzFFlQuQy00QM
261
261
  sky/utils/log_utils.py,sha256=oZYF45uC7GFjAqO-Je-aiX6zhtq91TP-KKaIbQNF-jY,14024
262
262
  sky/utils/resources_utils.py,sha256=Xqi7gxPYw2y5wl5okUI5zx5LEij0hJF_V3Zi8q7TXYg,7890
263
263
  sky/utils/rich_utils.py,sha256=hmnI1X5dKvRIQzB7EyNb34FT97qFNve-0QHqM5r0mVk,3066
264
- sky/utils/schemas.py,sha256=ul_tiSLxJthuJHuiz9NPTLdgtu_ZBbdFd5Pbf6Qb4vQ,29638
264
+ sky/utils/schemas.py,sha256=m5PINdGhq1c5GBRvhzIYjAQ2AtzVwvnDjMQcHbQegcE,29965
265
265
  sky/utils/subprocess_utils.py,sha256=iLOda3vfkD-sIUPlfkDGZs9HnJWLlLRvHVgca9DZH8s,10410
266
266
  sky/utils/timeline.py,sha256=ebHxKJK2HX0utGArrUgSezTPkcwav3VETa_AQS34t-E,3925
267
267
  sky/utils/ux_utils.py,sha256=CqyIFGDuSE8fQasPkna_loZMwtboC9KedR09WEQ7qz0,6502
@@ -279,9 +279,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_job.yaml,sha256=k0TBoQ4zgf79-sVkixKSGYFHQ7Z
279
279
  sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488oMQvhRZWwsj9vBbPUg,3812
280
280
  sky/utils/kubernetes/rsync_helper.sh,sha256=h4YwrPFf9727CACnMJvF3EyK_0OeOYKKt4su_daKekw,1256
281
281
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
282
- skypilot_nightly-1.0.0.dev20241228.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
283
- skypilot_nightly-1.0.0.dev20241228.dist-info/METADATA,sha256=RR1MKYog5a5X-3RPX3m9aYSHGXkBEltQ608Ym5Bq0KM,20149
284
- skypilot_nightly-1.0.0.dev20241228.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
285
- skypilot_nightly-1.0.0.dev20241228.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
286
- skypilot_nightly-1.0.0.dev20241228.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
287
- skypilot_nightly-1.0.0.dev20241228.dist-info/RECORD,,
282
+ skypilot_nightly-1.0.0.dev20241230.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
283
+ skypilot_nightly-1.0.0.dev20241230.dist-info/METADATA,sha256=Y3ZqNBObG58eTuv2YpStwXD3AAwd_sYom_UMxQIbb7c,20149
284
+ skypilot_nightly-1.0.0.dev20241230.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
285
+ skypilot_nightly-1.0.0.dev20241230.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
286
+ skypilot_nightly-1.0.0.dev20241230.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
287
+ skypilot_nightly-1.0.0.dev20241230.dist-info/RECORD,,