tensorflow #out-of-memory #tensorflow2.0 #object-detection #object-detection-api
#tensorflow #не хватает памяти #tensorflow2.0 #обнаружение объекта #object-detection-api
Вопрос:
Я получаю ошибку исчерпания ресурса при инициализации обучения для моей модели графического процессора Object detection Tensorflow 2.5. Я использую 18 обучающих изображений и 3 тестовых изображения. Предварительно обученная модель, которую я использую, — это более быстрая модель R-CNN ResNet101 V1 640×640 из Tensorflow zoo 2.2. Я использую Nvidia RTX 2070 с 8 ГБ выделенной памяти для обучения моей модели.
Меня смущает то, почему процесс обучения занимает так много памяти у моего графического процессора, когда обучающий набор настолько мал. Это сводная информация о памяти графического процессора, которую я получаю с ошибкой:
Limit: 6269894656
InUse: 6103403264
MaxInUse: 6154866944
NumAllocs: 4276
MaxAllocSize: 5786902272
Reserved: 0
PeakReserved: 0
LargestFreeBlock: 0
Я также уменьшил размер пакета обучающих данных до 6, а тестовых данных — до 1.
Ответ №1:
Я использую приведенный ниже код во всех ноутбуках, где я работаю на gpu, чтобы предотвратить ошибки такого типа:
import tensorflow as tf
gpus = tf.config.list_physical_devices('GPU')
if gpus:
try:
# Currently, memory growth needs to be the same across GPUs
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Memory growth must be set before GPUs have been initialized
print(e)
По умолчанию TensorFlow отображает почти всю память графического процессора всех графических процессоров (с учетом CUDA_VISIBLE_DEVICES), видимую процессу.
Дополнительная информация об использовании gpu с tensorflow здесь
Возможно, это решит ошибку
Надеюсь, я вам помог
Комментарии:
1. Я совсем новичок в tensorflow и python в целом. Куда бы я поместил этот код? Заранее спасибо.
2. сразу после импорта пакета. Например:
import tensorflow as tf
Ответ №2:
На максимальное использование памяти во время обучения влияют несколько факторов, и уменьшение размера пакета обычно связано с ограничениями памяти. Рекомендация Александра Леобонса Соуза также может помочь, предоставляя Tensorflow большую гибкость при выделении памяти, но если вы продолжаете видеть ошибки ООМ, я бы рекомендовал еще больше уменьшить размер пакета. В качестве альтернативы вы можете попробовать ограничить обучаемые переменные в модели, что также приведет к снижению использования памяти во время обучения.
Вы упомянули: «Меня смущает то, почему процесс обучения занимает так много памяти у моего графического процессора, когда обучающий набор настолько мал». Что-то, что следует иметь в виду, это то, что во время обучения ваши обучающие данные будут использоваться при прямом проходе через модель, а затем вывычислит градиенты для каждой обучаемой переменной в обратном проходе. Даже если ваши обучающие данные невелики, промежуточные вычисления (включая градиенты) требуют памяти. Эти вычисления линейно масштабируются в зависимости от размера вашего пакета и размера модели. За счет уменьшения размера пакета или уменьшения количества обучаемых переменных для обучения потребуется меньше памяти.
Еще одно предложение, если размер вашего входного тензора изменяется в ваших обучающих данных (т. Е. Если Количество основных ограничивающих прямоугольников истинности меняется с 1 на 2, и вы не заполняете входной тензор), это может привести к повторному отслеживанию графика вычислений во время обучения, и вы увидите предупреждения. Я не уверен, какое влияние на память в этом случае, но подозреваю, что для каждого повторного отслеживания эффективно требуется дублирующая модель в памяти. Если это так, вы можете попробовать использовать @tf.function(experimental_relax_shapes=True)
.
Комментарии:
1. Спасибо за помощь! Еще большее уменьшение размера пакета помогло начать процесс обучения.