はじめての生成AI用パソコン設定~PytorchとTensorFlowがGPUを認識するまで
はじめに
生成AIを勉強するために、はじめてデスクトップWindowsPCを買いました。
今回は、買ったばかりのPCのGPUで生成AIが動かせるように初期設定を行い、PytorchとTensorFlowがGPUを認識するように設定してきます!
PCスペック
このPCに出会うまでのストーリーが詳しく書きました。
機械学習用ソフトウェアの初期設定
まずは、生成AIを動かすための環境を整備していきましょう。
今回は機械学習用ソフトウェアライブラリ「Pytorch」と「TensorFlow」が使える環境に合わせて設定していきます。
Pytorchとは元Facebookのグループが開発した機械学習ライブラリ
PyTorchは、コンピュータビジョンや自然言語処理で利用されているTorchを元に作られた、Pythonのオープンソースの機械学習ライブラリである。最初はFacebookの人工知能研究グループAI Research lab(FAIR)により開発された(Wikiより引用)
TensorFlowはGoogleが開発した機械学習ライブラリ
TensorFlow(テンソルフロー、テンサーフロー)とは、Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリ(Wikiより引用)
以下の「pip を使用して TensorFlow をインストールする」公式ドキュメントを参考に設定していきましたが、少し導入につまづいてしまいました。
ソフトウェアがCPUにしか認識されず、困っていたところ
こちらの福山大学の金子先生の記事が大変参考なりましたので、今回はこちらから設定していきます。本当に感謝です!!!
Windows Subsystem for Linux2(WSL2)の設定
まずはコマンドを実行するシェルを設定していきます。
Windows Subsystem for Linux 2はTensorFlowでサポートされているので採用していきます。
金子先生の記事を参考にしてWindowsにLinux(Ubuntu)をインストールしました。
# 無事にWSL2にUbuntuを導入!
PS C:\Users\USER> wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
PS C:\Users\USER> wsl -d Ubuntu uname -r
5.15.90.1-microsoft-standard-WSL2
PS C:\Users\USER>
ハードウェア要件の確認
PytorchとTensorFlowはNVIDIAのグラフィックボードがサポートされています。
次のGPUに当てはまるものを揃えると良いパフォーマンスが出ます。
次の GPU 対応デバイスがサポートされています。
CUDA® アーキテクチャ 3.5、5.0、6.0、7.0、7.5、8.0 以降を搭載した NVIDIA® GPU カード。
まずは、NVIDIAを動作させるためにドライバーをインストールします。
こちらはWindows側にインストールしていきます。
次に、CUDAのバージョンを確認していきましょう。
私のPCは
GPU: ZOTAC NVIDIA GeForce RTX4080 (GDDR6X-16GB)
なので、ハードウェア要件に当てはまっています。
nvidia-smi
をシェルで実行するとGPUの情報が確認できます。
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.120 Driver Version: 537.58 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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 4080 On | 00000000:2B:00.0 On | N/A |
| 31% 32C P8 14W / 320W | 1178MiB / 16376MiB | 2% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 23 G /Xwayland N/A |
+---------------------------------------------------------------------------------------+
CUDA Version: 12.2 でした!
このコマンドの詳細については以下の記事を参考になりました!
Pytorchのインストール(GPU使用の場合)
まずPytorchを導入していきましょう。
今回はpipコマンドからライブラリを導入していくため、PythonとpipコマンドをWSL2で使えるようにしておきます。
sudo apt -y update
sudo apt -y install python3-dev python3-pip python3-setuptools
以下の公式サイトからPytorchのインストールコマンドを選びます。
インストールできたか確認していきましょう。
# PythonでPytorchのバージョンを確認
$ python3 -c "import torch; print( torch.__version__ )"
2.1.0+cu121
PytorchでGPUが使用できるか確認します。とても大切。
# PytorchでGPUが使用できるか確認
$ python3 -c "import torch; print(torch.__version__, torch.cuda.is_available())"
2.1.0+cu121 True
Pytorchの動作確認をしていきます。
# python3でPytorchの動作確認
$ python3 -c "import torch; print( torch.__version__ )"
2.1.0+cu121
$ python3 -c "import torch; print(torch.__version__, torch.cuda.is_available())"
2.1.0+cu121 True
$ python3
Python 3.11.6 (main, Oct 2 2023, 13:45:54) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
torch.rand(5, 3)
print(x)>>> x = torch.rand(5, 3)
>>> print(x)
tensor([[0.4083, 0.9996, 0.6138],
[0.6909, 0.0726, 0.1601],
[0.4745, 0.9035, 0.0309],
[0.0565, 0.3769, 0.4328],
[0.5298, 0.0900, 0.0638]])
Pytorchの導入できました!
TensorFlowのインストール(GPU使用の場合)
次にTensorFlowのインストールをしました。
インストール手順は引き続き、金子先生の記事に沿って行いました。
TensorFLowがインストールできたか確認していきます。
以下はTensorFLowがGPUを認識できているのか確認するコマンドと結果です。
~$ python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
2023-10-21 22:47:33.485793: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2023-10-21 22:47:33.485844: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2023-10-21 22:47:33.485871: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2023-10-21 22:47:33.489461: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-10-21 22:47:34.072622: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
/usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.1
warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
2023-10-21 22:47:34.715020: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:34.835683: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:34.835755: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:35.334747: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:35.334824: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:35.334846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1977] Could not identify NUMA node of platform GPU id 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2023-10-21 22:47:35.334899: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:47:35.334932: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1886] Created device /device:GPU:0 with 13340 MB memory: -> device: 0, name: NVIDIA GeForce RTX 4080, pci bus id: 0000:2b:00.0, compute capability: 8.9
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 5767509284482495646
xla_global_id: -1
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 13988003840
locality {
bus_id: 1
links {
}
}
incarnation: 581585132380973155
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 4080, pci bus id: 0000:2b:00.0, compute capability: 8.9"
xla_global_id: 416903419
]
金子先生の記事によると、
「device_type: "GPU"」があれば,GPUが認識できている.
とのことなので、安心しました。
Pythonプログラムを実行してTensorFlowの動作確認
最後に、TensorFlowの動作確認をしていきます。
$ python3
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2023-10-21 22:50:09.166516: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2023-10-21 22:50:09.166567: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2023-10-21 22:50:09.166595: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2023-10-21 22:50:09.170125: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-10-21 22:50:09.742152: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
/usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.1
warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
>>> hello = tf.constant('Hello, TensorFlow!')
2023-10-21 22:50:10.387277: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.398297: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.398370: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.399660: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.399710: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.399749: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.898379: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.898451: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.c
[image]c:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.898481: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1977] Could not identify NUMA node of platform GPU id 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2023-10-21 22:50:10.898534: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:880] could not open file to read NUMA node: /sys/bus/pci/devices/0000:2b:00.0/numa_node
Your kernel may have been built without NUMA support.
2023-10-21 22:50:10.898569: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1886] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13340 MB memory: -> device: 0, name: NVIDIA GeForce RTX 4080, pci bus id: 0000:2b:00.0, compute capability: 8.9
>>> print(hello)
tf.Tensor(b'Hello, TensorFlow!', shape=(), dtype=string)```
これで無事にTensorFlowがインストールされました。
まとめ
公式マニュアルからインストールしたらGPUでうまく動作しなかったため、調べた結果、信頼性抜群の最高のインストールマニュアルに出会いました。
福山大学の金子先生、本当に助かりました!!!
Discussion