Xgboost: لا يمكن تحميل النموذج الذي تم إنتاجه في 1.0.0 في 0.90

تم إنشاؤها على ٢٢ فبراير ٢٠٢٠  ·  74تعليقات  ·  مصدر: dmlc/xgboost

اتباع التعليمات هنا: https://xgboost.readthedocs.io/en/latest/R-package/xgboostPresentation.html

> install.packages("drat", repos="https://cran.rstudio.com")
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.6/drat_0.1.5.zip'
Content type 'application/zip' length 87572 bytes (85 KB)
downloaded 85 KB

package ‘drat’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\lee\AppData\Local\Temp\RtmpiE0N3D\downloaded_packages
> drat:::addRepo("dmlc")
> install.packages("xgboost", repos="http://dmlc.ml/drat/", type = "source")
Warning: unable to access index for repository http://dmlc.ml/drat/src/contrib:
  Line starting '<!DOCTYPE html> ...' is malformed!
Warning message:
package ‘xgboost’ is not available (for R version 3.6.0) 

فشل أيضًا في R 3.6.2 مع نفس الخطأ.

ملاحظة: أفضل استخدام إصدار CRAN. لكن النماذج التي أتدرب عليها على نظام التشغيل Linux و Mac وحفظها باستخدام وظيفة saveRDS لا تتنبأ على نظام آخر (windows) ، فهي تنتج فقط رقمًا (0). إذا كان لدى أي شخص أي إرشادات حول كيفية حفظ نموذج XGBoost لاستخدامه على أجهزة كمبيوتر أخرى ، فيرجى إبلاغي بذلك. لقد جربت xgb.save.raw و xgb.load - كلاهما ينتج رقمًا (0) أيضًا. ولكن على الكمبيوتر الذي قمت بتدريب النموذج عليه (منذ شهر) ، فإن readRDS in R تعمل بشكل جيد. محير للغاية بالنسبة لي.

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

لقد نجحت في إعادة إظهار المشكلة على نظام التشغيل Linux - انظر لقطة الشاشة المرفقة.

أقوم بتحميل الصندوق الافتراضي إلى صندوق الإسقاط. ولكن في حال كنت تفضل التثبيت من البداية ، فإن إرشادات النسخ كما يلي:

  1. قم بتنزيل Virtualbox وتثبيته
  2. قم بتنزيل نسخة من ubuntu bionic beaver (استخدمت ubuntu-18.04.3-desktop-amd64).
  3. اتبع التعليمات هنا: https://medium.com/@mannycodes/installing -ubuntu-18-04-on-mac-os-with-virtualbox-ac3b39678602. لقد استخدمت محرك أقراص افتراضيًا ثابتًا تبلغ سعته 15 غيغابايت
  4. قم بتكوين R 3.6.2 من خلال ما يلي:
sudo apt-get update
sudo apt-get install vim
sudo vim /etc/apt/sources.list
i
deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/
<esc> :wq
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
gpg -a --export E298A3A825C0D65DFD57CBB651716619E084DAB9 | sudo apt-key add -
sudo apt-get update
sudo apt-get install r-base-dev
  1. تثبيت الحزم في R

install.packages(c("caret", "xgboost"))

  1. حزم التحميل في R
library(caret)
library(xgboost)
  1. قم بتحميل البيانات
modelList <- readRDS("~/Desktop/modelList.rdata")
attach(modelList)
  1. محاولة للتنبؤ
predict(object=xgbModel, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))

وهذا ما عاد إلى ما هو مألوف الآن:

[13:00:55] تحذير: الدمج /../ src / object / regression_obj.cu: 152: reg: الخطي أصبح الآن مهملًا لصالح reg: squarederror.
رقمي (0)

Screen Shot 2020-02-23 at 12 33 13 PM

ملاحظة: حاولت استدعاء المكتبات بشكل صريح ، وحاولت التنبؤ فقط. نتج عن كلاهما نفس الاستجابة الرقمية (0).

ال 74 كومينتر

