Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Use dask.delayed within fit #730

Merged
merged 34 commits into from Aug 29, 2018
Merged

Conversation

mrocklin
Copy link
Contributor

I thought I submitted this already, but couldn't find it. My apologies if this is a double-post

This should not be merged, it likely breaks existing behavior

This addresses #304 . It sprinkles dask.delayed in a couple places of the current codebase. To improve things we should do the following:

  1. Break apart or reimplement the _fit_and_score function to use dask.delayed on every step of a pipeline. This would help to improve the sharing of intermediate results and would also improve diagnostics. dask_ml/model_selection/_search.py::do_fit_and_score does some of this, but it was heavily optimized for efficiency. It would be good to do the same thing, but with dask.delayed here, which would probably be nicer for external devs even if it adds a millisecond or two of overhead. cc @jcrist
  2. It might also be useful to delay the cross-validation process so that we don't keep passing around numpy arrays. I suspect that we're being a bit unclean with how we're handling things there. This may not be performance-critical near-term though.

If anyone wants to take a shot at task 1 I suspect that this would be interesting work.

@weixuanfu weixuanfu changed the base branch from master to development July 16, 2018 15:22
@weixuanfu
Copy link
Contributor

Hi @mrocklin Thank you for this PR. I rebased it to development branch and I will check it later.

tpot/base.py Outdated
@@ -46,6 +46,7 @@
from tqdm import tqdm
from copy import copy, deepcopy

import dask
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add installation of dask into ci/.travis_install.sh and .appveyor.yml for unit tests

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Though, just to reiterate, I'm not trying to get tests to work here at all. This is only up here for conversation.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, thanks. But it seems that it passed almost all the unit tests. Great!

@weixuanfu
Copy link
Contributor

weixuanfu commented Jul 16, 2018

I just had a quick test in my Window environment, I got the 2 IndexError as below:

======================================================================
ERROR: Assert that _wrapped_cross_val_score return Timeout in a time limit.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\Documents\GitHub\TPOT_Lab\tpot\tests\tpot_tests.py", line 298, in test_timeout
    timeout=1)
  File "D:\Anaconda3\lib\site-packages\stopit\utils.py", line 145, in wrapper
    result = func(*args, **kwargs)
  File "D:\Documents\GitHub\TPOT_Lab\tpot\tpot\gp_deap.py", line 453, in _wrapped_cross_val_score
    CV_score = delayed(np.array)(scores)[:, 0]
IndexError: too many indices for array

======================================================================
ERROR: Assert that _wrapped_cross_val_score return -float('inf') with a invalid_pipeline
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\Documents\GitHub\TPOT_Lab\tpot\tests\tpot_tests.py", line 321, in test_invalid_pipeline
    timeout=300)
  File "D:\Anaconda3\lib\site-packages\stopit\utils.py", line 145, in wrapper
    result = func(*args, **kwargs)
  File "D:\Documents\GitHub\TPOT_Lab\tpot\tpot\gp_deap.py", line 453, in _wrapped_cross_val_score
    CV_score = delayed(np.array)(scores)[:, 0]
IndexError: too many indices for array

Any idea?

tpot/gp_deap.py Outdated
warnings.simplefilter('ignore')
# TODO: dive into and delay fit/transform calls on sklearn_pipeline.steps appropriately
# This will help with shared intermediate results, profiling, etc..
# It looks like the dask_ml.model_selection._search.do_fit_and_score might have good logic here
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TomAugspurger is this task easy for you by any chance?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, can take a look today I think.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TPOT is a fun problem to play with :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively @jcrist if you're around and have time you've probably done this before :)

@rhiever
Copy link
Contributor

rhiever commented Jul 19, 2018

I should add: Currently, TPOT uses a generational evolutionary algorithm (EA) model. That means that the EA keeps some fixed population of pipelines (by default, 100) and has to evaluate all of them before proceeding to the next generation. From an engineering perspective, generational EAs can be problematic because there can be a single pipeline that takes forever to evaluate and that will hold up the whole process. The generational EA cannot proceed until every pipeline is evaluated.

For the longest time, we have wanted to re-engineer TPOT to follow a steady state EA. With a steady state EA, the EA still maintains a fixed population of pipelines (still 100 by default), but the pipelines are evaluated in parallel and the "parents" of the new pipelines are chosen based on the current population of pipelines that are already evaluated. That way, if one pipeline takes forever to evaluate, the EA can keep on optimizing based on the results from the faster pipelines.

The diagram below sort of communicates those differences, if you stare at it long enough.

image

Just something to keep in mind as this branch is worked on. I suspect that dask would seamlessly support this huge upgrade to TPOT.

@mrocklin
Copy link
Contributor Author

mrocklin commented Jul 19, 2018 via email

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Jul 25, 2018

