CPUに内蔵されているGPUを簡単に使ってみる

投稿者: | 9月 5, 2025

うちにはどうでもいい家訓?があって、「グラボは5000円まで」というのがある。AGPバス全盛の時は、そんな値段のグラフィックカードでも普通に使えて困らなかった。なので、昔からグラフィックカードなんて投資する習慣がなかった。しかし、今やAI全盛の時代。グラフィックカードではなくて、GPUが必須になる。しかし、Nvidiaのグラフィックカードなんて持っていない。ふと気がついたのだが、Intel CPUって今やGPU内蔵だから使えるのではないかと。この先、アップしていくが、結論からすると、GPUというパーツが付いているだけで、ゴミに近いことが後で判明。

見回してみると、NUCやMini PC、NASにまでiGPUが付いているから使ってみようというのが、今回のブログ。

 

閑話休題

 

とはいえ、まずは作ったり消したりするので、仮想マシンにGPUをパススルーしてつかってみようと思う。手元のESXでGPUをパススルーしてみた。物理サーバでやる人はもちろん不要。

ESXのGPUのパススルーの方法

以下でグラフィックカードを指定して、Toggle passthroughをクリック

以下のようにアクティブになる。

また、SSHでESXにログインをして、以下を実行しておかないと、ESX再起動時にPCIパススルーが無効になってしまう。

esxcli system settings kernel set -s vga -v FALSE

VGAは、仮想マシンに持って行かれてしまうので、ESXのコンソールで立ち上がっているDCUIを使いたい場合は、SSHでログインをして、

TERM=xterm
dcui

とするとSSHの画面で利用可能になる。

 

仮想マシンでのPCIパススルーの設定

注意:この設定をすると

  • VM間でGPUの共有はできない。つまりVM1つでしか利用できない。
  • Nestの仮想化は使えない。よって、仮想マシン内でKVMとか、Hyper-Vが使えなくなる。
  • スナップショットが使えない。

となる。

普段使っているテンプレートでVMを建てて、そこで、一度、スナップショットを作成しておき、起動する前にPCIパススルーを設定しておき、後でスナップショットを戻した場合、PCIパススルーが外れた状態でスナップショットが戻る。スナップショットから起動するときに再度PCIパススルーを指定する必要があるが、検証が楽になる。

 

PCIデバイスを追加

CPUの仮想化を無効にしないと保存ができない。

 

Ubuntu Server 24.04を使って実際にPCIパススルーをしてみた。

起動して、PCIパススルーを確認してみる。

lspci -tvnn

以下、PCIパススルーされていないVM

# lspci -tvnn

-+-[0000:00]-+-00.0 Intel Corporation 440BX/ZX/DX – 82443BX/ZX/DX Host bridge [8086:7190]

 | +-01.0-[01]—

 | +-07.0 Intel Corporation 82371AB/EB/MB PIIX4 ISA [8086:7110]

 | +-07.1 Intel Corporation 82371AB/EB/MB PIIX4 IDE [8086:7111]

 | +-07.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI [8086:7113]

 | +-07.7 VMware Virtual Machine Communication Interface [15ad:0740]

 | \-0f.0 VMware SVGA II Adapter [15ad:0405]

 \-[0000:02]-+-00.0 VMware PVSCSI SCSI Controller [15ad:07c0]

             +-01.0 VMware VMXNET3 Ethernet Controller [15ad:07b0]

             \-02.0 VMware SATA AHCI controller [15ad:07e0]

以下、PCIパススルーされているVM

# lspci -tvnn

-+-[0000:00]-+-00.0 Intel Corporation 440BX/ZX/DX – 82443BX/ZX/DX Host bridge [8086:7190]

| +-01.0-[01]—

| +-07.0 Intel Corporation 82371AB/EB/MB PIIX4 ISA [8086:7110]

| +-07.1 Intel Corporation 82371AB/EB/MB PIIX4 IDE [8086:7111]

| +-07.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI [8086:7113]

| +-07.7 VMware Virtual Machine Communication Interface [15ad:0740]

| -0f.0 VMware SVGA II Adapter [15ad:0405]

-[0000:02]-+-00.0 VMware PVSCSI SCSI Controller [15ad:07c0]

+-01.0 VMware VMXNET3 Ethernet Controller [15ad:07b0]

+-02.0 VMware SATA AHCI controller [15ad:07e0]

-03.0 Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49]

 

ls -l /dev/dri

total 0

drwxr-xr-x 2 root root 120 Sep 4 14:05 by-path

