Почему один вызов Keras model.predict () использует 1,3 ГБ памяти? - PullRequest
0 голосов
/ 04 апреля 2019

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

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

Я не уверен, что это ожидаемое поведение, но я бы хотел, чтобы программа работала настолько эффективно, насколько это возможно, так как я хотел бы запускать ее на TPU в 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 ГБ, использовавшихся ранее.

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