هل جربت install.packages ('xgboost')؟

هل جربت install.packages ('xgboost')؟

يعمل هذا بشكل جيد ، ولكن كل التنبؤات من النماذج المحفوظة (باستخدام saveRDS) تنتج رقمًا (0). يبدو أن النماذج التي تم تدريبها باستخدام OpenMP لا تعمل على أجهزة الكمبيوتر بدون هذا الإطار. كنت آمل أن يؤدي التجميع من المصدر إلى حل هذه المشكلة.

هذه هي طريقة تجميع XGBoost من المصدر:

mkdir build
cd build
cmake .. -G"Visual Studio 14 2015 Win64" -DR_LIB=ON
cmake --build . --target install --config Release

هل يمكنك مشاركة ملف النموذج حتى نتمكن من محاولة معرفة سبب حصولك على 0 للتنبؤ؟

شكرًا - هل تريد كائن R أم تفضل تحويله عبر xgb.save.raw؟

على حد سواء

شكرًا لك على مساعدتك ودعمك (وعلى إنشاء مثل هذا البرنامج التعليمي الاستثنائي).

مرفق ملف .rdata مضغوط. في 3 أنظمة (Mac ، MacBook ، Ubuntu) ، يمكنني تشغيل الكود التالي:

modelList <- readRDS("<path_to_folder>/modelList.rdata")
attach(modelList)
predictions_caret <- predict(object=caretModel, newdata=caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"])
predictions_xgbbase <- predict(object=xgbModel, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))

واحصل على المخرجات التالية:

> predictions_caret <- predict(object=caretModel, newdata=caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"])
[23:12:50] WARNING: ../..//amalgamation/../src/objective/regression_obj.cu:167: reg:linear is now deprecated in favor of reg:squarederror.
> head(predictions_caret)
[1] 14.0180358887 13.0352602005 12.9208145142 13.2430124283 13.6698570251
[6] 12.9033651352

> predictions_xgbbase <- predict(object=xgbModel, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))
[23:16:17] WARNING: ../..//amalgamation/../src/objective/regression_obj.cu:167: reg:linear is now deprecated in favor of reg:squarederror.
> head(predictions_xgbbase)
[1] 14.0180358887 13.0352602005 12.9208145142 13.2430124283 13.6698570251
[6] 12.9033651352

في النظام 4 (windows base R مع xgboost مثبت من CRAN) أحصل على نتائج مختلفة جدًا:

> predictions_caret <- predict(object=caretModel, newdata=caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"])
[23:18:04] WARNING: amalgamation/../src/objective/regression_obj.cu:152: reg:linear is now deprecated in favor of reg:squarederror.
> head(predictions_caret)
numeric(0)

> predictions_xgbbase <- predict(object=xgbModel, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))
[23:18:41] WARNING: amalgamation/../src/objective/regression_obj.cu:152: reg:linear is now deprecated in favor of reg:squarederror.
> head(predictions_xgbbase)
numeric(0)

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

أخيرًا ، تم تضمين xgbRaw (يجب أن يكون قابلاً للاستدعاء إذا كنت تستخدم attach ()) ، فقد تم إنشاؤه باستخدام الكود التالي:

xgbRaw=xgb.save.raw(xgb.Booster.complete(caretModel$finalModel))

شكرا لك مرة اخرى.

modelList.rdata.zip

ربما بسبب حماية dmlc لدينا ضد استثناء omp؟

@ leedrake5 ألا يدعم جهازك OpenMP؟

@ hcho3 هل وجدت السبب؟ لقد جمعت للتو XGBoost بدون OpenMP (مع بعض التصحيحات لـ CMakeLists) ، فشلت اختبارات الذاكرة الخارجية كما هو متوقع ، كما فشل اختبار المجموعة المتوازية (الذي قمت بإصلاحه في الفرع المحلي). لكن حتى الآن يمكنني الحصول على قيم تنبؤ مثالية.

