PowerShellでGPU情報を取得しマイニング負荷を監視する方法

PowerShellは、Windows環境でスクリプトを作成し、さまざまなシステム情報を管理できる強力なツールです。本記事では、NVIDIAおよびAMDのGPU情報をPowerShellを使用して取得し、それを基にマイニング負荷を効率的に監視する方法を解説します。GPUの状態を把握することは、パフォーマンスの最適化や異常検知に役立ちます。また、負荷を監視することで、マイニング作業の効率化やシステムの安定性向上につなげることができます。初心者でも簡単に実践できるスクリプトの作成例を交えながら、実際の運用方法をわかりやすく紹介していきます。

目次

PowerShellでのGPU情報取得の基礎


PowerShellは、システム情報を取得するためのさまざまなコマンドレットやモジュールを提供しています。GPU情報を取得するためには、主にWMI (Windows Management Instrumentation) を活用します。

WMIを使用した基本的な情報取得


PowerShellでは、Get-WmiObject または新しいコマンドレット Get-CimInstance を使用して、GPUに関する情報を取得できます。以下は基本的なコマンド例です:

Get-CimInstance -Namespace "root\CIMV2" -ClassName "Win32_VideoController"

このコマンドを実行すると、システムにインストールされているGPUの名前、メモリ容量、ドライバーバージョンなどの基本情報が表示されます。

取得できる主な情報


Win32_VideoControllerクラスから取得できる主なプロパティは以下の通りです:

  • Name: GPUの名前
  • AdapterRAM: GPUのメモリ容量
  • DriverVersion: GPUドライバーのバージョン
  • VideoProcessor: ビデオプロセッサの名前

簡単なスクリプト例


以下のスクリプトは、GPUの名前とメモリ容量を取得して表示します:

$gpuInfo = Get-CimInstance -ClassName Win32_VideoController
foreach ($gpu in $gpuInfo) {
    Write-Output "GPU Name: $($gpu.Name)"
    Write-Output "Memory: $([math]::Round($gpu.AdapterRAM / 1GB, 2)) GB"
}

このスクリプトを実行することで、システムに接続されているすべてのGPUの名前とメモリ情報がわかりやすく出力されます。

PowerShellでの利便性


PowerShellを活用することで、Windows環境でのGPU情報の取得が簡単に行えるだけでなく、スクリプトによる自動化やデータの加工も容易に実現できます。この基礎をもとに、さらに詳細な情報を取得する方法や監視スクリプトの作成へと進んでいきます。

NVIDIA GPU情報の取得方法


NVIDIA製GPUの情報を取得するためには、標準のPowerShellコマンドに加えて、NVIDIAが提供するツールやAPIを利用すると、より詳細なデータが得られます。

基本情報の取得


PowerShellのGet-CimInstanceコマンドを使用することで、NVIDIA GPUに関する基本情報を取得できます。以下はその例です:

Get-CimInstance -ClassName Win32_VideoController | Where-Object { $_.Name -like "*NVIDIA*" }

このコマンドは、システム内のすべてのGPU情報の中から「NVIDIA」という名前を含むものをフィルタリングします。これにより、NVIDIA製GPUに限定した情報を表示できます。

NVIDIA-SMIを活用した詳細情報の取得


NVIDIAが提供するツール「NVIDIA System Management Interface(NVIDIA-SMI)」を利用すると、GPUの使用率や温度など、詳細な情報を取得できます。このツールは、NVIDIAのドライバーをインストールすることで利用可能です。

以下はNVIDIA-SMIを使用して情報を取得するコマンド例です:

& "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe" --query-gpu=name,memory.total,memory.used,utilization.gpu,temperature.gpu --format=csv

このコマンドは、GPUの名前、総メモリ、使用中のメモリ、GPU使用率、GPU温度をCSV形式で出力します。

PowerShellでのNVIDIA-SMI連携スクリプト例


以下のスクリプトは、NVIDIA-SMIを呼び出し、その出力をPowerShellで処理して見やすく表示します:

$nvidiaSmiPath = "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
$output = & $nvidiaSmiPath --query-gpu=name,memory.total,memory.used,utilization.gpu,temperature.gpu --format=csv,noheader

$output -split "`n" | ForEach-Object {
    $fields = $_ -split ","
    Write-Output "GPU Name: $($fields[0])"
    Write-Output "Total Memory: $($fields[1])"
    Write-Output "Used Memory: $($fields[2])"
    Write-Output "GPU Utilization: $($fields[3])"
    Write-Output "GPU Temperature: $($fields[4])"
    Write-Output "`n"
}

取得可能な主な情報


