Scikit-learn: يتجمد GridSearchCV إلى أجل غير مسمى مع تمكين تعدد مؤشرات الترابط (أي w / n_jobs! = 1)

تم إنشاؤها على ١٢ أغسطس ٢٠١٥  ·  88تعليقات  ·  مصدر: scikit-learn/scikit-learn

لقد كنت أواجه هذه المشكلة بشكل متقطع (في هذا الموضوع) مع GridSearchCV منذ أكثر من عام الآن ، عبر python 2.7 و 3.3 و 3.4 ، وظيفتان ، العديد من الأنظمة الأساسية / أجهزة الكمبيوتر المحمولة المختلفة لنظام التشغيل Mac OSX ، والعديد من الإصدارات المختلفة من numpy و scikit- تعلم (أحافظ على تحديثها جيدًا).

لقد جربت كل هذه الاقتراحات ولم يعمل أي منها دائمًا :

https://github.com/scikit-learn/scikit-learn/issues/3605 - تعيين طريقة بدء المعالجة المتعددة إلى "forkserver"
https://github.com/scikit-learn/scikit-learn/issues/2889 - أواجه مشكلات فقط عند تمرير وظائف التسجيل المخصصة (لقد واجهت هذه المشكلة تمامًا حيث مكالمات GridSearchCV نفسها مع n_jobs! = 1 تجميد مع مسجل مخصص ولكن قم بعمل جيد بدون واحد)
https://github.com/joblib/joblib/issues/138 - إعداد متغيرات البيئة من عدد مؤشرات الترابط MKL (لقد جربت هذا عند تشغيل numpy / sklearn مبني ضد mkl من توزيع Anaconda)
تحجيم المدخلات والتأكد من عدم وجود أخطاء في n_jobs = 1 - أنا متأكد تمامًا من أن الأشياء التي أحاول القيام بها في سلاسل رسائل متعددة تعمل بشكل صحيح في مؤشر ترابط واحد ، وفي فترة زمنية قصيرة

إنها مشكلة محبطة للغاية ويبدو دائمًا أنها تظهر مرة أخرى بشكل صحيح عندما أكون واثقًا من رحيلها ، والحل الوحيد الذي يعمل بنسبة 100٪ من الوقت بالنسبة لي هو الذهاب إلى مصدر GridSearchCV في أي توزيع sklearn أستخدمه تغيير مجموعة الواجهة الخلفية يدويًا في استدعاء Paralell إلى "threading" (بدلاً من المعالجة المتعددة).

لم أقم بقياس الفرق بين هذا الاختراق وإعداد n_jobs = 1 ، ولكن هل سيكون هناك أي سبب لتوقع أي مكاسب مع الواجهة الخلفية للترابط دون موازاة على الإطلاق؟ بالتأكيد ، لن تكون جيدة مثل المعالجة المتعددة ولكنها على الأقل أكثر استقرارًا.

راجع للشغل فإن أحدث الإصدارات التي واجهت نفس المشكلة هي:

  • نظام التشغيل Mac OS 10.9.5
  • Python 3.4.3 :: Continuum Analytics، Inc.
  • scikit-Learn == 0.16.1
  • scipy == 0.16.0
  • numpy == 1.9.2
  • الباندا == 0.16.2
  • Joblib == 0.8.4
Bug

التعليق الأكثر فائدة

@ eric-czech إذا كنت تستخدم Python 3.4 أو 3.5 ، فيرجى محاولة تعيين متغير البيئة التالي ثم إعادة تشغيل برنامج python:

export JOBLIB_START_METHOD="forkserver"

كما هو موضح في مستندات Joblib . لا يتم تمكين وضع forkserver is افتراضيًا لأنه يكسر الوظائف المحددة بشكل تفاعلي.

ال 88 كومينتر

هل لديك مشاكل باستمرار على تلك المنصة ؟؟

من حيث تعدد مؤشرات الترابط: هناك بعض المقدّرات التي من المحتمل أن يعطي تعدد مؤشرات الترابط لها مكاسب كبيرة ، تلك التي يتم فيها معظم العمل في عمليات numpy أو Cython بدون GIL. حقًا ، لا أعتقد أن هذا قد تم تقييمه كثيرًا ؛ backend='threading' شيء حديث تمامًا.

السؤال الحقيقي هو: ما الذي يمكننا فعله أكثر لتحديد ما هي المشكلة؟

كبداية ، ما هي التقديرات الأساسية التي فكرت فيها؟

jnothman بواسطة منصة هل OSX 10.9.5؟ إذا كان الأمر كذلك ، فليست هذه هي المرة الأولى التي أواجه فيها هذه المشكلة.

ربما كان أحد التفاصيل الرئيسية التي حذفتها من قبل أنني أستخدم دفاتر IPython دائمًا عندما أواجه مشكلات. لدي نواة لجهاز كمبيوتر محمول تم تحميله الآن حيث إذا أضفت وسيطة "تسجيل النقاط" مع n_jobs! = 1 فإن GridSearchCV يتوقف إلى الأبد ولكن إذا قمت بإزالة هذه الحجة ، كل شيء على ما يرام. حتى إذا كانت وظيفة التسجيل التي أقدمها لا تفعل شيئًا سوى إرجاع قيمة تعويم ثابتة ، فإنها لا تزال تتجمد (لكنها تفعل بالضبط ما تتوقعه مع n_jobs = 1).

إعادة: الخيوط التي من الجيد سماعها ، لذلك ربما يكون هذا الخيار لـ GridSearchCV منطقيًا بالفعل.

بالنسبة إلى المقدرات التي لدي مشاكل معها ، لست متأكدًا من أنني أستطيع تضييقها كثيرًا. عادةً ما أحاول قدر ما يمكنني إدارته للحصول على بعض المعلومات المفيدة لك هنا ، لقد تحققت للتو من أنه يمكنني إعادة إنتاج الشروط التي ذكرتها أعلاه مع أي مقدر ووجدت أنه يمكنني في جميع الحالات (أو على الأقل حاولت الانحدار اللوجستي ، تصنيف SGD ، GBRT ، و RF).

أرغب في فعل أي شيء وكل ما يمكنني فعله لتقديم شيء أكثر للاستمرار على الرغم من أنني لست على دراية بالسياق الأكثر فائدة بشكل عام في مثل هذه المشكلات. هل لديك أي اقتراحات لي؟

