diff --git a/sklearn/utils/estimator_checks.py b/sklearn/utils/estimator_checks.py index 5c32b7b8fc36e..83deff0d5d7e0 100644 --- a/sklearn/utils/estimator_checks.py +++ b/sklearn/utils/estimator_checks.py @@ -53,6 +53,7 @@ from ..model_selection import ShuffleSplit from ..model_selection._validation import _safe_split from ..metrics.pairwise import rbf_kernel, linear_kernel, pairwise_distances +from ..utils.fixes import threadpool_info from ..utils.validation import check_is_fitted from . import shuffle @@ -2080,7 +2081,19 @@ def check_classifiers_train( X_b -= X_b.min() if readonly_memmap: - X_m, y_m, X_b, y_b = create_memmap_backed_data([X_m, y_m, X_b, y_b]) + # OpenBLAS is known to segfault with unaligned data on the Prescott architecture + # See: https://github.com/scipy/scipy/issues/14886 + has_prescott_openblas = any( + True + for info in threadpool_info() + if info["internal_api"] == "openblas" + # Prudently assume Prescott might be the architecture if it is unknown. + and info.get("architecture", "prescott").lower() == "prescott" + ) + + X_m, y_m, X_b, y_b = create_memmap_backed_data( + data=[X_m, y_m, X_b, y_b], aligned=has_prescott_openblas + ) problems = [(X_b, y_b)] tags = _safe_tags(classifier_orig)