@ hcho3 يدعم جهازي openmp. لكننا نقوم بنشر هذه النماذج على نطاق صناعي ، والكثير من أجهزة الكمبيوتر في مواقع محددة لا تحتوي على برنامج openmp. لقد اكتشفنا هذا للتو بعد 6 أشهر من الإعداد وأسبوع واحد حتى التنفيذ ، لذلك نحن نسعى جاهدين لمعرفة سبب عمل النماذج على بعض أجهزة الكمبيوتر دون غيرها.

إذا كان هناك بعض الفلسفة حول لماذا يجب أن تعمل النماذج فقط في بيئة البناء الخاصة بهم ، فهل هناك طريقة ما للحصول على خطأ إعلامي حول السبب؟

@ leedrake5 إنه خطأ. لقد كنت أحاول إعادة إنتاجه على Ubuntu مع تعطيل openmp ولكن لم يحالفني الحظ حتى الآن.

trivialfs إذا كان ذلك مفيدًا ، فأنا ومعظم زملائي يعانون من الخطأ في Windows. على الرغم من أن أحد زملائي كان قادرًا على إعادة إنتاجه على ubuntu بدون openmp.

أظن أن الحد الأدنى من تثبيت R مع عدم وجود أشياء خيالية (openmp و intelmkl و openblas وما إلى ذلك) قد يعيد إنتاجه ، لكنني ما زلت أحيط رأسي حول أي جزء من النظام يسبب المشاكل.

@ leedrake5 إذا كانت هناك طريقة لإعادة إنتاجه على توزيعات Linux فسيكون ذلك مفيدًا جدًا!

لقد عطلت جميع الخيارات بما في ذلك google test و omp ... ولكن لا تزال النتيجة الصحيحة تحميل النماذج الخاصة بك. تثبيت R هو التوزيع الافتراضي من apt ، لا أعتقد أن له أي علاقة بتنبؤ XGBoost.

قد لا يكون بسبب OpenMP. بما أن التنبؤات تسير بشكل خاطئ حقًا ، فلا يزال هناك تحيز عالمي ، وليس صفرًا.

السبب الوحيد الذي يمكنني التفكير فيه هو أن XGBoost لم يتم تثبيته بالفعل. أعتقد أننا نجري اختبارات على CRAN ، أليس كذلك؟ @ hcho3

لقد جربت كلاً من CMake build و autotools build. هذه هي علامات التجميع الخاصة بي التي تم الإبلاغ عنها بواسطة install.packages(...) (إنشاء أدوات آلية):

g++ -std=gnu++11 -I"/usr/share/R/include" -DNDEBUG -I../..//include -I../..//dmlc-core/include -I../..//rabit/include -I../../ -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=1 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_    -DDMLC_CMAKE_LITTLE_ENDIAN=1 -pthread -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-el7SHG/r-base-3.5.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c ../..//amalgamation/xgboost-all0.cc -o ../..//amalgamation/xgboost-all0.o

trivialfis أكثر فضولًا ، حيث يتم تثبيت XGBoost بنجاح من CRAN ، وتعمل المكتبة (xgboost) دون أي مشكلة.

على الرغم من أن أحد زملائي كان قادرًا على إعادة إنتاجه على ubuntu بدون openmp.

هل من الممكن أنه / يمكنها التفضل بمشاركة كيفية الإنجاب؟

على الرغم من أن أحد زملائي كان قادرًا على إعادة إنتاجه على ubuntu بدون openmp.

هل من الممكن أنه / يمكنها التفضل بمشاركة كيفية الإنجاب؟

لست متأكدًا من أنهم يعرفون ما يكفي عن كيفية عمل أنظمة Linux - ولكن إذا كنت تعرف أي تشخيصات يمكنهم توفيرها ، فأعلمني بذلك.

من ناحيتي ، أحاول إنشاء تثبيت مربع ubuntu افتراضي يمكنه تكرار المشكلة - إذا نجحت ، سأرسل رابط تنزيل لذلك.

