しょくぶつ(^ ^)です。
前回では、CUDA, cuDNN, Miniconda(Python仮想環境), Python, Tensorflowを一気にインストールしました。
そこで、TensorflowでGPUがちゃんと使えてるか確認します。
なお、この時点ではまだSpyderを入れていないです。
必要な方( しょくぶつ(^ ^)なんかは特にそう )は先に次回
Tensorflow「2.16」: WSL2環境下でGPUを使う方法(その3)
を実行してください。
動作確認
方法(1) TensorflowからGPUが見えているか確認
次のコマンドでTensorflowが機能するか確認します。ネットでもよく見かける方法です。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
方法(2) TensorflowでGPUがちゃんと使えているか確認
次のサイト様のコードを使用します。
Kerasでまた複数のバックエンドが使えるようになるらしい #機械学習 - Qiita
ただし、次のように修正して下さい。
修正(1)
- 元
- os.environ["KERAS_BACKEND"] = "tensorflow"
+ os.environ["KERAS_BACKEND"] = "torch"
- 修正
os.environ["KERAS_BACKEND"] = "tensorflow"
修正(2)
- 元
import keras_core as keras from keras_core.layers import Conv2D, Input, MaxPooling2D, Flatten, Dense
- 修正
import keras from keras.layers import Conv2D, Input, MaxPooling2D, Flatten, Dense
修正した後のコード
import os
os.environ["KERAS_BACKEND"] = "tensorflow"
#os.environ["KERAS_BACKEND"] = "torch"
#import keras_core as keras
#from keras_core.layers import Conv2D, Input, MaxPooling2D, Flatten, Dense
import keras
from keras.layers import Conv2D, Input, MaxPooling2D, Flatten, Dense
# MNISTデータを分割
(train_images, train_labels), (test_images,test_labels) = keras.datasets.mnist.load_data()
# パラメータ
classes = 10
batch_size = len(train_images) // 16
epochs = 20
# 簡単なモデルを作成
model = keras.Sequential(
[
Input(shape=(28, 28, 1)),
Conv2D(32, (3, 3), activation="relu"),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation="relu"),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation="relu"),
Flatten(),
Dense(64, activation="relu"),
Dense(classes, activation="softmax"),
]
)
# 前処理
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, classes)
test_labels = keras.utils.to_categorical(test_labels, classes)
model.compile(
optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]
)
# 学習開始
model.fit(train_images, train_labels, epochs=epochs, batch_size=batch_size)
# 結果をもとに評価
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print("Test accuracy:", test_acc)
実行するとタスクマネージャーを見るとGPU使用率がガッと跳ね上がっているはずです。
うまくいったでしょうか?
正直に言うと、何度やっても未だに自信ないです。
CUDA, cuDNNをインストールを再確認してください。
cuDNNの入れ忘れとかありませんか?
また、前回で、
「Tensorflow, python,.cuda, cuDNNはきちっとバージョンを合わせる必要があるのです。(ただしそうじゃないこともあります)」
などと書いたのですが、なんと、CUDAのバージョンを (12.3ではなく12.1に) わざとずらすと動いた、なんてこともあります。
複数のCUDAのインストール、その切り替えなどは次のサイト様の記事を参考にして下さい。
WSL2 Ubuntu 22.04 LTS の CUDA をバージョンアップする | hiroの長い長い冒険日記 (hiro20180901.com)
WSL2でCUDA11とCUDA12を共存させる|noguchi-shoji (note.com)
PyTorchとGPU/CUDA周りの環境構築のバージョン解決 #Ubuntu - Qiita
あと、WSL上で他のアプリを使うために別バージョンのCUDA, cuDNNをインストールしたりしてませんか?
そんなときも上記のサイト様を参考にして下さい。
次回の「GPUを使う方法(その3)」では、WSL2上のSpyderを使って、Tensorflow 2.16でのGPU機械学習が大成功しているときの画面をご覧頂きます。