Мой механизм принятия решений построен на python - flask фреймворке с uWSGI и Nginx. В рамках оценки пользователя с помощью HTTP-запроса я запускаю системы показателей с h2o == 3.20.0.7, чтобы сгенерировать оценку для принятия решения о пользователе. Ниже приведены некоторые ясности о том, как я использую h2o в своем приложении
h2o.init() # initialize
predictions = h2o.mojo_predict_pandas(features_df, MODEL_MOJO_ZIP_FILE_PATH, MODEL_GENMODEL_JAR_PATH) # generate score
# features_df -> pandas DF
Детали H2o с момента запуска приложения
-------------------------- ----------------------------------------
H2O cluster uptime: 01 secs
H2O cluster timezone: Etc/UTC
H2O data parsing timezone: UTC
H2O cluster version: 3.20.0.7
H2O cluster version age: 1 year, 7 months and 10 days !!!
H2O cluster name: H2O_from_python_unknownUser_t8cqu9
H2O cluster total nodes: 1
H2O cluster free memory: 1.656 Gb
H2O cluster total cores: 4
H2O cluster allowed cores: 4
H2O cluster status: accepting new members, healthy
H2O connection url: http://localhost:54321
H2O connection proxy:
H2O internal security: False
H2O API Extensions: XGBoost, Algos, AutoML, Core V3, Core V4
-------------------------- ----------------------------------------
И H2o (работает как отдельная служба), и flask приложение работает на одном сервере (3 - 8 серверов под балансировщиком нагрузки).
Иногда использование памяти постоянно увеличивается и выдает Cannot allocate memory
при вычислении карт результатов. Тогда это автоматически улаживается после иногда. Система показателей запускается вместе с другими правилами (последовательный запуск) по запросу HTTP, но об ошибке сообщает только при вычислении карт показателей. Предполагая, что это требует больше памяти, как это связано с H2O. Трафик c выглядит одинаковым на протяжении всего этого цикла. Поэтому я надеюсь, что это не из-за высокого трафика c.
Согласно моему исследованию, некоторая память где-то висит и не высвобождается.
Я сделал следующее обходные пути для освобождения зависшей памяти и уменьшения воздействия
1 G C в h2o с python
https://aichamp.wordpress.com/2016/11/10/calling-h2o-garbage-collect-from-python
Python Управление памятью H2O
- Не испытал положительного воздействия.
2 Запланированный перезапуск службы - изящная замена старых серверов новыми серверами.
- Получил положительный эффект. 60-70% ошибок ушли.
Я хотел бы понять, что происходит внутри, и представить правильное исправление, а не обходной путь. Помощь будет высоко ценится.
Для вашей информации,
Я не пробовал
1 обновление кластера H2o до новой версии в качестве текущей версия слишком старая (1 год, 7 месяцев и 11 дней) - согласен с тем, что лучше использовать последнюю версию, но нет гарантии, что то же самое не повторится, и требуются дополнительные усилия с точки зрения проверки оценки, результата и т. д. c
2 Я не ограничил использование памяти H2o с помощью min_mem_size
, так как не хочу, чтобы оценка системы показателей не удалась.
и
Я планирую
1 добавить профилировщик памяти, чтобы легко понять использование памяти каждой части / process, связанный с моим приложением
edit
2 отделяет h2o от приложения flask и размещает его на разных серверах для масштабирования это просто. - Тем не менее, такая же проблема возможна.
- Я go через какой-то профилировщик памяти, но все еще не смог завершить тот, который лучше всего подходит для моей текущей ситуации. Я хотел бы получить предложение по этому вопросу.
Спасибо