skypilot-nightly 1.0.0.dev20250729__py3-none-any.whl → 1.0.0.dev20250731__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (186) hide show
  1. sky/__init__.py +2 -2
  2. sky/backends/backend_utils.py +4 -1
  3. sky/backends/cloud_vm_ray_backend.py +4 -3
  4. sky/catalog/__init__.py +3 -3
  5. sky/catalog/aws_catalog.py +12 -0
  6. sky/catalog/common.py +2 -2
  7. sky/catalog/data_fetchers/fetch_aws.py +13 -1
  8. sky/client/cli/command.py +448 -60
  9. sky/client/common.py +12 -9
  10. sky/clouds/nebius.py +1 -1
  11. sky/clouds/utils/gcp_utils.py +1 -1
  12. sky/clouds/vast.py +1 -2
  13. sky/dashboard/out/404.html +1 -1
  14. sky/dashboard/out/_next/static/chunks/1043-928582d4860fef92.js +1 -0
  15. sky/dashboard/out/_next/static/chunks/1141-3f10a5a9f697c630.js +11 -0
  16. sky/dashboard/out/_next/static/chunks/1559-6c00e20454194859.js +30 -0
  17. sky/dashboard/out/_next/static/chunks/1664-22b00e32c9ff96a4.js +1 -0
  18. sky/dashboard/out/_next/static/chunks/1871-1df8b686a51f3e3a.js +6 -0
  19. sky/dashboard/out/_next/static/chunks/2003.f90b06bb1f914295.js +1 -0
  20. sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +1 -0
  21. sky/dashboard/out/_next/static/chunks/2369.fc20f0c2c8ed9fe7.js +15 -0
  22. sky/dashboard/out/_next/static/chunks/2641.142718b6b78a6f9b.js +1 -0
  23. sky/dashboard/out/_next/static/chunks/3698-7874720877646365.js +1 -0
  24. sky/dashboard/out/_next/static/chunks/3785.95524bc443db8260.js +1 -0
  25. sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +1 -0
  26. sky/dashboard/out/_next/static/chunks/4725.42f21f250f91f65b.js +1 -0
  27. sky/dashboard/out/_next/static/chunks/4869.18e6a4361a380763.js +16 -0
  28. sky/dashboard/out/_next/static/chunks/4937.d6bf67771e353356.js +15 -0
  29. sky/dashboard/out/_next/static/chunks/5230-f3bb2663e442e86c.js +1 -0
  30. sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +8 -0
  31. sky/dashboard/out/_next/static/chunks/6135-d0e285ac5f3f2485.js +1 -0
  32. sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +39 -0
  33. sky/dashboard/out/_next/static/chunks/6212-7bd06f60ba693125.js +13 -0
  34. sky/dashboard/out/_next/static/chunks/6601-234b1cf963c7280b.js +1 -0
  35. sky/dashboard/out/_next/static/chunks/691.6d99cbfba347cebf.js +55 -0
  36. sky/dashboard/out/_next/static/chunks/6989-983d3ae7a874de98.js +1 -0
  37. sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +1 -0
  38. sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +41 -0
  39. sky/dashboard/out/_next/static/chunks/8969-9a8cca241b30db83.js +1 -0
  40. sky/dashboard/out/_next/static/chunks/9025.7937c16bc8623516.js +6 -0
  41. sky/dashboard/out/_next/static/chunks/938-40d15b6261ec8dc1.js +1 -0
  42. sky/dashboard/out/_next/static/chunks/9847.4c46c5e229c78704.js +30 -0
  43. sky/dashboard/out/_next/static/chunks/9984.78ee6d2c6fa4b0e8.js +1 -0
  44. sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +1 -0
  45. sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +33 -0
  46. sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +1 -0
  47. sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +1 -0
  48. sky/dashboard/out/_next/static/chunks/pages/_app-a67ae198457b9886.js +34 -0
  49. sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +1 -0
  50. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-fa63e8b1d203f298.js +11 -0
  51. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-665fa5d96dd41d67.js +1 -0
  52. sky/dashboard/out/_next/static/chunks/pages/clusters-956ad430075efee8.js +1 -0
  53. sky/dashboard/out/_next/static/chunks/pages/config-8620d099cbef8608.js +1 -0
  54. sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +1 -0
  55. sky/dashboard/out/_next/static/chunks/pages/infra/[context]-9cfd875eecb6eaf5.js +1 -0
  56. sky/dashboard/out/_next/static/chunks/pages/infra-0fbdc9072f19fbe2.js +1 -0
  57. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-b25c109d6e41bcf4.js +11 -0
  58. sky/dashboard/out/_next/static/chunks/pages/jobs-6393a9edc7322b54.js +1 -0
  59. sky/dashboard/out/_next/static/chunks/pages/users-34d6bb10c3b3ee3d.js +1 -0
  60. sky/dashboard/out/_next/static/chunks/pages/volumes-225c8dae0634eb7f.js +1 -0
  61. sky/dashboard/out/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js +1 -0
  62. sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-4d41c9023287f59a.js +1 -0
  63. sky/dashboard/out/_next/static/chunks/pages/workspaces-e4cb7e97d37e93ad.js +1 -0
  64. sky/dashboard/out/_next/static/chunks/webpack-5adfc4d4b3db6f71.js +1 -0
  65. sky/dashboard/out/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js +1 -0
  66. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  67. sky/dashboard/out/clusters/[cluster].html +1 -1
  68. sky/dashboard/out/clusters.html +1 -1
  69. sky/dashboard/out/config.html +1 -1
  70. sky/dashboard/out/index.html +1 -1
  71. sky/dashboard/out/infra/[context].html +1 -1
  72. sky/dashboard/out/infra.html +1 -1
  73. sky/dashboard/out/jobs/[job].html +1 -1
  74. sky/dashboard/out/jobs.html +1 -1
  75. sky/dashboard/out/users.html +1 -1
  76. sky/dashboard/out/volumes.html +1 -1
  77. sky/dashboard/out/workspace/new.html +1 -1
  78. sky/dashboard/out/workspaces/[name].html +1 -1
  79. sky/dashboard/out/workspaces.html +1 -1
  80. sky/data/data_utils.py +25 -0
  81. sky/data/storage.py +1219 -1775
  82. sky/global_user_state.py +18 -8
  83. sky/jobs/__init__.py +3 -0
  84. sky/jobs/client/sdk.py +80 -3
  85. sky/jobs/controller.py +76 -25
  86. sky/jobs/recovery_strategy.py +80 -34
  87. sky/jobs/scheduler.py +68 -20
  88. sky/jobs/server/core.py +228 -136
  89. sky/jobs/server/server.py +40 -0
  90. sky/jobs/state.py +164 -31
  91. sky/jobs/utils.py +144 -68
  92. sky/logs/aws.py +4 -2
  93. sky/provision/kubernetes/utils.py +6 -4
  94. sky/provision/nebius/constants.py +3 -0
  95. sky/provision/vast/instance.py +2 -1
  96. sky/provision/vast/utils.py +9 -6
  97. sky/py.typed +0 -0
  98. sky/resources.py +24 -14
  99. sky/schemas/db/spot_jobs/002_cluster_pool.py +42 -0
  100. sky/serve/autoscalers.py +8 -0
  101. sky/serve/client/impl.py +188 -0
  102. sky/serve/client/sdk.py +12 -82
  103. sky/serve/constants.py +5 -1
  104. sky/serve/controller.py +5 -0
  105. sky/serve/replica_managers.py +112 -37
  106. sky/serve/serve_state.py +16 -6
  107. sky/serve/serve_utils.py +274 -77
  108. sky/serve/server/core.py +8 -525
  109. sky/serve/server/impl.py +709 -0
  110. sky/serve/service.py +13 -9
  111. sky/serve/service_spec.py +74 -4
  112. sky/server/constants.py +1 -1
  113. sky/server/requests/payloads.py +33 -0
  114. sky/server/requests/requests.py +18 -1
  115. sky/server/requests/serializers/decoders.py +12 -3
  116. sky/server/requests/serializers/encoders.py +13 -2
  117. sky/server/server.py +6 -1
  118. sky/skylet/events.py +9 -0
  119. sky/skypilot_config.py +24 -21
  120. sky/task.py +41 -11
  121. sky/templates/jobs-controller.yaml.j2 +3 -0
  122. sky/templates/sky-serve-controller.yaml.j2 +18 -2
  123. sky/users/server.py +1 -1
  124. sky/utils/command_runner.py +4 -2
  125. sky/utils/controller_utils.py +14 -10
  126. sky/utils/dag_utils.py +4 -2
  127. sky/utils/db/migration_utils.py +2 -4
  128. sky/utils/schemas.py +24 -19
  129. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/METADATA +1 -1
  130. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/RECORD +135 -130
  131. sky/dashboard/out/_next/static/Q2sVXboB_t7cgvntL-6nD/_buildManifest.js +0 -1
  132. sky/dashboard/out/_next/static/chunks/1043-869d9c78bf5dd3df.js +0 -1
  133. sky/dashboard/out/_next/static/chunks/1141-e49a159c30a6c4a7.js +0 -11
  134. sky/dashboard/out/_next/static/chunks/1559-18717d96ef2fcbe9.js +0 -30
  135. sky/dashboard/out/_next/static/chunks/1664-d65361e92b85e786.js +0 -1
  136. sky/dashboard/out/_next/static/chunks/1871-ea0e7283886407ca.js +0 -6
  137. sky/dashboard/out/_next/static/chunks/2003.b82e6db40ec4c463.js +0 -1
  138. sky/dashboard/out/_next/static/chunks/2350.23778a2b19aabd33.js +0 -1
  139. sky/dashboard/out/_next/static/chunks/2369.2d6e4757f8dfc2b7.js +0 -15
  140. sky/dashboard/out/_next/static/chunks/2641.74c19c4d45a2c034.js +0 -1
  141. sky/dashboard/out/_next/static/chunks/3698-9fa11dafb5cad4a6.js +0 -1
  142. sky/dashboard/out/_next/static/chunks/3785.59705416215ff08b.js +0 -1
  143. sky/dashboard/out/_next/static/chunks/3937.d7f1c55d1916c7f2.js +0 -1
  144. sky/dashboard/out/_next/static/chunks/4725.66125dcd9832aa5d.js +0 -1
  145. sky/dashboard/out/_next/static/chunks/4869.da729a7db3a31f43.js +0 -16
  146. sky/dashboard/out/_next/static/chunks/4937.d75809403fc264ac.js +0 -15
  147. sky/dashboard/out/_next/static/chunks/5230-df791914b54d91d9.js +0 -1
  148. sky/dashboard/out/_next/static/chunks/5739-5ea3ffa10fc884f2.js +0 -8
  149. sky/dashboard/out/_next/static/chunks/6135-2abbd0352f8ee061.js +0 -1
  150. sky/dashboard/out/_next/static/chunks/616-162f3033ffcd3d31.js +0 -39
  151. sky/dashboard/out/_next/static/chunks/6601-d4a381403a8bae91.js +0 -1
  152. sky/dashboard/out/_next/static/chunks/691.488b4aef97c28727.js +0 -55
  153. sky/dashboard/out/_next/static/chunks/6989-eab0e9c16b64fd9f.js +0 -1
  154. sky/dashboard/out/_next/static/chunks/6990-f64e03df359e04f7.js +0 -1
  155. sky/dashboard/out/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js +0 -41
  156. sky/dashboard/out/_next/static/chunks/8969-8e0b2055bf5dd499.js +0 -1
  157. sky/dashboard/out/_next/static/chunks/9025.4a9099bdf3ed4875.js +0 -6
  158. sky/dashboard/out/_next/static/chunks/938-7ee806653aef0609.js +0 -1
  159. sky/dashboard/out/_next/static/chunks/9847.387abf8a14d722db.js +0 -30
  160. sky/dashboard/out/_next/static/chunks/9984.0460de9d3adf5582.js +0 -1
  161. sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js +0 -1
  162. sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js +0 -33
  163. sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js +0 -1
  164. sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js +0 -1
  165. sky/dashboard/out/_next/static/chunks/pages/_app-da491665d4289aae.js +0 -34
  166. sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js +0 -1
  167. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-2186770cc2de1623.js +0 -11
  168. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-95afb019ab85801c.js +0 -6
  169. sky/dashboard/out/_next/static/chunks/pages/clusters-3d4be4961e1c94eb.js +0 -1
  170. sky/dashboard/out/_next/static/chunks/pages/config-a2673b256b6d416f.js +0 -1
  171. sky/dashboard/out/_next/static/chunks/pages/index-89e7daf7b7df02e0.js +0 -1
  172. sky/dashboard/out/_next/static/chunks/pages/infra/[context]-a90b4fe4616dc501.js +0 -1
  173. sky/dashboard/out/_next/static/chunks/pages/infra-0d3d1f890c5d188a.js +0 -1
  174. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-dc0299ffefebcdbe.js +0 -16
  175. sky/dashboard/out/_next/static/chunks/pages/jobs-49f790d12a85027c.js +0 -1
  176. sky/dashboard/out/_next/static/chunks/pages/users-6790fcefd5487b13.js +0 -1
  177. sky/dashboard/out/_next/static/chunks/pages/volumes-61ea7ba7e56f8d06.js +0 -1
  178. sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js +0 -1
  179. sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-6bcd4b20914d76c9.js +0 -1
  180. sky/dashboard/out/_next/static/chunks/pages/workspaces-5f7fe4b7d55b8612.js +0 -1
  181. sky/dashboard/out/_next/static/chunks/webpack-a305898dc479711e.js +0 -1
  182. /sky/dashboard/out/_next/static/{Q2sVXboB_t7cgvntL-6nD → oKqDxFQ88cquF4nQGE_0w}/_ssgManifest.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/WHEEL +0 -0
  184. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/entry_points.txt +0 -0
  185. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/licenses/LICENSE +0 -0
  186. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.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 = '1e4f892c08e19e9ca7651d3a114a71d954dcd915'