I just had a quick test in my Window environment, I got the 2 IndexError as below:

When _fit_and_score throws an exception, @mrocklin currently sets the score to -inf. It should be [[-inf, -inf]] to match the return type when _fit_and_score is successful (though this may have just been a quick hack to get things working and not intended to stay around; haven't looked closely yet).

diff --git a/tpot/gp_deap.py b/tpot/gp_deap.py
index 3a5bfcf..e99d494 100644
--- a/tpot/gp_deap.py
+++ b/tpot/gp_deap.py
@@ -433,7 +433,7 @@ def _wrapped_cross_val_score(sklearn_pipeline, features, target,
         try:
             return _fit_and_score(*args, **kwargs)
         except Exception:
-            return -float('inf')
+            return [[- float('inf'), -float('inf')]]
 
     with warnings.catch_warnings():
         warnings.simplefilter('ignore')

@mrocklin are you able to give me push access to this branch?

@mrocklin
Copy link
Contributor Author

@TomAugspurger you should now have push access.

FWIW I'm less concerned about getting tests to pass here than I am about investigating how dask can be useful. I think that the two approaches to that are:

  1. break up fit_and_score to use delayed to see if we recapture the benefits of shared intermediate results (and get to see a cool graph). This is probably on dask devs.
  2. design a more steady state algorithm that could benefit from dask's support of increased dynamism. This is probably first on TPOT devs to design such an algorithm.

@TomAugspurger
Copy link
Contributor

Pushed a rough attempt at 1 (this is still very much a work in progress).

https://streamable.com/s9e6x

Having the visibility into what's actually going on is nice. I'll test this out on an actual cluster later, but things should work nicely for CPU-bound problems like this.

I'm still working a bit to understand the various types and computation as things flow through wrapped_cross_score, _fit_and_score, etc. I think that the build_graph I'm re-using from dask_ml is doing the same actual work as scikit-learns _fit_and_score and score but I need to verify that.

Is it possible to specify parameters such that all the randomness is removed from a tpot.fit call? I'd like to directly compare the scores, etc. between the two fit calls.

@TomAugspurger
Copy link
Contributor

Going forward, are the TPOT devs interested in an optional dependency on Dask-ML, which would add new dependencies on dask (pure python) six, and multipledispatch? The diagnostics also require distributed (which depends on tornado) and Bokeh. To use things on a cluster, you'll need distributed.

The benefits would be

  1. Diagnostics of whats happening during a .fit
  2. Distributed training
  3. (possibly) shared intermediate results between fits. It's not clear to me that there is actually anything to share between the various fits, though I may be wrong here.

If so, what API do you envision? TPOTClassifier(..., dask=False)?

@mrocklin
Copy link
Contributor Author

mrocklin commented Aug 7, 2018

I suspect that we could put the imports inside the if delayed block to keep this optional.

That's a nice video @TomAugspurger :)

Seeing this scale would be interesting.

@mrocklin
Copy link
Contributor Author

mrocklin commented Aug 7, 2018

shared intermediate results between fits. It's not clear to me that there is actually anything to share between the various fits, though I may be wrong here

I would hope that this would be pretty apparent by looking at the Graph diagnostic page (I recommend avoding the newest bokeh 0.13.0, which has layout issues if so)

@mrocklin
Copy link
Contributor Author

mrocklin commented Aug 7, 2018

Also I'm curious, why processes=False?

@TomAugspurger
Copy link
Contributor

Indeed, this would be entirely optional. An ImportError could be raised during early in .fit if the required dask-ml isn't installed.

Also I'm curious, why processes=False?

Leftover from a debugging session.

I would hope that this would be pretty apparent by looking at the Graph diagnostic page

It's a bit messy, though there seems to be some sharing...

https://streamable.com/5v9dv

@rhiever
Copy link
Contributor

rhiever commented Aug 7, 2018

Is it possible to specify parameters such that all the randomness is removed from a tpot.fit call? I'd like to directly compare the scores, etc. between the two fit calls.

Yes, TPOT has a random_state parameter that allows you to designate the RNG for the run. If the results aren't reproducible between two TPOT runs with the same random_state, then there is a bug.

(possibly) shared intermediate results between fits. It's not clear to me that there is actually anything to share between the various fits, though I may be wrong here.

There should be shared information between pipelines, especially with larger population sizes. The optimization procedure within TPOT often creates slightly-modified copies of existing pipelines, so there is a possibility to share information between previously-evaluated pipelines and new pipelines (e.g., a "parent" and "child" with shared components), as well as information between pairs of new pipelines (e.g., two "twin" pipelines).

@rhiever
Copy link
Contributor

rhiever commented Aug 7, 2018

wrt dependencies: Given that we give a strong recommendation to install TPOT on top of an Anaconda Python install, I suspect it wouldn't be too painful to add dask and related packages as dependencies. However, I would like for it to be an optional dependency for users that don't want/need parallelization at dask's scale.

wrt API, thinking out loud: We definitely want to maintain a n_jobs parameter in the TPOTClassifier/Regressor classes. We could then add another parameter (parallel_backend??) that allows the user to specify whether they want to use sklearn's multiprocessing ('multiprocessing', default) or the various versions of dask parallelization ('dask-multithreading', 'dask-multiprocessing', or 'dask-scheduling'). During initialization, TPOT would check that parameter and set up the appropriate scheduler as needed, assuming the interfaces aren't too different. Thoughts?

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Aug 8, 2018

Thanks for the heads-up about random_state, I'm glad it's that simple :)

The API design here is a bit tricky, since Dask could conceivably help TPOT in two ways

  1. Via the distributed joblib backend. This requires no changes to TPOT itself (assuming it doesn't hardcode the joblib backend anywhere). Users would update their code to look like
from sklearn.externals import joblib

with joblib.parallel_backend('dask', scatter=[X, y]):
    tpot.fit(X, y)

This would only potentially be useful for users with a cluster.

  1. (this PR) Via Dask's dependency tracking and ability to transform a pipeline to a Dask graph, allowing for sharing intermediate results and executing independent tasks in parallel. This would be useful for people on a single machine, and also scales out to a cluster.

Without having thought about it too much, I'd propose we reserve the "backend" terminology for which joblib backend is used (multiprocessing / threaded / dask), and guide users to the joblib.parallel_backened API. I'm not yet sure what keyword is best for the "Use Dask's graph stuff" mode.

I'll do some benchmarking on the two approaches on a cluster tomorrow.

@coveralls
Copy link

coveralls commented Aug 8, 2018

Coverage Status

Coverage decreased (-0.1%) to 96.436% when pulling 3d2fcd1 on mrocklin:dask into 15234fa on EpistasisLab:development.

@weixuanfu
Copy link
Contributor

Thank you a lot @TomAugspurger for good process and nice video.

wrt API, I prefer 2nd approach but I agree with @rhiever that dask should be an optional dependency for users while it should be highly recommended on installation guide.

I think we could add one parameter (I like parallel_backend) in TPOTbase to support both approaches above within TPOT:

  • if parallel_backend is multiprocessing or dask, then TPOT use 1st approach and set the backend before parallel computing jobs
  • if parallel_backend is dask_graph, then TPOT use 2nd approach.

BTW, I think steps about crossover and mutation are also very time-consuming, but we can also add parallel computing support on that one later.

@saddy001
Copy link

Ok, now I did

$ pip install git+https://github.com/dask/dask-ml
$ pip install git+https://github.com/EpistasisLab/tpot@mrocklin-dask

$ pip list|egrep "dask|TPOT"
dask                           0.18.2              
dask-glm                       0.1.0               
dask-ml                        0.8.1.dev5+g581026c 
TPOT                           0.9.3               

Looks good so far. No exceptions for several runs. And of course, I did not check the resulting pipelines. Only difference is some warnings that usually do not appear in verbose level 2:

/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/feature_selection/univariate_selection.py:113: UserWarning: Features [ 70  71  76  77  88  89  94  95 100 101 106 107 112 113 118 119 124 125
 136 137 148 149 154 155 166 167] are constant.
  UserWarning)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/feature_selection/univariate_selection.py:114: RuntimeWarning: invalid value encountered in true_divide
  f = msb / msw
/home/saddy/miniconda3/lib/python3.6/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
 136 137 148 149 166 167] are constant.
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/feature_selection/univariate_selection.py:113: UserWarning: Features [ 76  77  88  89  94  95 100 101 106 107 112 113 118 119 124 125 136 137
 148 149] are constant.
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/feature_selection/univariate_selection.py:113: UserWarning: Features [ 76  77  88  89  94  95 100 101 112 113 118 119 124 125 136 137 148 149] are constant.
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:349: RuntimeWarning: invalid value encountered in subtract
  np.average((array - array_means[:, np.newaxis]) ** 2, axis=1, weights=weights)

