第521回ではUbuntu 18.
コンテナから見えるデバイス
LXDで作成したコンテナからアクセスできるデバイスは,
container$ ls /dev/ console full log net pts stderr tty core fuse lxd null random stdin urandom fd initctl mqueue ptmx shm stdout zero
しかしながらコンテナの中からもホスト上に見えているデバイスにアクセスできると嬉しい場合は多々あります。LXD 2.
設定が簡単になったデバイスの中で特に便利なのが,
GPUをコンテナの中からアクセスできるようにする
LinuxにおいてユーザーランドからGPUにアクセスする際は,/dev/
」
LXDコンテナにホストのGPUデバイスを見せるには,
$ lxc config device add container mygpu gpu デバイス mygpu が container に追加されました
「container
」mygpu
」
デバイスは実行中のコンテナの中でもすぐに見えるようになります。
$ lxc exec container -- ls -l /dev/dri total 0 crw-rw---- 1 root root 226, 0 Aug 11 07:33 card0 crw-rw---- 1 root root 226, 128 Aug 11 07:33 renderD128
GPUデバイスの権限を変更する
デバイス追加時は,
$ ls -l /dev/dri/ total 0 drwxr-xr-x 2 root root 120 Aug 11 06:17 by-path crw-rw---- 1 root video 226, 0 Aug 11 06:17 card0 crw-rw---- 1 root video 226, 128 Aug 11 06:17 renderD128
一般的なユーザーはvideoグループに所属しているため
- ※1
- Ubuntu Serverの場合は,
「 sudo usermod -aG video ユーザー名
」などで明示的にvideoグループに所属させる必要があります。
これを回避する方法はいくつかありますが,
一旦デバイスを削除する $ lxc config device remove container mygpu デバイス mygpu が container から削除されました グループIDを指定して追加する $ lxc config device add cuda mygpu gpu \ gid=`getent group video | cut -d: -f3` デバイス mygpu が container に追加されました $ lxc exec cuda -- ls -l /dev/dri total 0 crw-rw---- 1 root video 226, 0 Aug 11 06:18 card0 crw-rw---- 1 root video 226, 128 Aug 11 06:18 renderD128
無事にvideoグループに所属するようになりました。
デバイス追加時はgid=グループID
」getent
コマンドでvideoグループのIDを抽出し,uid=
」
追加するGPUデバイスを指定する
複数のグラフィックカードを繋いでいたり,/dev/
以下には複数のGPUデバイスファイルが作成されます。このうち一部のGPUのみをLXDコンテナに展開したい場合は,id
オプションを指定します。
たとえばこのマシンは2つのGPUが認識されています。
$ ls -l /dev/dri/ total 0 drwxr-xr-x 2 root root 120 Aug 11 06:17 by-path crw-rw---- 1 root video 226, 0 Aug 11 06:17 card0 crw-rw---- 1 root video 226, 1 Aug 11 06:17 card1 crw-rw---- 1 root video 226, 128 Aug 11 06:17 renderD128 crw-rw---- 1 root video 226, 129 Aug 11 06:17 renderD129
by-path
のほうを見ると,
$ ls -l /dev/dri/by-path/ total 0 lrwxrwxrwx 1 root root 8 Aug 11 06:17 pci-0000:00:02.0-card -> ../card1 lrwxrwxrwx 1 root root 13 Aug 11 06:17 pci-0000:00:02.0-render -> ../renderD129 lrwxrwxrwx 1 root root 8 Aug 11 06:17 pci-0000:01:00.0-card -> ../card0 lrwxrwxrwx 1 root root 13 Aug 11 06:17 pci-0000:01:00.0-render -> ../renderD128
lspci
コマンドで個々のアドレスのデバイスを見てみましょう。
$ lspci -s 0000:00:02.0 00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06) $ lspci -s 0000:01:00.0 01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
このことから,
NVIDIAのGPU
$ lxc config device add cuda mygpu gpu id=0
ちなみにCUDAなどの利用を目的とする場合,/dev/
以下のグループIDの変更は不要です。