(2022-09-18 初稿 - 2023-10-26 追記)
(2023-10-26 追記)
2023年10月25日に、以下の記事をアップした。
Debian 12(bookworm)をお使いの方は、以下をご覧になってください。
(追記終了)
これまでDockerの記事を2つアップした。
ここでは、Tensorflowの環境を作る。
以下のサイトを参考にしたが、ほとんどそのままなので、まずは以下のサイトを参照されたい。
ディレクトリ構成
筆者は、以下のディレクトリを作成した。
doc-tf
├── py-s # pythonのsrcファイルを置く
doc-tfとpy-sは好きな名前で良い。
DockerのTensorflowイメージをダウンロード
最新の安定版をダウンロード。
docker pull tensorflow/tensorflow # latest stable release
ダウンロードしたイメージのテスト
docker run -it --rm tensorflow/tensorflow \ python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" (省略 様々なメッセージ) tf.Tensor(166.21828, shape=(), dtype=float32)
結果は毎回異なるが、上記のメッセージがでれば良い。
Tensorflow環境でBashの起動
bashの起動は以下のとおり。
docker run -it tensorflow/tensorflow bash
現在の環境確認
OSの種類とバージョン確認。
root@697f8d2fb8cc:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"つ
続いて、pythonのモジュール。2022-09-18日時点。
root@697f8d2fb8cc:/# pip3 list Package Version ---------------------------- --------- absl-py 1.2.0 astunparse 1.6.3 cachetools 5.2.0 certifi 2022.6.15 charset-normalizer 2.1.1 flatbuffers 2.0.7 gast 0.4.0 google-auth 2.11.0 google-auth-oauthlib 0.4.6 google-pasta 0.2.0 grpcio 1.48.1 h5py 3.7.0 idna 3.3 importlib-metadata 4.12.0 keras 2.10.0 Keras-Preprocessing 1.1.2 libclang 14.0.6 Markdown 3.4.1 MarkupSafe 2.1.1 numpy 1.23.2 oauthlib 3.2.0 opt-einsum 3.3.0 packaging 21.3 pip 20.2.4 protobuf 3.19.4 pyasn1 0.4.8 pyasn1-modules 0.2.8 pyparsing 3.0.9 requests 2.28.1 requests-oauthlib 1.3.1 rsa 4.9 setuptools 65.3.0 six 1.16.0 tensorboard 2.10.0 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorflow-cpu 2.10.0 tensorflow-estimator 2.10.0 tensorflow-io-gcs-filesystem 0.26.0 termcolor 1.1.0 typing-extensions 4.3.0 urllib3 1.26.12 Werkzeug 2.2.2 wheel 0.34.2 wrapt 1.14.1 zipp 3.8.1 WARNING: You are using pip version 20.2.4; however, version 22.2.2 is available. You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.
最後の警告は、pipのバージョンが古いと言っているが、仮想環境なのでとりあえず無視する。
kerasも入っており、すぐにでも使えそう。
自分のスクリプトを実行する
スクリプトは、ファイル権限の関係もあるためホスト側で作成する。
ホスト側では、スクリプトをdoc-tf/py-sに保存して、以下を実行。
$ cd doc-tf/py-s $ docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./sample.py
現在のディレクトリ(doc-tf/py-s)が仮想環境では/tmpになり、ワーキング・ディレクトリも/tmpとなる。
なお、 --rm オプションがあるので、実行後、すぐにコンテナは消されてしまう。
GPU版を使う
GPUを使う設定は、以下のサイトを参考にさせていただいた。
aptラインとPGPの追加
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
nvidia-docker2のインストール
apt-get update apt-get install -y nvidia-docker2
ちなみに、わがDebianには、nvidia-smiもインストールされていなかったので。
apt-get install -y nvidia-smi
Dockerをリスタート。
systemctl restart docker
ドライバの確認
$ docker run --gpus all --rm nvidia/cuda nvidia-smi Unable to find image 'nvidia/cuda:latest' locally docker: Error response from daemon: manifest for nvidia/cuda:latest not found: manifest unknown: manifest unknown. See 'docker run --help'.
あれ、エラーが出る。調べてみると、以下のページで調べてバージョン等も記載しないとだめみたい。
2022-09-18時点では、11.7.1-base-ubuntu22.04が最新だったので、以下の変更。
$ docker run --gpus all --rm nvidia/cuda:11.7.1-base-ubuntu22.04 nvidia-smi docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: requirement error: unsatisfied condition: cuda>=11.7, please update your driver to a newer version, or use an earlier cuda container: unknown.
今度は、別のエラーが… nvidiaのドライバをアップデートしなさいとのこと。
確かにわがDebianのバージョンは、Driver Version: 470.141.03で古いらしい。
ドライバーのアップデート
(2022-10-31 追記)
Debianのnvidia-drvierのバージョンがアップしたので、以下のドライバを入れ替えなくてもGPU版が動作するようになった。
Debianパッケージャの方に感謝。m(__)m
念の為に、筆者のドライバは以下のとおり。
$ nvidia-smi Mon Oct 31 19:47:03 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.141.03 Driver Version: 470.141.03 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+
(追記終了)
筆者は、実際に試していないので、リンク先とやり方のみを示す。
参考にさせていただいたのは、以下のサイト。
aptラインに以下を追加。
deb http://deb.debian.org/debian/ experimental main non-free contrib
/etc/apt/apt.conf.d/00mydefaultrelease に以下を記載。
APT::Default-Release "stable";
以下でドライバをインストール。
apt-get update apt-get -t experimental nvidia-driver
筆者は、まだ、試していないので、試してうまく行ったら追記する。
GPUを使ったサンプル
$ docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \ python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
GPUを使った場合のbashの起動
$ docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash
GPUを使った場合のスクリプトの実行
$ cd doc-tf/py-s $ docker run --gpus all -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow:latest-gpu python ./sample.py
以上、皆さん、快適にtensorflowをお使いください。
関連ページ