2015-03-31 8 views
10

मेरे विश्वविद्यालय में कंप्यूटर क्लस्टर का उपयोग करते समय मुझे मैट्रिक्स त्रुटि हो रही है कि मैं अपनी स्थानीय मशीन पर पुन: उत्पन्न नहीं कर सकता। मुझे लगता है कि यह मैट्रिक्स पुस्तकालयों (बीएलएएस, लैपैक, एटलस इत्यादि) के अंतर के कारण हो सकता है। मुझे here पढ़ने के अलावा इन पुस्तकालयों के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे लगता है कि आर को यह बताने का एक तरीका होना चाहिए कि मुझे कौन सा मैट्रिक्स पुस्तकालय स्थापित किया गया था (यानी इसका उपयोग कर रहा है), समान sessionInfo() से मुझे यह बताने के लिए कि आर पैकेज का कौन सा संस्करण इसका उपयोग कर रहा है।मैं कैसे निर्धारित कर सकता हूं कि मेरी आर इंस्टॉल किस मैट्रिक्स लाइब्रेरी का उपयोग कर रही है?

उत्तर

5

हालांकि इस के लिए एक स्पष्ट आर समारोह नहीं हो सकता है, शायद आप खोल आदेशों को भुनाने कर सकते हैं (उदाहरण के लिए , file और ldd) क्लस्टर पर पुनर्निर्माण आर और न ही रूट पहुँच की आवश्यकता के बिना कुछ सुराग पाने के लिए:

(rpath <- Sys.which("R")) 
#   R 
# "/usr/bin/R" 

सुनिश्चित करें कि ldd काम करेंगे बनाने के लिए, देखें कि यह है किस प्रकार की फ़ाइल:

system2("file", rpath) 
# /usr/bin/R: Bourne-Again shell script, ASCII text executable 

यदि आपका वास्तविक निष्पादन योग्य (जैसे ELF 64-bit LSB executable, x86-64, ...) दिखाता है, तो इस चरण को छोड़ दें।

script <- readLines(rpath) 
script[grepl("/bin/", script)] 
# [1] "#!/bin/bash" 
# [2] "  if [ -x \"/usr/${libnn}/R/bin/exec/R\" ]; then" 
# [3] "  elif [ -x \"/usr/${libnn_fallback}/R/bin/exec/R\" ]; then" 
# [4] "## some systems have a more portable sed, e.g. /usr/xpg4/bin/sed on Solaris," 
# [5] "SED=/bin/sed" 
# [6] "  exec sh \"${R_HOME}/bin/Rcmd\" \"${@}\" ;;" 
# [7] "R_binary=\"${R_HOME}/bin/exec${R_ARCH}/R\"" 

यह मुझसे कहता है कि वास्तविक निष्पादन /usr/lib/R/bin/exec/R (या /usr/lib64/...) है। यह कुछ अनुमान ले रहा है, लेकिन यह एक कदम है। यह मेरे लिए उबंटू पर आर-3.3.2 के साथ काम कर रहा है, इसलिए मैं केवल यह मान सकता हूं कि यह विभिन्न ओएस पर समान होगा। यदि यह अनौपचारिक है, तो आप "/lib" या "/exec" (या अन्य सुरागों के लिए पूरी स्क्रिप्ट फ़ाइल की जांच करें) के लिए grep भी कर सकते हैं।

एक बार जब आप पथ स्क्रिप्ट के द्वारा कहा जाता है पता है (या अगर यह एक स्क्रिप्ट के साथ शुरू करने के लिए नहीं है), साझा पुस्तकालय निर्भरता पाते हैं:

system2("ldd", "/usr/lib/R/bin/exec/R") 
#   linux-vdso.so.1 => (0x00007ffcfadcd000) 
#   libR.so => /usr/lib/R/lib/libR.so (0x00007f746f615000) 
#   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f746f3eb000) 
#   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f746f025000) 
#   libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f746eda8000) 
#   libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f746eaa2000) 
#   libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6 (0x00007f746e85b000) 
#   libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f746e61d000) 
#   liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f746e3fb000) 
#   libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f746e1ea000) 
#   libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f746dfd1000) 
#   librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f746ddc9000) 
#   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f746dbc4000) 
#   libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f746d9b5000) 
#   /lib64/ld-linux-x86-64.so.2 (0x0000560abd5fa000) 
#   libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f746d78b000) 

