HPC で大きなジョブを実行しています。ただし、ジョブ用にインストールされているプログラムは古いバージョンで、ホーム ディレクトリには新しいバージョンがあります。任意のノードにログインし、 を使用して新しいバージョンへのパスをエクスポートできますexport PATH=/home/bharat/scratch/bin/:$PATH
。ただし、ログイン シェルでパスをエクスポートし、 を使用してジョブを送信した場合bsub
、新しくエクスポートされたパスがジョブを実行しているすべてのノードで使用されるかどうかはわかりません。
これらのファイルをデフォルトのインクルードディレクトリの1つにコピーすることはできますが、私のシステム管理者はすぐにそれを実行しようとはしません。。
すべてのノードへのパスをエクスポートする最良の方法は何ですか? エクスポート コマンド + ジョブ コマンドを使用してシェル スクリプトを作成し、このスクリプトを bsub に渡すことはできますか?
答え1
すべてのノードへのパスをエクスポートする最良の方法は何ですか? エクスポート コマンド + ジョブ コマンドを使用してシェル スクリプトを作成し、このスクリプトを bsub に渡すことはできますか?
はい。PATH を設定してプログラムを起動するスクリプト ( という名前にしますmyscript
) を作成します。次に、コマンド ライン でジョブを送信しますbsub myscript
。システム インストールではなく、ローカル インストールが使用されます。
さらに簡単なオプションとして、LSF は PATH を含む送信環境の環境変数を実行環境に設定します。
[mclosson@hostA ~]$ echo $PATH
/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:/lsf/9.1/linux2.6-glibc2.3-x86_64/bin:/bin:/usr/bin
[mclosson@hostA ~]$ bsub -m hostB -Is 'echo $PATH'
Job <217> is submitted to default queue <interactive>.
<<Waiting for dispatch ...>>
<<Starting on hostB>>
/lsf/9.1/linux2.6-glibc2.3-x86_64/bin:/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:/bin:/usr/bin
次に、プログラムのローカル インストールが含まれるようにパスを更新します。
[mclosson@hostA ~]$ export PATH=/tmp/xxx:$PATH
[mclosson@hostA ~]$ bsub -m hostB -Is 'echo $PATH'
Job <218> is submitted to default queue <interactive>.
<<Waiting for dispatch ...>>
<<Starting on hostB>>
/lsf/9.1/linux2.6-glibc2.3-x86_64/bin:/tmp/xxx:/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:/bin:/usr/bin