QNAPのLXCコンテナにNASのGPUを露出させる

投稿者: | 9月 5, 2025

自分は、「期待はガスになることもある」と思っている。期待と気体(ガス)とをかけている。我ながら上手い!と思っている言葉だが、この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だぁ。とだけ言っておく。

 

コメントを残す