لقد نجحت في إعادة إظهار المشكلة على نظام التشغيل Linux - انظر لقطة الشاشة المرفقة.

أقوم بتحميل الصندوق الافتراضي إلى صندوق الإسقاط. ولكن في حال كنت تفضل التثبيت من البداية ، فإن إرشادات النسخ كما يلي:

  1. قم بتنزيل Virtualbox وتثبيته
  2. قم بتنزيل نسخة من ubuntu bionic beaver (استخدمت ubuntu-18.04.3-desktop-amd64).
  3. اتبع التعليمات هنا: https://medium.com/@mannycodes/installing -ubuntu-18-04-on-mac-os-with-virtualbox-ac3b39678602. لقد استخدمت محرك أقراص افتراضيًا ثابتًا تبلغ سعته 15 غيغابايت
  4. قم بتكوين R 3.6.2 من خلال ما يلي:
sudo apt-get update
sudo apt-get install vim
sudo vim /etc/apt/sources.list
i
deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/
<esc> :wq
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
gpg -a --export E298A3A825C0D65DFD57CBB651716619E084DAB9 | sudo apt-key add -
sudo apt-get update
sudo apt-get install r-base-dev
  1. تثبيت الحزم في R

install.packages(c("caret", "xgboost"))

  1. حزم التحميل في R
library(caret)
library(xgboost)
  1. قم بتحميل البيانات
modelList <- readRDS("~/Desktop/modelList.rdata")
attach(modelList)
  1. محاولة للتنبؤ
predict(object=xgbModel, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))

وهذا ما عاد إلى ما هو مألوف الآن:

[13:00:55] تحذير: الدمج /../ src / object / regression_obj.cu: 152: reg: الخطي أصبح الآن مهملًا لصالح reg: squarederror.
رقمي (0)

Screen Shot 2020-02-23 at 12 33 13 PM

ملاحظة: حاولت استدعاء المكتبات بشكل صريح ، وحاولت التنبؤ فقط. نتج عن كلاهما نفس الاستجابة الرقمية (0).

الرابط إلى مثيل افتراضي مضغوط 7z موجود هنا: https://www.dropbox.com/s/ld06zz798m0segf/UbuntuDebug.7z؟

دعني أحصل على الصندوق الافتراضي أولاً. أنا عادة أستخدم KVM.

أنظر إلى هذا الآن.

@ leedrake5 تمكنت من إعادة إظهار المشكلة على الجهاز الظاهري الذي قدمته. يبدو أن هناك مشكلة في saveRDS و xgb.save.raw . هل حاولت استخدام xgb.save و xgb.load بدلاً من ذلك؟ تستخدم مجموعة الوظائف هذه تنسيقًا "أصليًا" لنموذج XGBoost ولا تحفظ السمات الخاصة ببيئة R. إنه مفيد إذا كنت تريد نقل نموذجك من حزمة R إلى Python.

لا ينبغي أن يكون حفظ الخام مشكلة. قد تكون المشكلة في كيفية قيام R بتسلسل كود R. أضفنا معلمة اختيارية جديدة للتنبؤ ، والتي قد تؤثر على تحميل هذه الأنواع من التسلسل. حاولت النظر في الأمر ولكن يبدو أنه غريب حقًا ، تمامًا مثل مشكلة Python pickle.

trivialfis هل من أفكار حول الخيارات في وظيفة التنبؤ التي يمكن أن تتحايل على هذا؟ فكرتي هي أن لها علاقة بتعليمات وحدة المعالجة المركزية ، وربما أعمق في R مما يمكن معالجته بواسطة الحزمة.

@ hcho3 سأحاول إضافة xgb.save.raw إلى أنبوب البيانات الحالي ومعرفة ما إذا كان ذلك يساعد. بالرغم من ذلك في المثال الذي أرسلته ، فقد جربت ذلك باستخدام xgb.save.raw على الكمبيوتر حيث عملت التنبؤات ، ولسوء الحظ لا يزال يؤدي إلى رقم (0) على xgb.load. من المسلم به أن هذا حدث بعد أن تم حفظ النموذج بالفعل عبر saveRDS ، ربما شيء ما حول هذه العملية يفسده ، على الرغم من أنه لا يزال يعمل في البيئة التي تم إنشاؤها فيه.

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

