4

私の大学はコンドルコンピューティンググリッドを実行しており(計算ノードはLinuxを実行しています)、Rでシミュレーションを実行するために使用したいと思います。問題は、グリッド上の一部のマシンにのみRがインストールされていることです。これまでのところ2つのオプションがありますが、どちらを実装するかわからないので、助けていただければ幸いです(私はシステム管理者ではないため、セットアップを変更するために多くのことを行うことはできません。計算ノード):

1)condor送信ファイルとともに出力されるClassAdsにチェックを入れて、。を持つノードでジョブを計算することを要求します/usr/bin/R

2)Rとそのすべての依存関係を、計算ノードに送信でき、シミュレーションを実行できる自己完結型のディレクトリにパッケージ化します。私はこれを数時間試みましたが、LinuxバージョンのR(OSXおよびWindowsバージョンとは異なり)はファイルシステム全体に分散されているライブラリに対して実行されているようであり、それらを収集する実際的な方法を考えることはできませんRがそれらを見つけることができる場所にすべて。

何か案は?前もって感謝します。

4

2 に答える 2

1

最終的に私のために働いたのは、提案された解決策(1)でした。ここでは、コンドル送信ファイルとワーカーシェルスクリプトに(1)を実装する方法について説明します。

これがシェルスクリプトです。重要な変更は、Rが以下を介して計算ノードにインストールされているかどうかを確認することでしたif [ -f /usr/bin/R ]。Rが見つかった場合は、戻り値0で終わるパスをたどります。Rが見つからなかった場合は、1を返します(これが行exit 0との意味ですexit 1)。

mkdir output
if [ -f /usr/bin/R ]
then
    if $(uname -m |grep '64')
    then
            Rscript code/simulations-x86_64.r $*
    else
            Rscript code/simulations-i386.r $*
    fi

    tar -zcvf output/output-$1-$2.tgz2 output/*.csv
    exit 0
else
    exit 1
fi

これで、コンドル送信ファイルが作成されました。重要な変更は、最後から2番目の行(on_exit_remove = (ExitBySignal == False) && (ExitCode == 0))でした。計算ノードからの各ジョブの戻り値をチェックします。戻り値がゼロでない場合(つまり、計算ノードでRが見つからなかった場合)、ジョブはキューに戻されて再実行されます。それ以外の場合、ジョブは終了したと見なされ、キューから削除されます。

universe = vanilla
log = logs/log_$(Cluster)_$(Process).log
error = logs/err_$(Cluster)_$(Process).err
output = logs/out_$(Cluster)_$(Process).out
executable = condor/worker.sh
arguments = $(Cluster) $(Process)
requirements = (Target.OpSys=="LINUX" && regexp("stat", Machine))
should_transfer_files = YES
when_to_transfer_output = ON_EXIT_OR_EVICT
transfer_input_files = code, R-libs, condor, seeds.csv
transfer_output_files = output
notification = Never
on_exit_remove = (ExitBySignal == False) && (ExitCode == 0)
queue 1800
于 2013-02-25T16:06:17.777 に答える
0

うわー、OK、これは私が思っていたよりも大変でした。提案された解決策(2)から始めましょう:

ハドリーの提案で、私はRenvを使用してRを既知のローカルディレクトリにインストールしました(R-buildを使用してR-2.15.2をビルドしました)。残念ながら、このローカルインストールは、のような場所からのシステム全体のライブラリに依然依存していました/usr/lib

MvGは、ローカルRインストールをsageから削除することを提案しました。これは、必要なすべてのシステムライブラリのローカルコピーがパッケージ化されており、私の状況に直面しているほとんどの人にとっておそらく機能する方法です。ただし、私のコードは、 2.15以上とのみ互換性Rのあるいくつかのパッケージに依存しています。RR

そこで、sageのディレクトリからすべてのライブラリをlib取得し、RenvからR-2.15.2インストールにコピーしました。これは機能しますが、私の大学のコンドルグリッド上の一部のマシンは、奇妙なアーキテクチャを備えている必要があります。これは、10人に1人のジョブが、間違ったバージョンのを使用しようとしたことに関連するエラーで戻ってきたためですlibc.so。この時点で、私は提案された解決策(2)を放棄し、提案された解決策(1)に移りました。

于 2013-02-25T15:49:30.177 に答える