Модель TensorFlow / Keras __call__ становится все медленнее и медленнее при запуске на GPU

#python #tensorflow #keras

#питон #тензорный поток #keras

Вопрос:

Я пытаюсь реализовать алфавитно-подобный ИИ для настольной игры для игры Гомоку (поиск по дереву Монте-Карло в сочетании с CNN, который оценивает позиции доски).

Прямо сейчас MCTS реализован как отдельный компонент. Кроме того, у меня есть простой TCP-сервер, написанный на Python, который получает позиции из MCT (партиями от 50 до 200), преобразует их в массивы Numpy, передает их в модель TF / Keras путем вызова __call__ , преобразует их обратно и отправляет результаты в MCT через TCP.

Во время обучения я генерирую обучающие данные (около 5000 досок), заставляя ИИ играть против самого себя, вызывать model.fit один раз, создавать новый набор данных, используя новые веса модели, и так далее. Я параллельно играю несколько матчей, каждый из которых использует свой отдельный сервер Python / TF. Каждый сервер загружает свою собственную копию модели (я использую tf.config.experimental.set_memory_growth(gpu, True) ).

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

Я попытался смягчить проблему, перезапуская сервер Python (и, следовательно, модель) после каждого совпадения. Это, казалось бы, решало проблему, пока я не начал сталкиваться с той же проблемой после нескольких итераций обучения.

Сначала я подумал, что причина в моей неидеальной настройке (игровой ноутбук под управлением Windows), но на сервере Linux моего университета проблема также возникла. На моем компьютере с Windows, наряду с тем, что модель становилась все медленнее и медленнее, она также использовала все меньше и меньше памяти. Этого, по-видимому, не произошло в Linux.

Ответ №1:

У меня была аналогичная проблема, и она была связана с тем, что для моей карты были установлены неправильные драйверы NVIDIA и не был установлен CUDA. Надеюсь, это было полезно.

https://developer.nvidia.com/cuda-downloads