Почему один вызов Keras model.predict() использует 1,3 ГБ памяти?

#python #tensorflow #machine-learning #memory-leaks #keras

#python #тензорный поток #машинное обучение #утечки памяти #keras

Вопрос:

В настоящее время я воссоздаю AlphaZero Deepmind в качестве личного проекта, используя Keras с серверной частью TensorFlow. Во время каждого игрового моделирования NN, который я использую, должен делать много прогнозов. NN работает так, как должен, но использует чрезмерный объем оперативной памяти процессора.

Я использую psutil.Process(os.getpid()).memory_info().rss для печати использования памяти, и когда model.predict() вызывается в первый раз, использование памяти увеличивается примерно с 0,3 ГБ до 1,6 ГБ. При последовательных вызовах новая память (или, по крайней мере, очень мало) не выделяется.

Я не уверен, что это ожидаемое поведение, но я хотел бы, чтобы программа работала как можно эффективнее, поскольку я хотел бы запустить ее на процессорных процессорах в Google Compute Engine.

Ниже приведен код для моей модели Keras:

 main_input = Input(shape = self.input_dim, name = 'main_input', dtype="float32")

x = self.conv_layer(main_input, 256, (3,3))

for i in range(19): # AlphaZero used 19
    x = self.residual_layer(x, 256, (3, 3))

vh = self.value_head(x)
ph = self.policy_head(x)

model = Model(inputs=[main_input], outputs=[vh, ph])
model.compile(loss={'value_head': 'mean_squared_error', 'policy_head': softmax_cross_entropy_with_logits},
    optimizer=SGD(lr=self.learning_rate, momentum = MOMENTUM), #config.MOMENTUM
    loss_weights={'value_head': 0.5, 'policy_head': 0.5}
)
  

Нейронная сеть очень большая, поэтому ее размер может влиять на объем выделяемой оперативной памяти, но 1,6 ГБ кажется необоснованным. Кроме того, если я уменьшу модель до наличия только 2 остаточных слоев вместо 19, она по-прежнему выделяет около 1,54 ГБ вместо 1,6 ГБ, использовавшихся ранее.

Комментарии:

1. сколько параметров имеет ваша модель?

2. Вероятно, размер пакета требует много памяти? 1,6 Гб — это не так много…