H2O is an Open Source, Distributed, Fast & Scalable Machine Learning Platform: Deep Learning, Gradient Boosting (GBM) & XGBoost, Random Forest, Generalized Linear Modeling (GLM with Elastic Net), K-Means, PCA, Generalized Additive Models (GAM), RuleFit, Support Vector Machine (SVM), Stacked Ensembles, Automatic Machine Learning (AutoML), etc.
While using H2O's XGBoost to evaluate we noticed that there were some environments where the algorithm would perform very badly compared to others.
Using the same model we observed that, to evaluate the same dataset, it would take 25 minutes in one environment and 1 and a half minute in another. You could say that this might be because fastest machine was much more powerful than the other, but this is exactly the opposite, the machine that took the 25 minutes was the most powerful one.
We then noticed that the machine that performed worst was using the libxgboost4j_gpu.so native library, while the machine that was performing better, was not able to load it and was using the libxgboost4j_minimal.so native library.
After making the GPU library unavailable in the slowest machine it started having equivalent performance to the fastest machine.
This made us realize that maybe you shouldn't be loading the GPU library when there is no GPU available. Our guess is that the GPU library has really low performance when it runs in CPU.
For now, we're just forcing XGBoost to load the Minimal library, but we think it would be better to improve you library loading according to the environment that it's running, because it kept loading the GPU library in an environment that did not have GPU.
While using H2O's XGBoost to evaluate we noticed that there were some environments where the algorithm would perform very badly compared to others.
Using the same model we observed that, to evaluate the same dataset, it would take 25 minutes in one environment and 1 and a half minute in another. You could say that this might be because fastest machine was much more powerful than the other, but this is exactly the opposite, the machine that took the 25 minutes was the most powerful one.
We then noticed that the machine that performed worst was using the
libxgboost4j_gpu.so
native library, while the machine that was performing better, was not able to load it and was using thelibxgboost4j_minimal.so
native library.After making the GPU library unavailable in the slowest machine it started having equivalent performance to the fastest machine.
This made us realize that maybe you shouldn't be loading the GPU library when there is no GPU available. Our guess is that the GPU library has really low performance when it runs in CPU.
For now, we're just forcing XGBoost to load the Minimal library, but we think it would be better to improve you library loading according to the environment that it's running, because it kept loading the GPU library in an environment that did not have GPU.