هل تستخدم numpy مرتبطًا مقابل إطار عمل تسريع؟

كلا ، إلا إذا فاتني شيء. اعتقدت أن الإصدار غير المثبت يتغير عندما تفعل ذلك أو على الأقل أن الحزمة التسريع ستكون موجودة:

(Research3.4) eczech $ pip freeze | grep numpy
numpy == 1.9.2
(Research3.4) تسريع تحديث eczech $ conda
خطأ: لم يتم تثبيت الحزمة "تسريع" في /Users/eczech/anaconda/envs/research3.4

سامح جهلي لعدم قدرتي على الإجابة عن ذلك بثقة 100٪ ، لكنني بالتأكيد لم أفعل أي شيء عن قصد لتثبيته.

تسريع Conda ليس هو نفسه تسريع التفاح:
http://docs.continuum.io/accelerate/index
https://developer.apple.com/library/mac/documentation/Accelerate/Reference/AccelerateFWRef/

تسريع Conda هو إصدارات MKL المعجلة من الحزم ، وتسريع apple هو البديل لـ MKL.

ممكن تعطينا numpy.__config__.show() ؟

لا تعمل المعالجة المتعددة مع تسريع IIRC. pingogrisel

من المؤكد:

np. config. show ()
atlas_3_10_blas_threads_info:
غير متوفر
atlas_info:
غير متوفر
atlas_3_10_info:
غير متوفر
atlas_threads_info:
غير متوفر
atlas_3_10_blas_info:
غير متوفر
blas_opt_info:
extra_compile_args = ['-msse3'، '-DAPPLE_ACCELERATE_SGEMV_PATCH'، '-I / System / Library / Frameworks / vecLib.framework / Headers']
extra_link_args = ['-Wl، -framework'، '-Wl، Accelerate']
تعريف_ماكروس = [('NO_ATLAS_INFO'، 3)]
lapack_mkl_info:
غير متوفر
atlas_blas_info:
غير متوفر
mkl_info:
غير متوفر
lapack_opt_info:
extra_compile_args = ['-msse3' ، '-DAPPLE_ACCELERATE_SGEMV_PATCH']
extra_link_args = ['-Wl، -framework'، '-Wl، Accelerate']
تعريف_ماكروس = [('NO_ATLAS_INFO'، 3)]
blas_mkl_info:
غير متوفر
atlas_3_10_threads_info:
غير متوفر
openblas_info:
غير متوفر
openblas_lapack_info:
غير متوفر
atlas_blas_threads_info:
غير متوفر

نعم ، هذه مشكلة معروفة لا يمكنني العثور عليها في أداة تعقب المشكلات. التسريع لا يعمل مع المعالجة المتعددة.

أنا في حيرة من أمري. لا تفعل الواجهة الخلفية للترابط شيئًا ما إلا عندما يتم تحرير GIL ، أليس كذلك؟

مسكتك ، هل تعرف كيف يجب أن أبدأ بإعادة بناء numpy بعد ذلك؟ هل يجب أن أقوم بتثبيته فقط بدلاً من استخدام حزمة conda له؟ أم أنه من الأفضل أن أبني من المصدر وأضمن عدم وجود حجج تسريع أبل؟

يبدو أن هذا قليل من عدم البدء في المشكلة بغض النظر. أغلق بعيدًا إذا كان مجرد ضرب حصان ميت.

إذا تمكنت من تسريع Conda ، فستعمل ؛)

ربما يمكننا محاولة الإنقاذ في joblib ؟

آه عظيم ، لا بد أن الاستمرارية دفعت أبل للقيام بذلك هاها.

هل لديك أي دولار 0 اقتراح؟ وشكرا على البصيرة في كلتا الحالتين.

أوه ، وأنا أعلم أيضًا أنه قد تم طرح هذا السؤال من قبل ، ولكن هل حقيقة أنني أواجه هذه المشكلة على منصتي الحالية فقط عند استخدام وظيفة تسجيل النقاط المخصصة؟ بالنسبة لحياتي ، لا يمكنني رؤية ما يمكن أن يكون مشكلة في ذلك بالنظر إلى الكود المصدري Grid_search.py ​​، ولكن هل يمكن أن يكون له علاقة بالتخلص من الوظيفة المخصصة؟

وغير مرتبط بذلك إلى حد ما ، تذكرت أنني حاولت أيضًا التغلب على هذا في الماضي من خلال إنشاء نسخة معدلة من GridSearchCV التي تستخدم الواجهة الخلفية IPython المتوازية بدلاً من ذلك ، بافتراض أنني قمت بإعادة النظر في هذا الحل ، هل سيكون الأمر يستحق المشاركة بطريقة ما؟ نجح هذا الحل على ما يرام ولكنه كان صعبًا بعض الشيء لاستخدامه لأن أي فئات ووظائف مخصصة يجب أن تكون متاحة على Pythonpath بدلاً من أجهزة الكمبيوتر المحمولة نفسها ، ولكن إذا لم تكن هناك خيارات أخرى أفضل ، فربما يكون لهذا الشخص بعض الأرجل.

يمكنك الارتباط بالأطلس ، لكن ذلك سيكون أبطأ [تفاحة] ، كما أعتقد.
ربما يوجد برنامج مجاني مرتبط بـ MKL لنظام التشغيل OS X؟ هناك واحد للنوافذ.

[إذا كنت أكاديميًا ، فإن تسريع الاستمرارية مجاني بالمناسبة]

أنا متأكد من أن هذا لا علاقة له تمامًا باستخدام وظيفة تسجيل النقاط المخصصة.
هل يمكنك إعطاء sniplets المستقلة التي تتكسر مع وظيفة تسجيل مخصصة ولكن ليس بدونها؟

ربما تكون حقيقة وظيفة التسجيل المخصصة ذات صلة (على سبيل المثال ، قد تكون مشكلات التخليل أو التوازي المتداخل ذات صلة). هل يمكننا رؤية الرمز؟

أو هل تقصد فقط مقياسًا قياسيًا بـ make_scorer ؟

بالتأكيد ، إليك جزء ذي صلة ويبدو أن الأشياء على ما يرام مع make_scorer لكن ليس بوظيفة مخصصة:

from sklearn.linear_model import LogisticRegression
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import StratifiedKFold
from sklearn.metrics import average_precision_score, make_scorer
import functools

res = []
clfs = []