crw-rw—- 1 root video 226, 0 Sep 4 14:05 card0

crw-rw—- 1 root video 226, 1 Sep 4 14:05 card1

crw-rw—- 1 root render 226, 128 Sep 4 14:05 renderD128

crw-rw—- 1 root render 226, 129 Sep 4 14:05 renderD129

 

Intel_gpu_topでGPUの動きを確認できるようにする。

sudo apt install -y intel-gpu-tools

以後別のログインセッションで、intel_gpu_topを実行して表示をしておく。

sudo intel_gpu_top

GPUが利用できるようになったのが確認できたので、GPUを使うアプリケーション hashcatでテストをしてみる

 

intel-level-zero-gpuのインストール

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:kobuk-team/intel-graphics
sudo apt update
sudo apt-get install -y libze-intel-gpu1 intel-gsc intel-opencl-icd clinfo libze1

参考:少々古いバージョンであれば、Ubuntuの標準レポジトリから実はインストールが可能

sudo apt update
sudo apt install -y ocl-icd-libopencl1 intel-opencl-icd clinfo libze1
ocl-icd-opencl-dev

 CPU用の OpenCL ICD(runtime) CPU OpenCL runtimeを入れる。

sudo apt install -y pocl-opencl-icd

動作確認

clinfo | egrep 'Platform Name|Device Name|Device Type’

– Platform Name に “Intel”、Device Type: GPU が出ればOK。

root@rlug-dev:~# clinfo | egrep ‘Platform Name|Device Name|Device Type’

  Platform Name Intel(R) OpenCL Graphics

  Platform Name Portable Computing Language

  Platform Name Intel(R) OpenCL Graphics

  Device Name Intel(R) Iris(R) Xe Graphics

  Device Type GPU

  Platform Name Portable Computing Language

  Device Name cpu-skylake-avx512-11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz

  Device Type CPU

    Platform Name Intel(R) OpenCL Graphics

    Device Name Intel(R) Iris(R) Xe Graphics

    Platform Name Intel(R) OpenCL Graphics

    Device Name Intel(R) Iris(R) Xe Graphics

    Platform Name Intel(R) OpenCL Graphics

    Device Name Intel(R) Iris(R) Xe Graphics

 

hashcat のインストール

古いバージョン(6.2.6+ds1-1build2)はsudo apt -y install hashcatでインストールできるが最新版をインストールする。

wget https://github.com/hashcat/hashcat/releases/download/v7.1.2/hashcat-7.1.2.7z
sudo apt install -y p7zip-full
7z x hashcat-7.1.2.7z
cd hashcat-7.1.2
sudo cp hashcat.bin /usr/local/bin/hashcat
sudo mkdir -p /usr/local/share/hashcat
sudo cp -r ~/hashcat-7.1.2/modules /usr/local/share/hashcat/
sudo cp -r ~/hashcat-7.1.2/OpenCL /usr/local/share/hashcat/
sudo cp ~/hashcat-7.1.2/hashcat.hcstat2 /usr/local/share/hashcat/
cd
hashcat —version

 

hashcat が Intel GPU を認識するか確認

hashcat -I

 

CPUとGPUが見えているはず。

hashcat (v7.1.2) starting in backend information mode

 

OpenCL Info:

============

 

OpenCL Platform ID #1

  Vendor..: Intel(R) Corporation

  Name….: Intel(R) OpenCL Graphics

  Version.: OpenCL 3.0

 

  Backend Device ID #01

    Type………..: GPU

    Vendor.ID……: 8

    Vendor………: Intel(R) Corporation

    Name………..: Intel(R) Iris(R) Xe Graphics

    Version……..: OpenCL 3.0 NEO

    Processor(s)…: 16

    Preferred.Thrd.: 7

    Clock……….: 1300

    Memory.Total…: 29717 MB (limited to 2047 MB allocatable in one block)

    Memory.Free….: 14858 MB

    Memory.Unified.: 1

    Local.Memory…: 64 KB

    OpenCL.Version.: OpenCL C 1.2

    Driver.Version.: 25.31.34666

 