इस उत्पादन की 5 वीं पंक्ति से पता चलता है R है कि बीएलएएस लाइब्रेरी का उपयोग करके, विशेष रूप से libblas3

+0

आपके संपूर्ण और विस्तृत उत्तर के लिए धन्यवाद। मैं इसे अपने आप पर कभी नहीं समझता। यह एक शर्म की बात है कि आर में "मेरे बारे में" फ़ंक्शन नहीं है, जैसे "आर - वर्जन", लेकिन शायद इसे "आर - बिल्डिंगप्शन" कहा जा सकता है। – rcorty

-3
+0

आपकी प्रतिक्रिया के लिए धन्यवाद। उस लेख के पढ़ने से, यह विभिन्न मैट्रिक्स पुस्तकालयों के साथ आर बनाने के बारे में जानकारी प्रदान करता है, लेकिन यह पता लगाने में मेरी सहायता नहीं करता कि मौजूदा निर्माण में कौन सी मैट्रिक्स लाइब्रेरी का उपयोग किया गया था। – rcorty

4

का एक सा है जहां तक ​​मेरा जानकारी है वहाँ एक विशेष समारोह (विशेष रूप से नहीं आधार आर में) आप BLAS संस्करण दे देंगे नहीं है। आर आपके सिस्टम के साथ आने वाली मानक लाइब्रेरी का अधिकतर उपयोग करेगा (जब तक कि किसी ने इसे किसी विशिष्ट बीएलएएस संस्करण के साथ स्रोत से बनाया न हो)।

आप टर्मिनल से यह करने के लिए होगा, प्रकार

locate libblas.so 

यह शायद /usr/lib/libblas.so या /usr/lib64/libblas.so में होने जा रहा है, और शायद एक स्थान सिमलिंक है। तो लिंक

ls -l /usr/lib/libblas.so 

का पालन करें आप एक अलग BLAS पुस्तकालय को इंगित करने के सांकेतिक लिंक को बदलने के लिए चाहते हैं, आप update-alternatives --config libblas.so.3gf करते हैं और संस्करण आप उपयोग करना चाहते चुन सकते हैं। यह पोस्ट इसे अधिक विस्तार से बताता है: https://www.r-bloggers.com/for-faster-r-use-openblas-instead-better-than-atlas-trivial-to-switch-to-on-ubuntu/

निश्चित रूप से यह जानने का एक और तरीका है कि आप किस संस्करण का उपयोग कर रहे हैं, जो आप चाहते हैं कि बीएलएएस के कार्यान्वयन को स्थापित करना होगा - उदाहरण के लिए ओपनबीएलएस, और फिर मानक आर बीएलएएस लाइब्रेरी को प्रतिस्थापित करें आपकी नई पुस्तकालय के लिए एक सिम्लिंक। के रूप में यहां से समझाया गया --with-shared-blas विकल्प के साथ आर स्थापित करने के लिए सुनिश्चित करें,: https://cran.r-project.org/doc/manuals/r-release/R-admin.html#BLAS तो फिर तुम सिर्फ जरूरत के लिए:

# navigate to your R directory 
cd …/path-to-R-installation/lib/R/lib 
# backup the original 
mv libRblas.so libRblas.backup 
# create simlink 
ln –s …/path-to-new-0blas-library/new-lib.so libRblas.so 
+0

अच्छा स्पष्टीकरण। मुझे लगता है कि @rcorty यह पता लगाने के लिए इसका उपयोग कर सकता है कि क्या ब्लैस वास्तव में समस्या का कारण है। ब्लैस पुस्तकालयों की एक श्रृंखला स्थापित करके और एक समय में परीक्षण करने के लिए प्रतीकात्मक लिंक अपडेट करके यह देखने के लिए कि क्या यह त्रुटि को दोहराता है या नहीं। – dww

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मुझे विशेष रूप से उस स्थिति में दिलचस्पी है जहां कोई और, जिसे मैं मशीन के साथ साझा करता हूं, एक निर्दिष्ट मैट्रिक्स गणित पुस्तकालय के साथ स्रोत से आर बनाया गया है, उदाहरण के लिए। एटलस, बीएलएएस, ओपनब्लैस, इत्यादि। अगर मैं अपने प्रश्न में पर्याप्त स्पष्ट नहीं था। मैं उत्सुक हूं अगर मैं यह पता लगा सकता हूं कि उसने क्या किया। – rcorty

संबंधित मुद्दे

 संबंधित मुद्दे