Тренировка составных ансамблевых моделей H2O с использованием экспортированных моделей Mojo и Binary

Я пытаюсь построить многоуровневые ансамблевые модели с использованием API Java H2O.

Для этого я обучил 2 модели

  1. Модель GBM
  2. Модель DRF

Я экспортировал эти модели в формате Mojo и Binary. Для экспорта моделей я использовал следующий фрагмент кода:

Для экспорта в формат Mojo:

        water.api.ModelsHandler modelsHandler = new ModelsHandler();
        water.api.StreamingSchema streamingSchema = modelsHandler.fetchMojo(3, modelsV3); //water.api.schemas3.ModelsV3

Для двоичного формата экспорта:

        water.api.ModelsHandler modelsHandler = new ModelsHandler();
        modelsHandler.exportModel(3, modelExport); //water.api.schemas3.ModelExportV3

Я также экспортировал данные об удержании перекрестной проверки, которые потребуются позже для обучения составных моделей ансамблей.

Предположим, что мои экспортированные имена моделей и их имена данных удержания следующие:

ModelName: StackGBMReg1 CVDataName: cv_holdout_prediction_StackGBMReg1

Имя модели: StackDRFReg1 CVDataName: cv_holdout_prediction_StackDRFReg1

Обученные ансамблевые модели

Затем я импортирую эти модели и их CV-данные на сервер H2O для обучения составных моделей ансамбля. Вот фрагмент кода для этой операции:

Чтобы импортировать несогласованные данные:

    ImportFilesV3 importFile = h2o.importFiles(workingDir + fileName); //fileName: cv_holdout_prediction_StackGBMReg1 or DRFReg1 one.

Чтобы импортировать модель:

    ModelsHandler modelsHandler = new ModelsHandler();
    water.api.schemas3.ModelsV3 importedModel = modelsHandler.importModel(3, modelImport); //water.api.schemas3.ModelImportV3

Я получаю следующую ошибку при попытке импортировать модели Mojo.

    H2OException: Error while importing model : StackGBMReg1.zip
        at ImportAndScore.importModel(ImportAndScore.java:306)
        at ImportAndScore.main(ImportAndScore.java:61)
    Caused by: java.lang.IllegalArgumentException: Missing magic number 0x1CED at stream start
        at water.AutoBuffer.<init>(AutoBuffer.java:287)
        at hex.Model.importBinaryModel(Model.java:2380)
        at water.api.ModelsHandler.importModel(ModelsHandler.java:209)
        at ImportAndScore.importModel(ImportAndScore.java:302)
        ... 1 more

Согласно ответу, который я получил на форуме h2o, импорт моделей Mojo не поддерживается. Я нахожу это действительно странным.

Чтобы преодолеть эту проблему, я импортировал бинарные модели, которые были успешными. Затем тренировал сложенные ансамблевые модели, которые отлично сработали.

Мои вопросы:

1. Since, mojo Model import is not working using ModelsHandler.importModel(), is there another API available or work around which can help me to import Mojo Model in H2O?
2. Can we convert, POJO or MOJO models into binary Model for import purpose?
3. As per last reply for h2o, binary models are not backward compatible. So, if I upgrade H2O later, my older trained models will not work for training new stacked ensemble models. Actually, it will fail at import step itself. 
    a. So, is there a way to use the binary models without having the backward compatibility issue?
    b. If binary models are the only way to go, then is my approach right for training stacked Ensemble models(using previously exported/saved models)?
    c. Am I likely to face any other issue with binary models in future which I dont for see now?

Моя главная задача - избавиться от проблемы обратной совместимости. Если есть какой-то способ обойти это, это действительно поможет моей работе. Поскольку я использую код Java, я не возражаю против использования какого-либо внутреннего API H2O, который не предоставляется напрямую.

Обратите внимание, что я не говорю о загрузке моделей MOJO для целей подсчета очков. Я понимаю, что мы можем легко использовать модели Mojo для оценки по этой ссылке: http://docs.h2o.ai/h2o/latest-stable/h2o-docs/productionizing.html

1 ответ

Решение

Отвечая на ваши вопросы в строке:

1. Так как импорт модели mojo не работает с использованием ModelsHandler.importModel(), есть ли другой API или обходной путь, который может помочь мне импортировать модель Mojo в H2O?

Нет. MOJO был разработан с целью облегчить запуск модели в производство.

2. Можем ли мы преобразовать модели POJO или MOJO в двоичную модель для целей импорта? Нет.

3. В соответствии с последним ответом для H2O, двоичные модели не имеют обратной совместимости. Таким образом, если я обновлю H2O позже, мои старшие обученные модели не будут работать для обучения новых составных моделей ансамбля. На самом деле, он потерпит неудачу на самом шаге импорта.

Да, вы сможете загружать и использовать эту сохраненную двоичную модель только с той же версией H2O, которую вы использовали для обучения своей модели. Бинарные модели H2O не совместимы между версиями H2O.

а. Итак, есть ли способ использовать бинарные модели без обратной совместимости? Нет.

б. Если бинарные модели - единственный путь, то подходит ли мой подход для обучения составных моделей ансамбля (с использованием ранее экспортированных / сохраненных моделей)? Да.

с. Могу ли я столкнуться с какой-либо другой проблемой с бинарными моделями в будущем, которую я не вижу сейчас? Обратная совместимость является основной проблемой.

Обратите внимание, что H2O.ai может поддерживать чтение MOJO в H2O-3 в будущем, но в настоящее время нет расписания для этого.

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