لا ، قصدت xgb.save ، وليس xgb.save.raw .

trivialfis لاحظ أن حزمة XGBoost لا تزال 0.90 على CRAN.

لقد جربت xgb.save ، وقمت بتحميله في R عبر xgb.load () ، ونفس الشيء ، رقمي (0). انظر المرفقة من xgb.save

xgbModelSaved.xgb.zip

أيضًا - اختبرت نفس الطريقة باستخدام البيانات الموجودة في modelList سابقًا في هذا الموضوع على نفس الكمبيوتر الذي أنشأ النموذج - لقد عملت هناك.

بغض النظر عن كيفية تقسيمه ، xgb.save ، xgb.save.raw ، saveRDS ، وما إلى ذلك ، هناك شيء ما يتعلق ببيئة الكمبيوتر التي تم إنشاؤها على النموذج الذي يحول دون استخدامه في مكان آخر.

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

  • نظام التشغيل
  • إصدار XGBoost
  • أمر لحفظ النموذج

OS X (كاتالينا). XGBoost build from source، 1.0 (openMP مدعوم على النظام). تم حفظ النموذج في الأصل باستخدام saveRDS. سأحاول إعادة تشغيله وحفظه بطرق مختلفة وإبلاغه مرة أخرى.

لقد قمت بإعادة إنشاء نموذج من البداية ، وحفظه باستخدام xgb.save (على سبيل المثال ، عدم استخدام saveRDS أو readRDS باستثناء بيانات التنبؤ) وتحميله باستخدام xgb.load. نفس النتائج - يعمل التوقع على نظام الكمبيوتر المستخدم لإنشاء النموذج (OS X ، XGB 1.0) ويفشل على نظام آخر (Windows 7 ، XGB 0.9). إرفاقه والقائمة النموذجية بهذه الرسالة. إذا كان هناك أي شيء آخر يمكنني القيام به للمساعدة في تشخيص هذه المشكلة ، فيرجى إبلاغي بذلك.

xgb_model <- xgb.load("Z:/Desktop/newxgbModelSaved.xgb")
modelList <- readRDS("Z:/Desktop/modelList2.rdata")
attach(modelList)
predict(object=xgb_model, newdata=as.matrix(caretModel$trainingData[,!colnames(caretModel$trainingData) %in% ".outcome"]))
numeric(0)

newxgbModelSaved.xgb.zip

modelList2.rdata.zip

@ leedrake5 هل من الممكن استخدام XGBoost 1.0 على Windows؟

trivialfis قد تكون هذه مشكلة في التوافق مع الإصدارات السابقة لملفات النموذج.

إنه بالتأكيد إصدار. لقد أسقطت للتو إصدار 1.0 من XGBoost ، مثبتًا 0.9 من CRAN ، وقد نجحت الطريقة الموضحة أعلاه.

حاولت تثبيت 0.90 من المصدر باستخدام أحدث إصدار ، لكن مجلد dmlc-core فارغ ، لذا ألقى Cmake الخطأ الضروري. أرغب بشدة في الاحتفاظ بوظيفة openMP مع ذلك.

أرى. هل حاولت تثبيت إصدار 1.0.0 على Windows؟

كان هذا هو السبب الأولي لهذا الخيط ، ومن الغريب. سأحاول ، ولكن سيكون هناك تأخير لأن المشروع لا يمكنه الانتظار أكثر من ذلك. إذا كانت هذه مشكلة ، فأنا أظن أن تثبيت 1.0 من المصدر على صورة ubuntu الافتراضية التي أرسلتها سيعالج نفس الشيء.

@ leedrake5 نعم ، يجب أن تتطابق مع إصدار XGBoost. استخدم إما 0.90 في كل مكان أو 1.0.0 في كل مكان.

