feat: add queue-aware adaptive scheduling
This commit is contained in:
@@ -85,11 +85,18 @@ class ModelHubClient:
|
||||
current: int = 1,
|
||||
page_size: int = 50,
|
||||
only_mine: bool = True,
|
||||
begin_time: datetime | None = None,
|
||||
end_time: datetime | None = None,
|
||||
begin_time: datetime | str | None = None,
|
||||
end_time: datetime | str | None = None,
|
||||
gpu_type: str | None = None,
|
||||
model_id: str | None = None,
|
||||
status: str | None = None,
|
||||
verify_result: int | None = None,
|
||||
) -> dict[str, Any]:
|
||||
def query_time(value: datetime | str | None) -> str | None:
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
return format_modelhub_datetime(value) if value else None
|
||||
|
||||
return self._request(
|
||||
"GET",
|
||||
"/api/adapt/task/page",
|
||||
@@ -97,13 +104,44 @@ class ModelHubClient:
|
||||
"current": current,
|
||||
"pageSize": page_size,
|
||||
"onlyMine": str(only_mine).lower(),
|
||||
"beginTime": format_modelhub_datetime(begin_time) if begin_time else None,
|
||||
"endTime": format_modelhub_datetime(end_time) if end_time else None,
|
||||
"beginTime": query_time(begin_time),
|
||||
"endTime": query_time(end_time),
|
||||
"gpuType": gpu_type,
|
||||
"modelId": model_id,
|
||||
"status": status,
|
||||
"verifyResult": verify_result,
|
||||
},
|
||||
)
|
||||
|
||||
def list_machine_info(self) -> list[dict[str, Any]]:
|
||||
payload = self._request("GET", "/api/computility/power/machine/list/machine-info")
|
||||
data = payload.get("data") or []
|
||||
if not isinstance(data, list):
|
||||
raise ModelHubAPIError("Machine info response is invalid", payload=payload)
|
||||
return [item for item in data if isinstance(item, dict)]
|
||||
|
||||
def list_framework_stats(self, task_type: str, target_gpu: str) -> list[dict[str, Any]]:
|
||||
payload = self._request(
|
||||
"GET",
|
||||
"/api/computility/driver/images/frameworks",
|
||||
query={"taskType": task_type, "gpuTypeName": target_gpu},
|
||||
)
|
||||
data = payload.get("data") or []
|
||||
if not isinstance(data, list):
|
||||
raise ModelHubAPIError("Framework statistics response is invalid", payload=payload)
|
||||
return [item for item in data if isinstance(item, dict)]
|
||||
|
||||
def get_build_config(self, task_type: str, target_gpu: str, framework: str) -> str:
|
||||
payload = self._request(
|
||||
"POST",
|
||||
"/api/adapt/task/build-config",
|
||||
query={"taskType": task_type, "gpuType": target_gpu, "framework": framework},
|
||||
)
|
||||
data = payload.get("data")
|
||||
if not isinstance(data, str) or not data.strip():
|
||||
raise ModelHubAPIError("Official build config response is invalid", payload=payload)
|
||||
return data
|
||||
|
||||
def list_tasks(
|
||||
self,
|
||||
*,
|
||||
@@ -747,6 +785,15 @@ class ModelHubClientPool:
|
||||
"""Single-page task listing via the reader client (no fanout)."""
|
||||
return self._reader.list_tasks_page(**kwargs)
|
||||
|
||||
def list_machine_info(self) -> list[dict[str, Any]]:
|
||||
return self._reader.list_machine_info()
|
||||
|
||||
def list_framework_stats(self, task_type: str, target_gpu: str) -> list[dict[str, Any]]:
|
||||
return self._reader.list_framework_stats(task_type, target_gpu)
|
||||
|
||||
def get_build_config(self, task_type: str, target_gpu: str, framework: str) -> str:
|
||||
return self._reader.get_build_config(task_type, target_gpu, framework)
|
||||
|
||||
def find_recent_task_id(self, model_id: str, gpu_type: str, submitted_after: datetime) -> str | None:
|
||||
for client in self.clients:
|
||||
task_id = client.find_recent_task_id(model_id, gpu_type, submitted_after)
|
||||
|
||||
Reference in New Issue
Block a user