8

Rmpi に問題があり、ロードしようとすると、次のエラー メッセージが表示されます。

> library('Rmpi')
Error in dyn.load(file, DLLpath = DLLpath, ...) :
  unable to load shared library '/usr/lib64/R/library/Rmpi/libs/Rmpi.so':
  libmpi.so.0: cannot open shared object file: No such file or directory
In addition: Warning message:
.Last.lib failed in detach() for 'Rmpi', details:
  call: dyn.unload(file.path(libpath, "libs", paste("Rmpi", .Platform$dynlib.ext,
  error: dynamic/shared library '/usr/lib64/R/library/Rmpi/libs/Rmpi.so' was not loaded
Error in library("Rmpi") : .First.lib failed for 'Rmpi'

ただし、root としてログインしている場合、このエラーは発生しません。

権限の問題ではないようです。libmpi.so.0 のアクセス許可を確認しました。

[meehan@cnl10 /]$ ll /usr/lib64/lam/lib/
total 7.4M
-rw-r--r-- 1 root root  207 May 25  2008 lam.module
-rw-r--r-- 1 root root 885K May 25  2008 liblam.a
-rw-r--r-- 1 root root 361K May 25  2008 liblamf77mpi.a
lrwxrwxrwx 1 root root   21 Apr 12  2010 liblamf77mpi.so -> liblamf77mpi.so.0.0.0
lrwxrwxrwx 1 root root   21 Apr 12  2010 liblamf77mpi.so.0 -> liblamf77mpi.so.0.0.0
-rwxr-xr-x 1 root root  73K May 25  2008 liblamf77mpi.so.0.0.0
-rw-r--r-- 1 root root 2.2M May 25  2008 liblammpi++.a
-rw-r--r-- 1 root root 509K May 25  2008 liblammpio.a
lrwxrwxrwx 1 root root   20 Apr 12  2010 liblammpi++.so -> liblammpi++.so.0.0.0
lrwxrwxrwx 1 root root   20 Apr 12  2010 liblammpi++.so.0 -> liblammpi++.so.0.0.0
-rwxr-xr-x 1 root root 167K May 25  2008 liblammpi++.so.0.0.0
lrwxrwxrwx 1 root root   15 Apr 12  2010 liblam.so -> liblam.so.0.0.0
lrwxrwxrwx 1 root root   15 Apr 12  2010 liblam.so.0 -> liblam.so.0.0.0
-rwxr-xr-x 1 root root 332K May 25  2008 liblam.so.0.0.0
-rw-r--r-- 1 root root 2.2M May 25  2008 libmpi.a
lrwxrwxrwx 1 root root   15 Apr 12  2010 libmpi.so -> libmpi.so.0.0.0
lrwxrwxrwx 1 root root   15 Apr 12  2010 libmpi.so.0 -> libmpi.so.0.0.0
-rwxr-xr-x 1 root root 655K May 25  2008 libmpi.so.0.0.0

そして Rmpi​​.so:

[meehan@cnl10 /]$ ll /usr/lib64/R/library/Rmpi/libs/
total 108K
-rwxr-xr-x 1 root root 104K Jan 20  2011 Rmpi.so

とにかくRをsudoとして実行しています。

関連するシステム情報: -Linux ディストリビューション: CentOS 5.5 -R バージョン: 2.11.1 (2010-05-31) -Rmpi バージョン: 0.5-8 -MPI 実装は openmpi

[meehan@cnl10 /]$  echo $LD_LIBRARY_PATH
/opt/lib:/opt/open-mpi/tcp-`gnu41/lib:/opt/intel/mkl/10.2/lib/em64t:/opt/intel/fce/11.1/lib:/opt/intel/cce/11.1/lib:`

どんな助けでも大歓迎です!

4

1 に答える 1

3

ここでの問題は、OpenMPI がデフォルトでそのライブラリー・ディレクトリーをシステム・リンカーに登録しないことです。LD_LIBRARY_PATHこれが、実行時にライブラリを見つけられるように、ディレクトリを変数に入れることを推奨するインストール ガイドがある理由です。ただし、「ディレクトリを LD_LIBRARY_PATH に追加する」は、新しいシェルがロードされるたびに実行する必要があります。そのため、これらのガイドでは、~/.bashrcログインのたびに設定が復元されるように、シェルを配置するなどを提案しています。

ただし、~/.bashrcファイル (または~/.profileそのようなもの) はユーザー固有の設定です。openmpi や Rmpi​​ などをインストールするときに root としてログインしていると仮定すると、これらのユーザー固有のファイルに追加すると、通常のランタイム ユーザーとしてではなく、root として実行されている場合にのみライブラリ パスが設定されることになります。 .

一般に、修正は、これらのファイルがどこにあるかをリンカに伝えることです。CentOS 7、OpenMPI 1.10.0 (Scientific Linux RPM を使用)、R 3.2.3、および Rmpi​​ 0.6-5 を実行している自分のシステムでは、ライブラリ パスの設定に失敗すると次のようになります。

[dchurch@workstation ~]$ R -q -e "library('Rmpi')"
> library('Rmpi')
Error : .onLoad failed in loadNamespace() for 'Rmpi', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so':
  libmpi.so.12: cannot open shared object file: No such file or directory
Error: package or namespace load failed for ‘Rmpi’
Execution halted        

一時変数を使用してリンカー パスを一時的に設定すると、次の呼び出しで機能します。

[dchurch@workstation ~]$ LD_LIBRARY_PATH=/usr/lib64/openmpi/lib R -q -e "library('Rmpi')"
> library('Rmpi')       
>
>

ただし、この変更を永続的にするには、openmpi ライブラリ ディレクトリをシステム リンカー自体に登録し、 で新しいファイルを作成して/etc/ld.so.conf.d実行することをお勧めしますldconfig

[dchurch@workstation ~]$ sudo sh -c 'echo /usr/lib64/openmpi/lib > /etc/ld.so.conf.d/openmpi.conf; ldconfig'
[dchurch@workstation ~]$ R -q -e "library('Rmpi')"
> library('Rmpi')
>
>

これが完了すると、環境変数に関係なく、すべてのユーザーが Rmpi​​ をロードできるようになります。

于 2016-02-06T03:01:19.497 に答える