OpenCL Platform ID #2

  Vendor..: The pocl project

  Name….: Portable Computing Language

  Version.: OpenCL 3.0 PoCL 5.0+debian Linux, None+Asserts, RELOC, SPIR, LLVM 16.0.6, SLEEF, DISTRO, POCL_DEBUG

 

  Backend Device ID #02

    Type………..: CPU

    Vendor.ID……: 128

    Vendor………: GenuineIntel

    Name………..: cpu-skylake-avx512-11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz

    Version……..: OpenCL 3.0 PoCL HSTR: cpu-x86_64-pc-linux-gnu-skylake-avx512

    Processor(s)…: 8

    Preferred.Thrd.: 1

    Clock……….: 2803

    Memory.Total…: 30045 MB (limited to 4096 MB allocatable in one block)

    Memory.Free….: 15022 MB

    Memory.Unified.: 1

    Local.Memory…: 1280 KB

    OpenCL.Version.: OpenCL C 1.2 PoCL

    Driver.Version.: 5.0+debian

 

hashcat でGPUとCPUで動作比較

デモ 1:単純なベンチマーク

以下のコマンド例は GPU が Device #01 の前提です(番号が違う場合は -d を合わせて変更)

1) GPU ベンチマーク(Optimized Kernel・高ワークロード)

hashcat -b -m 0 -O -w 4 -D 2 -d 1

Benchmark relevant options:

===========================

* –backend-devices=1

* –backend-devices-virtmulti=1

* –backend-devices-virthost=1

* –opencl-device-types=2

* –optimized-kernel-enable

* –workload-profile=4

 

—————————

* Hash-Mode 0 (MD5)

—————————

 

Speed.#01……..: 2967.1 MH/s (446.83ms) @ Accel:160 Loops:1024 Thr:511 Vec:1

 

Started: Thu Sep 4 14:51:23 2025

Stopped: Thu Sep 4 14:51:44 2025

– 見るポイント:Speed.#01(MH/s)。端末Bの intel_gpu_top で EU/Cores 使用率や周波数が上がるのを確認。

 

2) CPU ベンチマーク(比較用)

hashcat -b -m 0 -O -w 3 -D 1

Benchmark relevant options:

===========================

* –backend-devices-virtmulti=1

* –backend-devices-virthost=1

* –opencl-device-types=1

* –optimized-kernel-enable

* –workload-profile=3

 

—————————

* Hash-Mode 0 (MD5)

—————————

 

Speed.#02……..: 1647.2 MH/s (4.81ms) @ Accel:1024 Loops:1024 Thr:1 Vec:16

 

Started: Thu Sep 4 14:53:18 2025

Stopped: Thu Sep 4 14:53:45 2025

– 見るポイント:Speed.#01(MH/s)。通常は GPU ≫ CPU。intel_gpu_top はほぼ動かない(CPU実行だから)。

 

デモ 2:GPU と CPU の違いを見る(実行編)

1) サンプルハッシュ(MD5の “password”)を用意

echo '5f4dcc3b5aa765d61d8327deb882cf99' > hash.txt

2) 簡易ワードリストを用意(最小でOK)

printf "password\n123456\nqwerty\nletmein\nwelcome\n" > wordlist.txt
cat wordlist.txt

password

123456

qwerty

letmein

welcome

 

3) GPU:マスク攻撃(短時間)

hashcat -m 0 -a 3 -O -w 4 -D 2 -d 1 \
--runtime 10 --potfile-disable \
  hash.txt '?l?l?l?l?l?l?l?l’

Session……….: hashcat

Status………..: Cracked

Hash.Mode……..: 0 (MD5)

Hash.Target……: 5f4dcc3b5aa765d61d8327deb882cf99

Time.Started…..: Thu Sep 4 14:56:39 2025 (2 secs)

Time.Estimated…: Thu Sep 4 14:56:41 2025 (0 secs; Runtime limited: 8 secs)

Kernel.Feature…: Optimized Kernel (password length 0-55 bytes)

Guess.Mask…….: ?l?l?l?l?l?l?l?l [8]

Guess.Queue……: 1/1 (100.00%)

Speed.#01……..: 2911.0 MH/s (446.88ms) @ Accel:160 Loops:1024 Thr:511 Vec:1

Recovered……..: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)

Progress………: 4018667520/208827064576 (1.92%)

Rejected………: 0/4018667520 (0.00%)

Restore.Point….: 0/11881376 (0.00%)

Restore.Sub.#01..: Salt:0 Amplifier:2048-3072 Iteration:0-1024

Candidate.Engine.: Device Generator

Candidates.#01…: oroerane -> bctzeije

Hardware.Mon.#01.: N/A

– 見るポイント:Speed.#01、Accel/Loops/Thr/Vec、進捗率、端末Bの intel_gpu_top の変化。

 

3) CPU:マスク攻撃(短時間・比較)

hashcat -m 0 -a 3 -O -w 3 -D 1 \
--runtime 10 --potfile-disable \
  hash.txt '?l?l?l?l?l?l?l?l’