for response in responses:
    X, y = d_in[features], d_in[response]
    for i, (train, test) in enumerate(StratifiedKFold(y, 5)):
        X_train, y_train, X_test, y_test = X.iloc[train], y.iloc[train], X.iloc[test], y.iloc[test]
        clf = LogisticRegression(penalty='l1')
        grid = {
            'class_weight': [{0: 1, 1: 10}, {0: 1, 1: 100}, {0: 1, 1: 1000}],
            'C': np.logspace(-3, 0, num=4)
        }

        # Using make_scorer doesn't cause any issues
        # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),  
        #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

        # This however is a problem:
        def avg_prec_score(estimator, X, y):
            return average_precision_score(y, estimator.predict_proba(X)[:, 1])
        clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),  
                           scoring=avg_prec_score, n_jobs=-1)

        clf = clf.fit(X_train, y_train)
        print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

        y_pred = clf.predict(X_test)
        y_proba = clf.predict_proba(X_test)

        clfs.append((response, i, clf))
        res.append(pd.DataFrame({
            'y_pred': y_pred, 
            'y_actual': y_test, 
            'y_proba': y_proba[:,1],
            'response': np.repeat(response, len(y_pred))
        }))

res = functools.reduce(pd.DataFrame.append, res)
res.head()

سأعمل على إصدار قائم بذاته يتضمن بعض إصدارات البيانات التي أستخدمها أيضًا (ولكنها ستستغرق وقتًا أطول). في هذه الأثناء ، يبدو اختيار هذه الوظائف المخصصة بمثابة مقدمة جيدة - لقد جربتها عدة مرات مرة أخرى للتأكد من أنها تتوقف بنسبة 100٪ من الوقت باستخدام وظيفة مخصصة و 0٪ من الوقت عند استخدام make_scorer مع بعض الوظائف المترية المعروفة والمستوردة.

وهل هذا بشكل رئيسي (أي يتم تفسير نص المستوى الأعلى) أو
وحدة مستوردة؟

في 15 أغسطس 2015 الساعة 23:37 ، كتب Eric Czech [email protected] :

بالتأكيد ، إليك جزء ذي صلة ويبدو أن الأمور على ما يرام
مع make_scorer ولكن ليس بوظيفة مخصصة:

من sklearn.linear_model import LogisticRegression من sklearn.grid_search استيراد GridSearchCV من sklearn.cross_validation import StratifiedKFoldfrom sklearn.metrics import average_precision_score، make_scorerimport functools

الدقة = []
clfs = []
للرد على الردود:
X، y = d_in [features]، d_in [response]
بالنسبة إلى i ، (تدريب ، اختبار) في التعداد (StratifiedKFold (y ، 5)):
X_train ، y_train ، X_test ، y_test = X.iloc [القطار] ، y.iloc [القطار] ، X.iloc [اختبار] ، y.iloc [اختبار]
clf = LogisticRegression (عقوبة = 'l1')
الشبكة = {
"class_weight": [{0: 1، 1: 10}، {0: 1، 1: 100}، {0: 1، 1: 1000}]،
'C': np.logspace (-3 ، 0 ، عدد = 4)
}

    # Using make_scorer doesn't cause any issues
    # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),
    #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

    # This however is a problem:
    def avg_prec_score(estimator, X, y):
        return average_precision_score(y, estimator.predict_proba(X)[:, 1])
    clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),
                       scoring=avg_prec_score, n_jobs=-1)

    clf = clf.fit(X_train, y_train)
    print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

    y_pred = clf.predict(X_test)
    y_proba = clf.predict_proba(X_test)

    clfs.append((response, i, clf))
    res.append(pd.DataFrame({
        'y_pred': y_pred,
        'y_actual': y_test,
        'y_proba': y_proba[:,1],
        'response': np.repeat(response, len(y_pred))
    }))

res = functools.reduce (pd.DataFrame.append، res)
res.head ()

سأعمل على إصدار قائم بذاته يتضمن بعض إصدارات
البيانات التي أستخدمها أيضًا (ولكنها ستستغرق وقتًا أطول). في غضون ذلك ،
يبدو تخليل تلك الوظائف المخصصة بمثابة مقدمة جيدة - لقد جربتها
عدة مرات مرة أخرى للتأكد من أنها معلقة بنسبة 100 ٪ من الوقت مع العرف
وظيفة و 0٪ من الوقت عند استخدام make_scorer مع بعض المعلومات المعروفة ،
وظيفة مترية مستوردة.

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -131376298
.

أوه ، إنه ipynb. هممم ممتع. نعم ، قد يكون التخليل مشكلة ..؟

في 15 أغسطس 2015 الساعة 23:51 ، جويل نوثمان جويل. كتب [email protected] :

وهذا هو الرئيسي (أي يتم تفسير نص المستوى الأعلى) أو
وحدة مستوردة؟

في 15 أغسطس 2015 الساعة 23:37 ، كتب Eric Czech [email protected] :

بالتأكيد ، إليك جزء ذي صلة ويبدو أن الأمور على ما يرام
مع make_scorer ولكن ليس بوظيفة مخصصة:

من sklearn.linear_model import LogisticRegression من sklearn.grid_search استيراد GridSearchCV من sklearn.cross_validation import StratifiedKFoldfrom sklearn.metrics import average_precision_score، make_scorerimport functools

الدقة = []
clfs = []
للرد على الردود:
X، y = d_in [features]، d_in [response]
بالنسبة إلى i ، (تدريب ، اختبار) في التعداد (StratifiedKFold (y ، 5)):
X_train ، y_train ، X_test ، y_test = X.iloc [القطار] ، y.iloc [القطار] ، X.iloc [اختبار] ، y.iloc [اختبار]
clf = LogisticRegression (عقوبة = 'l1')
الشبكة = {
"class_weight": [{0: 1، 1: 10}، {0: 1، 1: 100}، {0: 1، 1: 1000}]،
'C': np.logspace (-3 ، 0 ، عدد = 4)
}

    # Using make_scorer doesn't cause any issues
    # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),
    #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

    # This however is a problem:
    def avg_prec_score(estimator, X, y):
        return average_precision_score(y, estimator.predict_proba(X)[:, 1])
    clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),
                       scoring=avg_prec_score, n_jobs=-1)

    clf = clf.fit(X_train, y_train)
    print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

    y_pred = clf.predict(X_test)
    y_proba = clf.predict_proba(X_test)

    clfs.append((response, i, clf))
    res.append(pd.DataFrame({
        'y_pred': y_pred,
        'y_actual': y_test,
        'y_proba': y_proba[:,1],
        'response': np.repeat(response, len(y_pred))
    }))

