外部ノードネットワークを介してコードを実行しようとしています。 「マスター」ノードへのアクセス権を持ち、利用可能な5つのノードのクラスタ全体にわたってタスクを分割するスクリプトをssh
実行できます。他の前提条件とともに、このコマンドを含むスクリプトがparallel
あります。bash
parallel
私が使用した最後のコマンドは次のようになりました。
parallel -S node0,node1,node2,node3,node4 --ssh-delay 0.25 --delay 0.5 'run {1} {2}' ::: foo ::: bar
しかし、私が作業しているクラスターは比較的頻繁に停止することが知られています。たとえば、約5分間アイドル時間が経過するとエラーが発生し、Broken pipe
接続ssh
が切断されます。そのため、上記のbashスクリプト(上記のparallel
行を含む)を実行してnohup
ssh接続をアクティブに保つ必要があります。
ただし、実際のコードにはかなりの計算時間が必要なため、SSHの切断に関連するエラーが発生します。
ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory^M
Permission denied, please try again.
ボスノードから別のノードにnode0
接続してもパスワードは必要ありません。これにより、空席がなくなったという苦情やログインできないという警告メッセージがnode1
表示されます。parallel
parallel: Warning: There are no job slots available. Increase --jobs.
parallel: Warning: Using only -1 connections to avoid race conditions.
parallel: Warning: ssh to node0 only allows for 0 simultaneous logins.
parallel: Warning: You may raise this by changing /etc/ssh/sshd_config: MaxStartups and MaxSessions on node0.
parallel: Warning: You can also try --sshdelay 0.1
私は、ボスノードへの接続を閉じた結果、クラスタ内の他のノードへのSSH接続を早期に閉じるのは難しいことが進行していると思いますnode0
。
ssh-agent
、ssh-copy-id
およびGNUパラレルチュートリアルに従って接続を確立し、sshpass
でMaxStartups
およびMaxSessions
パラメータを設定しようとしましたが、/etc/ssh/sshd_config
役に立ちませんでした。さらに、コード計算時間を短縮すると、並列命令が完全に実行され、期待どおりに動作します。
かなり長い時間がかかるプログラムを実行するときにSSH接続が中断されないようにする方法はありますか?parallel
それとも別のことが起こっていますか?
答え1
接続を維持するServerAliveInterval
には で設定できる.ssh/config
。
答え2
他のノードにアクセスするために使用されたSSHキーが正しくないというエラーの原因が見つかりました。したがって、問題はGNUの並列性やnohupにはありません。
まず、問題を理解するために設定について詳しく説明します。まず、マイコンピュータで複数のスレーブノードに接続されているlocal
「ボス」ノードに接続します。ノードに接続するときにSSH転送を有効にすると、追加のSSH接続で自分のコンピュータのキーを誤って使用しました。したがって、接続が失われると、ノードへの接続を確立するための正しいSSHキーにアクセスできなくなります。boss
slaves
ssh
boss
local
local
boss
boss
slaves
ssh-keygen
これを使用してに追加して、新しい公開SSHキーを生成します~/.ssh/authorized_keys
。その結果、SSHとSSHの間の接続がlocal
失われてもboss
、自分の公開鍵を使用してSSH接続を確立できますboss
。slaves
GNUは接続を確立するためにsshを並列に使用するため、キーが正しく設定されていると権限(およびその他の関連)の問題は消えます。切断の問題を解決し、プロセスが継続して実行されている間にノードの切断を可能にするためにnohup
設定と共に使用されます。ServerAliveInterval 60
/etc/ssh/ssh_config
boss