skypilot-nightly 1.0.0.dev20240901__py3-none-any.whl → 1.0.0.dev20240903__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 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 = '50f68d2093cbe9dc7da6d53c3c17c45e0b97b84c'
8
+ _SKYPILOT_COMMIT_SHA = '0203971a36dbcf0a6d3615e6ed25f3f6d11b53f6'
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.dev20240901'
38
+ __version__ = '1.0.0.dev20240903'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -3112,7 +3112,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3112
3112
  setup_script = log_lib.make_task_bash_script(setup,
3113
3113
  env_vars=setup_envs)
3114
3114
  encoded_script = shlex.quote(setup_script)
3115
- if detach_setup or _is_command_length_over_limit(encoded_script):
3115
+
3116
+ def _dump_setup_script(setup_script: str) -> None:
3116
3117
  with tempfile.NamedTemporaryFile('w', prefix='sky_setup_') as f:
3117
3118
  f.write(setup_script)
3118
3119
  f.flush()
@@ -3121,6 +3122,9 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3121
3122
  target=remote_setup_file_name,
3122
3123
  up=True,
3123
3124
  stream_logs=False)
3125
+
3126
+ if detach_setup or _is_command_length_over_limit(encoded_script):
3127
+ _dump_setup_script(setup_script)
3124
3128
  create_script_code = 'true'
3125
3129
  else:
3126
3130
  create_script_code = (f'{{ echo {encoded_script} > '
@@ -3128,20 +3132,42 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3128
3132
 
3129
3133
  if detach_setup:
3130
3134
  return
3135
+
3131
3136
  setup_log_path = os.path.join(self.log_dir,
3132
3137
  f'setup-{runner.node_id}.log')
3133
- returncode = runner.run(
3134
- f'{create_script_code} && {setup_cmd}',
3135
- log_path=setup_log_path,
3136
- process_stream=False,
3137
- # We do not source bashrc for setup, since bashrc is sourced
3138
- # in the script already.
3139
- # Skip an empty line and two lines due to the /bin/bash -i and
3140
- # source ~/.bashrc in the setup_cmd.
3141
- # bash: cannot set terminal process group (7398): Inappropriate ioctl for device # pylint: disable=line-too-long
3142
- # bash: no job control in this shell
3143
- skip_lines=3,
3144
- )
3138
+
3139
+ def _run_setup(setup_cmd: str) -> int:
3140
+ returncode = runner.run(
3141
+ setup_cmd,
3142
+ log_path=setup_log_path,
3143
+ process_stream=False,
3144
+ # We do not source bashrc for setup, since bashrc is sourced
3145
+ # in the script already.
3146
+ # Skip an empty line and two lines due to the /bin/bash -i
3147
+ # and source ~/.bashrc in the setup_cmd.
3148
+ # bash: cannot set terminal process group (7398): Inappropriate ioctl for device # pylint: disable=line-too-long
3149
+ # bash: no job control in this shell
3150
+ skip_lines=3)
3151
+ return returncode
3152
+
3153
+ returncode = _run_setup(f'{create_script_code} && {setup_cmd}',)
3154
+ if returncode == 255:
3155
+ is_message_too_long = False
3156
+ with open(setup_log_path, 'r', encoding='utf-8') as f:
3157
+ if 'too long' in f.read():
3158
+ is_message_too_long = True
3159
+
3160
+ if is_message_too_long:
3161
+ # If the setup script is too long, we retry it with dumping
3162
+ # the script to a file and running it with SSH. We use a
3163
+ # general length limit check before but it could be
3164
+ # inaccurate on some systems.
3165
+ logger.debug(
3166
+ 'Failed to run setup command inline due to '
3167
+ 'command length limit. Dumping setup script to '
3168
+ 'file and running it with SSH.')
3169
+ _dump_setup_script(setup_script)
3170
+ returncode = _run_setup(setup_cmd)
3145
3171
 
3146
3172
  def error_message() -> str:
3147
3173
  # Use the function to avoid tailing the file in success case
@@ -3223,7 +3249,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3223
3249
 
3224
3250
  code = job_lib.JobLibCodeGen.queue_job(job_id, job_submit_cmd)
3225
3251
  job_submit_cmd = ' && '.join([mkdir_code, create_script_code, code])
3226
- if _is_command_length_over_limit(job_submit_cmd):
3252
+
3253
+ def _dump_code_to_file(codegen: str) -> None:
3227
3254
  runners = handle.get_command_runners()
3228
3255
  head_runner = runners[0]
3229
3256
  with tempfile.NamedTemporaryFile('w', prefix='sky_app_') as fp:
@@ -3238,6 +3265,9 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3238
3265
  target=script_path,
3239
3266
  up=True,
3240
3267
  stream_logs=False)
3268
+
3269
+ if _is_command_length_over_limit(job_submit_cmd):
3270
+ _dump_code_to_file(codegen)
3241
3271
  job_submit_cmd = f'{mkdir_code} && {code}'
