Ошибка поезда h2o.xgboost java .lang.NullPointerException Версия h2o: 3.26.0.2 - PullRequest
1 голос
/ 10 марта 2020

В настоящее время я работаю с h2o.xgboost в h2o версии 3.26.0.2 и получаю java .lang.NullPointerException (полная ошибка ниже).

Набор данных составляет 25 ГБ в формате CSV с 6.000.000 строк (trian + test), и информация о кластере, которую я использую:

R is connected to the H2O cluster: 
    H2O cluster uptime:         30 minutes 18 seconds 
    H2O cluster timezone:       Europe/Madrid 
    H2O data parsing timezone:  UTC 
    H2O cluster version:        3.26.0.2 
    H2O cluster version age:    7 months and 12 days !!! 
    H2O cluster name:           H2O_started_from_R_xxx
    H2O cluster total nodes:    1 
    H2O cluster total memory:   343.27 GB 
    H2O cluster total cores:    1 
    H2O cluster allowed cores:  48 
    H2O cluster healthy:        TRUE 
    H2O Connection ip:          localhost 
    H2O Connection port:        60576 
    H2O Connection proxy:       NA 
    H2O Internal Security:      FALSE 
    H2O API Extensions:         Amazon S3, XGBoost, Algos, AutoML, Core V3, Core V4 
    R Version:                  R version 3.5.1 (2018-07-02) 

Типы данных h2o:

 types   N
1:   int 319
2:  real 316

И мой код:

start <- proc.time()
model_trans.h2o <- h2o::h2o.xgboost( 
  distribution              = "gaussian"
  ,model_id                 = "xgb_test"
  ,training_frame           = data_train.h2o
  ,validation_frame         = data_test.h2o
  ,x                        = vars
  ,y                        = target_str
  ,seed                     = 1234
  ,ntrees                   = 1500
  ,learn_rate               = 0.08
  ,col_sample_rate_per_tree = 0.8
  ,max_dept                 = 5
  ,verbose                  = F
)
end <- proc.time(); end - start;

Ошибка выдается обычно через 2 минуты, и я сделал следующие тесты:

  1. Используйте меньше столбцов. С 500 столбцы работают нормально (я не использовал случайную выборку только 1: 500 из имен столбцов).
  2. Используйте меньше данных. Если я уменьшу данные, скажем, 2.000.000 строк, он работает нормально также.

После этих тестов я догадался, что происходит то, что h2o.xgboost как-то не подготовлен обрабатывать такое большое количество данных, и когда пытается расширить его, «матрица» разрушает.

Может ли быть ошибкой версия h2o?

Можно ли решить эту проблему без обновления версии? Поскольку модели h2o не совместимы с кросс-версиями, это может стать для меня проблемой.

Заранее спасибо!

Примечание 1:

У меня есть Я выполнил свое предыдущее исследование по этой теме и нашел только:

Что такое исключение NullPointerException и как его исправить? ТАКОЕ обсуждение без исключения нулевого указателя

https://0xdata.atlassian.net/browse/PUBDEV-6921 На каком-то форуме h2o без четкого ответа (этот второй довольно бесполезен)

Примечание 2: Полная ошибка:

java.lang.NullPointerException

java.lang.NullPointerException
    at hex.tree.xgboost.matrix.SparseMatrixFactory$NestedArrayPointer.set(SparseMatrixFactory.java:87)
    at hex.tree.xgboost.matrix.SparseMatrixFactory$InitializeCSRMatrixFromChunkIdsMrFun.map(SparseMatrixFactory.java:178)
    at water.LocalMR.compute2(LocalMR.java:84)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.LocalMR.compute2(LocalMR.java:76)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1417)
    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)
...