res = functools.reduce (pd.DataFrame.append، res)
res.head ()

سأعمل على إصدار قائم بذاته يتضمن بعض إصدارات
البيانات التي أستخدمها أيضًا (ولكنها ستستغرق وقتًا أطول). في غضون ذلك ،
يبدو تخليل تلك الوظائف المخصصة بمثابة مقدمة جيدة - لقد جربتها
عدة مرات مرة أخرى للتأكد من أنها معلقة بنسبة 100 ٪ من الوقت مع العرف
وظيفة و 0٪ من الوقت عند استخدام make_scorer مع بعض المعلومات المعروفة ،
وظيفة مترية مستوردة.

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -131376298
.

هذا في دفتر ملاحظات

سأحاول استيراده من وحدة بدلاً من ذلك وأرى كيف تسير الأمور

حسنًا ، ما تعرفه ، يعمل بشكل جيد عند تحديده خارج دفتر الملاحظات.

لديّ نفس الكود الذي يتم تشغيله في python 2.7 (كنت بحاجة إلى lib أقدم) بالإضافة إلى هذا الرمز في Python 3.4 وبينما لدي مشكلة معلقة في 2.7 بغض النظر عما إذا كانت وظيفة مخصصة أم لا أو شيء يستخدم make_scorer ، أعتقد أن هذا يحل جميع مشاكلي في الإصدار الأحدث حتى أتمكن من التعايش مع الحلول البديلة في الإصدار القديم.

أي شيء آخر يمكنني القيام به لتعقب لماذا قد تكون وظائف التخليل المحددة في الكمبيوتر المحمول مشكلة؟

حسنًا ، نود أن نفهم:

  • هل يمثل التخليل وإلغاء الانتقاء بشكل عام مشكلة للوظائف المحددة محليًا على تلك المنصة ، أم أننا نواجه عقبة معينة؟
  • لماذا ، إذا كان التخليل مشكلة ، هل هو معلق بدلاً من إثارة استثناء؟ هل يمكنك من فضلك محاولة الترقيع القرد أو ما شابه ، لمعرفة ما إذا كان سيتم استبدال pickle.dumps(function) check https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/externals/joblib/parallel. هل ينتج pickle.loads(pickle.dumps(function)) حدوث خطأ؟ (للتوضيح ، يعد هذا فحصًا للسلامة لضمان قابلية التحمل قبل تشغيل المعالجة المتعددة.)

ogrisel قد يكون مهتمًا بهذا.

مما رأيته على النوافذ ، فإن أجهزة الكمبيوتر المحمولة لها تفاعلات غريبة مع المعالجة المتعددة.

هل جربت فقط تخليل وإلغاء انتقاء الوظيفة المحددة في نفس دفتر الملاحظات؟

لقد رأيت اليوم عن طريق الخطأ https://pythonhosted.org/joblib/parallel.html#bad -interaction-of-multiprocessing-and-third-party-Libraries ، أليس كذلك؟
ربما يجب عليك الترقية إلى Python 3.4 أو أحدث؟

ذهبت آسف في إجازة طويلة. للإجابة على أسئلتك على الرغم من:

  1. rejnothman : لقد وضعت pickle.loads(pickle.dumps(function)) بالتوازي py وبيان مطبوع بعده للتأكد من أنه كان ينفذ بشكل سليم ، ولم تكن هناك مشاكل هناك. للتوضيح ، لا يزال GridSearchCV.fit الذي تم استدعاؤه من دفتر الملاحظات عالقًا تمامًا كما كان من قبل دون أي تغيير (باستثناء بيان الطباعة الذي أضفته والذي يظهر 16 مرة مع n_jobs = -1).
  2. reamueller : إذا كنت
def test_function(x):
    return x**2
pickle.loads(pickle.dumps(test_function))(3)
# 9
  1. reolologin : أنا على 3.4.3. أو بشكل أكثر تحديدًا: '3.4.3 | Continuum Analytics، Inc. | (افتراضي ، 6 آذار (مارس) 2015 ، 12:07:41) n [GCC 4.2.1 (إصدار Apple Inc. 5577)] '

أنا لم أقرأ المحادثة المذكورة أعلاه ولكن أود الإشارة إلى أن فشل هذا الاختبار الحد الأدنى من تحت بناء بايثون 2.6 من ترافيس لكن مرت تحت تكوين مماثل في جهاز الكمبيوتر الخاص بي ... (مما يشير إلى أنه فشل عند n_jobs = -1 تم ضبطه تحت آلة أساسية واحدة لإصدارات python / joblib / scipy القديمة؟)

def test_cross_val_score_n_jobs():
    # n_jobs = -1 seems to hang in older versions of joblib/python2.6
    # See issue 5115
    cross_val_score(LinearSVC(), digits.data, digits.target, cv=KFold(3),
                    scoring="precision_macro", n_jobs=-1)

+1 لوجود هذه المشكلة ، يسعدنا تقديم تفاصيل إذا كان ذلك سيساعد

@ eric-czech إذا كنت تستخدم Python 3.4 أو 3.5 ، فيرجى محاولة تعيين متغير البيئة التالي ثم إعادة تشغيل برنامج python:

export JOBLIB_START_METHOD="forkserver"

كما هو موضح في مستندات Joblib . لا يتم تمكين وضع forkserver is افتراضيًا لأنه يكسر الوظائف المحددة بشكل تفاعلي.

لديك نفس المشكلة على كل من OS X 10.11.4 و Ubuntu 14.04 مع تثبيت أحدث البرامج.

# Metrics
B_R = 10.0

def raw_TPR(y_true, y_pred):
    return np.sum((y_true == 1) & (y_pred == y_true))

def raw_FPR(y_true, y_pred):
    return np.sum((y_true == 0) & (y_pred != y_true))

def AMS(y_true, y_pred):
    print("Hello")
    tpr = raw_TPR(y_true, y_pred)
    fpr = raw_FPR(y_true, y_pred)
    score = np.sqrt(2 * ((tpr + fpr + B_R) * np.log(1 + tpr / (fpr + B_R))) - tpr)
    return score


