自分は、「期待はガスになることもある」と思っている。期待と気体(ガス)とをかけている。我ながら上手い!と思っている言葉だが、このIntel CPUに含まれているGPUは、まさしく「期待はガス」の類で、GPUと言われる機能が付いているが、グラフィックを表示することに特化していて、今はやりの演算には全然向かない。期待外れ以上にガスなので、もはや見えない。いくつかIntel GPUネタを書くが、基本的には、そういう「生あたたかい」気持ちで見ててほしい。つまり、ここで結果を書いているので、わざわざ手を動かしてまで体験はする必要はないということ。
閑話休題
ESXの仮想マシンで、GPUを露出させるのもいいが、これからはESXを使わない方向でいきたい。QNAPでも使えるLXDでGPUを露出させてみる。また、他でGPUを使っているDocker/LXDコンテナがいても共有ができる。ESXのPCIパススルーよりも勝手がいい。実際は、QNAPだけではなく、ネイティブのLXDでももちろん適用可能。
ステップ0:QNAPホストで前提確認 (すでにQNAP側で問題なく設定されているので実際の確認は不要)
ls -l /dev/dri
total 0
crw——- 1 admin administrators 226, 0 2025-09-05 15:05 card0
crw——- 1 admin administrators 226, 128 2025-09-05 15:05 renderD128
ls -l /sys/class/drm/card0/device/driver/module
lrwxrwxrwx 1 admin administrators 0 2025-09-05 07:35 /sys/class/drm/card0/device/driver/module -> ../../../../module/i915/
ステップ1:QNAP Container Stationでコンテナイメージの作成
コマンドラインで立てても構わないが、手取り早くContainer StationでLXDイメージを作成する
Ubuntu 24.04のLXDイメージを作成する。
コンテナの名前をlxd-gpu1にする。
ネットワークを追加する。NATでもBridgeでも構わない。
特権モードを有効にして、Applyをクリック
余談:本当はここでデバイスを足せるのだが、GPUは無さそうなので、ここでは何も足さない。
ステップ2:コンテナ作成されたことを確認
lxc list lxd-gpu1
+———-+———+———————–+——————————————–+———–+—————+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+———-+———+———————–+——————————————–+———–+—————+
| lxd-gpu1 | RUNNING | 192.168.10.161 (eth0) | 240d:XX:XXXX:XXXX:XXX:XXX:XXX:XXX (eth0) | CONTAINER | 0 |
+———-+———+———————–+——————————————–+———–+—————+
ステップ3:GPUの render ノードだけを安全に割当
lxc config device add lxd-gpu1 dri-render unix-char \
path=/dev/dri/renderD128 source=/dev/dri/renderD128 gid=107 mode=0660
Device dri-render added to lxd-gpu1
ステップ4:設定反映(再起動)と反映確認
lxc restart lxd-gpu1
lxc config device show lxd-gpu1
lxc exec lxd-gpu1 -- ls -l /dev/dri/
lxc config device show lxd-gpu1
dri-render:
gid: “107”
mode: “0660”
path: /dev/dri/renderD128
source: /dev/dri/renderD128
type: unix-char
eth0:
name: eth0
nictype: bridged
parent: br0
type: nic
lxc exec lxd-gpu1 — ls -l /dev/dri/
total 0
crw-rw—- 1 root rdma 226, 128 Sep 4 23:29 renderD128
ステップ5:コンテナ内で必要パッケージ導入(用途コメント付き)
lxc exec lxd-gpu1 — bash
apt update
apt -y upgrade
apt install -y --no-install-recommends ca-certificates curl gpg pciutils clinfo vainfo ocl-icd-libopencl1 ocl-icd-opencl-dev
curl -fsSL https://repositories.intel.com/graphics/intel-graphics.key \
| gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] \
https://repositories.intel.com/graphics/ubuntu jammy unified” \
> /etc/apt/sources.list.d/intel-gpu.list
apt update
apt -y upgrade
apt install -y --no-install-recommends intel-media-va-driver-non-free intel-opencl-icd intel-level-zero-gpu level-zero
apt install -y pocl-opencl-icd
ステップ6:機能テスト(X不要・DRM直指定)
export LIBVA_DRIVER_NAME=iHD
vainfo --display drm --device /dev/dri/renderD128 | head -20
libva info: VA-API version 1.20.0
libva info: User environment variable requested driver ‘iHD’
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
Trying display: drm
vainfo: VA-API version: 1.20 (libva 2.18.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics – 24.1.0 ()
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointFEI
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointFEI
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
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) HD Graphics 500
Device Type GPU
Platform Name Portable Computing Language
Device Name cpu-penryn-Intel(R) Celeron(R) CPU J3455 @ 1.50GHz
Device Type CPU
Platform Name Intel(R) OpenCL Graphics
Device Name Intel(R) HD Graphics 500
Platform Name Intel(R) OpenCL Graphics
Device Name Intel(R) HD Graphics 500
Platform Name Intel(R) OpenCL Graphics
Device Name Intel(R) HD Graphics 500
hashcatでベンチマークをとってみた
QNAP TS-453Be
GPU
Device #01: Intel(R) HD Graphics 500, 1925/3850 MB (962 MB allocatable), 6MCU
Speed.#01……..: 167.2 MH/s (429.47ms) @ Accel:189 Loops:512 Thr:128 Vec:1
CPU
Device #02: cpu-penryn-Intel(R) Celeron(R) CPU J3455 @ 1.50GHz
Speed.#02……..: 80518.3 kH/s (45.58ms) @ Accel:1024 Loops:1024 Thr:1 Vec:4
QNAP TS-464
GPU
Device #01: Intel(R) UHD Graphics, 1925/3850 MB (962 MB allocatable), 8MCU
Speed.#01……..: 154.4 MH/s (465.05ms) @ Accel:47 Loops:1024 Thr:256 Vec:1
CPU
Device #02: cpu-penryn-Intel(R) Celeron(R) N5095 @ 2.00GHz, 31025/62051 MB (8192 MB allocatable), 4MCU
Speed.#02……..: 94709.9 kH/s (42.13ms) @ Accel:1024 Loops:1024 Thr:1 Vec:4
ちなみに、第11世代 Corei7の場合( Intel NUC11pah)
GPU
Device #01: Intel(R) Iris(R) Xe Graphics, 14858/29717 MB (2047 MB allocatable), 16MCU
Speed.#01……..: 2965.6 MH/s (446.84ms) @ Accel:160 Loops:1024 Thr:511 Vec:1
CPU
Device #02: cpu-skylake-avx512-11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
Speed.#02……..: 1684.0 MH/s (4.78ms) @ Accel:1024 Loops:1024 Thr:1 Vec:16
ちなみにx2、M4 MacBook AirのGPU
GPU
Device #01: Apple M4, 10922/21845 MB, 10MCU
Speed.#01……..: 5004.5 MH/s (65.94ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1
なので、NASと第11世代で20倍近く、NASとM4で、30倍近く違う。M2あるいはUSBのNPUをつければもう少し違う結果になるのだろうが、単体だと話にならない。Intel 第11世代とM4だと2倍程度の差で収まっているが、これはベンチマークの純粋な結果だけで、LLMで使ってみるとIntel第11世代のGPUもお話にならず、CPU単体でLLMを動かしたほうがマシという結果になる。
というわけでGPUを買え、あとメモリはDDR5で最低でも64GB、できれば96GBだぁ。とだけ言っておく。