Windows11 WSL2 Ubuntu Python
TensorFlow インストール確認Ⅱ
ここまでで TensorFlow インストール確認Ⅰが完了しました。
引き続き、他の方法でも conda 仮想環境に入れた tensorflow の動作確認をしていきます。
yamada@yama:~$ conda activate
として conda 環境を有効にします。
簡単な Python3 tensorflow ファイルを実行します。
(base) yamada@yama:~$ python3 -c "import tensorflow as tf; hello = tf.constant('Hello World'); tf.print(hello)"
結果としして、TensorFlow インストール確認Ⅰで発生したとほぼ同じコメントが発生して
Hello World
と表示されました。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='1'
を追加してみましょう。
(base) yamada@yama:~$ python3 -c "import os; os.environ['TF_CPP_MIN_LOG_LEVEL']='1'; import tensorflow as tf; hello = tf.constant('Hello World'); tf.print(hello)"
なんのコメントもなく
Hello World
と表示されました。
うまく行きました。
TensorFlow インストール確認Ⅲ
演算デバイスの配置をログに記録して GPU が使用されているか確認します。
演算を tensor がどのデバイスに割り当てられたかを確認するには
tf.debugging.set_log_device_placement(True)
をプログラムの最初のステートメントとして置きます。
デバイス配置ログを有効にすると、テンソルの割り当てや演算が出力されます。
TensorFlow インストール確認Ⅲ ファイル
tensor_gpu_t2.py
を作成します。
Tensor 配列を作成してその積を計算します。
配列の積については
numpy.matmulで行列の積を求める方法
【TensorFlow】Tensorの行列積を計算する方法
を参照してください。
下記ファイルを windows 側で作成します。
# -*- coding: utf-8 -*- #0:全てのメッセージが出力される(デフォルト)。 #1:INFOメッセージが出ない。 #2:INFOとWARNINGが出ない。 #3:INFOとWARNINGとERRORが出ない。 import os os.environ['TF_CPP_MIN_LOG_LEVEL']='1' import tensorflow as tf # デバイス配置ログを有効化 tf.debugging.set_log_device_placement(True) # Create some tensors a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) c = tf.matmul(a, b) print(c) # python3 public_html/tensor_gpu_t2.py
TeraPad 等で作成したら、ファイル名を tensor_gpu_t2.py として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の
Linux \Ubuntu-22.04 \\wsl.localhost フォルダ
Linux/Ubuntu-22.04/home/yama/public_html/tensor_gpu_t2.py
としました。
TensorFlow インストール確認Ⅲ 実行
yamada@yama:~$ conda activate
として conda 環境を有効にします。
tensor_gpu_t2.py ファイルを実行します。
(base) yamada@yama:~$ python3 public_html/tensor_gpu_t2.py input: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 _EagerConst: (_EagerConst): /job:localhost/replica:0/task:0/device:GPU:0 output_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 a: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 b: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0 product_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 tf.Tensor( [[22. 28.] [49. 64.]], shape=(2, 2), dtype=float32)
各行に
/job:localhost/replica:0/task:0/device:GPU:0
が表示され /device:GPU:0 で処理が実行されているのがわかります。
私の PC には GPU は1枚しか実装されていないので GPU:0 と表示されていますが、
複数枚実装されれば状況により GPU:1 のように表示されるのかもしれません。
TensorFlow インストール確認Ⅳ
もっと演算に時間がかかるファイルを作成し、
演算デバイスの配置をログに記録して GPU が使用されているか確認します。
TensorFlow インストール確認Ⅳ ファイル
tensor_gpu_test.py
を作成します。
下記ファイルを windows 側で作成します。
# -*- coding: utf-8 -*- #0:全てのメッセージが出力される(デフォルト)。 #1:INFOメッセージが出ない。 #2:INFOとWARNINGが出ない。 #3:INFOとWARNINGとERRORが出ない。 import os os.environ['TF_CPP_MIN_LOG_LEVEL']='1' import tensorflow as tf tf.debugging.set_log_device_placement(True) a = tf.random.normal([1000, 1000]) # 正規分布から乱数を出力する print(tf.math.reduce_sum(a)) # 配列内のすべての要素を足し算する # python3 public_html/tensor_gpu_test.py
TeraPad 等で作成したら、ファイル名を tensor_gpu_test.py として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の
Linux \Ubuntu-22.04 \\wsl.localhost フォルダ
Linux/Ubuntu-22.04/home/yama/public_html/tensor_gpu_test.py
としました。
TensorFlow インストール確認Ⅳ 実行
yamada@yama:~$ conda activate
として conda 環境を有効にします。
tensor_gpu_test.py ファイルを実行します。
(base) yamada@yama:~$ python3 public_html/tensor_gpu_test.py input: (_Arg): /job:localhost/replica:0/task:0/device:CPU:0 _EagerConst: (_EagerConst): /job:localhost/replica:0/task:0/device:GPU:0 output_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 input: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 _EagerConst: (_EagerConst): /job:localhost/replica:0/task:0/device:GPU:0 output_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 shape: (_DeviceArg): /job:localhost/replica:0/task:0/device:CPU:0 RandomStandardNormal: (RandomStandardNormal): /job:localhost/replica:0/task:0/device:GPU:0 output_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 x: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 y: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 Mul: (Mul): /job:localhost/replica:0/task:0/device:GPU:0 z_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 x: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 y: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 AddV2: (AddV2): /job:localhost/replica:0/task:0/device:GPU:0 z_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 input: (_Arg): /job:localhost/replica:0/task:0/device:GPU:0 reduction__indices: (_DeviceArg): /job:localhost/replica:0/task:0/device:CPU:0 Sum: (Sum): /job:localhost/replica:0/task:0/device:GPU:0 output_RetVal: (_Retval): /job:localhost/replica:0/task:0/device:GPU:0 tf.Tensor(-1147.8873, shape=(), dtype=float32)
最初は device:CPU:0 から始まりましたがすぐに処理は device:GPU:0 に引き継がれました。
乱数の作成が GPU で完了するとその結果は一旦 CPU に引き渡され
配列足算は再び GPU で処理がされています。
満足できる結果を得ることができました。
Windows11 WSL2 Ubuntu-22.04 に apache2, PHP-8, Python3,
Python GPU 環境を構築してきました。
かなり苦労しました。
引き続き TensorFlow-GPU, cuDNN, CUDA バージョン対応について補足します。