2017-03-29 257 views
1

我在VM VirtualBox上創建了一個新的ubuntu-16.04.2-desktop-amd64機器,我希望能夠在Rmpi中使用R環境。在Ubuntu 16.04上安裝Rmpi VirtualBox

以下兩種方法都會給出類似的錯誤。

更新簡化預建立的二進制方法:

當Ubuntu的已安裝的I開了一個終端並執行以下命令:

~$ sudo apt-get update 
~$ sudo apt-get install openmpi-bin 
~$ sudo apt-get install r-base 
~$ sudo apt-get install r-cran-rmpi 
~$ R 

這打開了R端子和我調用後續功能導致出現錯誤:

> library(Rmpi) 
libmpi.so: cannot open shared object file: No such file or directory 
Error : .onLoad failed in loadNamespace() for 'Rmpi', details: 
call: fun(libname, pkgname) 
error: Cannot start MPI_Init(). Exit 
Error: package or namespace load failed for ‘Rmpi’ 

我嘗試過的其他方法inc inc lude使用本地OpenMPI安裝,並使用R功能install.packages安裝Rmpi軟件包(請參閱下文)。這些都導致了相同的錯誤。

我也試過用MPICH代替~$ sudo apt-get install mpich作爲上述過程中的第二個命令(包括使用R函數來安裝軟件包),這會導致更加繁重的運行時錯誤。

有誰知道我做錯了什麼,或者我能做些什麼來解決這個安裝錯誤?

或者,任何人都可以使用任何Linux發行版或帶有預裝組件的映像成功安裝帶有Rmpi的VirtualBox機器?

原始本地安裝方法:

我按照上this blog說明下載的openmpi版本2.1.0,編譯和安裝它。然而,當我嘗試R中與安裝:

> install.packages("Rmpi", configure.args = 
    c("--with-Rmpi-include=/home/jormunr/openmpi/include", 
    "--with-Rmpi-libpath=/home/jormunr/openmpi/lib", 
    "--with-Rmpi-type=OPENMPI", 
    "--with-mpi=/home/jormunr/openmpi/")) 

它提供了以下錯誤

Error: .onLoad failed in loadNamespace() for 'Rmpi', details: 
    call: dyn.load(file, DLLpath = DLLpath, ...) 
    error: unable to load shared object '/home/jormunr/R/x86_64-pc-linux-gnu-library/3.2/Rmpi/libs/Rmpi.so': 
libmpi.so.20: cannot open shared object file: No such file or directory 
Error: loading failed 
Execution halted 
ERROR: loading failed 

我可以看到「libmpi.so.20」文件是在/ home/jormunr/openmpi/lib,我將其作爲安裝的參數之一提供。

+0

''sudo apt-get install r-cran-rmpi',因爲我們確實有Rmpi作爲預構建二進制文件。如果您必須使用本地OpenMPI安裝,請檢查autoconf代碼。 –

+0

在啓動R之前執行'export LD_LIBRARY_PATH =/home/jormunr/openmpi/lib:$ LD_LIBRARYP_PATH'。您也可以將它放在shell的啓動文件中。它將允許運行時鏈接編輯器查找MPI庫。 –

+0

@DirkEddelbuettel - 感謝您的評論。我很高興使用預建立二進制。我嘗試使用'sudo apt-get install r-cran-rmpi'來獲取二進制文件,但是當我進入R並加載了'library(Rmpi)'時,我得到了相同的錯誤: libmpi.so:can not打開共享目標文件:無此文件或目錄 錯誤:.inLoad在'Rmpi'的loadNamespace()中失敗,詳細信息: 調用:fun(libname,pkgname) 錯誤:無法啓動MPI_Init()。退出 錯誤:'Rmpi'包或命名空間加載失敗 –

回答

0

[免責聲明:我不是Linux專家,只是具有用戶級別的技能。從專家的任何捐款或更正,將不勝感激。]

預構建二進制方法

雖然嘗試各種方法來安裝預編譯的二進制我沒拿到這個選項奏效。這涉及在終端中執行命令'sudo apt-get install r-cran-rmpi'來安裝r-cran-rmpi預編譯軟件包,該軟件包也會自動安裝列出的先決條件libopenmpi1.10軟件包。但是,libmpn.l0文件中沒有包含libmpi.so文件,但Rmpi庫預期會在R環境中導致無法找到該文件的錯誤。

本地安裝方法

本地安裝並最終與一些修改成功。我使用默認設置創建了一個新的ubuntu-16.04.2-desktop-amd64 VirtualBox映像,除了2048MB的內存和32GB的硬盤空間。安裝後,我打開一個終端並執行the Jovinge Lab website中的命令,其中包含修改運行時鏈接編輯器路徑的penultimate命令,並使R的install.package()函數能夠找到'libmpi.so'文件。 (也改變了版本1.10.6到,因爲這是版本1的最新版本發佈 - 見下面的第2版)

~$ cd /home/jormunr 
~$ wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.2.tar.gz 
~$ tar -zxvf openmpi-1.10.6.tar.gz 
~$ cd openmpi-1.10.2 
~$ ./configure --prefix=/home/jormunr 
~$ make 
~$ make install 
~$ sudo apt-get install r-base 
~$ export LD_LIBRARY_PATH=/home/jormunr/lib:$LD_LIBRARY_PATH 
~$ R 

這將打開的R端子和我調用函數:

> install.packages("Rmpi", configure.args = 
+ c("--with-Rmpi-include=/home/jormunr/include/", 
+ "--with-Rmpi-libpath=/home/jormunr/lib/", 
+ "--with-Rmpi-type=OPENMPI", 
+ "--with-mpi=/home/jormunr/")) 

現在,這沒有錯誤執行,我可以用下列R-語句測試:

> library("Rmpi") 
> mpi.spawn.Rslaves() 
master (rank 0, comm. 1) of size 2 is running on: Valhalla 
slave1 (rank 1, comm. 1) of size 2 is running on: Valhalla 
> mpi.close.Rslaves() 
[1] 1 
> mpi.quit() 

當我試圖此過程中與的openmpi版本2.1.0安裝成功完成,但ABO測試有問題; mpi.spawn.Rslaves()函數完成,但mpi.close.Rslaves()沒有完成 - 它從未返回並且終端被掛起。