8
+ _SKYPILOT_COMMIT_SHA = '913f9dd651a2c363231eef760675f1dae49270a1'
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.dev20250729'
38
+ __version__ = '1.0.0.dev20250731'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -36,6 +36,7 @@ from sky.jobs import utils as managed_job_utils
36
36
  from sky.provision import common as provision_common
37
37
  from sky.provision import instance_setup
38
38
  from sky.provision.kubernetes import utils as kubernetes_utils
39
+ from sky.serve import serve_utils
39
40
  from sky.server.requests import requests as requests_lib
40
41
  from sky.skylet import constants
41
42
  from sky.usage import usage_lib
@@ -2625,7 +2626,9 @@ def is_controller_accessible(
2625
2626
  failed to be connected.
2626
2627
  """
2627
2628
  if (managed_job_utils.is_consolidation_mode() and
2628
- controller == controller_utils.Controllers.JOBS_CONTROLLER):
2629
+ controller == controller_utils.Controllers.JOBS_CONTROLLER
2630
+ ) or (serve_utils.is_consolidation_mode() and
2631
+ controller == controller_utils.Controllers.SKY_SERVE_CONTROLLER):
2629
2632
  cn = 'local-controller-consolidation'
2630
2633
  return backends.LocalResourcesHandle(
2631
2634
  cluster_name=cn,
@@ -3209,9 +3209,10 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3209
3209
  self._open_ports(handle)
3210
3210
 
3211
3211
  # Capture task YAML and command
3212
- task_config_redacted = None
3212
+ user_specified_task_config = None
3213
3213
  if task is not None:
3214
- task_config_redacted = task.to_yaml_config(redact_secrets=True)
3214
+ user_specified_task_config = task.to_yaml_config(
3215
+ use_user_specified_yaml=True)
3215
3216
 
3216
3217
  with timeline.Event('backend.provision.post_process'):
3217
3218
  global_user_state.add_or_update_cluster(
@@ -3220,7 +3221,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3220
3221
  set(task.resources),
3221
3222
  ready=True,
3222
3223
  config_hash=config_hash,
3223
- task_config=task_config_redacted,
3224
+ task_config=user_specified_task_config,
3224
3225
  )
3225
3226
  usage_lib.messages.usage.update_final_cluster_status(
3226
3227
  status_lib.ClusterStatus.UP)
sky/catalog/__init__.py CHANGED
@@ -91,7 +91,7 @@ def list_accelerator_counts(
91
91
  region_filter: Optional[str] = None,
92
92
  quantity_filter: Optional[int] = None,
93
93
  clouds: CloudFilter = None,
94
- ) -> Dict[str, List[int]]:
94
+ ) -> Dict[str, List[float]]:
95
95
  """Lists all accelerators offered by Sky and available counts.
96
96
 
97
97
  Returns: A dictionary of canonical accelerator names mapped to a list
@@ -107,12 +107,12 @@ def list_accelerator_counts(
107
107
  require_price=False)
108
108
  if not isinstance(results, list):
109
109
  results = [results]
110
- accelerator_counts: Dict[str, Set[int]] = collections.defaultdict(set)
110
+ accelerator_counts: Dict[str, Set[float]] = collections.defaultdict(set)
111
111
  for result in results:
112
112
  for gpu, items in result.items():
113
113
  for item in items:
114
114
  accelerator_counts[gpu].add(item.accelerator_count)
115
- ret: Dict[str, List[int]] = {}
115
+ ret: Dict[str, List[float]] = {}
116
116
  for gpu, counts in accelerator_counts.items():
117
117
  ret[gpu] = sorted(counts)
118
118
  return ret
@@ -38,14 +38,26 @@ _DEFAULT_INSTANCE_FAMILY = [
38
38
  # CPU: Intel Ice Lake 8375C.
39
39
  # Memory: 4 GiB RAM per 1 vCPU;
40
40
  'm6i',
41
+ # This is the latest general-purpose instance family as of Jul 2025.
42
+ # CPU: Intel Sapphire Rapids.
43
+ # Memory: 4 GiB RAM per 1 vCPU;
44
+ 'm7i',
41
45
  # This is the latest memory-optimized instance family as of Mar 2023.
42
46
  # CPU: Intel Ice Lake 8375C
43
47
  # Memory: 8 GiB RAM per 1 vCPU;
44
48
  'r6i',
49
+ # This is the latest memory-optimized instance family as of Jul 2025.
50
+ # CPU: Intel Sapphire Rapids.
51
+ # Memory: 8 GiB RAM per 1 vCPU;
52
+ 'r7i',
45
53
  # This is the latest compute-optimized instance family as of Mar 2023.
46
54
  # CPU: Intel Ice Lake 8375C
47
55
  # Memory: 2 GiB RAM per 1 vCPU;
48
56
  'c6i',
57
+ # This is the latest compute-optimized instance family as of Jul 2025.
58
+ # CPU: Intel Sapphire Rapids.
59
+ # Memory: 2 GiB RAM per 1 vCPU;
60
+ 'c7i',
49
61
  ]
50
62
  _DEFAULT_NUM_VCPUS = 8
51
63
  _DEFAULT_MEMORY_CPU_RATIO = 4
sky/catalog/common.py CHANGED
@@ -51,7 +51,7 @@ class InstanceTypeInfo(NamedTuple):
51
51
  cloud: str
52
52
  instance_type: Optional[str]
53
53
  accelerator_name: str
54
- accelerator_count: int
54
+ accelerator_count: float
55
55
  cpu_count: Optional[float]
56
56
  device_memory: Optional[float]
57
57
  memory: Optional[float]
@@ -631,7 +631,7 @@ def list_accelerators_impl(
631
631
  df = df[df['Region'].str.contains(region_filter,
632
632
  case=case_sensitive,
633
633
  regex=True)]
634
- df['AcceleratorCount'] = df['AcceleratorCount'].astype(int)
634
+ df['AcceleratorCount'] = df['AcceleratorCount'].astype(float)
635
635
  if quantity_filter is not None:
636
636
  df = df[df['AcceleratorCount'] == quantity_filter]
637
637
  grouped = df.groupby('AcceleratorName')
@@ -46,7 +46,7 @@ ALL_REGIONS = [
46
46
  'eu-west-1',
47
47
  'eu-west-2',
48
48
  'eu-south-1',
49
- # 'eu-south-2', # no supported AMI
49
+ 'eu-south-2',
50
50
  'eu-west-3',
51
51
  'eu-north-1',
52
52
  'me-south-1',
@@ -78,6 +78,10 @@ PRICING_TABLE_URL_FMT = 'https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws
78
78
  # the permission to query the offerings of the instance.
79
79
  # Ref: https://aws.amazon.com/ec2/instance-types/p4/
80
80
  P4DE_REGIONS = ['us-east-1', 'us-west-2']
81
+ # g6f instances have fractional GPUs, but the API returns Count: 1 under
82
+ # GpuInfo. However, the GPU memory is properly scaled. Taking the instance GPU
83
+ # divided by the total memory of an L4 will give us the fraction of the GPU.
84
+ L4_GPU_MEMORY = 22888
81
85
 
82
86
  regions_enabled: Optional[Set[str]] = None
83
87
 
@@ -313,6 +317,14 @@ def _get_instance_types_df(region: str) -> Union[str, 'pd.DataFrame']:
313
317
  # AWS API is 'NVIDIA', which is incorrect. See #4652.
314
318
  acc_name = 'H200'
315
319
  acc_count = 8
320
+ if (row['InstanceType'].startswith('g6f') or
321
+ row['InstanceType'].startswith('gr6f')):
322
+ # These instance actually have only fractional GPUs, but the API
323
+ # returns Count: 1 under GpuInfo. We need to check the GPU
324
+ # memory to get the actual fraction of the GPU.
325
+ # See also Standard_NV{vcpu}ads_A10_v5 support on Azure.
326
+ fraction = row['GpuInfo']['TotalGpuMemoryInMiB'] / L4_GPU_MEMORY
327
+ acc_count = round(fraction, 3)
316
328
  return pd.Series({
317
329
  'AcceleratorName': acc_name,
318
330
  'AcceleratorCount': acc_count,