# Grid search

param_grid = {
    "max_depth":[6, 10],
    "learning_rate":[0.01, 0.5],
    "subsample":[0, 1],
    "min_child_weight":[0.1, 1],
    "colsample_bytree":[0.1, 1],
    "base_score":[0.1, 1],
    "gamma":[0.5, 3.5]
}

scorer = make_scorer(AMS, greater_is_better=True)


clf = XGBClassifier()
gridclf = GridSearchCV(clf, param_grid, scorer, n_jobs=-1, verbose=2)
gridclf.fit(X_train, y_train)

في الواقع ، لا يتم تجميد هذا الرمز إلا إذا كان n_jobs=1 .

يجب أن يعمل هذا الآن بشكل افتراضي على python 3 وأن يكون إصلاحًا wontfix على python 2 ، أليس كذلك

إذا تم تعليقه بصمت على Python 2 دون إلقاء أي تحذير أو خطأ ("n_jobs> 1 غير مدعوم في Python 2") ، فهذا غير مقبول ؛ هل يمكن أن نلقي خطأ؟

amueller على Python 3 ، يمكنك متابعة https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -187683383 للتغلب على المشكلة ، أي أنها لن تعمل بشكل افتراضي حتى في Python 3.

لست متأكدًا مما إذا كان يجب علينا الإغلاق لأن OP الأصلي يبدو وكأنه يقول إن تعيين طريقة بدء كتاب العمل إلى forkserver لا يعمل دائمًا ...

راجع للشغل xgboost واحد معروف ، راجع https://github.com/scikit-learn/scikit-learn/issues/6627#issuecomment -206351138.

تحرير: التغيير أدناه قد لا يصلح الأشياء في الواقع. كان هناك تغيير غير ذي صلة قمت به أيضًا في كيفية تعاملي مع المعالجة المتعددة باستخدام Pathos والذي ربما كان هو الحل الحقيقي.

إصلاح سريع:
np.random.seed(0)

تفسير:
كنت أواجه هذه المشكلة أيضًا ، بشكل أكثر حدة في مجموعة الاختبار لـ auto_ml . في المرة الأولى (2؟) التي قمت فيها بتشغيل GridSearchCV ، كان الأمر جيدًا ، ولكن بعد ذلك ستتوقف عمليات التشغيل اللاحقة دون أخطاء.

لقد قمت للتو بتعيين np.random.seed(0) داخل كل اختبار من اختباراتي ، لضمان إمكانية التكرار مع استمرار منح نفسي المرونة لإعادة ترتيب الاختبارات بمرور الوقت دون العبث بالعشوائية. بمجرد أن فعلت ذلك ، بدأت جميع الاختبارات التي علقت على خطأ GSCV في العمل مرة أخرى.

def test_name():
    np.random.seed(0)
    test_code_involving_gscv_here

آمل أن يساعد هذا في تصحيح الأخطاء!

بيئة التطوير:
Mac OS X (سييرا)
بايثون 2.7
إصدارات المكتبات الحديثة.

ClimbsRocks حسنًا ، من المحتمل أن يكون هناك خطأ في تقديراتك. أخبرنا إذا كان لديك مثال قابل للتكرار ؛)

amueller : دعوة جيدة. هرعت إلى قطع فرع لكم يا رفاق لإعادة إنتاج هذا ، لكن كل شيء سار بشكل صحيح هذه المرة.

أعتقد أنها كانت على الأرجح مشكلة في استخدام موازنة GSCV ، عندما أستخدم أيضًا موازاة باثوس في أجزاء أخرى من البرنامج. هذا هو الشيء الوحيد ذو الصلة الذي قمت بتغييره في الأسبوع الماضي أو نحو ذلك.

لقد قمت منذ ذلك الحين بإعادة البناء لإغلاق وفتح مجمع المعالجات المتعددة الخاص بهم.

ما يجعلني أعتقد أنه لم يكن مجرد خطأ في أحد المقدرين هو أنه عند بناء مجموعة الاختبار ، تم إجراء كل اختبار واجتيازه بشكل فردي. فقط عندما أجريت اختبارات متعددة في نفس المسار ، اعتمدت جميعها على GSCV التي بدأت في التعليق.

تم تحرير التعليق في وقت سابق لملاحظة عدم اليقين هذا.

إذا قمت بدمج Joblib مع أي موازاة أخرى ، فمن المحتمل جدًا أنه سيتعطل ويجب ألا تحاول ذلك.

آسف لتصل هذا الموضوع ولكن أنا أيضا واجهت هذه المشكلة.
لقد أنشأت Python 3.5 kernel وحددت طريقة بدء job lib إلى forkserver ولكن ما زلت أواجه المشكلة.

في الواقع ، لا تعمل حتى مع n_jobs = 1. أرى أنها تحسب باستثناء المعلمة الأخيرة.

هل هناك أخبار؟

في الواقع ، لا تعمل حتى مع n_jobs = 1. أرى أنها تحسب باستثناء المعلمة الأخيرة.

هذا أمر غريب ومن المحتمل جدًا ألا يتعلق بهذه المشكلة بعد ذلك (وهو حوالي n_jobs != 1 ). أفضل طريقة للحصول على تعليقات جيدة هي فتح مشكلة منفصلة باستخدام مقتطف مستقل يعيد إظهار المشكلة.

أنا متأكد من أنني واجهت هذه المشكلة بنفسي. بعد تجربة العديد من التوليفات ، كل ما أفعله مع n_jobs> 1 يتجمد ببساطة بعد عدة طيات. أنا أستخدم كمبيوتر محمول Ubuntu Linux مع sklearn = 0.19.0 ، لذلك هذا تكوين مختلف عن الإعدادات الأخرى التي قرأتها. هذا هو الرمز "المخالف":

import xgboost as xgb
from sklearn.model_selection import GridSearchCV
cv_params = {'max_depth': [3,5,7], 'min_child_weight': [1,3,5]}

ind_params = {'learning_rate': 0.1, 'n_estimators': 1000, 'seed':0, 'subsample': 0.8, 'colsample_bytree': 0.8,  'objective': 'binary:logistic'}
optimized_XGB = GridSearchCV(xgb.XGBClassifier(**ind_params), 
                            cv_params, scoring = 'roc_auc', cv = 5, n_jobs = 1, verbose=2) 
