skypilot-nightly 1.0.0.dev20241229__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/__init__.py +2 -2
- sky/data/mounting_utils.py +49 -14
- sky/data/storage.py +453 -124
- sky/skylet/constants.py +7 -3
- sky/task.py +18 -1
- sky/utils/controller_utils.py +111 -39
- sky/utils/schemas.py +11 -0
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/RECORD +13 -13
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/top_level.txt +0 -0
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
|
-
|
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,6 +1046,7 @@ 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})
|
1034
1051
|
elif store_type is storage_lib.StoreType.OCI:
|
1035
1052
|
if storage.source is not None and not isinstance(
|
sky/utils/controller_utils.py
CHANGED
@@ -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
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
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
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
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
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
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: {
|
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
|
-
|
813
|
-
store_object = storage_obj.stores[
|
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,
|
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
|
-
|
833
|
-
store_object = storage_obj.stores[
|
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
|
-
|
851
|
-
store_object = storage_obj.stores[
|
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 = {
|
{skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
sky/__init__.py,sha256=
|
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
|
@@ -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=
|
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
|
@@ -90,8 +90,8 @@ sky/clouds/utils/scp_utils.py,sha256=r4lhRLtNgoz5nmkfN2ctAXYugF_-Et8TYH6ZlbbFfo8
|
|
90
90
|
sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
|
91
91
|
sky/data/data_transfer.py,sha256=wixC4_3_JaeJFdGKOp-O5ulcsMugDSgrCR0SnPpugGc,8946
|
92
92
|
sky/data/data_utils.py,sha256=GbHJy52f-iPmuWDGcwS4ftAXtFNR7xiDceUvY_ElN8c,28851
|
93
|
-
sky/data/mounting_utils.py,sha256=
|
94
|
-
sky/data/storage.py,sha256=
|
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=
|
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=
|
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=
|
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.
|
283
|
-
skypilot_nightly-1.0.0.
|
284
|
-
skypilot_nightly-1.0.0.
|
285
|
-
skypilot_nightly-1.0.0.
|
286
|
-
skypilot_nightly-1.0.0.
|
287
|
-
skypilot_nightly-1.0.0.
|
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,,
|
File without changes
|
{skypilot_nightly-1.0.0.dev20241229.dist-info → skypilot_nightly-1.0.0.dev20241230.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|