NVIDIA-SMIを利用すると以下の情報が取得可能です:

  • GPU名
  • GPUメモリ(総量および使用中)
  • GPU使用率(%)
  • GPU温度(摂氏)
  • 電力消費量

監視のポイント


NVIDIA GPUの負荷監視では、以下の値に注目することで、システムの安定性を向上させることができます:

  • 使用率が常に高い場合、マイニング負荷が過剰である可能性があります。
  • 温度が高い場合、冷却システムの強化が必要です。

これらの情報を定期的に取得し、監視することで、効率的なマイニング運用が可能となります。

AMD GPU情報の取得方法


AMD製GPUの情報を取得する際には、PowerShellの基本的なコマンドに加えて、AMDが提供する専用ツールを利用すると詳細な情報を取得できます。本セクションでは、標準的な取得方法とAMDツールを活用した手法を紹介します。

基本情報の取得


PowerShellでAMD製GPUに関する基本情報を取得するには、Get-CimInstanceコマンドを使用します。以下はその例です:

Get-CimInstance -ClassName Win32_VideoController | Where-Object { $_.Name -like "*AMD*" }

このコマンドは、システム内のすべてのGPU情報から「AMD」という名前を含むものをフィルタリングします。これにより、AMD製GPUの基本的な情報を表示します。

AMDのRadeon Softwareを利用した詳細情報の取得


AMDは「Radeon Software」や「Radeon Adrenalin」などのツールを提供しており、それらを使用することで詳細なGPUデータを取得できます。特に、Radeon SoftwareのCLI(コマンドラインインターフェース)を使用すると、GPUの状態をPowerShellで効率的に確認できます。

以下はCLIを利用してGPU情報を取得するコマンドの例です:

& "C:\Program Files\AMD\Radeon Software\CLI.exe" --get-gpu-info

このコマンドは、AMD GPUに関する詳細な情報(使用率、温度、クロック速度など)を取得します。

PowerShellスクリプト例:AMD GPUの詳細情報を取得


以下のスクリプトは、AMD CLIツールを使用してGPU情報を取得し、PowerShellで整形して出力します:

$amdCliPath = "C:\Program Files\AMD\Radeon Software\CLI.exe"
$output = & $amdCliPath --get-gpu-info

$output -split "`n" | ForEach-Object {
    if ($_ -match "^(.*):\s*(.*)$") {
        $key = $matches[1].Trim()
        $value = $matches[2].Trim()
        Write-Output "$key: $value"
    }
}

取得可能な主な情報


AMDのCLIツールを利用すると、以下の情報を取得できます:

  • GPU名
  • メモリ使用量(総量および使用中)
  • GPU温度(摂氏)
  • GPU使用率(%)
  • ファン速度およびクロック速度

監視のポイント


AMD GPUの監視において注目すべきポイントは以下の通りです:

  • メモリ使用量:メモリ不足がないか確認します。
  • 温度:特に80℃を超える場合、冷却の見直しが必要です。
  • GPU使用率:負荷が高すぎる場合、作業内容の最適化を検討します。

注意点


AMDのCLIツールや詳細情報取得の機能は、ドライバーのバージョンによって動作が異なる場合があります。最新のドライバーとソフトウェアを使用することで、最適な結果が得られます。

これらの手法を活用することで、AMD GPUのパフォーマンスを効果的に監視し、運用の最適化が可能になります。

GPU負荷を監視するスクリプトの作成例


PowerShellを使用して、GPU負荷を定期的に監視し、リアルタイムで状況を把握するスクリプトを作成します。このスクリプトでは、NVIDIA-SMIやAMD CLIツールから取得した情報を加工して表示します。

基本構造の説明


以下のスクリプトは、NVIDIAおよびAMDのGPU負荷を監視するための基本的な構造を持っています。特定のGPU情報を取得し、それを整理してリアルタイムで出力します。

スクリプト例:GPU負荷監視

# 定義: ツールのパスを設定
$nvidiaSmiPath = "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
$amdCliPath = "C:\Program Files\AMD\Radeon Software\CLI.exe"

