Intel Arc ProのGPUモニタリング(Ubuntu編)

Ubuntu
スポンサーリンク

Windowsなら「Intel Arc Control」がありますが、UbuntuだとどうやってGPU温度やファン回転数を調べるのでしょう?
以前この記事では、GPUのモニタリングに苦労するという内容を書きました。
でも、VRAMの使用状況やGPU温度など調べる方法を見つけました(B500シリーズで動くかは不明)。

今回は

  • Ubuntuのファイルシステムから調べる方法
  • xpu-managerから調べる方法

この2つを紹介します。
それではいってみましょう。

Ubuntuのファイルシステムから調べる

実は以前のLinuxカーネルをビルドしてインストールする記事の一番下の方で紹介したことがあります。
ただ、この時はVRAMの使用状況まではわかりませんでした。
今回はそれを含めて紹介します。

#!/bin/bash

# 以下のコマンドを実行してからこのスクリプトは使えるようになる。
#  sudo chmod a+r /sys/kernel/debug/dri/0000:03:00.0/vram0_mm
#このスクリプトを実行する時はsudoをつける。

VRAM_MM="/sys/kernel/debug/dri/0000:03:00.0/vram0_mm"

# vram0_mm が読めるかチェック
if [ ! -r "$VRAM_MM" ]; then
    echo "ERROR: $VRAM_MM が読めません(権限 or パスを確認してください)"
    exit 1
fi

# ここで xe の hwmon を自動検出
HWMON_XE=""
for d in /sys/class/hwmon/hwmon*; do
    if [ -r "$d/name" ] && [ "$(cat "$d/name")" = "xe" ]; then
        HWMON_XE="$(basename "$d")"
        break
    fi
done

if [ -z "$HWMON_XE" ]; then
    echo "Intel Arc (xe) の hwmon デバイスが見つかりませんでした。" >&2
    exit 1
fi

#k10tempのhwmonを自動検出
HWMON_k10=""
for d in /sys/class/hwmon/hwmon*; do
    if [ -r "$d/name" ] && [ "$(cat "$d/name")" = "k10temp" ]; then
        HWMON_k10="$(basename "$d")"
        break
    fi
done

if [ -z "$HWMON_k10" ]; then
    echo "ryzenの hwmon デバイスが見つかりませんでした。" >&2
    exit 1
fi

# VRAM総容量取得
# 行の例: "  size: 25669140480" → 2列目($2)が数値
size_bytes=$(awk '/^[[:space:]]*size:/ {print $2; exit}' "$VRAM_MM")

if [ -z "$size_bytes" ]; then
    echo "ERROR: size_bytes が取得できませんでした"
    exit 1
fi

vram_total_mb=$(echo "scale=0; $size_bytes / 1024 / 1024" | bc)

