2024/12/06 Updated by

Docker Container for DeepFake

DeepFake のコードが動くDocker コンテナ


[Up] Japanese English

前提条件



1. Docker Container を用意する


1.1. 作成すべき python 仮想環境


1.2. nVidia GPU (CUDA) に対応した Docker Image を探す


1.3. Docker Container を作成する

  1. 以下の条件でコンテナを作成する。
  2. 割当コンテナ名ポート1
    (22へ転送)
    ポート2
    (8888へ転送)
    /root/doc
    マウント先
    Docker Image
    -4semi770778087 /home/docker/4semi7 nvcr.io/nvidia/tensorflow:20.08-tf2-py3
  3. Docker Host である Windows 上の Ubuntu (WSL2) の対話環境の中で以下のコマンドを実行する。
  4.  docker run --name 4semi7 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \
         -p 7077:22 -p 8087:8888 \
         -v /home/docker/4semi7:/root/doc \
         -it nvcr.io/nvidia/tensorflow:20.08-tf2-py3
    

1.4. Docker Container の環境を整える

  1. Docker Guest の対話環境にアクセスする。
  2. Docker Host の Windows 上で動作する Ubuntu (WSL2) において、docker コマンドを用いて 4semi7 コンテナに接続する。

    docker attach 4semi7
    
  3. openssh の環境を整える。パスワードの部分は推測されにくい文字列に変更すること。
  4. apt-get update
    apt-get upgrade -y
    apt-get install -y openssh-server
    echo 'root:パスワード' | chpasswd
    sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
    service ssh start
    
  5. 後で cmake をコンパイルするときに必要になるので openssh 開発用ライブラリもインストールしておく。
  6. apt-get install libssl-dev
    apt-get install -y openssh
    
  7. python の実行環境を整える。python の実行環境を切り替えられるように python 仮想環境を作る方が望ましいと思われるが、 今回は簡単のため直接 python 環境を構築した。
  8. pip install -r requirements.txt
    "cmake がない"というエラー発生
    
    requirements.txt
    tensorflow_gpu==2.2.0
    tensorflow_addons==0.10.0
    tensorflow-datasets==3.0.0
    opencv-python==4.2.0.34
    dlib==19.21.0
    face_recognition==1.2.3
    tqdm
    matplotlib
    ipykernel
    ipywidgets
    packaging
    
  9. cmake がないとエラーがおきる。apt 経由でcmakeをインストールする。これもエラーとなる。
  10. wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
    apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
    エラー発生
    
  11. cmake をソースからビルドする。
  12. https://cmake.org/download/ から最新版 (現時点では cmake-3.31.1.tar.gz ) をダウンロードしてから、以下のコマンドでインストールする。(展開,コンパイル, インストール)

    tar zvxf cmake-3.31.1.tar.gz
    cd cmake-3.31.1
    ./bootstrap
    make
    make install
    
  13. 再び python 環境を整える。dlib のセットアップでエラーが発生し、pipのバージョンを更新しろというメッセージが表示される。
  14. pip install -r requirements.txt
    ...
    エラー
    WARNING: You are using pip version 20.2.1; however, version 21.3.1 is available.
    You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.
    
  15. 再び python 環境を整える。今度はエラーが発生しない(はず)。
  16. pip install -r requirements.txt
    
  17. tensorflow-datasets のバージョンを更新しておく
  18. pip install --upgrade tensorflow-datasets
    
  19. pydot をインストールする。(7章で必要)
  20. pip install pydot
    
  21. graphviz をインストールする。(7章で必要)
  22. apt-get install graphviz
    
  23. Google Drive から大きなファイルをダウンロードするために gdown をインストールしておく
  24.  pip install --upgrade gdown
    


2. Docker Container を使う



2.1. 他のマシンから Docker Container に ssh アクセスする

  1. ポート番号(ここでは 7077)を指定して ssh で Docker Host ( 133.99.41.195 ) にアクセスする。 ポート番号を変更することで個別の Dcoker Container にアクセスできる。
  2. ssh -p 7077 root@133.99.41.195
    
  3. ログインすると /root がカレントディレクトリとなる。
  4. /root/doc というフォルダがDocker Host の /home/docker/4semi7 にマップされていて、 永続的なフォルダとなる。 すなわち、このフォルダ以外は Container が削除されると失なわれる。
  5. Docker Host の Docker Desktop から Container の shell を起動した場合は カレントディレクトリが /workpace になる。いろいろなファイルがそこに置かれている場合がある。
  6. [注意] もしも、 「~/.ssh/known_hosts のキーと異なるので通信できない」というエラーが起きて ssh が終了する場合は、 以下のコマンドで ~/.ssh/known_hosts のエントリを消すことで解決できる。
  7. ssh-keygen -R '[133.99.41.195]:7077'
    




2.2. 他のマシンから Docker Container 上で jupyter を起動する。

  1. ポート番号(ここでは 7077)を指定して ssh で Docker Host ( 133.99.41.195 ) にアクセスすると、 Docker Container の ssh に転送される。
  2. ssh -p 7077 root@133.99.41.195
    
  3. Docker Container 上で jupyter notebook を起動する。起動時に表示される URL (特に token ) を覚えておくこと。 token の値は毎回異なる。
  4. jupyter notebook
    
    http://localhost:8888/?token=...(略)
    or 
    http://127.0.0.1:8888/?token=...(略)




2.3. ブラウザでアクセスする

  1. 手元のPCでブラウザを起動する。Google Chrome を推奨する。
  2. jupyter notebook が起動時に表示したのはローカルホストからアクセスする場合の URL である。 他のマシンからアクセスするにはURL中の IP アドレスとポート番号を変更する。
  3. (例)
    jupyter が表示したURL:
      http://127.0.0.1:8888/?token=64b6f850fc2a1b9fb52c71b7cd3240d59870619b32a4b4e7
    
    (変更点)
    IPアドレス: 127.0.0.1 (または localhost) →  133.99.41.195
    ポート番号: 8888 → 8087 
    
    (アクセスするURL)
      http://133.99.41.195:8087/?token=64b6f850fc2a1b9fb52c71b7cd3240d59870619b32a4b4e7
    



  4. [注意] jupyter notebook は 8888 番ポートが使えない場合に、異なるポート番号(8887 など)を使うので、外部からアクセスできなくなる。
  5. jupyter notebook が異常終了したときに、しばらく(5分程度) 8888 番ポートをつかんだままになることがある。 そのような状態で jupyter notebook 再起動すると、8888番ポート以外のポート番号を使って起動し、 外部からアクセスできなくなる。しばらく(5分程度)待ってから jupyter notebook を起動すること。