3242
3272
 
3243
3273
  if managed_job_dag is not None:
@@ -3263,6 +3293,16 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3263
3293
  job_submit_cmd,
3264
3294
  stream_logs=False,
3265
3295
  require_outputs=True)
3296
+ if returncode == 255 and 'too long' in stdout + stderr:
3297
+ # If the setup script is too long, we retry it with dumping
3298
+ # the script to a file and running it with SSH. We use a general
3299
+ # length limit check before but it could be inaccurate on some
3300
+ # systems.
3301
+ _dump_code_to_file(codegen)
3302
+ returncode, stdout, stderr = self.run_on_head(handle,
3303
+ job_submit_cmd,
3304
+ stream_logs=False,
3305
+ require_outputs=True)
3266
3306
 
3267
3307
  # Happens when someone calls `sky exec` but remote is outdated
3268
3308
  # necessitating calling `sky launch`.
sky/cli.py CHANGED
@@ -29,6 +29,7 @@ import functools
29
29
  import multiprocessing
30
30
  import os
31
31
  import shlex
32
+ import shutil
32
33
  import signal
33
34
  import subprocess
34
35
  import sys
@@ -368,7 +369,9 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
368
369
  echo "{bashrc_diff}" >> ~/.bashrc'
369
370
 
370
371
  cmd = (f'(grep -q "SkyPilot" ~/.bashrc) || '
371
- f'[[ ${{BASH_VERSINFO[0]}} -ge 4 ]] && ({install_cmd})')
372
+ f'([[ ${{BASH_VERSINFO[0]}} -ge 4 ]] && ({install_cmd}) || '
373
+ f'(echo "Bash must be version 4 or above." && exit 1))')
374
+
372
375
  reload_cmd = _RELOAD_BASH_CMD
373
376
 
374
377
  elif value == 'fish':
@@ -390,7 +393,10 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
390
393
  ctx.exit()
391
394
 
392
395
  try:
393
- subprocess.run(cmd, shell=True, check=True, executable='/bin/bash')
396
+ subprocess.run(cmd,
397
+ shell=True,
398
+ check=True,
399
+ executable=shutil.which('bash'))
394
400
  click.secho(f'Shell completion installed for {value}', fg='green')
395
401
  click.echo(
396
402
  'Completion will take effect once you restart the terminal: ' +
sky/clouds/aws.py CHANGED
@@ -798,7 +798,11 @@ class AWS(clouds.Cloud):
798
798
 
799
799
  @classmethod
800
800
  def _get_disk_type(cls, disk_tier: resources_utils.DiskTier) -> str:
801
- return 'standard' if disk_tier == resources_utils.DiskTier.LOW else 'gp3'
801
+ if disk_tier == resources_utils.DiskTier.LOW:
802
+ return 'standard'
803
+ if disk_tier == resources_utils.DiskTier.ULTRA:
804
+ return 'io2'
805
+ return 'gp3'
802
806
 
803
807
  @classmethod
804
808
  def _get_disk_specs(
@@ -806,15 +810,19 @@ class AWS(clouds.Cloud):
806
810
  disk_tier: Optional[resources_utils.DiskTier]) -> Dict[str, Any]:
807
811
  tier = cls._translate_disk_tier(disk_tier)
808
812
  tier2iops = {
813
+ resources_utils.DiskTier.ULTRA: 20000,
809
814
  resources_utils.DiskTier.HIGH: 7000,
810
815
  resources_utils.DiskTier.MEDIUM: 3500,
811
- resources_utils.DiskTier.LOW: 0, # only gp3 is required to set iops
816
+ resources_utils.DiskTier.LOW: 0, # iops is not required on standard disk
812
817
  }
813
818
  return {
814
819
  'disk_tier': cls._get_disk_type(tier),
815
- 'disk_iops': tier2iops[tier],
816
- 'disk_throughput': tier2iops[tier] // 16,
817
- 'custom_disk_perf': tier != resources_utils.DiskTier.LOW,
820
+ 'disk_iops': tier2iops[tier]
821
+ if cls._get_disk_type(tier) != 'standard' else None,
822
+ # Custom disk throughput is only available for gp3
823
+ # see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html
824
+ 'disk_throughput': tier2iops[tier] // 16
825
+ if cls._get_disk_type(tier) == 'gp3' else None,
818
826
  }
819
827
 
820
828
  @classmethod
sky/clouds/azure.py CHANGED
@@ -60,9 +60,10 @@ class Azure(clouds.Cloud):
60
60
  _MAX_CLUSTER_NAME_LEN_LIMIT = 42
61
61
  _BEST_DISK_TIER = resources_utils.DiskTier.MEDIUM
62
62
  _DEFAULT_DISK_TIER = resources_utils.DiskTier.MEDIUM
63
- # Azure does not support high disk tier.
64
- _SUPPORTED_DISK_TIERS = (set(resources_utils.DiskTier) -
65
- {resources_utils.DiskTier.HIGH})
63
+ # Azure does not support high disk and ultra disk tier.
64
+ _SUPPORTED_DISK_TIERS = (
65
+ set(resources_utils.DiskTier) -
66
+ {resources_utils.DiskTier.HIGH, resources_utils.DiskTier.ULTRA})
66
67
 
67
68
  _INDENT_PREFIX = ' ' * 4
68
69
 
@@ -599,9 +600,10 @@ class Azure(clouds.Cloud):
599
600
  disk_tier: Optional[resources_utils.DiskTier]) -> Tuple[bool, str]:
