2017-01-27 4 views
-3

Моя программа должна пройти этап обучения, который занимает около 15 минут. Результатом этого обучения является две модели, хранящиеся в двух общественных объектах, которые затем будут использоваться в других классах. Я ставлю этот шаг обучения в следующей методике:Сохранять значения несериализуемых объектов после Tomcat Reloaded

public void init()

Так, чтобы быть выполнены в начале сервера. Проблема в том, что каждый раз, когда сервер перезагружается, он повторно выполняет шаг обучения. Я должен подождать еще 15 минут, чтобы увидеть последствия небольшого изменения. Мне было интересно, есть ли способ сохранить ценность некоторых объектов во время работы программы и сервера. Вот мой код:

public static Model model1; 
public static Model model2; 

@Override 
public void init() 
{ 
    model1= readModel(source1) 
    model2= readModel(source2) 
} 

PS. Я использую сервлеты с страницами JSP и Tomcat Server.

+0

Возможно ли, чтобы эта сериализация модели на диск была готова? –

+0

Пробовал, не работал. Сначала он показывает NotSerializableException .. тогда я реализовал интерфейс Serializable в классе модели. Но все равно такая же ошибка. Модель, которую я читаю весом более 5 ГБ, и серийный файл, который я получаю, составляет около 1 КБ. – M20

+0

Вы используете стандартную существующую библиотеку для обучения этих моделей или это часть вашей письменной логики? Причина, по которой большинство библиотек машинного обучения имеет стандартный экспорт моделей для двоичной модели. Если это библиотека, такая как R или weka, возможно, вы можете использовать свои возможности экспорта, чтобы сбрасывать модель на диск. –

ответ

0

Как общее решение, я предлагаю вам сохранить учебную часть и модель из неработающего контейнера. Возможно, другой VM/процесс. Таким образом, вы сможете сохранить модель до тех пор, пока процесс требуется для запуска, независимо от состояния клиентского процесса, который является вашим tomcat.

ПОДРОБНОЕ

Вы можете добиться этого в нескольких шагах

  • Во-первых, необходимо перенести подготовку модели и кэширование на другую программу. Эта программа будет запущена в качестве демона, и вы можете использовать Apache для использования в качестве фоновой службы
  • Во-вторых, если ваш демон запущен и работает, потребитель модели может взаимодействовать с моделью VM с использованием стандартных протоколов. Выбор протокола зависит от ваших точных требований. Это может быть API, открытый через TCP/HTTP или RMI или что-то еще.

АЛЬТЕРНАТИВЫ

Как я предложил в комментариях, вы можете также сбросить модели бинарного в файловую систему после того, как модель обучен. Загрузите модель при запуске tomcat. Io будет намного быстрее, чем этап обучения.

+0

Не могли бы вы подробнее рассказать о том, как я это делаю, или где я должен смотреть, чтобы узнать это? – M20

+0

RMI не сможет отправлять объекты через процессы, если они не являются Serializable.Для этого необходимо предоставить некоторую услугу оболочки для TCP/HTPP или RMI. –

+0

Я думаю, что единственная передача данных для этой службы будет входной для модели и выхода. Вся модель никогда не будет перенесена через vms, так как это нарушает всю идею о том, чтобы иметь ее в другом vm в целом. Принимая во внимание, что типы данных, используемые как для ввода модели, так и для вывода, подлежат сериализации (что универсально), RMI может использоваться так же хорошо, как и оболочка. –

0

Сделайте его боковым компонентом в сеансе или приложении, если необходимо, и получите доступ к нему как к компоненту, а не к обычным объектам.

+0

Tomcat не сможет перенести бобы через перезагрузки, если они не являются Serializable. –

0

Вы могли бы посмотреть here? Идея либо сэкономит сеанс где-то, либо разместит ваши объекты модели, либо просто использует Hazelcast (возможно, избыточный уровень) :)

+0

Это может быть комментарий. – Sid

 Смежные вопросы

  • Нет связанных вопросов^_^