mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 18:25:26 -04:00
VRAM detection under native Windows install (#1610)
* Convert to different style of comment to make it easier to work with, fix formatting inside Powershell script. * Grab VRAM amount from driver's registry keys. * Fixed regression on NVIDIA GPUs
This commit is contained in:
+48
-32
@@ -468,39 +468,55 @@ def _detect_windows():
|
|||||||
"""
|
"""
|
||||||
# Single PowerShell command that gathers all hardware info at once
|
# Single PowerShell command that gathers all hardware info at once
|
||||||
ps_cmd = (
|
ps_cmd = (
|
||||||
"$r = @{}; "
|
"""
|
||||||
"$os = Get-CimInstance Win32_OperatingSystem; "
|
$r = @{}
|
||||||
"$r.ram_gb = [math]::Round($os.TotalVisibleMemorySize / 1048576, 1); "
|
$os = Get-CimInstance Win32_OperatingSystem
|
||||||
"$r.avail_gb = [math]::Round($os.FreePhysicalMemory / 1048576, 1); "
|
$r.ram_gb = [math]::Round($os.TotalVisibleMemorySize / 1048576, 1)
|
||||||
"$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1; "
|
$r.avail_gb = [math]::Round($os.FreePhysicalMemory / 1048576, 1)
|
||||||
"$r.cpu_name = $cpu.Name; "
|
$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
|
||||||
"$r.cpu_cores = (Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfLogicalProcessors -Sum).Sum; "
|
$r.cpu_name = $cpu.Name
|
||||||
"$r.arch = $cpu.AddressWidth; "
|
$r.cpu_cores = (Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfLogicalProcessors -Sum).Sum
|
||||||
|
$r.arch = $cpu.AddressWidth
|
||||||
# GPU detection via nvidia-smi (fastest) or WMI fallback
|
# GPU detection via nvidia-smi (fastest) or WMI fallback
|
||||||
"try { "
|
try {
|
||||||
" $nv = nvidia-smi --query-gpu=memory.total,name --format=csv,noheader,nounits 2>$null; "
|
$nv = nvidia-smi --query-gpu=memory.total,name --format=csv,noheader,nounits 2>$null
|
||||||
" if ($LASTEXITCODE -eq 0 -and $nv) { "
|
if ($LASTEXITCODE -eq 0 -and $nv) {
|
||||||
" $gpus = @(); "
|
$gpus = @()
|
||||||
" foreach ($line in $nv -split \"`n\") { "
|
foreach ($line in $nv -split "`n") {
|
||||||
" $p = $line -split ','; "
|
$p = $line -split ','
|
||||||
" if ($p.Count -ge 2) { $gpus += [pscustomobject]@{name=$p[1].Trim(); vram_mb=[double]$p[0].Trim()} } "
|
if ($p.Count -ge 2) { $gpus += [pscustomobject]@{name = $p[1].Trim(); vram_mb = [double]$p[0].Trim() } }
|
||||||
" }; "
|
}
|
||||||
" $r.gpu_name = $gpus[0].name; "
|
$r.gpu_name = $gpus[0].name
|
||||||
" $r.gpu_vram_gb = [math]::Round(($gpus | Measure-Object -Property vram_mb -Sum).Sum / 1024, 1); "
|
$r.gpu_vram_gb = [math]::Round(($gpus | Measure-Object -Property vram_mb -Sum).Sum / 1024, 1)
|
||||||
" $r.gpu_count = $gpus.Count; "
|
$r.gpu_count = $gpus.Count
|
||||||
" $r.gpu_backend = 'cuda'; "
|
$r.gpu_backend = 'cuda'
|
||||||
" } "
|
}
|
||||||
"} catch {}; "
|
}
|
||||||
"if (-not $r.gpu_name) { "
|
catch {}
|
||||||
" $wmiGpu = Get-CimInstance Win32_VideoController | Where-Object { $_.AdapterRAM -gt 0 } | Select-Object -First 1; "
|
if (-not $r.gpu_name) {
|
||||||
" if ($wmiGpu) { "
|
$wmiGpu = Get-CimInstance Win32_VideoController | Where-Object { $_.AdapterRAM -gt 0 } | Select-Object -First 1
|
||||||
" $r.gpu_name = $wmiGpu.Name; "
|
$GPUDriverKey = "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}\\0*"
|
||||||
" $r.gpu_vram_gb = [math]::Round($wmiGpu.AdapterRAM / 1073741824, 1); "
|
$GPUDeviceID = $wmiGpu.PNPDeviceID.Split('&')[0..1] -join '&'
|
||||||
" $r.gpu_count = 1; "
|
$VRAMfromRegistry = Get-ItemProperty -Path $GPUDriverKey |
|
||||||
" $r.gpu_backend = 'cpu_x86'; " # WMI doesn't tell us CUDA/ROCm
|
Where-Object { $_.MatchingDeviceId -like "${GPUDeviceID}*" } |
|
||||||
" } "
|
# Sometimes there happen to be multiple driver classes for the same gpu.
|
||||||
"}; "
|
Select-Object -ExpandProperty HardwareInformation.qwMemorySize -ErrorAction SilentlyContinue -First 1
|
||||||
"$r | ConvertTo-Json -Compress"
|
if ($wmiGpu) {
|
||||||
|
$r.gpu_name = $wmiGpu.Name
|
||||||
|
# Edge case: driver is broken, otherwise $wmiGpu.AdapterRAM is redundant
|
||||||
|
if ($VRAMfromRegistry -ge $wmiGpu.AdapterRAM) {
|
||||||
|
$r.gpu_vram_gb = [math]::Round($VRAMfromRegistry / 1073741824, 1)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$r.gpu_vram_gb = [math]::Round($wmiGpu.AdapterRAM / 1073741824, 1)
|
||||||
|
}
|
||||||
|
$r.gpu_count = 1
|
||||||
|
# WMI doesn't tell us CUDA/ROCm
|
||||||
|
$r.gpu_backend = 'cpu_x86';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$r | ConvertTo-Json -Compress
|
||||||
|
"""
|
||||||
)
|
)
|
||||||
if _remote_host:
|
if _remote_host:
|
||||||
# Remote: ship a single command string over SSH. The remote shell parses
|
# Remote: ship a single command string over SSH. The remote shell parses
|
||||||
|
|||||||
Reference in New Issue
Block a user