2022/09/13 Updated by

Docker on Windows (GPU)


[Up] Japanese English

venv で操作するjupyter 環境を作成する

  1. Windows上のdockerで nVidia が配布している GPU を使う Ubuntu Image を使う設定 がなされているものとする。
  2. WSL2 の Ubuntu-20.04 から、docker 上に新しいコンテナを作成して、起動する。
  3. $ 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
    
  4. 今まで WSL2 の Ubuntu-20.04 のシェルが動いていたウィンドウで、コンテナ内で動くシェルが起動する。
  5. 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 を作成する。
  6.   # 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 に表示されている。
  7. jupyter ではGPUは認識されているが、「dynamic linking library libcuda.so.10.1 がopenできない」というエラーがでる。これは、tensorflowのバージョンをホストOSのライブラリに合わせる必要があるか?
  8. 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
    
  9. 「カーネルで NUMA がサポートされていない」というWarningが出るが、これは無害か?
  10. jupyter notebook 中で "import cv2" とすると "libGL.so.1: cannot open Error" がでる場合は、それよりも前のセルで apt をupdate してから、libgl1-mesa-dev をインストールする。
  11. # "import cv2" causes "libGL.so.1: cannot open Error"
    ! apt-get update
    ! apt-get upgrade -y
    ! apt-get install -y libgl1-mesa-dev
    
  12. jupyter 内の計算で正しく GPU が使われることを確認した。docker ホストにインストールされている cuda 11.2 & cuDNN-8.1 に対応したバージョンの TensorFlow を使うことが重要のようだ。