Метод predicBinomial медленно из кода Java

Я новичок в H2o. Я вызываю метод predBinomial из приложения Java и получаю верные результаты, но ответ занимает много времени. Вот мой сценарий:

Я раскрываю метод веб-службы, в котором я получаю имя класса (modelName) и использую ClassLoader для его загрузки (идея состоит в том, чтобы позволить бизнес-пользователям загружать свои скомпилированные модели на сервер и иметь возможность вызывать службу без какой-либо разработки обязательный):

ClassLoader classLoader = new URLClassLoader(
                new URL[]{new URL(String.format("%s%s/", H2O_MODELS_URI, modelName))}, this.getClass().getClassLoader());

затем я создаю необработанную модель:

hex.genmodel.GenModel rawModel = (hex.genmodel.GenModel) classLoader.loadClass(modelName).newInstance();

Создайте экземпляр оболочки:

EasyPredictModelWrapper model = new EasyPredictModelWrapper(rawModel);

Подготовьте RowData (параметры модели, полученные как параметры службы):

RowData row = _h20ParametersMapper.map(modelParameters); 

Пока здесь все идет гладко, но когда я звоню

BinomialModelPrediction binomialPrediction = model.predictBinomial(row);

На возврат ответа требуется более 10 секунд, что для нас не работает. Видите ли вы, как я могу добиться некоторой производительности? Я имею в виду библиотеку h2o-genmodel: 3.18.0.3.

Спасибо!

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

TomKraljevic 27.03.2018 02:08

Сколько времени требуется для этой строки данных в среде, в которой была обучена модель (например, R, Python или Flow)? IIUC (@TomKraljevic может меня поправить) он будет предсказывать, используя точно такой же код Java. Так что если в кластере H2O он тоже медленный, то модель просто большая и медленная. А если нет, у вас либо есть ошибка в вашем Java-коде, либо вам не хватает памяти?

Darren Cook 27.03.2018 10:38

@DarrenCook the MOJO очень похож на оценку in-H2O. POJO совсем не похож.

TomKraljevic 27.03.2018 12:53

Привет, если я создаю основной класс и запускаю его прямо на сервере, время отклика хорошее: real 0m1.492s user 0m0.985s sys 0m0.406s В приложении Java я получаю правильные результаты, но с плохой производительностью . Я исследую проблему с памятью, о которой вы упомянули. Спасибо

Sergio Vargas 27.03.2018 16:20

Кроме того, компилятору Java JIT необходимо разогреться при просмотре новых методов. Так что не измеряйте это по самому первому предсказанию. MOJO не так чувствителен к этой разминке, как POJO (поскольку MOJO не является сгенерированным кодом).

TomKraljevic 27.03.2018 17:35

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

Sergio Vargas 04.04.2018 18:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
91
0

Другие вопросы по теме