# GPUの初期エネルギーを取得(energy1に統一)
prev_energy=$(cat /sys/class/hwmon/${HWMON_XE}//energy1_input)

while true; do
    # CPU温度の取得
    temp=$(cat /sys/class/hwmon/${HWMON_k10}/temp1_input)
    temp_c=$((temp / 1000)).$((temp % 1000))  # 温度を°Cに変換
    
    # GPU温度の取得
    #gpu_temp=$(cat /sys/class/hwmon/${HWMON_XE}/temp2_input)
    #temp_g=$((gpu_temp / 1000)).$((gpu_temp % 1000))  # 温度を°Cに変換

    # VRAM温度の取得
    #vram_temp=$(cat /sys/class/hwmon/${HWMON_XE}/temp3_input)
    #temp_v=$((vram_temp / 1000)).$((vram_temp % 1000))  # 温度を°Cに変換
        
    # fan1の取得
    fan1=$(cat /sys/class/hwmon/${HWMON_XE}/fan1_input)
    
    # GPU消費電力の計算(energy1の差分)
    current_energy=$(cat /sys/class/hwmon/${HWMON_XE}/energy1_input)
    power=$(echo "scale=2; ($current_energy - $prev_energy) / 1000000" | bc)
    prev_energy=$current_energy  # 次のループのために現在のエネルギーを保存

    # VRAM使用量の取得
    # 行の例: "  usage: 793710592" → 2列目($2)が数値
    usage_bytes=$(awk '/^[[:space:]]*usage:/ {print $2; exit}' "$VRAM_MM")

    if [ -n "$usage_bytes" ]; then
        vram_used_mb=$(echo "scale=2; $usage_bytes / 1024 / 1024" | bc)
        vram_line="GPU VRAM: ${vram_used_mb}/${vram_total_mb} MiB"
    else
        vram_line="GPU VRAM: N/A"
    fi

    # 表示のクリアと更新
    tput cup 0 0  # カーソルを先頭に移動
    tput ed       # 画面をクリア
    echo "CPU temp:  ${temp_c}°C"
    echo "GPU power: ${power} W"
    #echo "GPU temp:  ${temp_g}°C"
    #echo "VRAM temp: ${temp_v}°C"
    echo "GPU fan:   ${fan1} RPM"
    echo "${vram_line}"

    sleep 1
done

まずは、自分が使っているスクリプトをそのまま書きました。
こういったスクリプトの基本的な使い方は
コマンドを使ってみよう!
アプリをまとめてインストールする
の記事を参考にしてください。

このスクリプトを実行する時は「sudo」をつけて下さい。
「/sys/kernel/debug/dri/0000:03:00.0/vram0_mm」のファイルにアクセスするためには権限が必要になります。

それでも「ERROR: $VRAM_MM が読めません(権限 or パスを確認してください)」となる場合は

sudo chmod a+r /sys/kernel/debug/dri/0000:03:00.0/vram0_mm

でこのファイルを読めるようにしてあげてください。
うまくいくと、

# GPU温度の取得
# VRAM温度の取得
については、2025/11/30のUbuntu24.04.3LTSのLinuxカーネル「6.14」ではこの2つのファイルは存在しませんので「#」でコメントアウトしています。
今後のアップデートで対応したときに「#」をはずしてあげて下さい。

xpu-managerから調べる

実はこちらの方がスマートです。
sudoも必要ありません。スクリプト上にもありません。
2025/11/30の時点でGPUとVRAMの温度も検出できています。

ただし事前にxpu-managerのインストールが必要になります。

赤丸をクリック・・・、あ!アップデートされてる!!

というわけで自分の環境では以前のxpu-managerがインストールされているので一度アンインストールします。
初めてインストールする人はこの操作は必要ありません。

sudo apt remove xpumanager

でアンインストールします。
次は新しいバージョンをインストールします。

sudo apt install ./xpumanager_1.3.4_20251105.132841.7410e65e.u24.04_amd64.deb 

でインストールしていきます。

そうしたら、以下のスクリプトを適当なテキストファイルにペーストして実行です。

#!/bin/bash

DEVICE_ID=0
INTERVAL=1
MAX_VRAM=24480

# xe の hwmon を自動検出
HWMON_XE=""
for d in /sys/class/hwmon/hwmon*; do
    if [ -r "$d/name" ] && [ "$(cat "$d/name")" = "xe" ]; then
        HWMON_XE="$(basename "$d")"
        break
    fi
done

if [ -z "$HWMON_XE" ]; then
    echo "Intel Arc (xe) の hwmon デバイスが見つかりませんでした。" >&2
    exit 1
fi

#k10tempのhwmonを自動検出
HWMON_k10=""
for d in /sys/class/hwmon/hwmon*; do
    if [ -r "$d/name" ] && [ "$(cat "$d/name")" = "k10temp" ]; then
        HWMON_k10="$(basename "$d")"
        break
    fi
done

if [ -z "$HWMON_k10" ]; then
    echo "ryzenの hwmon デバイスが見つかりませんでした。" >&2
    exit 1
fi

gnome-terminal --geometry=20x8 -- bash -c "
while true; do
    #echo -n \"\$(date '+%H:%M:%S')  \"

    OUTPUT=\$(xpumcli stats -d ${DEVICE_ID})
    
    # CPU温度の取得
    temp=\$(cat /sys/class/hwmon/${HWMON_k10}/temp1_input)
    temp_c=\$((temp / 1000)).\$((temp % 1000))  # 温度を°Cに変換
    
    # VRAMの使用量の取得
    USED=\$(echo \"\$OUTPUT\" | grep 'GPU Memory Used' | awk -F 'current:' '{print \$2}' | awk '{print \$1}')
    
    # ARCの温度の取得
    core_temp=\$(echo \"\$OUTPUT\" | grep 'GPU Core Temperature' | awk -F 'current:' '{print \$2}' | awk '{print \$1}')
    vram_temp=\$(echo \"\$OUTPUT\" | grep 'GPU Memory Temperature' | awk -F 'current:' '{print \$2}' | awk '{print \$1}')
     
    # ARCの電力の取得
    power=\$(echo \"\$OUTPUT\" | grep 'GPU Power' | awk -F 'current:' '{print \$2}' | awk '{print \$1}')
     
    # ARCの周波数の取得
    frequency=\$(echo \"\$OUTPUT\" | grep 'GPU Frequency' | awk -F 'current:' '{print \$2}' | awk '{print \$1}')
     
    # fan1の取得
    fan1=\$(cat /sys/class/hwmon/${HWMON_XE}/fan1_input)
        
    # 表示のクリアと更新
    tput cup 0 0  # カーソルを先頭に移動
    tput ed       # 画面をクリア
    echo \"CPU temp : \${temp_c}°C\"
    echo \"frequency: \${frequency} MHz\"
    echo \"GPU  temp: \${core_temp} ℃\"
    echo \"vram temp: \${vram_temp} ℃\"
    echo \"GPU power: \${power} W\"
    echo \"GPU fan  : \${fan1} RPM\"
    echo \"vram used: \${USED}/${MAX_VRAM} MiB\"
    sleep ${INTERVAL}
done
exec bash"

自分はファイル名を「xpu_manager.sh」としていますので、
実行する前に

chmod +x ./xpu_manager.sh

で実行権限を付与してから

./xpu_manager.sh

で実行します。うまくいくと

最後に

VRAMの使用量がわかるようになったのは大きいです。
今まで生成AIを実行中に
「どこまでが限界なんだろう?」
ってトライアンドエラーで探りながら作業していました。

ただし、「Arc B570やB580」はサポートリストには無いようです。
動くかどうかは、やってみないとわかりません。
動かなかった場合、「Ubuntuのファイルシステムから調べる」方法しかありません。
その場合でもVRAM使用量まで見れるかはわからないです。
もし、動いたよ!って人がいたら報告してくれるとうれしいです。

今回は以上です。

コメント

タイトルとURLをコピーしました