As far as I can tell, TPOT uses 3 verbose levels. Only level 3 shows everything and even level 2 is quite silent, only deprecation warnings, errors and essential scores from time to time. I think level 1 is for users that aren't that much interested in what TPOT does ;-)

@weixuanfu
Copy link
Contributor

weixuanfu commented Aug 21, 2018

@saddy001 not hijacking at all!. Thank you for reporting issues here.

TPOT will print everything (all caught warning and exception) when evaluating pipelines or when generating pipelines via randomly creator in initial generation or crossover/mutation in later generations. But most of warnings/exceptions are from scikit-learn operators/TPOT builtin operators and they should be raised in 3 cases:

  1. invalid parameter combinations can be randomly generated via creator/crossover/mutation, so TPOT has a pre_test decorator to exclude them before evaluation on training dataset
  2. feature selection step in a pipeline is too restricted to allow any feature pass to next step
  3. input/intermediate features format issue, like X needs to contain only non-negative integers., which means the input/intermediate features passed to one-hot-encoder operators should only contain only non-negative integers presenting categorical variables.

Those warning/exceptions when using 3 verbose levels are for diagnosis.

@saddy001
Copy link

unbenannt
Now this is getting useful. However, there are still long mostly idle periods because of the generational model. Is there some branch for the steady-state model?