optimized_XGB.fit(xgboost_train, label_train,eval_metric='auc')

أحد الأشياء المثيرة للاهتمام هو أنه عندما أقوم باستيراد xgboost ، أتلقى تحذيرًا من الإيقاف على GridSearchCV كما لو كان لا يتم الاستيراد من model_selection. ومع ذلك ، أنا على xgboost 0.62 وفي النظر إلى مستودعهم يبدو أنهم يستوردون GridSearchCV الصحيح. لكي أكون واضحًا ، فإن تحذير الإيقاف ليس هو المشكلة التي تهمني بل هي المشكلة التي نحن بصددها: تجميد التنفيذ مع n_jobs> 1. مجرد الإشارة في حال كان يمكن أن يساعد.

هل يمكنك توفير بيانات للمساعدة في تكرار المشكلة؟

في 24 أغسطس 2017 الساعة 20:29 ، أرسل Xavier Amatriain [email protected]
كتب:

أنا متأكد من أنني واجهت هذه المشكلة بنفسي. بعد تجربة الكثير
مجموعات ، كل ما أفعله مع n_jobs> 1 يتجمد ببساطة بعد قليل
طيات. أنا أستخدم كمبيوتر محمول Ubuntu Linux مع sklearn = 0.19.0 ، لذلك هذا ملف
تكوين مختلف عن الآخرين الذين قرأت. هنا هو
الكود "المسيء":

`استيراد xgboost كـ xgb
من sklearn.model_selection استيراد GridSearchCV
cv_params = {'max_depth': [3،5،7]، 'min_child_weight': [1،3،5]}

ind_params = {'learning_rate': 0.1، 'n_estimators': 1000، 'seed': 0 ،
'عينة فرعية': 0.8 ، 'colsample_bytree': 0.8 ، 'هدف': ' ثنائي: لوجستي '}
optimized_XGB = GridSearchCV (xgb.XGBClassifier (** ind_params) ،
cv_params ، تسجيل النقاط = 'roc_auc' ، السيرة الذاتية = 5 ، n_jobs = 1 ، مطول = 2)
Optized_XGB.fit (xgboost_train ، label_train ، Eval_metric = 'auc') `

أحد الأشياء المثيرة للاهتمام هو أنه عندما أقوم باستيراد xgboost ، أحصل على ملف
تحذير الإيقاف على GridSearchCV كما لو لم يتم الاستيراد من
نموذج_الاختيار. ومع ذلك ، فأنا على xgboost 0.62 وألقي نظرة على ملفات
المستودع يبدو أنهم يقومون باستيراد GridSearchCV الصحيح. ان نكون
من الواضح أن تحذير الإيقاف ليس هو المشكلة التي تهمني بل بالأحرى
الشخص الذي في متناول اليد: تجميد الإعدام مع n_jobs> 1. مجرد الإشارة إلى الداخل
حالة يمكن أن تساعد.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-324597686 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAEz66DbfTlnU_-dcxLKa5zkrcZ-0qVOks5sbVCmgaJpZM4FqYlN
.

بالتأكيد ، يمكنك تنزيل الملفات الدقيقة التي أستخدمها من:
https://xamat.github.io/xgboost_train.csv
https://xamat.github.io/label_train.csv

HTTP404

عذرًا ، كان هناك خطأ في الرابط الأول ، يجب إصلاحه الآن. يجب أن يكون الثاني أيضًا على ما يرام ، لقد تحققت للتو.

مشكلة معروفة في xgboost ، راجع https://github.com/scikit-learn/scikit-learn/issues/6627#issuecomment -206351138 على سبيل المثال.

لمعلوماتك ، ستتخلص الواجهة الخلفية

هل ما زال هذا خطأ؟ أواجه نفس المشكلة مع الإعدادات الافتراضية (n_jobs = 1) وكذلك مع pre_dispatch = 1 ، باستخدام RandomForestClassifier ، مع 80 مجموعة من المعلمات و ShuffleSplit CV (n = 20).

كما أنه معلق أيضًا لخط أنابيب ( SelectKBest(score_func=mutual_info_classif, k=10) متبوعًا بـ RandomForestClassifier ) ، كلاهما ضمن الإصدار الأخير وكذلك إصدار التطوير.

اسمحوا لي أن أعرف ما إذا كنتم قد توصلتم إلى حل بديل أو طرق أخرى لاختيار النماذج تعمل بشكل موثوق. التفكير في محاولة إعطاء scikit-optimize .

هل تقصد n_jobs = 1 أم أنها خطأ مطبعي؟ هذه المسألة حول n_jobs! = 1.

أفضل طريقة للحصول على تغذية مرتدة عالية الجودة هي توفير طريقة لإعادة إظهار المشكلة. الرجاء فتح مشكلة منفصلة في هذه الحالة إذا كانت المشكلة التي تراها تتعلق بالفعل بـ n_jobs = 1.

كتبت ما قصدته ، وهو "تمكين تعدد مؤشرات الترابط"
n_jobs! = 1 كما في "لا يساوي 1". بشكل مكافئ ، n_jobs> 1. على سبيل المثال ، n_jobs = 4

هل تقول أنه لا يمكنك إعادة تجميد n_jobs = 4؟

إذا كان الأمر كذلك ، فسأقدم حقيبة اختبار في غضون شهر (أنا أتغير إلى آلة جديدة.)

في 12 سبتمبر 2017 ، الساعة 7:10 صباحًا ، كتب Lo ،c Estève < [email protected] [email protected] >:

هل تقصد n_jobs = 1 أم أنها خطأ مطبعي؟ هذه المسألة حول n_jobs! = 1.

أفضل طريقة للحصول على تغذية مرتدة عالية الجودة هي توفير طريقة لإعادة إظهار المشكلة. الرجاء فتح مشكلة منفصلة في هذه الحالة إذا كانت المشكلة التي تراها تتعلق بالفعل بـ n_jobs = 1.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرة ، أو قم بعرضها على GitHub https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-328864498 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe- المصادقة / ABH-rd7wgU5lcS6oD5VMl0YOB8CXfSTJks5shpDZgaJpZM4FqYlN .

mcinerney هل أنتraamana؟ أعتقد أن @ lesteve رد على raamana الذي كتب n_jobs=1 ، والذي يبدو أنه لا علاقة له بهذه المشكلة.

