iimuz
1/24/2018 - 10:46 AM

nvidia-smi_proc.ps1

<#
.SYNOPSIS
GPUログを取得する。

.DESCRIPTION
アプリケーション実行において観測が必要な最低限のログを取得します。

.PARAMETER duration

データ取得間隔を記載します。(単位は秒)

.PARAMETER out

ファイル出力する場合のファイルパスを記載します。
設定されない場合は、コンソールに出力します。

.INPUTS
None. This script does not correspond.

.OUTPUTS
System.Int32
If success, this script returns 0, otherwise -1.

.EXAMPLE
.\nvidia-smi_proc.ps1

ログデータをコンソールに出力します

.EXAMPLE
.\nvidia-smi_proc.ps1 -out hoge.csv

データをhoge.csvに出力します。
#>

[CmdletBinding(
  SupportsShouldProcess=$true,
  ConfirmImpact="Medium"
)]
Param(
  $duration = 1,
  $out = ''
)

$EXE = "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
$LOG_ITEM = @(
  'timestamp',
  'gpu_bus_id',
  'gpu_name',
  'utilization.gpu',
  'utilization.memory',
  'memory.total',
  'memory.free',
  'memory.used'
)

$outfile = @()
if ($out -Ne '') {
  if ((Test-Path $out) -Eq $True) {
    $overwrite = Read-Host -Prompt "Output file exist: ${out}. overwrite?(y/n)"
    if ($overwrite -Ne 'y') {
        exit 0
    }
  }

  $outfile = @('-f', $out)
}

$LOG_QUERY = "--query-gpu=$($LOG_ITEM -Join ',')"
$LOG_FORMAT = "--format=csv,nounits"
$LOG_DURATION = @('-l', ${duration})
& $EXE ${LOG_QUERY} ${LOG_FORMAT} ${LOG_DURATION} ${outfile}

exit 0