trivialfis أذكر أننا قمنا بتغيير جذري في تنسيق النموذج الثنائي. هل هذا صحيح؟

لا ، نحن متوافقون مع الإصدارات السابقة ، يجب بالتأكيد تحميل الإصدار 1.0 من 0.9

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

أعتقد أن التغيير المقترح في العنوان يرجع إلى الاتجاه المعاكس - لا يمكن استخدام النموذج الذي تم إنتاجه في 1.0 للتنبؤ بـ 0.90. لا أعرف مدى التوافق المقصود بين الإصدارات ، ولكن على الأقل يجب أن يساعد الخطأ الإعلامي.

عفوًا ، يا سيئ.

trivialfis أعتقد أن ما يطلبه @ leedrake5 هو التوافق مع الأمام ، أي نموذج التحميل من 1.0.0 إلى 0.90. لست متأكدًا مما إذا كان هذا هو ما نعد به.

@ leedrake5 حاولت تثبيت 1.0.0 في جهاز Ubuntu الظاهري ، والآن يتم تحميل ملف RDS بشكل جيد وأحصل على متجه للأرقام الحقيقية. لذلك على الأرجح أنها مشكلة الإصدار.
1 0 0

تعديل. رسالة التحذير في لقطة الشاشة غريبة: Loading model from < 1.0.0, consider saving it again . لا ينبغي أن يكون هذا هنا ، نظرًا لأن النموذج تم إنتاجه بواسطة 1.0.0.

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

لسوء الحظ ، من وجهة نظر الإنتاج ، يجب أن أجعل النماذج قابلة للنشر في الإصدار الشامل (تثبيت ergo ، CRAN). لكني أعرف كيف أجعل XGBoost يعمل من الآن فصاعدًا ، وهي النقطة الحاسمة المطلقة.

ما زلت أواجه مشكلات في تثبيت 0.9 من المصدر الذي تم تنزيله من الإصدارات أو الشجرة ، لكنني أعتقد أنني وجدت المشكلة. cub ، dmlc-core ، rabit ، كلها مجلدات فارغة في هذه التنزيلات. لديهم ايضا @بعد المجلدات - أعتقد أن هذا مرتبط بالمجلدات الفارغة. إذا اتبعت هذه الروابط ، يمكنني إعادة إنشاء المجلدات ومتابعة التثبيت.

انظر لقطة الشاشة:
Screen Shot 2020-03-03 at 9 41 33 PM

نعم ، نحن نستخدم وحدات git الفرعية ، لذا تطلب منك تعليمات الإنشاء استخدام git clone --recursive للتثبيت من المصدر. هل أنت في موقف لا يكون فيه تركيب CRAN مناسبًا؟ إذا أدى استخدام 0.90 في كل مكان إلى حل مشكلتك ، فيمكنك فقط استخدام تثبيت CRAN في كل مكان (Linux ، Mac ، Windows)؟

نعم - لا يسمح CRAN بـ openMP ، والذي يعد بمثابة نعمة كبيرة لتوليد الطراز. لذلك سنقضي بعض الوقت في اكتشاف كيفية تجميع xgboost 0.90 من المصدر لإعادة العمل مرة أخرى. أقدر كل مساعدتك في تشخيص هذه المشكلة.

@ leedrake5

فهمتك. في الوقت الحالي ، إليك الأمر الذي يمكنك استخدامه للحصول على شفرة المصدر الكاملة ، بما في ذلك الوحدات الفرعية git:

git clone --recursive https://github.com/dmlc/xgboost -b release_0.90

يجب أن يؤدي هذا إلى جلب كود مصدر XGBoost وملء أدلة rabit و cub و dmlc-core. يستخدم -b release_0.90 للحصول على إصدار 0.90 ، وليس الأحدث.

جانبا:

لا يسمح CRAN لـ openMP

تم إصلاح هذا بالفعل في 1.0.0. سأحاول الحصول على إصدار 1.0.0 على CRAN قريبًا.