Session……….: hashcat

Status………..: Cracked

Hash.Mode……..: 0 (MD5)

Hash.Target……: 5f4dcc3b5aa765d61d8327deb882cf99

Time.Started…..: Thu Sep 4 14:57:18 2025 (1 sec)

Time.Estimated…: Thu Sep 4 14:57:19 2025 (0 secs; Runtime limited: 9 secs)

Kernel.Feature…: Optimized Kernel (password length 0-55 bytes)

Guess.Mask…….: ?l?l?l?l?l?l?l?l [8]

Guess.Queue……: 1/1 (100.00%)

Speed.#02……..: 1601.5 MH/s (4.73ms) @ Accel:1024 Loops:1024 Thr:1 Vec:16

Recovered……..: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)

Progress………: 313131008/208827064576 (0.15%)

Rejected………: 0/313131008 (0.00%)

Restore.Point….: 16384/11881376 (0.14%)

Restore.Sub.#02..: Salt:0 Amplifier:2048-3072 Iteration:0-1024

Candidate.Engine.: Device Generator

Candidates.#02…: orotyxxx -> bctlbcer

Hardware.Mon.#02.: Util: 25%

– 見るポイント:GPUとの差、Speed.#01 の桁が大きく落ちること。

 

4) GPU:辞書攻撃(「password」をすぐ当てる例)

hashcat -m 0 -a 0 -O -w 4 -D 2 -d 1 \
--potfile-disable \
  hash.txt wordlist.txt

Session……….: hashcat

Status………..: Cracked

Hash.Mode……..: 0 (MD5)

Hash.Target……: 5f4dcc3b5aa765d61d8327deb882cf99

Time.Started…..: Thu Sep 4 14:58:04 2025 (0 secs)

Time.Estimated…: Thu Sep 4 14:58:04 2025 (0 secs)

Kernel.Feature…: Optimized Kernel (password length 0-31 bytes)

Guess.Base…….: File (wordlist.txt)

Guess.Queue……: 1/1 (100.00%)

Speed.#01……..: 1715 H/s (0.02ms) @ Accel:224 Loops:1 Thr:483 Vec:1

Recovered……..: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)

Progress………: 5/5 (100.00%)

Rejected………: 0/5 (0.00%)

Restore.Point….: 0/5 (0.00%)

Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1

Candidate.Engine.: Device Generator

Candidates.#01…: password -> welcome

Hardware.Mon.#01.: N/A

– 見るポイント:Recovered が即 1/1 になり、端末Bの intel_gpu_top にも短時間の負荷が出る。

 

5) CPU:辞書攻撃(比較用)

hashcat -m 0 -a 0 -O -w 3 -D 1 \
--potfile-disable \
  hash.txt wordlist.txt

Session……….: hashcat

Status………..: Cracked

Hash.Mode……..: 0 (MD5)

Hash.Target……: 5f4dcc3b5aa765d61d8327deb882cf99

Time.Started…..: Thu Sep 4 14:59:14 2025 (0 secs)

Time.Estimated…: Thu Sep 4 14:59:14 2025 (0 secs)

Kernel.Feature…: Optimized Kernel (password length 0-31 bytes)

Guess.Base…….: File (wordlist.txt)

Guess.Queue……: 1/1 (100.00%)

Speed.#02……..: 153 H/s (0.03ms) @ Accel:1024 Loops:1 Thr:1 Vec:16

Recovered……..: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)

Progress………: 5/5 (100.00%)

Rejected………: 0/5 (0.00%)

Restore.Point….: 0/5 (0.00%)

Restore.Sub.#02..: Salt:0 Amplifier:0-1 Iteration:0-1

Candidate.Engine.: Device Generator

Candidates.#02…: password -> welcome

Hardware.Mon.#02.: Util: 12%

– 見るポイント:同じく 1/1 で復元されるが、GPUの時より処理が遅い傾向。

 

これで簡単なGPUの動作確認ができた。さてなんでこんなことをしていたのか?ってAIで使ってみたかったから。ただ、先に結論を言うと、使ってはくれるがパフォーマンスはあがることはなく、逆に足枷になることに。。。

また、機材も、以前の仕事までやっていた単純な仮想化インフラ、大容量メモリを積んだだけのサーバでは意味はなく、真っ当なGPUがあることとともに、メモリもDDR5とかではないとパフォーマンスが上がらない。今まで使っていた形式のサーバは役立たずということもわかった。

コメントを残す