# 監視ループの開始
while ($true) {
    Write-Output "==== GPU Monitoring Start ===="
    Write-Output "$(Get-Date)"

    # NVIDIA GPU情報の取得
    if (Test-Path $nvidiaSmiPath) {
        Write-Output "NVIDIA GPU Info:"
        $nvidiaOutput = & $nvidiaSmiPath --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader
        $nvidiaOutput -split "`n" | ForEach-Object {
            $fields = $_ -split ","
            Write-Output "GPU Name: $($fields[0])"
            Write-Output "Used Memory: $($fields[1]) / $($fields[2]) MB"
            Write-Output "GPU Utilization: $($fields[3])%"
            Write-Output "GPU Temperature: $($fields[4])°C"
            Write-Output ""
        }
    } else {
        Write-Output "NVIDIA-SMI not found."
    }

    # AMD GPU情報の取得
    if (Test-Path $amdCliPath) {
        Write-Output "AMD GPU Info:"
        $amdOutput = & $amdCliPath --get-gpu-info
        $amdOutput -split "`n" | ForEach-Object {
            if ($_ -match "^(.*):\s*(.*)$") {
                $key = $matches[1].Trim()
                $value = $matches[2].Trim()
                Write-Output "$key: $value"
            }
        }
    } else {
        Write-Output "AMD CLI tool not found."
    }

    # 5秒待機
    Start-Sleep -Seconds 5

    # 画面クリア
    Clear-Host
}

スクリプトのポイント

  1. クロスプラットフォーム対応:NVIDIA-SMIとAMD CLIを切り分け、それぞれがインストールされている環境に応じて情報を取得します。
  2. リアルタイム監視:whileループとStart-Sleepを使用して、一定間隔でGPU情報を取得します。
  3. 読みやすい出力:取得した情報を整形して、重要なデータをわかりやすく表示します。

カスタマイズ方法

  • 監視間隔:Start-Sleep -Seconds 5 の値を変更して、監視頻度を調整できます。
  • 出力方法:現在はコンソールに出力していますが、Export-CsvやOut-Fileを使用してログファイルに保存することも可能です。

応用例

  1. 異常時のアラート送信:GPU温度が特定の値(例:80℃)を超えた場合に、通知を送信する処理を追加できます。
  2. ログ保存:負荷状況をログに記録し、後で分析するための仕組みを追加できます。

このスクリプトを使えば、GPUの負荷状況をリアルタイムで監視し、安定したマイニングやシステム運用が実現できます。

スクリプトの結果を可視化する方法


GPU負荷監視スクリプトで取得したデータを可視化することで、GPUの状態をより直感的に理解しやすくなります。ここでは、PowerShellを使用してデータをグラフや表形式で表示したり、CSVファイルに保存して外部ツールで可視化する方法を紹介します。

PowerShellでデータを表形式で表示


PowerShellのFormat-Tableコマンドを使用すると、取得したデータを表形式で簡単に表示できます。以下はその例です:

$nvidiaOutput = & "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe" --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader
$data = @()

$nvidiaOutput -split "`n" | ForEach-Object {
    $fields = $_ -split ","
    $data += [pscustomobject]@{
        GPUName         = $fields[0]
        UsedMemory      = $fields[1]
        TotalMemory     = $fields[2]
        GPUUtilization  = $fields[3]
        Temperature     = $fields[4]
    }
}

$data | Format-Table -AutoSize

これにより、GPUの状態が表形式で見やすく表示されます。

グラフで可視化する方法


PowerShellのOut-GridViewを使用することで、簡易的なグラフを作成することが可能です。より高度なグラフを作成する場合、外部ライブラリ「PowerShellGraphTools」を使用することも検討してください。

以下は、グリッドビューにデータを表示する例です:

$data | Out-GridView -Title "GPU Monitoring Data"

CSVファイルに保存して外部ツールで可視化


取得したデータをCSV形式で保存し、Excelやグラフ作成ツールを使用して可視化する方法も効果的です。

$data | Export-Csv -Path "C:\GPU_Monitoring_Data.csv" -NoTypeInformation
Write-Output "データをCSVに保存しました: C:\GPU_Monitoring_Data.csv"

CSVファイルを作成した後は、以下のようなツールを使用してデータを可視化できます:

  • Microsoft Excel: グラフ作成機能を活用して、GPUの使用率や温度を折れ線グラフや棒グラフで可視化できます。
  • Power BI: 取得したデータを高度に分析し、インタラクティブなダッシュボードを作成できます。

リアルタイム可視化の応用例

  1. PowerShellで簡易ダッシュボードを作成
    以下のコードを使用してリアルタイムダッシュボードを作成できます:
while ($true) {
    Clear-Host
    $data | Format-Table -AutoSize
    Start-Sleep -Seconds 5
}
  1. 外部ツールと連携
    PowerShellスクリプトを定期実行してCSVファイルを更新し、Power BIやGrafanaと連携してリアルタイムのダッシュボードを構築します。

可視化のメリット

  • データを視覚的に分析しやすくなる。
  • 負荷や温度の異常値を迅速に検知できる。
  • チームメンバーと情報を共有する際に効果的。