600
601
  if disk_tier is None or disk_tier == resources_utils.DiskTier.BEST:
601
602
  return True, ''
602
- if disk_tier == resources_utils.DiskTier.HIGH:
603
- return False, ('Azure disk_tier=high is not supported now. '
604
- 'Please use disk_tier={low, medium} instead.')
603
+ if disk_tier == resources_utils.DiskTier.HIGH or disk_tier == resources_utils.DiskTier.ULTRA:
604
+ return False, (
605
+ 'Azure disk_tier={high, ultra} is not supported now. '
606
+ 'Please use disk_tier={low, medium, best} instead.')
605
607
  # Only S-series supported premium ssd
606
608
  # see https://stackoverflow.com/questions/48590520/azure-requested-operation-cannot-be-performed-because-storage-account-type-pre # pylint: disable=line-too-long
607
609
  if cls._get_disk_type(
@@ -628,6 +630,7 @@ class Azure(clouds.Cloud):
628
630
  # TODO(tian): Maybe use PremiumV2_LRS/UltraSSD_LRS? Notice these two
629
631
  # cannot be used as OS disks so we might need data disk support
630
632
  tier2name = {
633
+ resources_utils.DiskTier.ULTRA: 'Disabled',
631
634
  resources_utils.DiskTier.HIGH: 'Disabled',
632
635
  resources_utils.DiskTier.MEDIUM: 'Premium_LRS',
633
636
  resources_utils.DiskTier.LOW: 'Standard_LRS',
sky/clouds/cloud.py CHANGED
@@ -117,7 +117,7 @@ class Cloud:
117
117
 
118
118
  _REPR = '<Cloud>'
119
119
  _DEFAULT_DISK_TIER = resources_utils.DiskTier.MEDIUM
120
- _BEST_DISK_TIER = resources_utils.DiskTier.HIGH
120
+ _BEST_DISK_TIER = resources_utils.DiskTier.ULTRA
121
121
  _SUPPORTED_DISK_TIERS = {resources_utils.DiskTier.BEST}
122
122
  _SUPPORTS_SERVICE_ACCOUNT_ON_REMOTE = False
123
123
 
sky/clouds/gcp.py CHANGED
@@ -7,7 +7,7 @@ import re
7
7
  import subprocess
8
8
  import time
9
9
  import typing
10
- from typing import Dict, Iterator, List, Optional, Set, Tuple
10
+ from typing import Any, Dict, Iterator, List, Optional, Set, Tuple
11
11
 
12
12
  import colorama
13
13
 
@@ -437,6 +437,7 @@ class GCP(clouds.Cloud):
437
437
  'custom_resources': None,
438
438
  'use_spot': r.use_spot,
439
439
  'gcp_project_id': self.get_project_id(dryrun),
440
+ **GCP._get_disk_specs(r.disk_tier),
440
441
  }
441
442
  accelerators = r.accelerators
442
443
  if accelerators is not None:
@@ -495,8 +496,6 @@ class GCP(clouds.Cloud):
495
496
  resources_vars['machine_image'] = image_id
496
497
  resources_vars['image_id'] = None
497
498
 
498
- resources_vars['disk_tier'] = GCP._get_disk_type(r.disk_tier)
499
-
500
499
  firewall_rule = None
501
500
  if resources.ports is not None:
502
501
  firewall_rule = (USER_PORTS_FIREWALL_RULE_NAME.format(
@@ -917,12 +916,24 @@ class GCP(clouds.Cloud):
917
916
  disk_tier: Optional[resources_utils.DiskTier]) -> str:
918
917
  tier = cls._translate_disk_tier(disk_tier)
919
918
  tier2name = {
919
+ resources_utils.DiskTier.ULTRA: 'pd-extreme',
920
920
  resources_utils.DiskTier.HIGH: 'pd-ssd',
921
921
  resources_utils.DiskTier.MEDIUM: 'pd-balanced',
922
922
  resources_utils.DiskTier.LOW: 'pd-standard',
923
923
  }
924
924
  return tier2name[tier]
925
925
 
926
+ @classmethod
927
+ def _get_disk_specs(
928
+ cls,
929
+ disk_tier: Optional[resources_utils.DiskTier]) -> Dict[str, Any]:
930
+ specs: Dict[str, Any] = {'disk_tier': cls._get_disk_type(disk_tier)}
931
+ if disk_tier == resources_utils.DiskTier.ULTRA:
932
+ # Only pd-extreme supports custom iops.
933
+ # see https://cloud.google.com/compute/docs/disks#disk-types
934
+ specs['disk_iops'] = 20000
935
+ return specs
936
+
926
937
  @classmethod
927
938
  def _label_filter_str(cls, tag_filters: Dict[str, str]) -> str:
928
939
  return ' '.join(f'labels.{k}={v}' for k, v in tag_filters.items())
sky/clouds/oci.py CHANGED
@@ -42,7 +42,9 @@ class OCI(clouds.Cloud):
42
42
 
43
43
  _INDENT_PREFIX = ' '
44
44
 
45
- _SUPPORTED_DISK_TIERS = set(resources_utils.DiskTier)
45
+ _SUPPORTED_DISK_TIERS = (set(resources_utils.DiskTier) -
46
+ {resources_utils.DiskTier.ULTRA})
47
+ _BEST_DISK_TIER = resources_utils.DiskTier.HIGH
46
48
 
47
49
  @classmethod
48
50
  def _unsupported_features_for_resources(
@@ -414,6 +416,19 @@ class OCI(clouds.Cloud):
414
416
  f'{cls._INDENT_PREFIX}Error details: '
415
417
  f'{common_utils.format_exception(e, use_bracket=True)}')
416
418
 
419
+ @classmethod
420
+ def check_disk_tier(
421
+ cls, instance_type: Optional[str],
422
+ disk_tier: Optional[resources_utils.DiskTier]) -> Tuple[bool, str]:
423
+ del instance_type # Unused.
424
+ if disk_tier is None or disk_tier == resources_utils.DiskTier.BEST:
425
+ return True, ''
426
+ if disk_tier == resources_utils.DiskTier.ULTRA:
427
+ return False, ('OCI disk_tier=ultra is not supported now. '
428
+ 'Please use disk_tier={low, medium, high, best} '
429
+ 'instead.')
430
+ return True, ''
431
+
417
432
  def get_credential_file_mounts(self) -> Dict[str, str]:
418
433
  """Returns a dict of credential file paths to mount paths."""
419
434
  oci_cfg_file = oci_adaptor.get_config_file()
@@ -110,7 +110,8 @@ def get_default_instance_type(
110
110
  _DEFAULT_INSTANCE_FAMILY)]
111
111
 
112
112
  def _filter_disk_type(instance_type: str) -> bool:
113
- return Azure.check_disk_tier(instance_type, disk_tier)[0]
113
+ valid, _ = Azure.check_disk_tier(instance_type, disk_tier)
114
+ return valid
114
115
 
115
116
  df = df.loc[df['InstanceType'].apply(_filter_disk_type)]
116
117
  return common.get_instance_type_for_cpus_mem_impl(df, cpus,
@@ -15,6 +15,7 @@ import typing
15
15
  from typing import Dict, List, Optional, Tuple
16
16
 
17
17
  from sky.adaptors import oci as oci_adaptor
18
+ from sky.clouds import OCI
18
19
  from sky.clouds.service_catalog import common
19
20
  from sky.clouds.utils import oci_utils
20
21
  from sky.utils import resources_utils
@@ -102,7 +103,6 @@ def get_default_instance_type(
102
103
  cpus: Optional[str] = None,
103
104
  memory: Optional[str] = None,
104
105
  disk_tier: Optional[resources_utils.DiskTier] = None) -> Optional[str]:
105
- del disk_tier # unused
106
106
  if cpus is None:
107
107
  cpus = f'{oci_utils.oci_config.DEFAULT_NUM_VCPUS}+'
108
108
 
@@ -111,12 +111,17 @@ def get_default_instance_type(
111
111
  else:
112
112
  memory_gb_or_ratio = memory
113
113
 
114
+ def _filter_disk_type(instance_type: str) -> bool:
115
+ valid, _ = OCI.check_disk_tier(instance_type, disk_tier)
116
+ return valid
117
+
114
118
  instance_type_prefix = tuple(
115
119
  f'{family}' for family in oci_utils.oci_config.DEFAULT_INSTANCE_FAMILY)
116
120
 
117
121
  df = _get_df()
118
122
  df = df[df['InstanceType'].notna()]
119
123
  df = df[df['InstanceType'].str.startswith(instance_type_prefix)]
124
+ df = df.loc[df['InstanceType'].apply(_filter_disk_type)]
120
125
 
121
126
  logger.debug(f'# get_default_instance_type: {df}')
122
127
  return common.get_instance_type_for_cpus_mem_impl(df, cpus,
sky/exceptions.py CHANGED
@@ -100,9 +100,13 @@ class CommandError(Exception):
100
100
  self.command = command
101
101
  self.error_msg = error_msg
102
102
  self.detailed_reason = detailed_reason
103
+
103
104
  if not command:
104
105
  message = error_msg
105
106
  else:
107
+ if len(command) > 100:
108
+ # Chunck the command to avoid overflow.
109
+ command = command[:100] + '...'
106
110
  message = (f'Command {command} failed with return code '
107
111
  f'{returncode}.\n{error_msg}')
108
112
  super().__init__(message)
sky/optimizer.py CHANGED
@@ -19,6 +19,7 @@ from sky import task as task_lib
19
19
  from sky.adaptors import common as adaptors_common
20
20
  from sky.utils import env_options
21
21
  from sky.utils import log_utils
22
+ from sky.utils import resources_utils
22
23
  from sky.utils import rich_utils
23
24
  from sky.utils import subprocess_utils
24
25
  from sky.utils import ux_utils
@@ -935,6 +936,15 @@ class Optimizer:
935
936
  table.add_rows(rows)
936
937
  logger.info(f'{table}\n')
937
938
 
939
+ # Warning message for using disk_tier=ultra
940
+ # TODO(yi): Consider price of disks in optimizer and
941
+ # move this warning there.
942
+ if chosen_resources.disk_tier == resources_utils.DiskTier.ULTRA:
943
+ logger.warning(
944
+ 'Using disk_tier=ultra will utilize more advanced disks '
945
+ '(io2 Block Express on AWS and extreme persistent disk on '
946
+ 'GCP), which can lead to significant higher costs (~$2/h).')
947
+
938
948
  @staticmethod
939
949
  def _print_candidates(node_to_candidate_map: _TaskToPerCloudCandidates):
940
950
  for node, candidate_set in node_to_candidate_map.items():
@@ -73,8 +73,10 @@ available_node_types:
73
73
  VolumeSize: {{disk_size}}
74
74
  VolumeType: {{disk_tier}}
75
75
  Encrypted: {{disk_encrypted}}
76
- {% if custom_disk_perf %}
76
+ {% if disk_iops %}
77
77
  Iops: {{disk_iops}}
78
+ {% endif %}
79
+ {% if disk_throughput %}
78
80
  Throughput: {{disk_throughput}}
79
81
  {% endif %}
80
82
  {% if use_spot %}
@@ -124,6 +124,9 @@ available_node_types:
124
124
  sourceImage: {{image_id}}
125
125
  {%- endif %}
126
126
  diskType: zones/{{zones}}/diskTypes/{{disk_tier}}
127
+ {%- if disk_iops %}
128
+ provisionedIops: {{disk_iops}}
129
+ {%- endif %}
127
130
  {%- if gpu is not none %}
128
131
  guestAccelerators:
129
132
  - acceleratorType: projects/{{gcp_project_id}}/zones/{{zones}}/acceleratorTypes/{{gpu}}
@@ -24,6 +24,7 @@ class DiskTier(enum.Enum):
24
24
  LOW = 'low'
25
25
  MEDIUM = 'medium'
26
26
  HIGH = 'high'
27
+ ULTRA = 'ultra'
27
28
  BEST = 'best'
28
29
 
29
30
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20240901
3
+ Version: 1.0.0.dev20240903
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,14 +1,14 @@
1
- sky/__init__.py,sha256=r27LEyAFD3--fPnwlqR5oabYNbHM0Gjp6kQFaelU5B0,5588
1
+ sky/__init__.py,sha256=nHssscXKP8yTZ6J_-_6KrrK4fNZy9Pe3O-tWwQRvxFQ,5588
2
2
  sky/authentication.py,sha256=PXKsabUKnvhoTNoNwZzo66qjCLAsuc5pQ8esVu0IYh8,20424
3
3
  sky/check.py,sha256=sqUCow5Gqqtp2ouk7tZ3whwDOK23wqyUJvcxMBsich8,9080
4
- sky/cli.py,sha256=XlgRr617B_yE2HV_nW01D_m5nWntW2GstutNrMp86UA,201504
4
+ sky/cli.py,sha256=2cOw3lXzRA-uLlEH-eK7N_1VmUpf1LR4Ztu-ZaKu3Is,201673
5
5
  sky/cloud_stores.py,sha256=RjFgmRhUh1Kk__f6g3KxzLp9s7dA0pFK4W1AukEuUaw,21153
6
6
  sky/core.py,sha256=YF_6kwj8Ja171Oycb8L25SZ7V_ylZYovFS_jpnjwGo0,34408
7
7
  sky/dag.py,sha256=d3gF030wYmit01jxszEygT4EvKJUky3DBlG3PfWPp_w,2529
8
- sky/exceptions.py,sha256=JmIRKAIg8OWqLAevVLn0pFw8xIe17dYMUQYY_pNdMlc,8454
8
+ sky/exceptions.py,sha256=gfrmh8djfZ0oGn1XtYWn8ca7wEyghkbzg4Hkq6tdjj8,8594
9
9
  sky/execution.py,sha256=nyLjzYOY1e-NHJeufrx24Oz2_tyBrKVoAu_tQtrhL0I,25235
10
10
  sky/global_user_state.py,sha256=PywEmUutF97XBgRMClR6IS5_KM8JJC0oA1LsPUZebp0,28681
11
- sky/optimizer.py,sha256=5zw2fJ7H_exV3Fdy9Z1vrx5fl9CjlBc0elvZtblpXhA,58130
11
+ sky/optimizer.py,sha256=YGBhJPlcvylYON7MLrYEMtBOqJLt4LdlguQclVvvl4E,58677
12
12
  sky/resources.py,sha256=_959wcQnoiAYesslN9BPXWABFaQfc_TFXPO_o7SPlxI,67325
13
13
  sky/sky_logging.py,sha256=I59__M9taBjDim15ie0m25Vtn6itLtR9Ao8W9FS36Xs,4253
14
14
  sky/skypilot_config.py,sha256=eyXxUljnLoQRLPO5sqm5MjuydhQIhu6RGPNn5Op0LpI,8063
@@ -30,7 +30,7 @@ sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
30
30
  sky/backends/__init__.py,sha256=UDjwbUgpTRApbPJnNfR786GadUuwgRk3vsWoVu5RB_c,536
31
31
  sky/backends/backend.py,sha256=xtxR6boDv1o-uSCjbJhOMkKMnZvBZh3gExx4khFWPTI,5932
32
32
  sky/backends/backend_utils.py,sha256=8RDFfrr-1xnefnLhRKK2d8xlFBLR43ZjcDShB2K7_m8,126163
33
- sky/backends/cloud_vm_ray_backend.py,sha256=dRUIVroKw5vrOqEheJ1OwVKQiHgG9LfNdE3rmdviIZA,230209
33
+ sky/backends/cloud_vm_ray_backend.py,sha256=b238j7D7n5jg-H5O3kaNKG7heXzHgbhPGFZHVU7vfYo,232141
34
34
  sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,8358
35
35
  sky/backends/local_docker_backend.py,sha256=H4GBo0KFUC_EEf-ziv1OUbfAkOI5BrwkYs9fYOxSoNw,16741
36
36
  sky/backends/wheel_utils.py,sha256=3QS4T_Ydvo4DbYhogtyADyNBEf04I6jUCL71M285shQ,7963
@@ -39,24 +39,24 @@ sky/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  sky/benchmark/benchmark_state.py,sha256=X8CXmuU9KgsDRhKedhFgjeRMUFWtQsjFs1qECvPG2yg,8723
40
40
  sky/benchmark/benchmark_utils.py,sha256=oJOzJ4fs2sruxYh4Tl1NZ5fi2-3oWfXtoeCIAq2hgjw,26136
41
41
  sky/clouds/__init__.py,sha256=WuNIJEnZmBO72tU5awgaaL3rdvFRSkgaYNNeuY68dXo,1356
42
- sky/clouds/aws.py,sha256=qGX-Q9KA4gW0BWWHs460FpszusMAwGb0_aTqlNrXOI8,47736
43
- sky/clouds/azure.py,sha256=_a6HLKdU9pmlX6EjeQTp1t-IvKs2ynKln8-nqOokicE,28191
44
- sky/clouds/cloud.py,sha256=53W_CZLpystSd7gfcZJFIt4xuMsrYtaYqA6piZnSNog,33497
42
+ sky/clouds/aws.py,sha256=piC1CJnY7rvBxpllW9aMB3SbTLt4JDrSUJL3moyYn4Q,48168
43
+ sky/clouds/azure.py,sha256=VqD9TF90u3YBb91ZEKpv-K_UMYa_lLbhn-hmFMcger4,28350
44
+ sky/clouds/cloud.py,sha256=ufoep7SYzxHzphEFILJA0ggCwKGIqQMXAmRjb3X3QnU,33498
45
45
  sky/clouds/cloud_registry.py,sha256=4yQMv-iBSgyN5aNL4Qxbn0JVE-dkVoEUIgj7S1z9S_Q,955
46
46
  sky/clouds/cudo.py,sha256=otfYWN7jHqbKJU9meUEOZcjmCC_9_QLEQ4BZ5vHDyWo,13147
47
47
  sky/clouds/fluidstack.py,sha256=YtZZEDA2q5TrcxDf3ZErUrHc-2CIc5tncdAN83Z8e1s,12437
48
- sky/clouds/gcp.py,sha256=dgVNgQeN901Be9CM36P1lWr1nC6KCj2wQ87G3Fk0aQY,50428
48
+ sky/clouds/gcp.py,sha256=mlQOeVHMrxH6V-pv6i5d6m3Bqn7llwH9k_Zj1s1ZmuE,50924
49
49
  sky/clouds/ibm.py,sha256=M8QdjeSFlwssfoY2aOodxG4q5R3eT9K-4lTPDHYvEYI,21476
50
50
  sky/clouds/kubernetes.py,sha256=l_fH3WYKII66X8nAUGlvX5XO8gQqiN4GdsJbuGZir-M,21660
51
51
  sky/clouds/lambda_cloud.py,sha256=-7ufLokUQOBL3y90wZ0uzxmBzZ3d81aFqIIeNsynI_Q,12445
52
- sky/clouds/oci.py,sha256=qIQaIKKeBvr1-LjXs0cJkNfPGVVDyW_b5_ShoXyLwIY,25590
52
+ sky/clouds/oci.py,sha256=8rdBPBt9vFMXsWX5YT_R-0yIC07gh7XVXWOUt9u7zuI,26287
53
53
  sky/clouds/paperspace.py,sha256=Iw7IJqoHMb3yVWyI7BoBv0hJL9-aqTJMIfbLU4lR-vA,10921
54
54
  sky/clouds/runpod.py,sha256=v-bv0M2fgYWFUZG7khzGAZdpWGKEYuQ_TMLQL5tXXpA,11540
55
55
  sky/clouds/scp.py,sha256=QY845OWfjQZpjnlIX_HyYjJNxwHu5iMup1_XvgglK4A,15876
56
56
  sky/clouds/vsphere.py,sha256=w17rrzW61rD39lM56FgsRGTES13nYvguufDxET3JKbc,12309
57
57
  sky/clouds/service_catalog/__init__.py,sha256=8SJi4HBq7osm9fgo2y9KBEtI-prnMxhghAwYXZgIAZ8,14554
58
58
  sky/clouds/service_catalog/aws_catalog.py,sha256=SuduCZN8IQr_aHDt0YCYcBlR8l9YJthO27Dyiyxvftw,12550
59
- sky/clouds/service_catalog/azure_catalog.py,sha256=kRi5Ea6aAzsJl2rM0SLsHItvBlwFcE9IfvE9R7kIAIc,7289
59
+ sky/clouds/service_catalog/azure_catalog.py,sha256=VJi3yfhZy9Sc6UfcLAc8xIoTlUlUr090TODkCZyyHFw,7311
60
60
  sky/clouds/service_catalog/common.py,sha256=LED9Yzh1nsurvjCtqXGcsbUI8N-YFx05kazBgLF-HIQ,27256
61
61
  sky/clouds/service_catalog/config.py,sha256=ylzqewdEBjDg4awvFek6ldYmFrnvD2bVGLZuLPvEVYA,1793
62
62
  sky/clouds/service_catalog/constants.py,sha256=ai2yOlsVqBnEpbxaEHXt61COsHBLwOfw6GZXntEPj7k,411
@@ -66,7 +66,7 @@ sky/clouds/service_catalog/gcp_catalog.py,sha256=-jcBQZWiPdaIi52A04Ium1eKdbNqmdE
66
66
  sky/clouds/service_catalog/ibm_catalog.py,sha256=0dzjmXABFECzaAuIa0E6pVINhVK6-G6U52Mj-L45gK8,4472
67
67
  sky/clouds/service_catalog/kubernetes_catalog.py,sha256=AYuKWEfrOQP4g0yNscS_vq9zdPSYT0adCuV1VI5Po6k,7892
68
68
  sky/clouds/service_catalog/lambda_catalog.py,sha256=BAhUGqHj8aVe1zUhEQNO7bQUhcd9jAespGvPyQubTJY,5281
69
- sky/clouds/service_catalog/oci_catalog.py,sha256=8tHB2kK8CErbc-p1rcgcLTTte6rV7Ty2Cngv7VJJg48,7542
69
+ sky/clouds/service_catalog/oci_catalog.py,sha256=tcV8_rsv_7_aTlcfTkq0XKdKRTFgwh8-rjyxVzPiYwQ,7744
70
70
  sky/clouds/service_catalog/paperspace_catalog.py,sha256=W8GgGlPbbWViELQ8EZfmIkxSbeQcCmMRUX4ecIIYDsk,3768
71
71
  sky/clouds/service_catalog/runpod_catalog.py,sha256=NwZlolzihZeRxQKYIDhoXeUkJ3BSH1S6B_DszNDXT1g,4184
72
72
  sky/clouds/service_catalog/scp_catalog.py,sha256=4XnaZE5Q4XrrNnDnVhsHkH6jxmWXBeQqa9QqKqHKjSI,5174
@@ -216,11 +216,11 @@ sky/skylet/ray_patches/log_monitor.py.patch,sha256=CPoh3U_ogOHrkMOK7jaIRnwdzxjBT
216
216
  sky/skylet/ray_patches/resource_demand_scheduler.py.patch,sha256=AVV-Hw-Rxw16aFm4VsyzayX1QOvwmQuM79iVdSjkSl4,658
217
217
  sky/skylet/ray_patches/updater.py.patch,sha256=ZNMGVYICPBB44jLbEx2KvCgIY7BWYdDv3-2b2HJWmAQ,289
218
218
  sky/skylet/ray_patches/worker.py.patch,sha256=_OBhibdr3xOy5Qje6Tt8D1eQVm_msi50TJbCJmOTxVU,565
219
- sky/templates/aws-ray.yml.j2,sha256=NfchYc4-2V0HoWYzCNvDNgDUMuMbrZPPWfccgKSyKU8,7879
219
+ sky/templates/aws-ray.yml.j2,sha256=wijRSqqAoX8YalAvZCQf1DmfmyJgPy2DrfC33OEqFxM,7933
220
220
  sky/templates/azure-ray.yml.j2,sha256=wJM98G8sp9J63LclZp4bm30GFWwFSoBQgtN1B9j6nNU,6005
221
221
  sky/templates/cudo-ray.yml.j2,sha256=SEHVY57iBauCOE2HYJtYVFEKlriAkdwQu_p86a1n_bA,3548
222
222
  sky/templates/fluidstack-ray.yml.j2,sha256=t8TCULgiErCZdtFmBZVsA8ZdcqR7ccwsmQhuDFTBEAU,3541
223
- sky/templates/gcp-ray.yml.j2,sha256=p90cSBypq8yNQR1BJCkHE-PhjTJ4jABtpNkvhYVeKxE,9495
223
+ sky/templates/gcp-ray.yml.j2,sha256=q2xSWxxYI8MVAq_mA__8FF6PwEqXCAW1SOEOGTt0qPw,9591
224
224
  sky/templates/ibm-ray.yml.j2,sha256=RMBUqPId8i4CnVwcyfK3DbRapF1jFMuGQlY0E0PFbMU,6669
225
225
  sky/templates/jobs-controller.yaml.j2,sha256=QjlIcFBEay48xKT50UWqzgREzili-H7AuUrnGHWOpI8,1554
226
226
  sky/templates/kubernetes-ingress.yml.j2,sha256=73iDklVDWBMbItg0IexCa6_ClXPJOxw7PWz3leku4nE,1340
@@ -251,7 +251,7 @@ sky/utils/db_utils.py,sha256=AOvMmBEN9cF4I7CoXihPCtus4mU2VDGjBQSVMMgzKlA,2786
251
251
  sky/utils/env_options.py,sha256=1VXyd3bhiUgGfCpmmTqM9PagRo1ILBH4-pzIxmIeE6E,861
252
252
  sky/utils/kubernetes_enums.py,sha256=imGqHSa8O07zD_6xH1SDMM7dBU5lF5fzFFlQuQy00QM,1384
253
253
  sky/utils/log_utils.py,sha256=W7FYK7xzvbq4V-8R-ihLtz939ryvtABug6O-4DFrjho,8139
254
- sky/utils/resources_utils.py,sha256=E1Si_IsHR_Gj293_kr0I8EyEOcPxzxgor7T2Q3HdH3w,6495
254
+ sky/utils/resources_utils.py,sha256=snByBxgx3Hnjfch2uysdAA3D-OAwrnuzTDHug36s5H4,6515
255
255
  sky/utils/rich_utils.py,sha256=5ZVhzlFx-nhqMXwv00eO9xC4rz7ibDlfD2lmGhZrJEY,1581
256
256
  sky/utils/schemas.py,sha256=dGjxAXpaVewRZ7vh4vLIAnOiflOPActnc1LVJJ5RMoU,28331
257
257
  sky/utils/subprocess_utils.py,sha256=zK0L3mvAkvKX1nFFI4IFEmRWX9ytpguhhxOTYUDKoDs,6507
@@ -270,9 +270,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_job.yaml,sha256=KPqp23B-zQ2SZK03jdHeF9fLTog
270
270
  sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488oMQvhRZWwsj9vBbPUg,3812
271
271
  sky/utils/kubernetes/rsync_helper.sh,sha256=1ad-m4s8QTPxaBQxNIL8AGDfX4un6T0dxZgk-R7OLyE,154
272
272
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=RFLJ3k7MR5UN4SKHykQ0lV9SgXumoULpKYIAt1vh-HU,6560
273
- skypilot_nightly-1.0.0.dev20240901.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
274
- skypilot_nightly-1.0.0.dev20240901.dist-info/METADATA,sha256=4kLO3lRf5Wplab2POptHiik7Z5tMYz-Ys3DDXuxihCk,18870
275
- skypilot_nightly-1.0.0.dev20240901.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
276
- skypilot_nightly-1.0.0.dev20240901.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
277
- skypilot_nightly-1.0.0.dev20240901.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
278
- skypilot_nightly-1.0.0.dev20240901.dist-info/RECORD,,
273
+ skypilot_nightly-1.0.0.dev20240903.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
274
+ skypilot_nightly-1.0.0.dev20240903.dist-info/METADATA,sha256=V0zqcv3aHLg6NOspSLg4SqJ-sToLhzQ5VWR7R1bWoaE,18870
275
+ skypilot_nightly-1.0.0.dev20240903.dist-info/WHEEL,sha256=ixB2d4u7mugx_bCBycvM9OzZ5yD7NmPXFRtKlORZS2Y,91
276
+ skypilot_nightly-1.0.0.dev20240903.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
277
+ skypilot_nightly-1.0.0.dev20240903.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
278
+ skypilot_nightly-1.0.0.dev20240903.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (74.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5