diff --git a/discover/runner.go b/discover/runner.go index 8071111f..f6968071 100644 --- a/discover/runner.go +++ b/discover/runner.go @@ -330,6 +330,9 @@ func GPUDevices(ctx context.Context, runners []FilteredRunnerDiscovery) []ml.Dev } } + // Apply any iGPU workarounds + iGPUWorkarounds(devices) + return devices } @@ -540,3 +543,32 @@ func GetDevicesFromRunner(ctx context.Context, runner BaseRunner) ([]ml.DeviceIn } } } + +func iGPUWorkarounds(devices []ml.DeviceInfo) { + // short circuit if we have no iGPUs + anyiGPU := false + for i := range devices { + if devices[i].Integrated { + anyiGPU = true + break + } + } + if !anyiGPU { + return + } + + memInfo, err := GetCPUMem() + if err != nil { + slog.Debug("failed to fetch system memory information for iGPU", "error", err) + return + } + for i := range devices { + if !devices[i].Integrated { + continue + } + // NVIDIA iGPUs return useless free VRAM data which ignores system buff/cache + if devices[i].Library == "CUDA" { + devices[i].FreeMemory = memInfo.FreeMemory + } + } +}