شكرا لك ، أقدر كثيرا من كل النواحي!

@ hetong007 هل يمكننا تقديم 1.0.0 إلى CRAN؟

@ hcho3 تبدو جيدة ، بالنظر إلى أن لدينا كشف endian صالح. سأقدم طلبًا في غضون أسبوع.

@ hetong007 أي تحديثات؟ اسمحوا لي أن أعرف إذا كان بإمكاني المساعدة بأي شكل من الأشكال.

@ hcho3 أوه نعم. أود أن أسأل عما إذا كان لدينا بيئة لاختبار الطاقة الشمسية؟ يوجد خطأ لم يتم حله في السولاريس من 0.9: https://www.r-project.org/nosvn/R.check/r-patched-solaris-x86/xgboost-00check.html أود فحصه قبل تسليم.

@ hetong007 لقد قمت للتو بتنزيل صورة Solaris VM من Oracle التي يمكن تشغيلها باستخدام VirtualBox. اسمحوا لي أن أحاول إعادة إنتاج المشكلة.

@ hetong007 أواجه الكثير من المشاكل في إعداد بيئة R في سولاريس. على وجه الخصوص ، لا يمكنني تثبيت حزم R مثل igraph و testthat لأن المرافق مثل awk تتصرف بشكل مختلف على Solaris. ليس لدي فكرة عن كيفية المضي قدما.

@ hcho3 أرجو أن تكون أوضح؟ يمكن أن أقوم بتصوير أحدهم بتثبيت الحزم في وحدة التحكم R بـ install.packages('testthat') ، بالنظر إلى أن testthat قد اجتاز فحص Solaris على CRAN.

@ hetong007 الحزمة igraph تستخدم awk في خطوة التكوين ، و Solaris awk ليست ميزة متوافقة مع GNU awk. من الممكن تثبيت GNU awk ، لكنه يسمى gawk . لا تزال تحاول معرفة كيفية جعل R يستخدم gawk بدلاً من awk .

@ hcho3 حسنًا ، هذا يبدو فظيعًا. ليس لدي أي معرفة في كيفية المضي قدما أيضا. لقد ألقيت نظرة على صفحة نتائج igraph على CRAN: https://cran.r-project.org/web/checks/check_results_igraph.html. يشعر أننا لن نكون أسوأ. سأقوم بتقديم طلب بغض النظر.

@ hetong007 شكرا. سأحاول العودة إلى اختبار سولاريس في وقت ما. أنا متأكد من أن هناك طريقة.

@ hetong007 آه نعم ، تأكد من استخدام الفرع release_1.0.0 عند إرسال الكود.

@ hcho3 يحذر الفحص المسبق:

* checking whether package 'xgboost' can be installed ... WARNING
Found the following significant warnings:
  amalgamation/../src/common/hist_util.cc:666:72: warning: 'void* memset(void*, int, size_t)' clearing an object of non-trivial type 'struct xgboost::tree::GradStats'; use assignment or value-initialization instead [-Wclass-memaccess]
See 'd:/RCompile/CRANguest/R-devel_gcc8/xgboost.Rcheck/00install.out' for details.

وملف 00install.out موجود هنا (متاح خلال 72 ساعة تقريبًا): https://win-builder.r-project.org/v6XJQBjzgMaW/00install.out

هل من الممكن الحصول على حل سريع؟

@ hetong007 هل هذا مانع؟ تم استخدام Memset لتسريع عملية التصفير (مصفوفة البنية). إذا كان هذا يحظر CRAN ، فسأضع حارس ماكرو بحيث تستخدم حزمة R المُنشئ العادي بدلاً من ذلك.

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

@ hcho3 هل يمكنك من فضلك محاولة استخدام std::fill أولاً؟ حتى المترجم قد لا يكون قادرًا على تحسينه إلى memset ، لا أعتقد أنه من الأهمية بمكان أن يكون له أي تأثير مرئي على الأداء.