これらの方法を組み合わせることで、GPU監視データをわかりやすく可視化し、システム運用をさらに効率化できます。

応用例:マイニング負荷監視とアラート設定


GPUの監視データを活用し、マイニングの効率化やシステムの安定性向上を目指します。本セクションでは、負荷の監視に基づいてアラートを設定し、異常が検知された際に通知を送信する仕組みを解説します。

異常値の設定とアラート条件


GPUの使用率や温度が特定の閾値を超えた場合、アラートをトリガーする仕組みをスクリプトに組み込むことが可能です。以下のような条件が一般的です:

  • GPU使用率が90%以上に達した場合
  • 温度が80℃を超えた場合
  • メモリ使用率が95%以上に達した場合

アラート付きスクリプト例

$nvidiaSmiPath = "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
$thresholdTemp = 80
$thresholdUtil = 90

while ($true) {
    # NVIDIA GPU情報の取得
    if (Test-Path $nvidiaSmiPath) {
        $nvidiaOutput = & $nvidiaSmiPath --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader
        $nvidiaOutput -split "`n" | ForEach-Object {
            $fields = $_ -split ","
            $gpuName = $fields[0]
            $usedMemory = $fields[1]
            $totalMemory = $fields[2]
            $gpuUtilization = [int]$fields[3].Trim('%')
            $gpuTemperature = [int]$fields[4].Trim('°C')

            Write-Output "GPU Name: $gpuName"
            Write-Output "Used Memory: $usedMemory / $totalMemory MB"
            Write-Output "GPU Utilization: $gpuUtilization%"
            Write-Output "GPU Temperature: $gpuTemperature°C"

            # アラート条件の確認
            if ($gpuUtilization -gt $thresholdUtil) {
                Write-Warning "High GPU Utilization detected: $gpuUtilization%"
            }
            if ($gpuTemperature -gt $thresholdTemp) {
                Write-Warning "High GPU Temperature detected: $gpuTemperature°C"
            }
        }
    } else {
        Write-Warning "NVIDIA-SMI tool not found."
    }

    # 5秒待機
    Start-Sleep -Seconds 5
    Clear-Host
}

アラート通知の強化


アラートをシステムログに記録したり、通知をメールやチャットツールに送信することで、異常時の対応を迅速化できます。

例:メール通知の追加

以下のスクリプトを組み込むことで、異常が検出された際にメールで通知を送信できます:

# メール送信設定
$smtpServer = "smtp.example.com"
$smtpPort = 587
$smtpUser = "[email protected]"
$smtpPass = "password"
$recipient = "[email protected]"
$subject = "GPU Alert"

if ($gpuTemperature -gt $thresholdTemp) {
    $body = "High GPU Temperature detected on $gpuName. Current Temperature: $gpuTemperature°C"
    Send-MailMessage -From $smtpUser -To $recipient -Subject $subject -Body $body -SmtpServer $smtpServer -Port $smtpPort -Credential (New-Object PSCredential $smtpUser, (ConvertTo-SecureString $smtpPass -AsPlainText -Force))
}

応用例

  • マイニング負荷の最適化:GPU使用率をリアルタイムで監視し、過負荷の場合に作業量を調整するスクリプトを追加できます。
  • 異常検知後の自動停止:GPUが過熱した場合、自動的にマイニングプログラムを停止することで、ハードウェアを保護します。

例:マイニング停止スクリプト

if ($gpuTemperature -gt $thresholdTemp) {
    Stop-Process -Name "mining_program" -Force
    Write-Output "Mining program stopped due to high temperature."
}

可視化と通知の統合


監視データを可視化する仕組みとアラートを組み合わせることで、運用管理の効率が向上します。以下のツールと統合が可能です:

  • Grafana: GPU監視データをダッシュボード化してリアルタイムでモニタリング
  • SlackやMicrosoft Teams: 異常検知時の通知送信

これらの仕組みを導入することで、GPUの安定した運用と効率的なマイニング管理が実現できます。

まとめ


本記事では、PowerShellを活用してNVIDIAおよびAMDのGPU情報を取得し、マイニング負荷を効率的に監視する方法を解説しました。基礎的な情報取得から詳細な監視スクリプトの作成、さらに可視化やアラート設定の応用例までを網羅しました。

適切なGPU監視は、マイニングの効率向上やハードウェアの寿命延長に貢献します。スクリプトをカスタマイズし、自動化や通知機能を追加することで、安定した運用を実現できます。ぜひこの記事を参考に、GPU監視を効果的に活用してみてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次