Skip to content

Commit

Permalink
Merge pull request #78 from JaceEthaniel/main
Browse files Browse the repository at this point in the history
[BUG] Dual GPU displaying incorrect VRAM (and preventing models from being downloaded via launcher)
  • Loading branch information
deffcolony authored Sep 28, 2024
2 parents 804787f + 964d060 commit 2341363
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 22 deletions.
26 changes: 24 additions & 2 deletions Launcher.bat
Original file line number Diff line number Diff line change
Expand Up @@ -429,8 +429,30 @@ if not exist "%st_install_path%" (
)

REM Run PowerShell command to retrieve VRAM size and divide by 1GB
for /f "usebackq tokens=*" %%i in (`powershell -Command "$qwMemorySize = (Get-ItemProperty -Path 'HKLM:\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0*' -Name HardwareInformation.qwMemorySize -ErrorAction SilentlyContinue).'HardwareInformation.qwMemorySize'; if ($null -ne $qwMemorySize -and $qwMemorySize -is [array]) { $qwMemorySize = [double]$qwMemorySize[0] } else { $qwMemorySize = [double]$qwMemorySize }; if ($null -ne $qwMemorySize) { [math]::Round($qwMemorySize/1GB) } else { 'Property not found' }"`) do (
set "UVRAM=%%i"
set /a iteration=0
set /a last_UVRAM=0
REM Detect GPU and store name, excluding integrated GPUs if discrete GPUs are found
for /f "tokens=2 delims==" %%f in ('wmic path Win32_VideoController get name /value ^| find "="') do (
REM Run PowerShell command to retrieve VRAM size and divide by 1GB
for /f "usebackq tokens=*" %%i in (`powershell -Command "$qwMemorySize = (Get-ItemProperty -Path 'HKLM:\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0*' -Name HardwareInformation.qwMemorySize -ErrorAction SilentlyContinue).'HardwareInformation.qwMemorySize'; if ($null -ne $qwMemorySize -and $qwMemorySize -is [array]) { $qwMemorySize = [double]$qwMemorySize[!iteration!] } else { $qwMemorySize = [double]$qwMemorySize }; if ($null -ne $qwMemorySize) { [math]::Round($qwMemorySize/1GB) } else { 'Property not found' }"`) do (
set "UVRAM=%%i"
)
set /a iteration=!iteration!+1
REM If the VRAM is greater than 0 (it always should be, but just in case...) AND the lastUVRAM is not the same as VRAM
REM (might have to change this in the case where two cards have the same VRAM, but the user wants the first card...
REM in which case we would want to see if it is the first iteration or not... but I'm not here to do all your work!)
REM AND the lastUVRAM is Grt than VRAM... set it to the previous card. We don't have to check the other way, because
REM we already set VRAM. This way takes more builds into account... but not all.
if /i !lastUVRAM! gtr 0 (
if /i !lastUVRAM! neq !UVRAM! (
if /i !lastUVRAM! gtr !UVRAM! (
set "UVRAM=!lastUVRAM!"
set "GPU_name=!last_GPU!"
)
)
) else (
set "lastUVRAM=!UVRAM!"
)
)

REM Change the current directory to 'sillytavern' folder
Expand Down
54 changes: 34 additions & 20 deletions bin/functions/Toolbox/Troubleshooting/gpu_info.bat
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,46 @@

REM Initialize variables
setlocal enabledelayedexpansion
set /a iteration=0
set /a last_VRAM=0
set "last_GPU=Unknown"
set "GPU_name=Unknown"
set "VRAM=Unknown"
set "primary_gpu_found=false"

REM Detect GPU and store name, excluding integrated GPUs if discrete GPUs are found
for /f "tokens=2 delims==" %%f in ('wmic path Win32_VideoController where "AdapterRAM > 0" get name /value ^| find "="') do (
set "current_gpu=%%f"
if /i "!current_gpu!" neq "Microsoft Basic Display Adapter" (
if /i "!current_gpu!" neq "Intel(R) HD Graphics" (
set "GPU_name=!current_gpu!"
set "primary_gpu_found=true"
goto :vram_check
)
) else if "!primary_gpu_found!" equ "false" (
set "GPU_name=!current_gpu!"
goto :vram_check
)
)

:vram_check
REM Run PowerShell command to retrieve VRAM size and divide by 1GB
for /f "usebackq tokens=*" %%i in (`powershell -Command "$qwMemorySize = (Get-ItemProperty -Path 'HKLM:\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0*' -Name HardwareInformation.qwMemorySize -ErrorAction SilentlyContinue).'HardwareInformation.qwMemorySize'; if ($null -ne $qwMemorySize -and $qwMemorySize -is [array]) { $qwMemorySize = [double]$qwMemorySize[0] } else { $qwMemorySize = [double]$qwMemorySize }; if ($null -ne $qwMemorySize) { [math]::Round($qwMemorySize/1GB) } else { 'Property not found' }"`) do (
set "VRAM=%%i"
for /f "tokens=2 delims==" %%f in ('wmic path Win32_VideoController get name /value ^| find "="') do (
REM If GPU name is blank, set it; else, if it is not blank and does not equal the current value of f,
REM move gpu name to last_gpu and set gpu_name to the new value. This is here so that if the current card has less
REM VRAM than the previous card, we can set the name back properly. I doubt it would be needed... but you never know.
if /i !GPU_name! equ "" (
set "GPU_name=%%f"
) else if !GPU_name! neq %%f (
set "last_GPU=!GPU_name!"
set "GPU_name=%%f"
)
REM Run PowerShell command to retrieve VRAM size and divide by 1GB
for /f "usebackq tokens=*" %%i in (`powershell -Command "$qwMemorySize = (Get-ItemProperty -Path 'HKLM:\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0*' -Name HardwareInformation.qwMemorySize -ErrorAction SilentlyContinue).'HardwareInformation.qwMemorySize'; if ($null -ne $qwMemorySize -and $qwMemorySize -is [array]) { $qwMemorySize = [double]$qwMemorySize[!iteration!] } else { $qwMemorySize = [double]$qwMemorySize }; if ($null -ne $qwMemorySize) { [math]::Round($qwMemorySize/1GB) } else { 'Property not found' }"`) do (
set "VRAM=%%i"
)
REM iterate so we can move through the objects in the powershell script...
set /a iteration=!iteration!+1
REM If the VRAM is greater than 0 (it always should be, but just in case...) AND the lastVRAM is not the same as VRAM
REM (might have to change this in the case where two cards have the same VRAM, but the user wants the first card...
REM in which case we would want to see if it is the first iteration or not... but I'm not here to do all your work!)
REM AND the lastVRAM is Grt than VRAM... set it to the previous card. We don't have to check the other way, because
REM we already set VRAM. This way takes more builds into account... but not all.
if /i !lastVRAM! gtr 0 (
if /i !lastVRAM! neq !VRAM! (
if /i !lastVRAM! gtr !VRAM! (
set "VRAM=!lastVRAM!"
set "GPU_name=!last_GPU!"
)
)
) else (
set "lastVRAM=!VRAM!"
)
)

REM Display GPU name and VRAM
echo GPU: %cyan_fg_strong%%GPU_name%%reset% - VRAM: %cyan_fg_strong%%VRAM%%reset% GB

endlocal

0 comments on commit 2341363

Please sign in to comment.