Apr/11/2025 Updated by

「AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門」

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


[Up] Japanese English

前提条件



1. Docker Container を用意する


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


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

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tensorflow/tags
nvcr.io/nvidia/tensorflow:19.03-py3 が tensorflow 1.13.1 に対応しているようだ。

nVidia の公式 Release Notes が以下の URL にある。 https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/index.html

tf1 の最終バージョンは 23.03-tf1-py3 のようだ。

Container     TensorFlow     Python
--------------------------------
23.03         1.15.5        3.8
23.02         1.15.5        3.8
23.01         1.15.5         
22.12         1.15.5         
22.11         1.15.5         
22.10         1.15.5         
22.09         1.15.5         
22.08         1.15.5         
22.07         1.15.5         
22.06         1.15.5         
22.05         1.15.5         
22.04         1.15.5        3.8
22.03         1.15.5         
22.02         1.15.5         
22.01         1.15.5         
21.12         1.15.5         
21.11         1.15.5         
21.10         1.15.5        3.8
21.09         1.15.5         
21.08         1.15.5         
21.07         1.15.5         
21.06         1.15.5        3.8 
21.05         1.15.5         
21.04         1.15.5         
21.03         1.15.5        3.8
21.02         1.15.5        3.8
20.12         1.15.4        3.8
20.11         1.15.4        3.6
20.10         1.15.4        
20.09         1.15.3        
20.08         1.15.3        
20.07         1.15.3        
20.06         1.15.2        
20.05         1.15.2        
20.04         1.15.2        
20.03         1.15.2        
20.02         1.15.2        
20.01         1.15.0        
19.12         1.15.0        
19.11         1.15.0        
19.10         1.14.0        
19.09         1.14.0        
19.08         1.14.0        3.6
19.07         1.14.0        3.6
19.06         1.13.1        3.5
19.05         1.13.1        3.5
19.04         1.13.1        3.5
19.03         1.13.1        3.5

「f文字列」は python3.6 以降でサポートされている。 したがって、tensorflow が 1.13.1 ではなく 1.14.0 になるが 19.07 を使うことにする。

1.3. Docker Container を作成する

  1. 使用したい Docker Image が見つかったら、 以下のコマンドでダウンロードして Docker Container を作成し、実行できる。
  2. (例) 緑色の文字部分は環境に合わせて変更すること
    docker run --gpus all -it --rm -v local_dir:container_dir nvcr.io/nvidia/tensorflow:19.07-py3
    
  3. 以下の条件でコンテナを作成する。
  4. 割当コンテナ名ポート1
    (22へ転送)
    ポート2
    (8888へ転送)
    /root/doc
    マウント先
    Docker Image
    -alphazero70758085 /home/docker/alphazero nvcr.io/nvidia/tensorflow:19.07-py3
  5. Docker Host である Windows 上の Ubuntu (WSL2) の対話環境の中で以下のコマンドを実行する。
  6. docker run --name alphazero --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \
         -p 7075:22 -p 8085:8888 \
         -v /home/docker/alphazero:/root/doc \
         -it nvcr.io/nvidia/tensorflow:19.07-py3
    

