Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/dstack/_internal/core/compatibility/gpus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from typing import Optional

from dstack._internal.core.compatibility.runs import get_run_spec_excludes
from dstack._internal.core.models.common import IncludeExcludeDictType
from dstack._internal.server.schemas.gpus import ListGpusRequest


def get_list_gpus_excludes(request: ListGpusRequest) -> Optional[IncludeExcludeDictType]:
list_gpus_excludes: IncludeExcludeDictType = {}
run_spec_excludes = get_run_spec_excludes(request.run_spec)
if run_spec_excludes is not None:
list_gpus_excludes["run_spec"] = run_spec_excludes
return list_gpus_excludes
4 changes: 2 additions & 2 deletions src/dstack/_internal/server/services/gpus.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ def _process_offers_into_backend_gpus(
"""Transforms raw offers into a structured list of BackendGpus, aggregating GPU info."""
backend_data: Dict[BackendType, Dict] = {}

for backend, offer in offers:
backend_type = backend.TYPE
for _, offer in offers:
backend_type = offer.backend
if backend_type not in backend_data:
backend_data[backend_type] = {"gpus": {}, "regions": set()}

Expand Down
3 changes: 2 additions & 1 deletion src/dstack/api/server/_gpus.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from pydantic import parse_obj_as

from dstack._internal.core.compatibility.gpus import get_list_gpus_excludes
from dstack._internal.core.models.runs import RunSpec
from dstack._internal.server.schemas.gpus import GpuGroup, ListGpusRequest, ListGpusResponse
from dstack.api.server._group import APIClientGroup
Expand All @@ -17,6 +18,6 @@ def list_gpus(
body = ListGpusRequest(run_spec=run_spec, group_by=group_by)
resp = self._request(
f"/api/project/{project_name}/gpus/list",
body=body.json(),
body=body.json(exclude=get_list_gpus_excludes(body)),
)
return parse_obj_as(ListGpusResponse, resp.json()).gpus
Loading