skypilot-nightly 1.0.0.dev20250402__py3-none-any.whl → 1.0.0.dev20250403__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/clouds/kubernetes.py +9 -0
- sky/data/storage.py +5 -4
- sky/data/storage_utils.py +13 -3
- sky/jobs/controller.py +39 -7
- sky/jobs/server/server.py +1 -1
- sky/provision/kubernetes/utils.py +37 -0
- sky/task.py +2 -2
- sky/utils/controller_utils.py +1 -1
- sky/utils/kubernetes/gpu_labeler.py +23 -27
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/RECORD +16 -16
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/top_level.txt +0 -0
sky/__init__.py
CHANGED
@@ -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 = '
|
8
|
+
_SKYPILOT_COMMIT_SHA = '7149e721d257cfc890526c9738290724882ce82e'
|
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.
|
38
|
+
__version__ = '1.0.0.dev20250403'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
sky/clouds/kubernetes.py
CHANGED
@@ -689,6 +689,15 @@ class Kubernetes(clouds.Cloud):
|
|
689
689
|
except Exception as e: # pylint: disable=broad-except
|
690
690
|
return (False, f'Credential check failed for {context}: '
|
691
691
|
f'{common_utils.format_exception(e)}')
|
692
|
+
unlabeled_nodes = kubernetes_utils.get_unlabeled_accelerator_nodes(
|
693
|
+
context)
|
694
|
+
if len(unlabeled_nodes) > 0:
|
695
|
+
hints.append(f'Context {context} has {len(unlabeled_nodes)} '
|
696
|
+
f'unlabeled nodes with accelerators. '
|
697
|
+
f'To label these nodes, run '
|
698
|
+
f'`python -m sky.utils.kubernetes.gpu_labeler '
|
699
|
+
f'--context {context}` from the project root '
|
700
|
+
f'directory.')
|
692
701
|
if success:
|
693
702
|
return (True, cls._format_credential_check_results(hints, reasons))
|
694
703
|
return (False, 'Failed to find available context with working '
|
sky/data/storage.py
CHANGED
@@ -273,6 +273,8 @@ MOUNTABLE_STORAGE_MODES = [
|
|
273
273
|
StorageMode.MOUNT_CACHED,
|
274
274
|
]
|
275
275
|
|
276
|
+
DEFAULT_STORAGE_MODE = StorageMode.MOUNT
|
277
|
+
|
276
278
|
|
277
279
|
class AbstractStore:
|
278
280
|
"""AbstractStore abstracts away the different storage types exposed by
|
@@ -591,7 +593,7 @@ class Storage(object):
|
|
591
593
|
source: Optional[SourceType] = None,
|
592
594
|
stores: Optional[List[StoreType]] = None,
|
593
595
|
persistent: Optional[bool] = True,
|
594
|
-
mode: StorageMode =
|
596
|
+
mode: StorageMode = DEFAULT_STORAGE_MODE,
|
595
597
|
sync_on_reconstruction: bool = True,
|
596
598
|
# pylint: disable=invalid-name
|
597
599
|
_is_sky_managed: Optional[bool] = None,
|
@@ -855,7 +857,7 @@ class Storage(object):
|
|
855
857
|
is_local_source = False
|
856
858
|
# Storage mounting does not support mounting specific files from
|
857
859
|
# cloud store - ensure path points to only a directory
|
858
|
-
if mode
|
860
|
+
if mode in MOUNTABLE_STORAGE_MODES:
|
859
861
|
if (split_path.scheme != 'https' and
|
860
862
|
((split_path.scheme != 'cos' and
|
861
863
|
split_path.path.strip('/') != '') or
|
@@ -1284,8 +1286,7 @@ class Storage(object):
|
|
1284
1286
|
# Make mode case insensitive, if specified
|
1285
1287
|
mode = StorageMode(mode_str.upper())
|
1286
1288
|
else:
|
1287
|
-
|
1288
|
-
mode = StorageMode.MOUNT
|
1289
|
+
mode = DEFAULT_STORAGE_MODE
|
1289
1290
|
persistent = config.pop('persistent', None)
|
1290
1291
|
if persistent is None:
|
1291
1292
|
persistent = True
|
sky/data/storage_utils.py
CHANGED
@@ -223,7 +223,7 @@ def get_excluded_files_from_gitignore(src_dir_path: str) -> List[str]:
|
|
223
223
|
def get_excluded_files(src_dir_path: str) -> List[str]:
|
224
224
|
# TODO: this could return a huge list of files,
|
225
225
|
# should think of ways to optimize.
|
226
|
-
"""
|
226
|
+
"""List files and directories to be excluded."""
|
227
227
|
expand_src_dir_path = os.path.expanduser(src_dir_path)
|
228
228
|
skyignore_path = os.path.join(expand_src_dir_path,
|
229
229
|
constants.SKY_IGNORE_FILE)
|
@@ -273,12 +273,22 @@ def zip_files_and_folders(items: List[str],
|
|
273
273
|
zipf.write(item)
|
274
274
|
elif os.path.isdir(item):
|
275
275
|
for root, dirs, files in os.walk(item, followlinks=False):
|
276
|
+
# Modify dirs in-place to control os.walk()'s traversal
|
277
|
+
# behavior. This filters out excluded directories BEFORE
|
278
|
+
# os.walk() visits the files and sub-directories under
|
279
|
+
# them, preventing traversal into any excluded directory
|
280
|
+
# and its contents.
|
281
|
+
# Note: dirs[:] = ... is required for in-place
|
282
|
+
# modification.
|
283
|
+
dirs[:] = [
|
284
|
+
d for d in dirs
|
285
|
+
if os.path.join(root, d) not in excluded_files
|
286
|
+
]
|
287
|
+
|
276
288
|
# Store directory entries (important for empty
|
277
289
|
# directories)
|
278
290
|
for dir_name in dirs:
|
279
291
|
dir_path = os.path.join(root, dir_name)
|
280
|
-
if dir_path in excluded_files:
|
281
|
-
continue
|
282
292
|
# If it's a symlink, store it as a symlink
|
283
293
|
if os.path.islink(dir_path):
|
284
294
|
_store_symlink(zipf, dir_path, is_dir=True)
|
sky/jobs/controller.py
CHANGED
@@ -227,13 +227,13 @@ class JobsController:
|
|
227
227
|
self._backend, cluster_name)
|
228
228
|
|
229
229
|
if job_status == job_lib.JobStatus.SUCCEEDED:
|
230
|
-
|
230
|
+
success_end_time = managed_job_utils.try_to_get_job_end_time(
|
231
231
|
self._backend, cluster_name)
|
232
232
|
# The job is done. Set the job to SUCCEEDED first before start
|
233
233
|
# downloading and streaming the logs to make it more responsive.
|
234
234
|
managed_job_state.set_succeeded(self._job_id,
|
235
235
|
task_id,
|
236
|
-
end_time=
|
236
|
+
end_time=success_end_time,
|
237
237
|
callback_func=callback_func)
|
238
238
|
logger.info(
|
239
239
|
f'Managed job {self._job_id} (task: {task_id}) SUCCEEDED. '
|
@@ -299,23 +299,40 @@ class JobsController:
|
|
299
299
|
if job_status is not None and not job_status.is_terminal():
|
300
300
|
# The multi-node job is still running, continue monitoring.
|
301
301
|
continue
|
302
|
-
elif job_status
|
302
|
+
elif (job_status
|
303
|
+
in job_lib.JobStatus.user_code_failure_states() or
|
304
|
+
job_status == job_lib.JobStatus.FAILED_DRIVER):
|
303
305
|
# The user code has probably crashed, fail immediately.
|
304
306
|
end_time = managed_job_utils.try_to_get_job_end_time(
|
305
307
|
self._backend, cluster_name)
|
306
308
|
logger.info(
|
307
|
-
'The user job failed. Please check the
|
309
|
+
f'The user job failed ({job_status}). Please check the '
|
310
|
+
'logs below.\n'
|
308
311
|
f'== Logs of the user job (ID: {self._job_id}) ==\n')
|
309
312
|
|
310
313
|
self._download_log_and_stream(task_id, handle)
|
314
|
+
|
315
|
+
failure_reason = (
|
316
|
+
'To see the details, run: '
|
317
|
+
f'sky jobs logs --controller {self._job_id}')
|
318
|
+
|
311
319
|
managed_job_status = (
|
312
320
|
managed_job_state.ManagedJobStatus.FAILED)
|
313
321
|
if job_status == job_lib.JobStatus.FAILED_SETUP:
|
314
322
|
managed_job_status = (
|
315
323
|
managed_job_state.ManagedJobStatus.FAILED_SETUP)
|
316
|
-
|
317
|
-
|
318
|
-
|
324
|
+
elif job_status == job_lib.JobStatus.FAILED_DRIVER:
|
325
|
+
# FAILED_DRIVER is kind of an internal error, so we mark
|
326
|
+
# this as FAILED_CONTROLLER, even though the failure is
|
327
|
+
# not strictly within the controller.
|
328
|
+
managed_job_status = (
|
329
|
+
managed_job_state.ManagedJobStatus.FAILED_CONTROLLER
|
330
|
+
)
|
331
|
+
failure_reason = (
|
332
|
+
'The job driver on the remote cluster failed. This '
|
333
|
+
'can be caused by the job taking too much memory '
|
334
|
+
'or other resources. Try adding more memory, CPU, '
|
335
|
+
f'or disk in your job definition. {failure_reason}')
|
319
336
|
should_restart_on_failure = (
|
320
337
|
self._strategy_executor.should_restart_on_failure())
|
321
338
|
if should_restart_on_failure:
|
@@ -337,6 +354,21 @@ class JobsController:
|
|
337
354
|
end_time=end_time,
|
338
355
|
callback_func=callback_func)
|
339
356
|
return False
|
357
|
+
elif job_status is not None:
|
358
|
+
# Either the job is cancelled (should not happen) or in some
|
359
|
+
# unknown new state that we do not handle.
|
360
|
+
logger.error(f'Unknown job status: {job_status}')
|
361
|
+
failure_reason = (
|
362
|
+
f'Unknown job status {job_status}. To see the details, '
|
363
|
+
f'run: sky jobs logs --controller {self._job_id}')
|
364
|
+
managed_job_state.set_failed(
|
365
|
+
self._job_id,
|
366
|
+
task_id,
|
367
|
+
failure_type=managed_job_state.ManagedJobStatus.
|
368
|
+
FAILED_CONTROLLER,
|
369
|
+
failure_reason=failure_reason,
|
370
|
+
callback_func=callback_func)
|
371
|
+
return False
|
340
372
|
else:
|
341
373
|
# Although the cluster is healthy, we fail to access the
|
342
374
|
# job status. Try to recover the job (will not restart the
|
sky/jobs/server/server.py
CHANGED
@@ -160,7 +160,7 @@ async def dashboard(request: fastapi.Request,
|
|
160
160
|
async with httpx.AsyncClient() as client:
|
161
161
|
response = await client.request('GET',
|
162
162
|
dashboard_url,
|
163
|
-
timeout=
|
163
|
+
timeout=5)
|
164
164
|
break # Connection successful, proceed with the request
|
165
165
|
except Exception as e: # pylint: disable=broad-except
|
166
166
|
# We catch all exceptions to gracefully handle unknown
|
@@ -2457,6 +2457,43 @@ def dict_to_k8s_object(object_dict: Dict[str, Any], object_type: 'str') -> Any:
|
|
2457
2457
|
return kubernetes.api_client().deserialize(fake_kube_response, object_type)
|
2458
2458
|
|
2459
2459
|
|
2460
|
+
def get_unlabeled_accelerator_nodes(context: Optional[str] = None) -> List[Any]:
|
2461
|
+
"""Gets a list of unlabeled GPU nodes in the cluster.
|
2462
|
+
|
2463
|
+
This function returns a list of nodes that have GPU resources but no label
|
2464
|
+
that indicates the accelerator type.
|
2465
|
+
|
2466
|
+
Args:
|
2467
|
+
context: The context to check.
|
2468
|
+
|
2469
|
+
Returns:
|
2470
|
+
List[Any]: List of unlabeled nodes with accelerators.
|
2471
|
+
"""
|
2472
|
+
nodes = get_kubernetes_nodes(context=context)
|
2473
|
+
nodes_with_accelerator = []
|
2474
|
+
for node in nodes:
|
2475
|
+
if get_gpu_resource_key() in node.status.capacity:
|
2476
|
+
nodes_with_accelerator.append(node)
|
2477
|
+
|
2478
|
+
label_formatter, _ = detect_gpu_label_formatter(context)
|
2479
|
+
if not label_formatter:
|
2480
|
+
return nodes_with_accelerator
|
2481
|
+
else:
|
2482
|
+
label_keys = label_formatter.get_label_keys()
|
2483
|
+
|
2484
|
+
unlabeled_nodes = []
|
2485
|
+
for node in nodes_with_accelerator:
|
2486
|
+
labeled = False
|
2487
|
+
for label_key in label_keys:
|
2488
|
+
if label_key in node.metadata.labels:
|
2489
|
+
labeled = True
|
2490
|
+
break
|
2491
|
+
if not labeled:
|
2492
|
+
unlabeled_nodes.append(node)
|
2493
|
+
|
2494
|
+
return unlabeled_nodes
|
2495
|
+
|
2496
|
+
|
2460
2497
|
def get_kubernetes_node_info(
|
2461
2498
|
context: Optional[str] = None) -> Dict[str, models.KubernetesNodeInfo]:
|
2462
2499
|
"""Gets the resource information for all the nodes in the cluster.
|
sky/task.py
CHANGED
@@ -745,7 +745,7 @@ class Task:
|
|
745
745
|
|
746
746
|
# Evaluate if the task requires FUSE and set the requires_fuse flag
|
747
747
|
for _, storage_obj in self.storage_mounts.items():
|
748
|
-
if storage_obj.mode
|
748
|
+
if storage_obj.mode in storage_lib.MOUNTABLE_STORAGE_MODES:
|
749
749
|
for r in self.resources:
|
750
750
|
r.requires_fuse = True
|
751
751
|
break
|
@@ -924,7 +924,7 @@ class Task:
|
|
924
924
|
'Storage mount destination path cannot be cloud storage'
|
925
925
|
)
|
926
926
|
|
927
|
-
if storage_obj.mode
|
927
|
+
if storage_obj.mode in storage_lib.MOUNTABLE_STORAGE_MODES:
|
928
928
|
# If any storage is using MOUNT mode, we need to enable FUSE in
|
929
929
|
# the resources.
|
930
930
|
for r in self.resources:
|
sky/utils/controller_utils.py
CHANGED
@@ -916,7 +916,7 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
|
916
916
|
name=bucket_name,
|
917
917
|
source=local_fm_path,
|
918
918
|
persistent=False,
|
919
|
-
mode=storage_lib.
|
919
|
+
mode=storage_lib.DEFAULT_STORAGE_MODE,
|
920
920
|
stores=stores,
|
921
921
|
_is_sky_managed=not bucket_wth_prefix,
|
922
922
|
_bucket_sub_path=file_mounts_tmp_subpath)
|
@@ -51,6 +51,18 @@ def label(context: Optional[str] = None):
|
|
51
51
|
print(reason)
|
52
52
|
return
|
53
53
|
|
54
|
+
unlabeled_gpu_nodes = kubernetes_utils.get_unlabeled_accelerator_nodes()
|
55
|
+
|
56
|
+
if not unlabeled_gpu_nodes:
|
57
|
+
print('No unlabeled GPU nodes found in the cluster. If you have '
|
58
|
+
'unlabeled GPU nodes, please ensure that they have the resource '
|
59
|
+
f'`{kubernetes_utils.get_gpu_resource_key()}: <number of GPUs>` '
|
60
|
+
'in their capacity.')
|
61
|
+
return
|
62
|
+
|
63
|
+
print(f'Found {len(unlabeled_gpu_nodes)} '
|
64
|
+
'unlabeled GPU nodes in the cluster')
|
65
|
+
|
54
66
|
sky_dir = os.path.dirname(sky.__file__)
|
55
67
|
manifest_dir = os.path.join(sky_dir, 'utils/kubernetes')
|
56
68
|
|
@@ -77,17 +89,6 @@ def label(context: Optional[str] = None):
|
|
77
89
|
with open(job_manifest_path, 'r', encoding='utf-8') as file:
|
78
90
|
job_manifest = yaml.safe_load(file)
|
79
91
|
|
80
|
-
# Iterate over nodes
|
81
|
-
nodes = kubernetes_utils.get_kubernetes_nodes(context=context)
|
82
|
-
|
83
|
-
# Get the list of nodes with GPUs
|
84
|
-
gpu_nodes = []
|
85
|
-
for node in nodes:
|
86
|
-
if kubernetes_utils.get_gpu_resource_key() in node.status.capacity:
|
87
|
-
gpu_nodes.append(node)
|
88
|
-
|
89
|
-
print(f'Found {len(gpu_nodes)} GPU node(s) in the cluster')
|
90
|
-
|
91
92
|
# Check if the 'nvidia' RuntimeClass exists
|
92
93
|
try:
|
93
94
|
nvidia_exists = kubernetes_utils.check_nvidia_runtime_class(
|
@@ -108,7 +109,7 @@ def label(context: Optional[str] = None):
|
|
108
109
|
else:
|
109
110
|
print('Using default RuntimeClass for GPU labeling.')
|
110
111
|
|
111
|
-
for node in
|
112
|
+
for node in unlabeled_gpu_nodes:
|
112
113
|
node_name = node.metadata.name
|
113
114
|
|
114
115
|
# Modify the job manifest for the current node
|
@@ -122,21 +123,16 @@ def label(context: Optional[str] = None):
|
|
122
123
|
# Create the job for this node`
|
123
124
|
batch_v1.create_namespaced_job(namespace, job_manifest)
|
124
125
|
print(f'Created GPU labeler job for node {node_name}')
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
f'-l job=sky-gpu-labeler{context_str}`'
|
136
|
-
'\nYou can check if nodes have been labeled by running '
|
137
|
-
f'`kubectl describe nodes{context_str}` '
|
138
|
-
'and looking for labels of the format '
|
139
|
-
'`skypilot.co/accelerator: <gpu_name>`. ')
|
126
|
+
|
127
|
+
context_str = f' --context {context}' if context else ''
|
128
|
+
print(f'GPU labeling started - this may take 10 min or more to complete.'
|
129
|
+
'\nTo check the status of GPU labeling jobs, run '
|
130
|
+
f'`kubectl get jobs -n kube-system '
|
131
|
+
f'-l job=sky-gpu-labeler{context_str}`'
|
132
|
+
'\nYou can check if nodes have been labeled by running '
|
133
|
+
f'`kubectl describe nodes{context_str}` '
|
134
|
+
'and looking for labels of the format '
|
135
|
+
'`skypilot.co/accelerator: <gpu_name>`. ')
|
140
136
|
|
141
137
|
|
142
138
|
def main():
|
{skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
sky/__init__.py,sha256=
|
1
|
+
sky/__init__.py,sha256=jAriaLe3W4tnwwVPeiJ2hAxmMnsB0NRcf-MQ2yLMyQk,6428
|
2
2
|
sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
|
3
3
|
sky/authentication.py,sha256=ND011K_-Ud1dVZF37A9KrwYir_ihJXcHc7iDWmuBc8Q,22872
|
4
4
|
sky/check.py,sha256=oktScSPsHIyO7ZrVHy3QaybB6-s_D6eMEjmICAiUtDo,15902
|
@@ -14,7 +14,7 @@ sky/optimizer.py,sha256=uutziDwxyq-f5n31YXgCF9fmqx5vndIU8g_avvGWuGc,58532
|
|
14
14
|
sky/resources.py,sha256=2qc5U09MFDaJjI1dHcThcRodpMGY7HyXzQn8eC4lvbE,72402
|
15
15
|
sky/sky_logging.py,sha256=pID2RINjH62n7SZpv70DuN8BSFYdCfTJ2ScGQpVmugg,5725
|
16
16
|
sky/skypilot_config.py,sha256=CdaIbPL_7ECG5laOARca4p9df_6NLhT-bO8WnalxZAY,8839
|
17
|
-
sky/task.py,sha256=
|
17
|
+
sky/task.py,sha256=kepCHV_evVg9EKnXaKW9Stg1bQAZlaF4UQocwlR3M3g,55709
|
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
|
@@ -55,7 +55,7 @@ sky/clouds/do.py,sha256=P38l4otp2AuDReUH9Ii621ht9s-NIyb7-R37jbtjHk8,11580
|
|
55
55
|
sky/clouds/fluidstack.py,sha256=jIqW1MLe55MVME1PATZm8e6_FsiTnJawW7OdytPW0aM,12666
|
56
56
|
sky/clouds/gcp.py,sha256=sUJ9LXUnMxYm6OYZ5P-z1dJHxgVILuC3OW3eFSTNCv8,56919
|
57
57
|
sky/clouds/ibm.py,sha256=XtuPN8QgrwJdb1qb_b-7KwAE2tf_N9wh9eEfi2tcg-s,22013
|
58
|
-
sky/clouds/kubernetes.py,sha256=
|
58
|
+
sky/clouds/kubernetes.py,sha256=VuPHstRysRZH0UTYZIExY2Gtd2ItQn9I5EboqxyuvV0,36717
|
59
59
|
sky/clouds/lambda_cloud.py,sha256=rR2YrZ6flEbKKpQAm60eKNjiMDYvH2hqzaCo3Hx4Ffw,12916
|
60
60
|
sky/clouds/nebius.py,sha256=4D7C2NQYI-BNhXWNOyAXNAZj7-5nN33VQW1sxfSGt9w,14662
|
61
61
|
sky/clouds/oci.py,sha256=YO4kjSsHBmAVH4z1TuVP72zfmC0BXte4E0xIyZir9N4,27622
|
@@ -105,11 +105,11 @@ sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
|
|
105
105
|
sky/data/data_transfer.py,sha256=-JcnVa_LT0kQejcSCnBwYtxhuuaNDPf_Q5oz62p186c,11973
|
106
106
|
sky/data/data_utils.py,sha256=ryKUPgNBdeDmGIttqK-J7AKdfc70INTuYH5GOWm3C9g,33581
|
107
107
|
sky/data/mounting_utils.py,sha256=ph2p8cYB28FODgxK5ibiD4B4iMD7T3or99zNQaD9HLs,20162
|
108
|
-
sky/data/storage.py,sha256=
|
109
|
-
sky/data/storage_utils.py,sha256=
|
108
|
+
sky/data/storage.py,sha256=85LcC64yxfd5bzTijGZVyMZV41NyzUhOn0xJZieK2Dc,236652
|
109
|
+
sky/data/storage_utils.py,sha256=fDEEErxu97XhOtwPdnNBqRukWcfRT4eTBUhrSGrAvsY,13255
|
110
110
|
sky/jobs/__init__.py,sha256=qoI53-xXE0-SOkrLWigvhgFXjk7dWE0OTqGPYIk-kmM,1458
|
111
111
|
sky/jobs/constants.py,sha256=1XiIqdR5dEgGgepLKWkZCRT3MYSsMBR-dO7N4RTsjwg,3088
|
112
|
-
sky/jobs/controller.py,sha256=
|
112
|
+
sky/jobs/controller.py,sha256=d5qQYHadesfFgU7-dYtt2trZwyd5IzvlVJeNh5O8OiA,31386
|
113
113
|
sky/jobs/recovery_strategy.py,sha256=RLrqq8B1likxTknPzt3_BqO26sFVpoatxzUuGfwc18A,26170
|
114
114
|
sky/jobs/scheduler.py,sha256=luQgrCDaDP6bI7oIbaqzxg4qMJtUIVswypnOGUklGtw,13270
|
115
115
|
sky/jobs/state.py,sha256=tDULLH6DVs4oKUIKhh0UAn3RzyVGuIUtEq5kW7K1Ojw,44585
|
@@ -122,7 +122,7 @@ sky/jobs/dashboard/templates/index.html,sha256=NrlTDiEHJDt7sViwWgXUSxVCyVl_IEukE
|
|
122
122
|
sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
123
123
|
sky/jobs/server/core.py,sha256=IHbGMEEbEdNS_ivIStv3rYVH6XodFgufrzZb3HGF9uo,25257
|
124
124
|
sky/jobs/server/dashboard_utils.py,sha256=2Mbx40W1pQqPEPHsSDbHeaF0j5cgyKy-_A9Owdwp_AQ,2315
|
125
|
-
sky/jobs/server/server.py,sha256=
|
125
|
+
sky/jobs/server/server.py,sha256=jk6IopWbn9DbzNzLxM4EcYzWCRnXPXthfNqMDFmtonc,8386
|
126
126
|
sky/provision/__init__.py,sha256=LzOo5LjkRXwSf29dUqN14YbjzQu3liXLQcmweTeZ4dE,6457
|
127
127
|
sky/provision/common.py,sha256=E8AlSUFcn0FYQq1erNmoVfMAdsF9tP2yxfyk-9PLvQU,10286
|
128
128
|
sky/provision/constants.py,sha256=oc_XDUkcoLQ_lwDy5yMeMSWviKS0j0s1c0pjlvpNeWY,800
|
@@ -166,7 +166,7 @@ sky/provision/kubernetes/constants.py,sha256=dZCUV8FOO9Gct80sdqeubKnxeW3CGl-u5mx
|
|
166
166
|
sky/provision/kubernetes/instance.py,sha256=oag17OtuiqU-1RjkgW9NvEpxSGUFIYdI7M61S-YmPu8,50503
|
167
167
|
sky/provision/kubernetes/network.py,sha256=AtcOM8wPs_-UlQJhGEQGP6Lh4HIgdx63Y0iWEhP5jyc,12673
|
168
168
|
sky/provision/kubernetes/network_utils.py,sha256=6uck1aBkgtm-gGBitU3_hEUp8j14ZuG_4Xo70ReZYXs,11654
|
169
|
-
sky/provision/kubernetes/utils.py,sha256=
|
169
|
+
sky/provision/kubernetes/utils.py,sha256=IR2AKbZA-ZuKtLRuqHZsiA1N2HmQTJKz5IqOQIVEk4U,125753
|
170
170
|
sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml,sha256=AMzYzlY0JIlfBWj5eX054Rc1XDW2thUcLSOGMJVhIdA,229
|
171
171
|
sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml,sha256=RtTq4F1QUmR2Uunb6zuuRaPhV7hpesz4saHjn3Ncsb4,2010
|
172
172
|
sky/provision/lambda_cloud/__init__.py,sha256=6EEvSgtUeEiup9ivIFevHmgv0GqleroO2X0K7TRa2nE,612
|
@@ -318,7 +318,7 @@ sky/utils/common.py,sha256=P4oVXFATUYgkruHX92cN12SJBtfb8DiOOYZtbN1kvP0,1927
|
|
318
318
|
sky/utils/common_utils.py,sha256=s5YIo9wtFCwWLfLRW7fCjlC9BzqQKPGatWQjrEyYqpc,31680
|
319
319
|
sky/utils/config_utils.py,sha256=VQ2E3DQ2XysD-kul-diSrxn_pXWsDMfKAev91OiJQ1Q,9041
|
320
320
|
sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
|
321
|
-
sky/utils/controller_utils.py,sha256=
|
321
|
+
sky/utils/controller_utils.py,sha256=mrmkerYyeu7gsCQ56cB3AjCz0r9WaN7teqXUItA47oQ,49805
|
322
322
|
sky/utils/dag_utils.py,sha256=sAus0aL1wtuuFZSDnpO4LY-6WK4u5iJY952oWQzHo3Y,7532
|
323
323
|
sky/utils/db_utils.py,sha256=K2-OHPg0FeHCarevMdWe0IWzm6wWumViEeYeJuGoFUE,3747
|
324
324
|
sky/utils/env_options.py,sha256=aaD6GoYK0LaZIqjOEZ-R7eccQuiRriW3EuLWtOI5En8,1578
|
@@ -344,15 +344,15 @@ sky/utils/kubernetes/deploy_remote_cluster.sh,sha256=EQMBC0VUqe3UaiYvwkNq4P6U9bk
|
|
344
344
|
sky/utils/kubernetes/exec_kubeconfig_converter.py,sha256=fE1SnteoxI05EaugnWeV82hXwZTVHmbXsh1aaZAgF3c,2548
|
345
345
|
sky/utils/kubernetes/generate_kind_config.py,sha256=_TNLnifA_r7-CRq083IP1xjelYqiLjzQX9ohuqYpDH8,3187
|
346
346
|
sky/utils/kubernetes/generate_kubeconfig.sh,sha256=MBvXJio0PeujZSCXiRKE_pa6HCTiU9qBzR1WrXccVSY,10477
|
347
|
-
sky/utils/kubernetes/gpu_labeler.py,sha256=
|
347
|
+
sky/utils/kubernetes/gpu_labeler.py,sha256=MKsEiWitn-LOG3-OEdBZ-MXJd_L3ztdB9JrhD6D2T1w,6912
|
348
348
|
sky/utils/kubernetes/k8s_gpu_labeler_job.yaml,sha256=k0TBoQ4zgf79-sVkixKSGYFHQ7ZWF5gdVIZPupCCo9A,1224
|
349
349
|
sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488oMQvhRZWwsj9vBbPUg,3812
|
350
350
|
sky/utils/kubernetes/kubernetes_deploy_utils.py,sha256=HPVgNt-wbCVPd9dpDFiA7t2mzQLpjXHJ61eiwRbEr-c,10378
|
351
351
|
sky/utils/kubernetes/rsync_helper.sh,sha256=h4YwrPFf9727CACnMJvF3EyK_0OeOYKKt4su_daKekw,1256
|
352
352
|
sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
|
353
|
-
skypilot_nightly-1.0.0.
|
354
|
-
skypilot_nightly-1.0.0.
|
355
|
-
skypilot_nightly-1.0.0.
|
356
|
-
skypilot_nightly-1.0.0.
|
357
|
-
skypilot_nightly-1.0.0.
|
358
|
-
skypilot_nightly-1.0.0.
|
353
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
|
354
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/METADATA,sha256=YkgmWuWgAbuQRFP3Zfk3QpnqS_0KN7x50GuSoVI9JwU,18552
|
355
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
356
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
|
357
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
|
358
|
+
skypilot_nightly-1.0.0.dev20250403.dist-info/RECORD,,
|
{skypilot_nightly-1.0.0.dev20250402.dist-info → skypilot_nightly-1.0.0.dev20250403.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|