TensorFlow продолжает расходовать системную память и зависает во время тренировок - PullRequest
2 голосов
/ 26 октября 2019

Я пытался обучить небольшую сеть, чтобы ознакомиться с TensorFlow 2.0. Тем не менее, кажется, что tenorflow не работает должным образом на моем компьютере. Вот мой код:

import tensorflow as tf
from functools import reduce
from tensorflow.keras import layers, Sequential, datasets
import numpy as np




(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()


train_images, test_images = train_images / 255.0, test_images / 255.0


class Model():
   weights = []
   biases = []

   def weights_collect(self):
       for l in self.layers:
           try:
               self.weights.append(l.kernel)
               self.biases.append(l.bias)
           except:
               pass

   def __init__(self):
       self.layers = [
           layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
           layers.MaxPool2D((2, 2)),
           layers.Conv2D(64, (3, 3), activation='relu'),
           layers.MaxPool2D((2, 2)),
           layers.Conv2D(64, (3, 3), activation='relu'),
           layers.MaxPool2D((2, 2)),
           layers.Flatten(),
           layers.Dense(1024, activation='relu'),
           layers.Dense(10)
       ]
       self.model = Sequential(self.layers)
       self.weights_collect()

   @tf.function
   def predict_logits(self, X):
       return self.model(X)


   @tf.function
   def __call__(self, X):
       return tf.nn.softmax(self.model(X))


@tf.function
def loss(m:Model, x:np.ndarray, t:np.ndarray):
   logits = m.predict_logits(x)
   tar = tf.one_hot(t, 10)
   return tf.math.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(tar, logits))

@tf.function
def acc(m, X, T):
   logits = m.predict_logits(X)
   target = tf.reshape(tf.dtypes.cast(T, tf.dtypes.int32), [-1])
   pred = tf.math.argmax(logits, axis=1, output_type=tf.dtypes.int32)
   return tf.math.reduce_sum(tf.dtypes.cast(pred==target, tf.dtypes.int32))/tf.shape(X)[0]


BATCH_SIZE = 1
dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels)).batch(BATCH_SIZE)


m = Model()
opt = tf.keras.optimizers.Adam()
EPOCHS = 20
for i in range(EPOCHS):
   for x, t in dataset:
       with tf.GradientTape() as tape:
           loss_value = loss(m, x, t)
       grads = tape.gradient(loss_value, m.model.trainable_weights)
       opt.apply_gradients(zip(grads, m.model.trainable_weights))
       print("hello")
   print(float(loss(m, test_images, test_labels)))
   print(float(acc(m, test_images, test_labels)))

При запуске этого кода я продолжал получать сообщение об ошибке такого типа:

Allocation of 1228800000 exceeds 10% of system memory.

И моя модель прекратит обучение после этого.

Я пытался изменить размер пакета, но он все равно не работает. Модель прошла обучение несколько раз и умерла. Даже я изменил размер пакета на 1.

Кажется, что TensorFlow продолжает выделять системную память во время обучения, но не освобождает ее.

Я также переустанавливал всю систему, пытаясь это исправить,и все равно не работает.

Ответы [ 3 ]

2 голосов
/ 26 октября 2019

Только что проблема решена, похоже, что-то не так с последней версией драйвера NVIDIA Game Ready (440.97). Как только я вернусь к 436.48, код продолжит обучение, даже несмотря на то, что ошибка, о которой я упоминал выше, все еще будет присутствовать.

1 голос
/ 26 октября 2019

Какой графический процессор вы используете на своем компьютере? Ваш код отлично работает с картой GPU. Я увеличил размер пакета до 128 и удалил оператор print('Hello'), после чего я смог успешно запустить код.

Кроме того, поскольку вы только начинаете работу с TensorFlow, GradientTape - это не способначать изучать TensorFlow. Он используется только для индивидуального обучения. Используйте model.fit() для проведения обучения или начните с этих официальных учебных пособий .

0 голосов
/ 31 октября 2019

У меня также была проблема с обучением модели MaskRCNN с использованием API обнаружения объекта tenorflow (он просто зависал после первого шага, без использования графического процессора и с постоянной ~ 18 CPU). Сценарий работал отлично две недели назад.

Короче говоря, я откатился к предложенному драйверу, и все снова работает хорошо. Я также попробовал последнее обновление (после 440.97), и проблема все еще была.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...