1.4. Docker Container の環境を整える (ssh)

  1. Docker Guest の対話環境にアクセスする。
  2. docker ゲストOS で GPU が見えているかを確認する。
  3. root@eeb02c8a1435:~/doc# nvidia-smi
    Sun Apr 13 08:09:21 2025
    +-----------------------------------------------------------------------------------------+
    | NVIDIA-SMI 565.72                 Driver Version: 566.14         CUDA Version: 12.7     |
    |-----------------------------------------+------------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
    |                                         |                        |               MIG M. |
    |=========================================+========================+======================|
    |   0  NVIDIA GeForce RTX 3070 ...    On  |   00000000:01:00.0 Off |                  N/A |
    | N/A   44C    P0             33W /  125W |       0MiB /   8192MiB |      0%      Default |
    |                                         |                        |                  N/A |
    +-----------------------------------------+------------------------+----------------------+
    
    +-----------------------------------------------------------------------------------------+
    | Processes:                                                                              |
    |  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
    |        ID   ID                                                               Usage      |
    |=========================================================================================|
    |  No running processes found                                                             |
    +-----------------------------------------------------------------------------------------+
    root@eeb02c8a1435:~/doc# cat /usr/local/cuda/version.txt
    CUDA Version 10.1.168
    root@eeb02c8a1435:~/doc# nvcc --version
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2019 NVIDIA Corporation
    Built on Wed_Apr_24_19:10:27_PDT_2019
    Cuda compilation tools, release 10.1, V10.1.168
    
  4. python の状況を調べる
  5. root@eeb02c8a1435:~/doc# python
    Python 3.6.8 (default, Jan 14 2019, 11:02:34)
    [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tensorflow as tf
    2025-04-13 08:22:37.775154: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
    p>>> print(tf.__version__)
    1.14.0
    >>> exit()
    
  6. openssh の環境を整える。パスワードの部分は推測されにくい文字列に変更すること。
  7. 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
    
  8. これで、ポート番号を指定して外からdocker guest に ssh アクセスできるようになる。 IP アドレスは docker host のもの。
  9. ssh -p 7075 root@133.99.41.195
    
  10. 後で cmake をコンパイルするときに必要になるので openssh 開発用ライブラリもインストールしておく。
  11. apt-get install libssl-dev
    apt-get install -y openssh    ← openssh パッケージのインストールがなぜか失敗する。
    

1.5. Docker Container の環境を整える (tensorflow 1.14.0 & python 3.6)

  1. AlphaZero 実践入門 のサンプルコードを送り込む。rsyncコマンドを使っているが、通信プロトコルは ssh で、docker guest への ssh ポート番号である 7075 を指定する。
  2. rsync -avr -e "ssh -p 7075" sample root@133.99.41.195:/root/doc
    
  3. 本のサンプルコードを動かす環境は以下の通り。
  4. requirements.txt
    tensorflow_gpu==1.13.1
    numpy==1.14.6
    matplotlib==3.0.3
    panas==0.22.0
    Pillow==4.1.1
    h5py==2.8.0
    gym==0.10.11
    
  5. 最初からインストールされているパッケージのバージョンを調べる。
  6. root@eeb02c8a1435:~/doc# python
    Python 3.6.9 (default, Mar 10 2023, 16:46:00)
    [GCC 8.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
    python は 3.6.9 のようだ。 本のpython のバージョンは 3.6.7 (p.67) だが大丈夫だろう。
  7. tensorflow は 1.14.0 がインストール済み。
  8. >>> import tensorflow as tf
    2025-04-13 08:39:48.697903: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
    >>> print(tf.__version__)
    1.14.0
    
  9. numpy は1.14.6ではなく、1.14.5 であった。このまま進める。
  10. >>> import numpy as np
    >>> print(np.__version__)
    1.14.5
    
  11. matplotlib は3.0.3で本と同じであった。
  12. >>> import matplotlib
    >>> print(matplotlib.__version__)
    3.0.3
    
  13. pandas は 0.22.0 ではなく、0.23.0 であった。このまま進める。
  14. >>> import pandas as pd
    >>> print(pd.__version__)
    0.23.0
    
  15. PIL (Pillow) は 4.1.1 ではなく、5.4.1 であった。このまま進める。
  16. >>> import PIL
    >>> print(PIL.__version__)
    5.4.1
    
  17. h5py は 2.8.0 ではなく、2.9.0 であった。このまま進める
  18. >>> import h5py
    >>> print(h5py.__version__)
    2.9.0
    
  19. gym はインストールされていない。
  20. >>> import gym
    Traceback (most recent call last):
      File "", line 1, in 
    ImportError: No module named 'gym'
    
  21. 新しい python 仮想環境を作成せずに、gym パッケージをインストールする。
  22. gym パッケージをインストールする。
  23. pip install gym==0.10.11
    
  24. keras はインストールされている。
  25. >>> import tensorflow.keras
    2025-04-13 08:52:03.276548: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
    >>> print(tensorflow.keras.__version__)
    2.2.4-tf
    

    [注意] tensorflow.keras でアクセスされることに注意。 4_4_dqn_carpole.ipynb で keras を import しているのでコードの変更が必要。

    from keras.models import Sequential  →  from tensorflow.keras.models import Sequential
    

  26. サンプルコードでは、Colab にファイルをアップロードしているが、その機能を代替するために ipywidgets パッケージが必要。
  27. pip install ipywidgets
    

jupyter notebookを起動する。

jupyter notebook --allow-root --ip=0.0.0.0 --no-browser
他のマシンからアクセスするには "--ip=0.0.0.0" の指定が必要であることに注意。
(動作中の jupyter notebook の token を知る)
jupyter notebook list

外部からアクセスする

http://133.99.41.195:8085/?token=a62e....e0ab