tensorflowを実行するとGPUメモリの殆どを確保してしまうので、それを抑えたく、tfのバージョンに合わせて
tf.config.experimental.set_memory_growth
や、gpu_options.allow_growth = True
等を試しましたが、
どうしても大部分(3.7/4.0GB程度)が確保されてしまい、制限できません。
ちなみに、Jupyter Notebook
を使用しています。
環境
-
windows 10
-
GPU : NVIDIA GeForce GTX 1650(専用メモリは4G)
-
python 3.7.9 + TensorFlow-GPU 1.15.0 (python 3.6.12 + TensorFlow-GPU 2.0.0)
-
Kerasはインストールしてない
-
Visual Studio Community 2017
-
CUDA 10.0
-
cuDNN 7.6.0
tensorflowのメモリ使用量を抑制するコード(エラーは出ず、正常に実行されます)
tensorflow-gpu=2.0.0
の環境と、tensorflow-gpu=1.15
の環境を、Anaconda
で作成し、
それぞれ実行しましたが、どうしてもメモリを抑えられません。
import tensorflow as tf print("Tensorflow Ver: ", tf.__version__) if tf.test.gpu_device_name(): print('Default GPU Device: {}'.format(tf.test.gpu_device_name())) else: print("Please install GPU version of TF") gpu_id = 0 print(tf.__version__) if tf.__version__ >= "2.1.0": physical_devices = tf.config.list_physical_devices('GPU') tf.config.list_physical_devices('GPU') tf.config.set_visible_devices(physical_devices[gpu_id], 'GPU') tf.config.experimental.set_memory_growth(physical_devices[gpu_id], True) elif tf.__version__ >= "2.0.0": physical_devices = tf.config.experimental.list_physical_devices('GPU') tf.config.experimental.set_visible_devices(physical_devices[gpu_id], 'GPU') tf.config.experimental.set_memory_growth(physical_devices[gpu_id], True) else: from tensorflow.keras.backend import set_session config = tf.ConfigProto( gpu_options=tf.GPUOptions( visible_device_list=str(gpu_id), # specify GPU number allow_growth=True ) ) set_session(tf.Session(config=config))
検証に使用したCNNモデル
from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() train_images, test_images = train_images / 255.0, test_images / 255.0 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) #Conv2D(32, (3, 3)):2次元畳み込み層、「3x3」の大きさのフィルタを32種類使用 model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) #Conv2D(64, (3, 3)):2次元畳み込み層、「3x3」の大きさのフィルタを64種類使用 model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) # Dense Layerの追加(全結合)- Classifier(分類) model.add(layers.Flatten()) model.add(layers.Dense(units=64, activation='relu')) model.add(layers.Dense(units=10)) #10個のアウトプット model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) model.fit(train_images, train_labels, batch_size=64, epochs=1, validation_data=(test_images, test_labels))
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/01 13:25
2020/12/01 15:11
2020/12/02 05:20 編集
2020/12/02 12:33 編集