@weixuanfu
Copy link
Contributor

This branch is still under dev/test now. I am not sure if max_eval_time_mins parameter will help to stop those time-consuming pipelines when using dask.

@saddy001
Copy link

I've got another one, but this time a crash.

/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.
  from numpy.core.umath_tests import inner1d
Optimization Progress:   0%|                                                                                                                                                      | 0/100100 [00:00<?, ?pipeline/s]/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1
  **self._backend_args)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
/home/saddy/miniconda3/lib/python3.6/site-packages/dask_ml/model_selection/methods.py:75: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to -inf. Details: 
IndexError('pop from empty list',)
  FitFailedWarning,
corrupted size vs. prev_size
Abgebrochen (Speicherabzug geschrieben)

Last line means core dumped. Do you have an idea only from "corrupted size vs. prev_size"? I couldn't get a minimal example crashing.

@TomAugspurger
Copy link
Contributor

What scikit-learn version? 0.19.x has a thread safety bug with a similar error. Fixed in scikit-learn/scikit-learn#9569 on master.

@saddy001
Copy link

It's 0.19.1. The fix is from 2017. Isn't it pip-packaged already?

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Aug 23, 2018 via email

@TomAugspurger
Copy link
Contributor

There seems to be an unrelated failure on master now. I didn't dig deeply, but IIUC, it comes from NumPy 1.15.0 (or maybe 1.15.1) raising a warning when an internal umath module is imported. Older versions of scikit-learn imported this, and there's a test ensuring stdout is quiet, which is now failing because of the warning.

I've attempted to fix that in d279253, which I can split into a separate PR if desired.

@TomAugspurger
Copy link
Contributor

My attempted fix didn't work. Just skipping for now on this branch, though that's probably not the best solution.

@TomAugspurger
Copy link
Contributor

Ok, this seems to be reliably passing now that I've ensured that Dask's single-threaded scheduler is being used for the test. I suspect that resolving DEAP/deap#75 would take care of all this.

Some questions on how to proceed:

  1. Should I split the quick fix for the failing test_driver_5 test off to another PR?
  2. This currently requires dask-ml dev. I'm hoping to do a release in a week or two that has Fit score failure dask/dask-ml#339, which is required by tpot
  3. Do the docs make sense?
  4. Are we OK with just parallelizing this stage, and leaving parallelization of mutation and crossover as a followup?

@weixuanfu
Copy link
Contributor

weixuanfu commented Aug 29, 2018

@TomAugspurger Thank you very much for debugging CI.

The answers to those questions above:

  1. Should I split the quick fix for the failing test_driver_5 test off to another PR?

Yes, I think it is fine to pass that test for now.

  1. This currently requires dask-ml dev. I'm hoping to do a release in a week or two that has Fit score failure dask/dask-ml#339, which is required by tpot

Great, we could update docs of installation after the new release.

  1. Do the docs make sense?

Thanks for the docs. I think we should highly recommend TPOT users to use dask for big data or with Jupyter notebook since joblib is somehow not very stable and we had a lot of related issues (like #645).

  1. Are we OK with just parallelizing this stage, and leaving parallelization of mutation and crossover as a followup?

I agree we can add parallelization of mutation and crossover as a followup.

@weixuanfu
Copy link
Contributor

weixuanfu commented Aug 29, 2018

@TomAugspurger Please let me know if you are OK with merging this PR. I will go ahead to merge it to dev branch and then merge #740. After update docs and some final checks, I think we can have a minor release of TPOT.

@TomAugspurger
Copy link
Contributor

Thanks @weixuanfu, I just pushed a commit removing some print statements I added and fixing a doc issue. Once that passes I think this will be good to go.

@TomAugspurger
Copy link
Contributor

Alrightly, all green other than the coveralls failure, which I think can be ignored.

@weixuanfu
Copy link
Contributor

Yep, 0.1% coverage decrease can be ignored for now. Thanks!

@weixuanfu weixuanfu merged commit 90bc2de into EpistasisLab:development Aug 29, 2018
@weixuanfu
Copy link
Contributor

@TomAugspurger n_jobs parameter is not used when use_dask=True. I will add docs for this case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants