docker
コマンドが実行できる。
tensorflow 1.x では、keras も別途インストールする必要があることに注意する。
pip install keras
[本のサンプルで使用されている主要パッケージのバージョン (p.55)] python 3.6.7 tensorflow 1.13.1 numpy 1.14.6 matplotlib 3.0.3 pandas 0.22.0 Pillow(PIL) 4.1.1 h5py 2.8.0 gym 0.10.11
(例) 緑色の文字部分は環境に合わせて変更すること docker run --gpus all -it --rm -v local_dir:container_dir nvcr.io/nvidia/tensorflow:19.03-py3
割当 | コンテナ名 | ポート1 (22へ転送) | ポート2 (8888へ転送) | /root/doc マウント先 | Docker Image |
---|---|---|---|---|---|
- | alphazero | 7075 | 8085 | /home/docker/alphazero | nvcr.io/nvidia/tensorflow:19.03-py3 |
fg 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.03-py3
Docker Host の Windows 上で動作する Ubuntu (WSL2) において、docker コマンドを用いて alphazero コンテナに接続する。
docker attach alphazero
Docker Desktop から alphazero を選択して、"Exec" タブを選択するとシェルが起動して、対話環境が手に入る。
root@4a82ecfbaf49:~/doc# nvidia-smi Sat Apr 12 10:31:28 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 34W / 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@4a82ecfbaf49:~/doc# cat /usr/local/cuda/version.txt CUDA Version 10.1.105 root@4a82ecfbaf49:~/doc# nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Fri_Feb__8_19:08:17_PST_2019 Cuda compilation tools, release 10.1, V10.1.105
root@4a82ecfbaf49:~/doc# python Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf >>> print(tf.__version__) 1.13.1 >>> exit()(注意) python 3.5.2 では、f文字列が使えない可能性がある。4_4でエラーが検出された。 f文字列が導入されたのは python 3.6 以降とのこと。 python のバージョンを変更する必要がある。
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
ssh -p 7075 [email protected]
remote login すると 次のようなエラーが表示される。
rm: cannot remove '/lib': Is a directory
これは /etc/profile の中で実行される /etc/shinit が、CUDA ライブラリを消して、パスを張りなおしている部分からきているようだ。
[/etc/shinit] #!/bin/sh if test \( \! -L ${_CUDA_COMPAT_PATH}/lib \) -o \( -z "${_CUDA_COMPAT_STATUS}" \); then rm -f ${_CUDA_COMPAT_PATH}/lib export _CUDA_COMPAT_STATUS="$(LD_LIBRARY_PATH=${_CUDA_COMPAT_PATH}/lib.real /usr/local/bin/cudaCheck 2>/dev/null && ln -sf ${_CUDA_COMPAT_PATH}/lib.real ${_CUDA_COMPAT_PATH}/lib 2>/dev/null)" fidocker desktop の Exec から入った場合は _CUDA_COMPAT_PATH は次の値に設定されている。
root@4a82ecfbaf49:/etc# echo $_CUDA_COMPAT_PATH /usr/local/cuda/compatremote login するとこの値が設定されていない。 /etc/shinit の先頭に次の行を追加する。
export _CUDA_COMPAT_PATH=/usr/local/cuda/compatremote login 時にエラーは出なくなったが、
apt-get install libssl-dev apt-get install -y openssh ← openssh パッケージのインストールがなぜか失敗する。
rsync -avr -e "ssh -p 7075" sample [email protected]:/root/doc
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 |
root@4a82ecfbaf49:~/doc# python Python 3.5.2 (default, Jan 26 2021, 13:30:48) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>>python は 3.5.2 のようだ。 本のpython のバージョンは 3.6.7 (p.67) だが、 とりあえずこのまま進めて、 もしエラーがでる場合は変更することにする。
>>> import tensorflow as tf >>> print(tf.__version__) 1.13.1
>>> import numpy as np >>> print(np.__version__) 1.14.5
>>> import matplotlib >>> print(matplotlib.__version__) 3.0.3
>>> import pandas as pd >>> print(pd.__version__) 0.23.0
>>> import PIL Traceback (most recent call last): File "", line 1, in ImportError: No module named 'PIL' >>> from PIL import Image Traceback (most recent call last): File " ", line 1, in ImportError: No module named 'PIL'
>>> import h5py >>> print(h5py.__version__) 2.9.0
>>> import gym Traceback (most recent call last): File "", line 1, in ImportError: No module named 'gym'
pip install pillow==4.1.1
pip install gym==0.10.11
本で使用しているのは python 3.6.7 であるが、docker Container にインストールされていたのは 3.5.2 であった。 「f文字列」が使えるのは 3.6 以降なので、3.6以降の python を追加インストールする必要がある。
ChatGPT によれば 3.6.9 は用意されているとのこと。
apt update apt install -y software-properties-common
add-apt-repository ppa:deadsnakes/ppa apt update apt install -y python3.6 python3.6-venv python3.6-distutils
apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev \ libnss3-dev libssl-dev libreadline-dev libffi-dev wget libsqlite3-dev \ libbz2-dev liblzma-dev uuid-dev xz-utils
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz tar xzf Python-3.6.7.tgz cd Python-3.6.7 ./configure --enable-optimizations make -j$(nproc) make altinstall # これ重要!「python3」には上書きしない"make altinstall" により /usr/local/bin/python3.6 としてインストールされる。既存の python3 → python3.5 を壊さない。
/usr/local/bin/python3.6 --version
update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.6 2 update-alternatives --config python3 エラー
root@4a82ecfbaf49:~/doc/Python-3.6.7# ls -ld /usr/local/bin/python* -rwxr-xr-x 2 root root 13756912 Apr 13 06:13 /usr/local/bin/python3.6 -rwxr-xr-x 2 root root 13756912 Apr 13 06:13 /usr/local/bin/python3.6m -rwxr-xr-x 1 root root 3097 Apr 13 06:13 /usr/local/bin/python3.6m-config root@4a82ecfbaf49:~/doc/Python-3.6.7# ls -ld /usr/bin/python* lrwxrwxrwx 1 root root 18 Mar 11 2019 /usr/bin/python -> /usr/bin/python3.5 lrwxrwxrwx 1 root root 9 Mar 23 2016 /usr/bin/python3 -> python3.5 -rwxr-xr-x 2 root root 4456208 Jan 26 2021 /usr/bin/python3.5 lrwxrwxrwx 1 root root 33 Jan 26 2021 /usr/bin/python3.5-config -> x86_64-linux-gnu-python3.5-config -rwxr-xr-x 2 root root 4456208 Jan 26 2021 /usr/bin/python3.5m lrwxrwxrwx 1 root root 34 Jan 26 2021 /usr/bin/python3.5m-config -> x86_64-linux-gnu-python3.5m-config lrwxrwxrwx 1 root root 10 Mar 23 2016 /usr/bin/python3m -> python3.5m root@4a82ecfbaf49:~/doc/Python-3.6.7# update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.6 2 update-alternatives: using /usr/local/bin/python3.6 to provide /usr/bin/python3 (python3) in auto mode root@4a82ecfbaf49:~/doc/Python-3.6.7# update-alternatives --config python3 There is only one alternative in link group python3 (providing /usr/bin/python3): /usr/local/bin/python3.6 Nothing to configure. root@4a82ecfbaf49:~/doc/Python-3.6.7# ls -l /usr/bin/python* /usr/local/bin/python* lrwxrwxrwx 1 root root 18 Mar 11 2019 /usr/bin/python -> /usr/bin/python3.5 lrwxrwxrwx 1 root root 25 Apr 13 06:16 /usr/bin/python3 -> /etc/alternatives/python3 -rwxr-xr-x 2 root root 4456208 Jan 26 2021 /usr/bin/python3.5 lrwxrwxrwx 1 root root 33 Jan 26 2021 /usr/bin/python3.5-config -> x86_64-linux-gnu-python3.5-config -rwxr-xr-x 2 root root 4456208 Jan 26 2021 /usr/bin/python3.5m lrwxrwxrwx 1 root root 34 Jan 26 2021 /usr/bin/python3.5m-config -> x86_64-linux-gnu-python3.5m-config lrwxrwxrwx 1 root root 10 Mar 23 2016 /usr/bin/python3m -> python3.5m -rwxr-xr-x 2 root root 13756912 Apr 13 06:13 /usr/local/bin/python3.6 -rwxr-xr-x 2 root root 13756912 Apr 13 06:13 /usr/local/bin/python3.6m -rwxr-xr-x 1 root root 3097 Apr 13 06:13 /usr/local/bin/python3.6m-config root@4a82ecfbaf49:~/doc/Python-3.6.7# ls -l /etc/alternatives/python* lrwxrwxrwx 1 root root 24 Apr 13 06:16 /etc/alternatives/python3 -> /usr/local/bin/python3.6
/usr/bin/python --> /usr/bin/python3.5 /usr/bin/python3 --> /usr/bin/python3.5
wget https://bootstrap.pypa.io/pip/3.6/get-pip.py /usr/local/bin/python3.6 get-pip.py
/usr/local/bin/python3.6 -m pip install vertualenv /usr/local/bin/python3.6 -m virtualenv ~/py36env
mv /usr/local/bin/jupyter /usr/local/bin/jupyter3.5.2python3.6 上でjupyter を再インストール
/usr/local/bin/python3.6 -m pip install jupyterそのうえで /usr/local/bin/jupyter を使う。
/usr/local/bin/jupyter notebook --allow-root --ip=0.0.0.0 --no-browser
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