- Windows上のdockerで nVidia が配布している GPU を使う Ubuntu Image を使う設定 がなされているものとする。
- WSL2 の Ubuntu-20.04 から、docker 上に新しいコンテナを作成して、起動する。
$ docker run --name imgentf2 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all -p 8081:8888 -it nvcr.io/nvidia/tensorflow:21.08-tf2-py3
- 今まで WSL2 の Ubuntu-20.04 のシェルが動いていたウィンドウで、コンテナ内で動くシェルが起動する。
- Hands on Image Generation with TensorFlow 2 のgithub https://github.com/PacktPublishing/Hands-On-Image-Generation-with-TensorFlow-2.0/blob/master/README.md にしたがって、venv を使ってpython仮想環境 imgentf2 を作成する。
# apt update
# python3 -m venv ./venv/imgentf2
エラーが起きるので、指示にしたがって venv をインストールする。
# apt install python3.8-venv
# python3 -m venv ./venv/imgentf2
# source ./venv/imgentf2/bin/activate
(imgentf2) # pip3 install --upgrade pip
(imgentf2) # pip3 install -r requirements.txt
(imgentf2) # python -m ipykernel install --user --name=imgentf2
(imgentf2) # jupyter nbextension enable --py widgetsnbextension ← これはエラーになる。
- 手元のPCでブラウザを立ち上げ "http://localhost:8081/?token=トークンの数字" にアクセスする。token は jupyter に表示されている。
- jupyter ではGPUは認識されているが、「dynamic linking library libcuda.so.10.1 がopenできない」というエラーがでる。これは、tensorflowのバージョンをホストOSのライブラリに合わせる必要があるか?
requirement.txt で tensorflow==2.8.3 とし、他のパッケージはバージョンを指定しないことにした。GPUで計算できることを確認した。やはり、ホストOSにインストールした CUDA, cuDNN のバージョンにあった TensorFlow を使うのが重要のようだ。
req.txt |
tensorflow==2.8.3
tensorflow_addons
tensorflow-datasets
opencv-python
dlib
face_recognition
tqdm
matplotlib
ipykernel
ipywidgets
packaging
|
- 「カーネルで NUMA がサポートされていない」というWarningが出るが、これは無害か?
- jupyter notebook 中で "import cv2" とすると "libGL.so.1: cannot open Error" がでる場合は、それよりも前のセルで apt をupdate してから、libgl1-mesa-dev をインストールする。
# "import cv2" causes "libGL.so.1: cannot open Error"
! apt-get update
! apt-get upgrade -y
! apt-get install -y libgl1-mesa-dev
- jupyter 内の計算で正しく GPU が使われることを確認した。docker ホストにインストールされている cuda 11.2 & cuDNN-8.1 に対応したバージョンの TensorFlow を使うことが重要のようだ。