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 

参考