Просто переключился на TensorFlow 2.1 и получил несколько раздражающих предупреждений - PullRequest
1 голос
/ 07 апреля 2020

Информация о системе:

  • Ноутбук P C
  • ОС Платформа и распространение: Ubuntu Linux, 18.04, x64
  • TensorFlow устанавливается с: pip
  • Версия TensorFlow: 2.1.0
  • Python версия: 3.6.9
  • Модель и память графического процессора: nVidia RTX2060 6 ГБ
  • Модель процессора: i7-9850H
  • Оперативная память: 16 ГБ

Я работал с TensorFlow 2.0 на процессоре с другим P C.

Я установил ( используя руководство по https://www.tensorflow.org/install/gpu) CUDA 10.1.

Я начал запускать старый сценарий для NN, используя ResNet50V2 для набора данных из 26998 обучающих образов и 1000 для проверки в 2 классах.

NET

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
keras_layer (KerasLayer)     (None, 1792)              4363712   
_________________________________________________________________
dense (Dense)                (None, 64)                114752    
_________________________________________________________________
dropout (Dropout)            (None, 64)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 130       
=================================================================
Total params: 4,478,594
Trainable params: 114,882
Non-trainable params: 4,363,712
_________________________________________________________________

, где keras_layer - это число snet, полученное от tenorflow_hub.

В качестве первого выпуска я получил CUDA_ERROR_OUT_OF_MEMORY, который я решил добавить

physical_devices = tf.config.experimental.list_physical_devices('GPU')
for dev in physical_devices:
  try:
    tf.config.experimental.set_memory_growth(dev, True)
    print(dev, "SET MEMORY GROWTH")
  except:
    print("Device config error")
    sys.exit(1)

однако теперь я получил похожее предупреждение:

2020-04-07 01:39:57.857284: I tensorflow/stream_executor/cuda/cuda_driver.cc:801] failed to allocate 2.70G (2897281024 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory

2020-04-07 01:39:58.035192: W tensorflow/core/common_runtime/bfc_allocator.cc:309] Garbage collection: deallocate free memory regions (i.e., allocations) so that we can re-allocate a larger region to avoid OOM due to memory fragmentation. If you see this message frequently, you are running near the threshold of the available device memory and re-allocation may incur great performance overhead. You may try smaller batch sizes to observe the performance impact. Set TF_ENABLE_GPU_GARBAGE_COLLECTION=false if you'd like to disable this feature.

оба напечатаны несколько раз.

После этого я получаю:

2020-04-07 01:41:59.069302: W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Cancelled: Operation was cancelled

Я читал, что Вы не связаны, но мне не ясно, что может вызвать второе предупреждение.

В конце концов, это появилось:

WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

(я думаю, что они вызваны тремя различными проблем, я решил опубликовать все в одном вопросе, чтобы не спамить, но если это проблема, я могу разделить на разные темы.)

Я использовал ImageDataGenerator для генерации наборов данных:

train_image_generator = ImageDataGenerator(rescale=1./255., rotation_range=10., horizontal_flip=True) # Generator for our training data
validation_image_generator = ImageDataGenerator(rescale=1./255.) # Generator for our validation data

train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
                                                        directory=train_dir,
                                                        shuffle=True,
                                                        target_size=(IMG_H, IMG_W),
                                                        class_mode='sparse')

validation_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
                                                          directory=validation_dir,
                                                          shuffle=True,
                                                          target_size=(IMG_H, IMG_W),
                                                          class_mode='sparse')

Если потребуется какой-то другой код, я добавлю.

Спасибо.

EDIT1:

за предупреждение:

2020-04-07 01:41:59.069302: W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Cancelled: Operation was cancelled

Я попытался установить workers=1 в fit(), и оно исчезло, но я до сих пор не знаю причину и последствия этого предупреждения.

1 Ответ

0 голосов
/ 08 апреля 2020

Эта ошибка связана с тем, что графический процессор уже занят из-за предыдущего запуска программы. Теперь, когда вы пытаетесь выполнить повторный запуск, не хватает памяти, чтобы снова занять модель.

Выполните следующие действия -


  1. Откройте терминал и введите nivida-smi
  2. Найдите идентификатор процесса (PID), занимающий ваш графический процессор
  3. Убейте процесс (PID), занимающий графический процессор, используя kill -9 PID

Примечание. Вы также можете убить процесс, используя top

...