H2O AI: неподдерживаемая модель MOJO word2vec

У меня 3 модели H2O:

$ ls dataset/mojo
1. DeepLearning_model_python_1582176092021_2.zip
2. StackedEnsemble_BestOfFamily_AutoML_20200220_073620.zip
3. Word2Vec_model_python_1582176092021_1.zip

Бинарные модели для этих 3 были созданы на v3.28.0.3, но я пытаюсь обновить версию h2o и productionize на v3.30.0.5 Итак, я успешно преобразовал эти 3 двоичных файла в модели MOJO (как указано выше)

При попытке загрузить эти модели моджо с помощью _ 2_, только для Word2Vec я получаю сообщение об ошибке:


In [15]: w2v_path = 'dataset/mojo/Word2Vec_model_python_1582176092021_1.zip'

In [16]: w2v_model = h2o.upload_mojo(w2v_path)
generic Model Build progress: | (failed)                                                      |   0%
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-16-734005ed70a8> in <module>
----> 1 w2v_model = h2o.upload_mojo(w2v_path)

~/.envs/h2o-test/lib/python3.8/site-packages/h2o/h2o.py in upload_mojo(mojo_path)
   2149     frame_key = response["destination_frame"]
   2150     mojo_estimator = H2OGenericEstimator(model_key = get_frame(frame_key))
-> 2151     mojo_estimator.train()
   2152     print(mojo_estimator)
   2153     return mojo_estimator

~/.envs/h2o-test/lib/python3.8/site-packages/h2o/estimators/estimator_base.py in train(self, x, y, training_frame, offset_column, fold_column, weights_column, validation_frame, max_runtime_secs, ignored_columns, model_id, verbose)
    113                                  validation_frame=validation_frame, max_runtime_secs=max_runtime_secs,
    114                                  ignored_columns=ignored_columns, model_id=model_id, verbose=verbose)
--> 115         self._train(parms, verbose=verbose)
    116
    117     def train_segments(self, x=None, y=None, training_frame=None, offset_column=None, fold_column=None,

~/.envs/h2o-test/lib/python3.8/site-packages/h2o/estimators/estimator_base.py in _train(self, parms, verbose)
    205             return
    206
--> 207         job.poll(poll_updates=self._print_model_scoring_history if verbose else None)
    208         model_json = h2o.api("GET /%d/Models/%s" % (rest_ver, job.dest_key))["models"][0]
    209         self._resolve_model(job.dest_key, model_json)

~/.envs/h2o-test/lib/python3.8/site-packages/h2o/job.py in poll(self, poll_updates)
     75         if self.status == "FAILED":
     76             if (isinstance(self.job, dict)) and ("stacktrace" in list(self.job)):
---> 77                 raise EnvironmentError("Job with key {} failed with an exception: {}\nstacktrace: "
     78                                        "\n{}".format(self.job_key, self.exception, self.job["stacktrace"]))
     79             else:

OSError: Job with key $03010a64051932d4ffffffff$_8d0c64127137bd1eef16202889cf4fca failed with an exception: java.lang.IllegalArgumentException: Unsupported MOJO model 'word2vec'.
stacktrace:
java.lang.IllegalArgumentException: Unsupported MOJO model 'word2vec'.
  at hex.generic.Generic$MojoDelegatingModelDriver.computeImpl(Generic.java:99)
  at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:248)
  at hex.generic.Generic$MojoDelegatingModelDriver.compute2(Generic.java:78)
  at water.H2O$H2OCountedCompleter.compute(H2O.java:1557)
  at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
  at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
  at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
  at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
  at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

Две другие модели работают без каких-либо проблем и возвращают действительный model_id. Любая идея, в чем проблема, потому что из документов понятно, что все три типа модели являются поддерживается MOJO

Я пробовал это с кластером из 2 модулей на K8s с памятью 2Gi / 1cpu каждый, но результат был таким же, как и выше.


person Sreenadh T C    schedule 07.07.2020    source источник


Ответы (1)


Word2Vec в настоящее время отсутствует в списке разрешенные алгоритмы.

Документация немного запутана и требует доработки. MOJO - это способ запустить модели H2O в производство. Их можно использовать вне H2O с помощью H2O genmodel. Некоторые из этих MOJO можно импортировать обратно в H2O и проверить. Но не все из них. Поддерживаются первые два перечисленных алгоритма. К сожалению, Word2Vec - нет.

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

person Pavel Pscheidl    schedule 07.07.2020
comment
Спасибо за ответ. Интересный! Есть ли другой способ достичь этого, поскольку запуск бинарных моделей в prod означал бы, что я застрял на более старой версии h2o по прошествии времени! - person Sreenadh T C; 08.07.2020