أوه آسف ، لا أنا لستraamana. مشكلة Yes @ raamana مختلفة (لكن ربما بسبب نفس الكود)

في 12 سبتمبر 2017 ، الساعة 9:23 صباحًا ، كتب أندرياس مولر < [email protected] [email protected] >:

smcinerney https://github.com/smcinerney هل أنتraamana https://github.com/raamana ؟ أعتقد أن @ lesteve https://github.com/lesteve رد علىraamana https://github.com/raamana الذي كتب n_jobs = 1 ، والذي يبدو أنه لا علاقة له بهذه المشكلة.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرةً ، أو قم بعرضه على GitHub https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-328905819 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe- المصادقة / ABH-rYKQA3L5ifINBX6enrk5oDIsf1Lqks5shrASgaJpZM4FqYlN .

سيئتي ، لم أقصد خلط الأشياء. سأفتح مشكلة أخرى (مع الحد الأدنى من التعليمات البرمجية لإعادة إنتاجها) ، ولكن ليس تعليق GridSearchCV حتى مع n_jobs الافتراضية = 1 هو مصدر قلق أكبر (نظرًا لأنه افتراضي ويفترض أن يعمل) من n_jobs> 1.

raamana نعم إنه مصدر قلق أكبر ولكن من غير المحتمل أيضًا أن يكون بسبب مشكلة ذات صلة.

تضمين التغريدة
لذلك إذا قررت استخدام الواجهة الخلفية = 'threading'. تتمثل إحدى الطرق السهلة بدون تغيير رمز sklearn في استخدام مدير سياق متوازي الظهر وعدم تغيير طريقة ملاءمة GSV.

from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV()
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

ملاحظة: لست متأكدًا مما إذا كان "الترابط" يعمل مع جميع المقدرين. لكنني كنت أواجه نفس المشكلة مع مقدر مع GSV njob> 1 واستخدام هذا يعمل كما هو متوقع بالنسبة لي دون تغيير المكتبة.

تم تجربة النظام على:
نظام التشغيل MAC OS: 10.12.6
بايثون: 3.6
numpy == 1.13.3
الباندا == 0.21.0
scikit-learn == 0.19.1

حسنًا ... يمكن أن يكون هناك بعض مشكلات التزامن باستخدام الواجهة الخلفية لمؤشر الترابط
البحث في الشبكة ، على سبيل المثال الخطأ في # 10329 يخلق ظروف السباق ...

في 22 ديسمبر 2017 الساعة 03:59 ، كتب Trideep Rath [email protected] :

@ eric-czech https://github.com/eric-czechjnothman
https://github.com/jnothman
لذلك إذا قررت استخدام الواجهة الخلفية = 'threading'. طريقة واحدة سهلة بدون
تغيير كود sklearn سيكون لاستخدام إدارة السياق المتوازية
ولا تتغير في طريقة GSV الملائمة.

من sklearn.externals.joblib استيراد موازٍ_باكيند

clf = GridSearchCV ()
مع التوازي الخلفي ("مؤشر الترابط"):
clf.fit (x_train، y_train)

ملاحظة: لست متأكدًا مما إذا كان "الترابط" يعمل مع جميع المقدرين. لكني كنت كذلك
تواجه نفس المشكلة مع مقدري مع GSV njob> 1 واستخدام هذا
يعمل كما هو متوقع بالنسبة لي دون تغيير المكتبة.

تم تجربة النظام على:
نظام التشغيل MAC OS: 10.12.6
بايثون: 3.6
numpy == 1.13.3
الباندا == 0.21.0
scikit-learn == 0.19.1

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-353402474 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAEz64SfwYpjLU1JK0vukBRXJvWYs3LKks5tCo51gaJpZM4FqYlN
.

الحالة: استخدام الخلفية كـ "مؤشر ترابط" واستخدام المقدر الذي يوسع BaseEstimator و ClassifierMixin. لست متأكدًا من سبب حالة السباق. هل يمكنكم توضيح.

حسب فهمي وتجاربي ، لم ألاحظ أي حالة سباق.

out = Parallel(
    n_jobs=self.n_jobs, verbose=self.verbose,
    pre_dispatch=pre_dispatch
)(delayed(_fit_and_score)(clone(base_estimator), X, y, scorers, train,
                          test, self.verbose, parameters,
                          fit_params=fit_params,
                          return_train_score=self.return_train_score,
                          return_n_test_samples=True,
                          return_times=True, return_parameters=False,
                          error_score=self.error_score)
  for parameters, (train, test) in product(candidate_params,
                                           cv.split(X, y, groups)))

يتم استدعاء _fit_and_score في النسخة (base_estimator). يقوم هذا بعمل نسخة عميقة ولديه نسخة من بياناته الخاصة.

out هو إخراج طريقة _fit_and_score. بعد ذلك ، أكملت جميع الخيوط تنفيذ طريقة ملائمة للمقدر وأبلغت عن النتائج.

النتائج هي ما تحصل عليه من GCV_clf.cv_results_

هل يمكنك أن تشرح في هذه الحالة بالتحديد لماذا قد يتسبب ذلك في حالة العرق؟

تحدث حالة السباق إذا كنت تقوم بتعيين معلمات متداخلة ، أي متى
معلمة واحدة تم تغييرها هي مقدر والأخرى هي معلمة لذلك
مقدر.

أواجه نفس المشكلة باستخدام make_scorer بالاشتراك مع GridSearchCv و n_jobs=-1 ضمن Win 7 مع الإصدارات الحديثة:

Windows-7-6.1.7601-SP1
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]
NumPy 1.12.1
SciPy 1.0.0
Scikit-Learn 0.19.1

mansenfranzen شكرًا لنشر https://stackoverflow.com/help/mcve لمزيد من التفاصيل.

مواجهة نفس المشكلة ضمن Win7 مع أي خطوات معالجة مسبقة مخصصة.
سلسلة الأدوات:

Python 3.6.2
NumPy 1.13.1, 1.14.2 (under both)
SciPy 1.0.0
SkLearn 0.19.1

MCVE:

from sklearn.pipeline import Pipeline, make_pipeline
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
import numpy as np

class CustomTransformer:
    def fit(self, X, y):
        return self

    def transform(self, X):
        return X

pipeline = make_pipeline(CustomTransformer(),
                         SVC())

X_train = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
y_train = np.array([1.0, 0.0, 0.0, 1.0])

