diff --git a/src/Microsoft.ML.Auto/Experiment/Experiment.cs b/src/Microsoft.ML.Auto/Experiment/Experiment.cs index ec167e9b17..f6dda403a3 100644 --- a/src/Microsoft.ML.Auto/Experiment/Experiment.cs +++ b/src/Microsoft.ML.Auto/Experiment/Experiment.cs @@ -89,6 +89,12 @@ public IList Execute() break; } + // If after third run, all runs have failed so far, throw exception + if (_history.Count() == 3 && _history.All(r => !r.RunSucceded)) + { + throw new InvalidOperationException($"Training failed with the exception: {_history.Last().Exception}"); + } + } while (_history.Count < _experimentSettings.MaxModels && !_experimentSettings.CancellationToken.IsCancellationRequested && stopwatch.Elapsed.TotalSeconds < _experimentSettings.MaxExperimentTimeInSeconds); diff --git a/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineCrossValRunDetail.cs b/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineCrossValRunDetail.cs index e21b55428a..835292800a 100644 --- a/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineCrossValRunDetail.cs +++ b/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineCrossValRunDetail.cs @@ -42,6 +42,7 @@ internal SuggestedPipelineCrossValRunDetail(SuggestedPipeline pipeline, IEnumerable> results) : base(pipeline, score, runSucceeded) { Results = results; + Exception = Results.Select(r => r.Exception).FirstOrDefault(e => e != null); } public CrossValidationRunDetail ToIterationResult(IEstimator preFeaturizer) diff --git a/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineRunDetail.cs b/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineRunDetail.cs index 7cb76e1ab3..7af2f84be9 100644 --- a/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineRunDetail.cs +++ b/src/Microsoft.ML.Auto/Experiment/SuggestedPipelineRunDetails/SuggestedPipelineRunDetail.cs @@ -12,6 +12,8 @@ internal class SuggestedPipelineRunDetail public readonly bool RunSucceded; public readonly double Score; + public Exception Exception { get; set; } + public SuggestedPipelineRunDetail(SuggestedPipeline pipeline, double score, bool runSucceeded) { Pipeline = pipeline; @@ -34,7 +36,6 @@ internal class SuggestedPipelineRunDetail : SuggestedPipelineRunDetail { public readonly TMetrics ValidationMetrics; public readonly ModelContainer ModelContainer; - public readonly Exception Exception; internal SuggestedPipelineRunDetail(SuggestedPipeline pipeline, double score,