feat: add adaptive GPU scheduling

This commit is contained in:
CoolBoy
2026-08-02 16:59:44 +08:00
parent 80a1b8518d
commit eab5ab6dce
14 changed files with 1216 additions and 52 deletions

View File

@@ -4,6 +4,8 @@ import json
import socket
import time
from dataclasses import dataclass
from datetime import datetime, timezone
from email.utils import parsedate_to_datetime
from http.client import IncompleteRead, RemoteDisconnected
from typing import Any
from urllib.error import HTTPError, URLError
@@ -76,17 +78,34 @@ class JsonHttpClient:
except HTTPError as exc:
payload = self._decode_error_payload(exc)
if exc.code in retryable_statuses and attempt < self.retries:
time.sleep(self.backoff_seconds * (attempt + 1))
retry_after = exc.headers.get("Retry-After") if exc.headers is not None else None
time.sleep(self._retry_delay(attempt, retry_after=retry_after))
continue
raise HttpJsonError(f"HTTP request failed for {url}", status_code=exc.code, payload=payload) from exc
except (URLError, TimeoutError, socket.timeout, RemoteDisconnected, IncompleteRead) as exc:
if attempt < self.retries:
time.sleep(self.backoff_seconds * (attempt + 1))
time.sleep(self._retry_delay(attempt))
continue
raise HttpJsonError(f"Network request failed for {url}") from exc
raise HttpJsonError(f"Request exhausted retries for {url}")
def _retry_delay(self, attempt: int, *, retry_after: str | None = None) -> float:
exponential_delay = self.backoff_seconds * (2**attempt)
retry_after_delay = 0.0
if retry_after:
try:
retry_after_delay = max(0.0, float(retry_after))
except ValueError:
try:
parsed = parsedate_to_datetime(retry_after)
if parsed.tzinfo is None:
parsed = parsed.replace(tzinfo=timezone.utc)
retry_after_delay = max(0.0, (parsed - datetime.now(timezone.utc)).total_seconds())
except (TypeError, ValueError, OverflowError):
retry_after_delay = 0.0
return min(60.0, max(exponential_delay, retry_after_delay))
def _build_url(self, path: str, query: dict[str, Any] | None) -> str:
if path.startswith("http://") or path.startswith("https://"):
url = path