print(cross_val_score(pipeline, X_train, y_train, cv=2, n_jobs=-1))

هل تعلم أن معالجة البايثون المتعددة لن تعمل في النوافذ بدون if __name__ == '__main__' ؟

نعم انا. آسف ، نسيت أن أقول إنني أستخدم Jupyter.
يقوم برنامج نصي مستقل مع if __name__ == '__main__' بطباعة الآثار التالية ثم يتجمد:

Process SpawnPoolWorker-1:
Traceback (most recent call last):
  File "C:\Python\Python36\lib\multiprocessing\process.py", line 249, in _bootstrap
    self.run()
  File "C:\Python\Python36\lib\multiprocessing\process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Python\Python36\lib\multiprocessing\pool.py", line 108, in worker
    task = get()
  File "C:\Python\Python36\lib\site-packages\sklearn\externals\joblib\pool.py", line 362, in get
    return recv()
  File "C:\Python\Python36\lib\multiprocessing\connection.py", line 251, in recv
    return _ForkingPickler.loads(buf.getbuffer())
AttributeError: Can't get attribute 'CustomTransformer' on <module '__mp_main__' from 'C:\\projects\\Python\\Sandbox\\test.py'>
< same for SpawnPoolWorker-3 here >

يا للاهتمام. بدافع الكسل البسيط ، وضعت النص بالكامل تحت if __name__ == '__main__' وحصلت على النتائج من التعليق السابق.

الآن قمت بوضع pipeline = make_pipeline... ، وتم تنفيذه بنجاح. ربما هذا هو السبب في كوكب المشتري؟

على أي حال ، لا أعرف ما إذا كان السلوك في التعليق السابق صحيحًا وسببه الاستخدام غير السليم لـ if __name__ == '__main__' ، أم أنه خطأ SkLearn.

يبدو أنها ليست مشكلة في مكتبتنا ، ولكنها مشكلة تتعلق بالتنفيذ
سياق المعالجة المتعددة في windows ...

هذا مقرف. وبالفعل ، لم أتمكن من إعادة إنتاج أي من المشاكل تحت Ubuntu بنفس الإصدارات من كل شيء. شكرا للمساعدة!

يمكن تأكيد هذا الخطأ على قيد الحياة وبصحة جيدة.

يعمل على نظام التشغيل Windows 10 في دفتر jupyter ، Python3 ، Sklearn 0.19.1

نفس المشكلة على Linux Mint (Ubuntu 16.10) Python 3.5

يتعطل كل شيء في البداية على كل نواة ، وتعمل وحدات المعالجة المركزية (CPU) ، لذلك لا يتم إنجاز أي عمل.

MrLobs هذا يبدو وكأنه خطأ التخليل ، أليس كذلك؟ ضع CustomTransformer في ملف python منفصل.

@ Chrisjw42avatsaev دون مزيد من السياق لا يمكننا حقا أن تفعل الكثير.
avatsaev يبدو أنك ربما تستخدم Tensorflow؟

amueller نعم إنه Tensorflow

avatsaev لا تزال هذه المعلومات غير كافية حقًا. هل لديك مثال أدنى للتكاثر؟ ما هو blas الذي تستخدمه ، هل تستخدم GPU ، ما هو إصدار scikit-Learn الذي تستخدمه ....

حسنًا ، اتضح أن السبب في ذلك هو أنني أستخدم TF GPU ، لذا فإن تعيين n_jobs إلى> 1 لا يعمل حقًا ، وهو أمر طبيعي لأن لديّ وحدة معالجة رسومات GPU واحدة فقط

نعم ، لا يجب عليك استخدام n_jobs مع TF في كلتا الحالتين.

لما لا؟

amueller ، نعم ، وضع محولات مخصصة في ملف منفصل يحلها

هل من الممكن لـ n_jobs! = 1 إلقاء خطأ (أو تحذير على الأقل) في البيئات التي سيتعطل فيها؟ لقد واجهت للتو هذه المشكلة في دفاتر jupyter ، وإذا كنت مستخدمًا مبتدئًا أكثر (مثل بقية صفي) ، فلن أفهم أبدًا سبب تعليق gridsearchcv ، في الواقع ، نصحنا مدرسنا باستخدام n_jobs = - 1. إذا كانت المشكلة هنا معروفة ، فهل يمكن للحزمة (keras أو sklearn ، أيهما) أن تحذر من حدوثها وتمنع التعطل؟

لا أعتقد أن أي شخص يعرف ما هي البيئة التي سيتعطل فيها هذا ... لا أعتقد أن أي شخص قد تمكن من إعادة إنتاج هذا الخطأ بطريقة موثوقة.

لكننا نعمل على تحسين البنية التحتية للمعالجة المتعددة.
ليس من الواضح بالنسبة لي ما إذا كان ذلك سيحل كل هذه المشكلات.

تضمين التغريدة

من الرائع سماع ذلك!

لست متأكدًا من سبب وضع علامة 0.21. يتم حل هذا في 0.20 في معظم الحالات. أعتقد أننا يجب أن نغلق هذا وأن نجعل الناس يفتحون قضايا جديدة. هذا طويل جدا وغير محدد.

لقد واجهت نفس الشيء للتو على AWS Ubuntu مع Jupyter ...

يبدو أن استخدام الطريقة المتوازية يعمل ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

morienor إذا كان بإمكانك إعادة إنتاج هذه المشكلة باستخدام scikit-learn 0.20.1 ، فالرجاء فتح إصدار جديد بكل التفاصيل الضرورية لشخص آخر حتى يتمكن من إعادة إنتاج المشكلة (النص الكامل مع بيانات الاستيراد على مجموعة بيانات عشوائية مزيفة) جنبًا إلى جنب مع جميع أرقام إصدارات python و scikit-learn و numpy و scipy ونظام التشغيل.

لقد واجهت نفس الشيء للتو على AWS Ubuntu مع Jupyter ...

يبدو أن استخدام الطريقة المتوازية يعمل ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

هذا يعمل بالنسبة لي! شكرا جزيلا!

@ jmq19950824morienor نعم ولكن ليس هناك نقطة في استخدام threading الخلفية بسبب GIL.

لقد واجهت نفس الشيء للتو على AWS Ubuntu مع Jupyter ...

يبدو أن استخدام الطريقة المتوازية يعمل ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

عبقري يعمل بالنسبة لي

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات