feat: GPU detection for LLM server (NVIDIA/AMD/Intel/Vulkan + CPU fallback)

- Added start-llama-server.bat with cross-brand GPU auto-detection:
  * Detection 1: nvidia-smi for NVIDIA
  * Detection 2: WMIC for AMD, Intel Arc, Intel HD/Iris/UHD
  * Detection 3: vulkaninfo as final fallback probe
  * Falls back to CPU-only build when no GPU found
- Downloaded llama-server b9947 builds:
  * Vulkan build (91 MB) - supports all GPU brands
  * CPU build (45 MB) - fallback in cpu/ subdir
- Downloaded Qwen2.5-Coder-1.5B Q4_K_M model (1.1 GB)
- Fixed run-hermes.bat polling: replaces fixed 5s timeout with
  curl-based readiness polling (up to 30 attempts, 1s apart)
- All .bat files verified: ASCII text, CRLF line terminators
- Added .gitignore for build artifacts and large binaries
This commit is contained in:
2026-07-10 00:58:56 -04:00
parent ecda528b90
commit 4e0ab94ee2
14 changed files with 4353 additions and 66 deletions
+8 -13
View File
@@ -817,6 +817,7 @@ class GPUStressTester:
component="gpu",
backend="+".join(backend_parts),
status=status,
duration_seconds=0.0, # caller overwrites this with actual wall time
summary="; ".join(summary_parts),
details=details,
errors=all_errors,
@@ -874,21 +875,15 @@ def run_all_stress_tests(
def print_report(results: Dict[str, StressResult]) -> None:
"""Pretty-print test results to stdout."""
for component in ("ram", "cpu", "gpu"):
testers = {
"ram": RAMStressTester,
"cpu": CPUStressTester,
"gpu": GPUStressTester,
}
for component, tester_cls in testers.items():
result = results.get(component)
if result is not None:
print()
print(StressResult.report.__doc__) # placeholder — will be replaced
# Actually use the testers' report methods
for component in ("ram", "cpu", "gpu"):
result = results.get(component)
if result is not None:
if component == "ram":
print(RAMStressTester().report(result))
elif component == "cpu":
print(CPUStressTester().report(result))
elif component == "gpu":
print(GPUStressTester().report(result))
print(tester_cls().report(result))
print()