@ hetong007 لقد أجريت التغيير اللازم (https://github.com/dmlc/xgboost/commit/3550b16a34055bc8ec33bf0b7006448e8c1a4eca). هل تستطيع المحاولة مرة اخرى؟

trivialfis سأقدم طلب سحب منفصل لاستبدال memset .

@ hcho3 شكرا على الإصلاح! إذا لم يحدث أي خطأ ، فهو في طريقه إلى CRAN.

@ hcho3 لذا فشل في Soalris ، من الأستاذ Ripley:

On Solaris it was quicker to diagnose the problems with the GCC compilers:

amalgamation/../src/common/io.cc:120:27: error: ‘POSIX_FADV_SEQUENTIAL’
was not declared in this scope
    posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);

amalgamation/../src/common/io.cc:120:48: error: ‘posix_fadvise’ was not
declared in this scope
    posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);

As 'Writing R Extensions' told you, you need to use configure to test
for the presence of non-standard C/C++ functions.  In this case, it
seems that line is not actually necessary.

@ hetong007 لطيف. برجاء إخبار الأستاذ ريبلي بالشكر لأخذ الوقت في تصحيح المشكلة. سوف أمضي قدمًا وأحرص على هذا الخط ليعمل فقط في بيئة Linux المناسبة ، نظرًا لأن لدينا فقط منشأة اختبار مناسبة لاختبار XGBoost مع نظامي التشغيل Windows و Linux. من الناحية المثالية ، لا ينبغي استخدام أي مرافق غير قياسية بلغة C ++ ما لم يتم اختبارها أولاً كجزء من CI. سأضطر أيضًا إلى فحص قاعدة التعليمات البرمجية بحثًا عن ميزات C ++ الأخرى غير القياسية ومحاولة إزالتها أيضًا. cc trivialfis

@ hcho3 تبدو جيدة بالنسبة لي. الموعد النهائي من البروفيسور ريبلي لتقديم طلب جديد إلى CRAN هو 2020-04-06. إذا كنت مهتمًا بسجل التثبيت المفصل ، فيرجى زيارة https://cran.r-project.org/web/checks/check_results_xgboost.html

@ hetong007 يجب أن يعالج الالتزام https://github.com/dmlc/xgboost/commit/d83db4844bae5969609e58cd6bb201e7831cfaa3 المشكلة. تمكنت أخيرًا من الحصول على أحدث إصدار من R يعمل مع جهاز Solaris VM الخاص بي وتشغيل فحوصات CRAN لـ XGBoost.

@ hcho3 الرائعة! هل يمكنني أن أعتبر أنك قد نجحت في اجتياز الفحص على Solaris؟

نعم ، يجب أن نقدمها الآن.

مرحبًا ، أواجه مشكلات مماثلة مع Python. لقد قمت بحفظ النموذج عبر xgboost 1.0.1 ، وقمت بتحميله عبر xgboost 0.9 ، والتنبؤات عبارة عن قوائم فارغة. نظرًا لأن بيئة الإنتاج لدينا تستخدم xgboost 0.9 ، فأنا أتساءل عما إذا كان هناك أي طريقة يمكنني من خلالها تحميل نموذج محفوظ عبر xgboost-1.0 في xgboost 0.9؟

@ hcho3 هل هناك طريقة لمشاركة لقطتك؟ انها قيمة لمزيد من الخضوع لدينا أيضا.

sunhs أنا أيضًا أواجه مشكلة مماثلة. هل كنت قادرًا على حل هذا؟

تضمين التغريدة بعد تجربة عدة طرق ، قررت أخيرًا أن إعادة تدريب النموذج يوفر وقتي.

إغلاق هذا ، نظرًا لأننا غير قادرين على الوعد بأن النماذج من الإصدارات الأحدث ستدعمها الإصدارات الأقدم. يشبه شراء جهاز PlayStation 4 ومحاولة تحميل لعبة مطورة لجهاز PlayStation 5.

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

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