Python 環境の構築 (venv 利用)
環境構築方法
以下, 各種フレームワークに対する venv による環境構築方法を述べる. なお,chainer や tensorflow ver.1 は依存するライブラリのバージョンが合わない問題が発生するため, これらを venv で環境構築することは難しい.chainer や tensorflow ver.1 を使う場合は docker を利用して下さい.
pytorch
プロジェクトディレクトリを作成.
$ mkdir venv-pytorch $ cd venv-pytorch $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.7.3
pip でパッケージのインストール.
(venv) $ pip install -U setuptools pip (venv) $ pip install wheel (venv) $ pip install torch (venv) $ pip install torchvision
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
GPU が認識できるかのテスト. GPU が見えている.
(venv) $ python Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.cuda.is_available() True
サンプルの実行. 実行中に別の端末で nvidia-smi を実行すると GPU が使われている (利用メモリ量増加, 電力消費増加, プロセス表示) ことが把握できる.
(venv) $ wget https://raw.githubusercontent.com/pytorch/examples/master/mnist/main.py (venv) $ python main.py
ディアクティベート
(venv) $ deactivate
tensorflow 1.15
<URL:https://www.tensorflow.org/install/pip?hl=ja> を参考に行う.
プロジェクトの作成.
$ mkdir venv-tensorflow1 $ cd venv-tensorflow1 $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.7.3
pip でパッケージの tensorflow をインストール. tensorflow-gpu==1.15 とすることで, ver. 1.15 を明示的にインストールする.
(venv) $ pip install -U setuptools pip (venv) $ pip install wheel (venv) $ pip install tensorflow-gpu==1.15
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
テスト. GPU が見えるか確認をする.
(venv) $ python -c "from tensorflow.python.client import device_lib;print(device_lib.list_local_devices());"
計算の実行. https://www.tensorflow.org/tutorials/ から適当なプログラムをコピペしたものを /work/SAMPLES/GPU-venv/tensorflow1-sample.py として置いているので, それを使うと良い. 実行時に別のターミナルで nvidia-smi を実行すると, GPU でプロセスが動いていることが確認できる.
(venv) $ python tensorflow1-sample.py 以下のように GPU デバイスが見えていれば OK. 2021-01-09 13:59:50.442702: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x3ff2a50 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices: 2021-01-09 13:59:50.442735: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Tesla V100S-PCIE-32GB, Compute Capability 7.0 2021-01-09 13:59:50.442746: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (1): Tesla V100S-PCIE-32GB, Compute Capability 7.0 2021-01-09 13:59:50.442752: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (2): Tesla V100S-PCIE-32GB, Compute Capability 7.0 2021-01-09 13:59:50.443051: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix: 2021-01-09 13:59:50.443069: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165]
プログラムによると思われるが,テストで使ったプログラムは PC に刺さってる全ての GPU を使おうとしていた. 使う GPU に制限をかけるときは以下のように環境変数を設定して実行する.
(venv) $ CUDA_VISIBLE_DEVICES=0 python test.py
ディアクティベート
(venv) $ deactivate
tensorflow 2.4 + keras
プロジェクトの作成.
$ mkdir venv-tensorflow2 $ cd venv-tensorflow2 $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.7.3
pip でパッケージの tensorflow をインストール. pip のバージョンを上げておくと, pip install tensorflow とすることで tensorflow 2.4.0 がインストールされる.
(venv) $ pip install -U setuptools pip (venv) $ pip install wheel (venv) $ pip install tensorflow (venv) $ pip install keras
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
テスト. GPU が見えるか確認をする.
(venv) $ python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))" (venv) $ python -c "import tensorflow as tf; tf.config.list_physical_devices()" ...... .... Adding visible gpu devices: 0, 1, 2 (venv) $ python -c "import keras as ks"
計算の実行. https://www.tensorflow.org/tutorials/ から適当なプログラムをコピペしたものを /work/SAMPLES/GPU-venv/tensorflow2-sample.py として置いているので, それを使うと良い. 実行時に別のターミナルで nvidia-smi を実行すると, GPU でプロセスが動いていることが確認できる.
(venv) $ python tensorflow2-sample.py
使う GPU を固定する場合は以下のように環境変数を設定して実行する.
(venv) $ CUDA_VISIBLE_DEVICES=1 python test.py
ディアクティベート
(venv) $ deactivate
numba
プロジェクトディレクトリを作成.
$ mkdir venv-numba $ cd venv-numba $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.7.3
pip でパッケージのインストール.
(venv) $ pip install -U setuptools pip (venv) $ pip install numba
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
GPU が見えるか確認
$ python Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from numba import cuda >>> cuda.detect() Found 3 CUDA devices id 0 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 59 id 1 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 134 id 2 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 175 Summary: 3/3 devices are supported True
ジョブの実行
ジョブファイル内で activate と deactivate を実行する必要があることに注意すること.
$ cat job01.sh #!/bin/sh #PBS -q gpu #PBS -l select=1:ncpus=1:ngpus=1 # ジョブを実行したディレクトリに移動 cd $PBS_O_WORKDIR # 開始処理. venv 環境をアクティベート. . /work/ENV/matsue-ct/venv/bin/activate # python プログラムの実行 python tensorflow2-sample.py # 終了処理. venv 環境をディアクティベート. deactivate $ qsub job01.sh
参考
- <URL:https://help.sakura.ad.jp/115000122721/>
- <URL:https://qiita.com/Aruneko/items/c63ed3f5770569fb5e11>
- <URL:https://python.keicode.com/devenv/virtualenv.php>
- <URL:https://medium.com/@tristan.sch/install-tensorflow-with-gpu-support-on-debian-sid-15e68348387f>
- <URL:https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e>