Linux

2019年08月29日

NVIDIA GPUのドライババージョンとDocker Imageの中のCUDAバージョンの関係について

Ubuntu 環境での備忘録.

NVIDIA の GPU を積んでいるとドライバのバージョンと CUDA のバージョンが揃わず難儀することが多い.
特に Docker イメージに何を使えば...みたいな話になる.
今回はそんな話.

ハマったのは TensorFlow Docker Image を使おうとした時でした.
ここにある Docker Image を GPU タグ付きで動かしたところどうやら GPU が見えていないということに気がついてしまいました.
というわけで tensorflow/tensorflow を確認すると...

ARG UBUNTU_VERSION=18.04
ARG ARCH=
ARG CUDA=10.0
FROM nvidia/cuda${ARCH:+-$ARCH}:${CUDA}-base-ubuntu${UBUNTU_VERSION} as base
# ARCH and CUDA are specified again because the FROM directive resets ARGs
# (but their default value is retained if set previously)
ARG ARCH
ARG CUDA
ARG CUDNN=7.6.2.24-1

という記述に.
つまり CUDA のバージョンは 10.0 でイメージがビルドされていたようです.

この時, マシンのホストの NVRM version は 395 で, 使える CUDA version は 9.2.
なので Dockerfile の CUDA を 9.2 でビルドするか, GPU のドライバを 10.0 が使えるものにバージョンアップするかの二択でした.

Dockerfile のリビルドは面倒だったので自分は後者を選択しました.
まず, 利用可能なドライバのバージョンをチェックします.

$ ubuntu-drivers devices
== /sys/devices/pci0000:16/0000:16:00.0/0000:17:00.0 ==
modalias : pci:v000010DEd00001B06sv00001043sd000085E5bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP102 [GeForce GTX 1080 Ti]
driver   : nvidia-driver-415 - third-party free
driver   : nvidia-driver-410 - third-party free
driver   : nvidia-driver-430 - third-party free recommended
driver   : nvidia-driver-390 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin
今回は CUDA versin が 10.0 にしたかったので nvidia-driver-415 を選択し, apt install しました.
そしてちゃんとインストールできているかチェック.
$ nvidia-container-cli info
NVRM version:   415.27
CUDA version:   10.0

Device Index:   0
Device Minor:   0
Model:          GeForce GTX 1080 Ti
Brand:          GeForce
GPU UUID:       GPU-ae5034ee-e52e-37ad-d2b4-19d473f0aeb0
Bus Location:   00000000:17:00.0
Architecture:   6.1

Device Index:   1
Device Minor:   1
Model:          GeForce GTX 1080 Ti
Brand:          GeForce
GPU UUID:       GPU-210053a3-dbbf-dba5-dca5-5d7e15405c41
Bus Location:   00000000:65:00.0
Architecture:   6.1
どうやら目的が果たせる状況になったようです.
というわけで仕上げとして TensorFlow Docker Image を動かして GPU が使えるようになっているか確認です.

以下のキャプチャのように無事 GPU にアクセスできるようになりました.

Screenshot from 2019-08-29 17-49-27




このエントリーをはてなブックマークに追加
highfrontier at 17:57|PermalinkComments(0)

2019年08月28日

snapパッケージ・アプリで印刷できないときやってみたこと

備忘録です。

ubuntuなどで最近snapでパッケージ化したアプリをよく見かけます。
そういうsnapパッケージ・アプリで印刷をしたい時に印刷メニューを見るとホスト上のubuntuから見えているプリンタが見えないときが有ります。
そういう時は以下のコマンドを試してみると良いです。

今回はbraveブラウザーで発生したので次のようにコマンドを入れました。

sudo snap connect brave:cups-control :cups-control

これでwebページの印刷ができるようになりました。

このエントリーをはてなブックマークに追加
highfrontier at 12:05|PermalinkComments(0)

2019年06月18日

gdbでソースパスが見つからない時に...

よく忘れるので個人的備忘録w

Host上のクロスコンパイル環境でプログラムをコンパイルして、ボード上でNFSを使ってHostのdirectoryをマウントしている時、gdbでプログラムをデバッグすると頭にNFSで共有しているdirectory pathがついたままになってデバッグのソースが見えないことが有ります。
[Thread 0xffffbaef41d0 (LWP 2986) exited]
[Thread 0xffffbf2c41d0 (LWP 2985) exited]
[Inferior 1 (process 2982) exited with code 0377]
(gdb) list
6       /srv/abc_board/rootfs/home/root/hogehoge/src/main.c: No such file or directory.
(gdb) 
こんな時はGDB command set substitute-path が使えます。
(gdb) set substitute-path /srv/abc_board/rootfs /
(gdb) list
6       #include <string.h>
7
8       #include "generic_api_memory.h"
9       #include "generic_rtos.h"
10
11      ...
(gdb) 



このエントリーをはてなブックマークに追加
highfrontier at 14:42|PermalinkComments(0)