問題タブ [qsub]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parallel-processing - 1 回の PBS ジョブ送信で複数のコマンドを実行する方法
私は 1 から 4 の CPU しか必要としないコードを書きました。しかし、クラスターでジョブを送信するときは、ジョブごとに 16 コアのノードを少なくとも 1 つ使用する必要があります。そのため、送信する各ジョブで各ノードで複数のシミュレーションを実行したいと考えています。1 つのジョブでシミュレーションを並行して送信する方法があるかどうか疑問に思っていました。
以下に例を示します。私のコードは 4 CPU を使用します。1 つのノードにジョブを送信し、そのノードでコードの 4 つのインスタンス (各インスタンスには異なるパラメーターがあります) を実行して、16 個のコアすべてを使用するようにします。
bash - awk と条件付きパイプを使用して qsub ジョブを送信する方法は?
awk を使用して必要なフィールド (ヘッダーを含むシーケンス) を抽出するファイル (fasta) があります。それを BLAST プログラムにパイプし、最後にジョブを送信するために qsub にパイプします。ファイル:
およびコマンド(動作します):
私がやりたいことは、ジョブが送信される特定のしきい値を下回っている場合に、実行中のジョブの数を (qstat を使用して) サンプリングする条件を追加することです。例えば:
残念ながら(とにかく私にとって)私はそれをしようとするすべての試みに失敗しました。どんな助けにも感謝します
編集:少し詳しく説明します:私がやろうとしているのは、fastaファイルからこれを抽出することです:
または基本的に: >HEADER\nSEQUENCE 1 つずつ、stdin を取ることができる blast プログラムにパイプします。シーケンスごとに一意のジョブを作成したいので、シーケンスごとに qsub にパイプする必要があります。簡単に言うと、qsub の送信は次のようになります。
stdin シーケンスがパイプされている場合、-query フラグは不要であることに注意してください。ただし、私にとっての主な問題は、qstat の結果がしきい値を下回った場合にのみシーケンスが qsub にパイプされるように、上記の条件を組み込む方法です。理想的には、qstat の結果がしきい値を超えている場合は、i が下回るまでスリープ状態になり、それを前方に渡します。
ありがとう。
cluster-computing - Grid Engine で多くの無関係なジョブを並行して開始しますか?
ロード バランシングの目的で、Grid Engine クラスタ上で一連のまったく無関係な (「恥ずかしいほど」並列な) ジョブを開始したいことがよくあります。
現在私が行っていることは、ジョブごとに 1 つの Bash スクリプトを生成し、それぞれを個別に送信することです。これらはすべて、私が作成した Perl スクリプトによって制御されます。
すべてのジョブを 1 つのファイル、1 行 1 つのジョブに入れると、Grid Engine はジョブを順番に実行しますが、これは重要なことではありません。
ファイルを 1 つだけにして、Grid Engine に各行/ジョブを並行して実行するように指示する方法はありますか?
基本的に、Grid Engine Array Jobs のようなものが欲しいです。しかし、配列ジョブの問題は、各ジョブ間で変化する要素が数値または配列内のインデックスであり、この数値/インデックスが等間隔である場合にのみ機能することです。しかし、私が話しているのは、まったく関係がなく、パターンを共有していない仕事です。
qsub - 「ギガバイト秒」とは何ですか?
qstat (Sun Grid Engine) マンページから:
mem: ジョブの現在の累積メモリー使用量 (Gbytes 秒単位)。
どういう意味ですか?
cluster-computing - ビジー時に pbs ジョブが出力されない
PBS で問題が発生しています。サブミットしたすべてのジョブのうち、出力が正常に生成されない部分がある傾向があります。すべての出力が生成されるまで、何度か再送信する必要があります。また、他のユーザーが大量のジョブを送信すると、これが特に悪いことに気付きました。この場合、すべてのジョブが期待される出力ファイルを生成できません。
私は PBS の唯一のユーザーなので、何が起こっているのかわかりません。誰かが素晴らしい提案をすることができれば。ありがとう。
python - qsubを使用して、連続した独立したジョブをどのくらいの速さで送信できますか?
この質問は、ビジー状態のときに出力されないpbsジョブに関連しています。つまり、PBS / Torqueが「ビジー」の場合、送信するジョブの一部は出力を生成しません。たくさんの仕事が次々と提出されると忙しいのではないかと思いますが、そういう形で提出された仕事の中には、何も出てこないものがよくあります。
ここにいくつかのコードがあります。
「x_analyse.py」というPythonスクリプトがあり、その入力としてデータを含むファイルを受け取り、そのファイルに保存されているデータを分析するとします。
ここで、次のことを行う必要があるとします。(1)N個のそのようなデータファイルを準備します:data_1.pkl、data_2.pkl、...、data_N.pkl(2)「x_analyse.py」をそれぞれで機能させ、結果を書き込みますそれらのそれぞれのファイルに。(3)異なるデータファイルの分析はすべて互いに独立しているため、時間を節約するために、PBS/Torqueを使用してそれらを並行して実行します。(これは本質的に「驚異的並列問題」だと思います。)
私は上記を行うためにこのPythonスクリプトを持っています:
スクリプトは、分析するデータセットを準備し、それをファイルに保存し、このデータセットを分析するためのpbs送信ファイルを書き込み、それを実行するジョブを送信してから、次のデータセットで同じことを再度実行します。 、 等々。
このように、スクリプトが実行されると、ジョブが送信されるときに、ジョブIDのリストが標準出力に出力されます。「ls」は、N個の.subファイルとN個の.pklデータファイルがあることを示します。「qstat」は、すべてのジョブがステータス「R」で実行され、その後、ステータス「C」で完了したことを示します。ただし、その後、「ls」は、「x_analyse.py」によって生成された.out出力ファイルがN個未満であり、結果ファイルがN個未満であることを示しています。実際、一部のジョブでは出力が生成されません。すべてをクリアして上記のスクリプトを再実行すると、同じ動作が得られますが、一部のジョブ(前回と同じである必要はありません)では出力が生成されません。
連続した仕事の提出間の待ち時間を増やすことによって、物事は改善することが示唆されています。
しかし、私は0.1秒、0.5秒、1.0秒、2.0秒、3.0秒を試しましたが、どれも実際には役に立たなかったので、これは最も満足のいくものではないと感じています。50代の待ち時間は問題ないようだと言われていますが、100件の求人を提出しなければならない場合、5000秒程度の待ち時間になり、非常に長いようです。
代わりにジョブ配列を送信して、「qsub」が使用される回数を減らしてみました。以前と同じようにすべてのデータファイルを準備しますが、送信ファイルは「analyse_all.sub」の1つだけです。
その後、
しかし、これでも、一部のジョブはまだ出力を生成しません。
これは一般的な問題ですか?私は正しくないことをしていますか?求人の提出の合間に待つことが最善の解決策ですか?これを改善するために何かできることはありますか?
助けてくれてありがとう。
編集1:
Torqueバージョン2.4.7とMauiバージョン3.3を使用しています。
また、ジョブID 1184430.mgt1のジョブが出力を生成せず、ジョブID 1184431.mgt1のジョブが期待どおりに出力を生成するとします。これらで「tracejob」を使用すると、次のようになります。
編集2:出力を生成しないジョブの場合、「qstat-f」は次を返します。
出力を生成するジョブと比較して:
一方の終了ステータスは0であるように見えますが、もう一方はそうではありません。
編集3:
上記のような「qstat-f」出力から、問題はポストジョブファイル処理の「古いNFSファイルハンドル」に関係しているようです。何百ものテストジョブを送信することで、失敗したジョブを生成するノードの数を特定することができました。ssh
これらを調べることで、で不足しているPBS出力ファイルを見つけることができます。/var/spool/torque/spool
ここでは、他のユーザーに属する出力ファイルも確認できます。これらの問題のあるノードの奇妙な点の1つは、それらが使用するように選択された唯一のノードである場合、ジョブはそれらで正常に実行されることです。この問題は、他のノードと混在している場合にのみ発生します。
ポストジョブ処理の「古いNFSファイルハンドル」を修正する方法がわからないため、「ダミー」ジョブを送信することでこれらのノードを回避します
実際の仕事を提出する前に。これで、すべてのジョブが期待どおりに出力を生成し、連続して送信されるまで待つ必要がなくなりました。
nodes - sgeの下のqsubコマンドからノードを除外する
クラスターに送信してsgeする必要のあるジョブが200以上あります。それらを2つのキューに送信します。キューの1つに、ジョブを送信したくないマシンがあります。そのマシンを除外するにはどうすればよいですか?私が役立つと思ったのは、(q1で使用可能な3つの有効なノードと、q2で使用可能なすべてのノードが有効であると仮定した場合)だけです。
cuda - テキストエディタからリモート端末でスクリプトを実行するにはどうすればよいですか?
私の質問は、私が直面しているシナリオに少し固有のものです。ここで見つけて答えるために何を検索すればよいのかよくわかりませんでした。
私は研究の一環として、いくつかのCUDAベースのプログラムの開発に取り組んでいます。GPUノードを備えたスーパーコンピューティングクラスターにアクセスできます(http://www.rcac.purdue.edu/userinfo/resources/carter/)。そして、私の開発マシンは、2011年後半の13インチMacBook Proであり、nVidiaGPUを搭載していません。
ノードでCUDAアプリを実行する方法は2つあります。'qsub'を使用してジョブをスケジュールし、実行されるのを待って出力ファイルを取得することができます。または、「qsub -I」コマンドを使用して、gpuノード自体でインタラクティブシェルを開始できます。これには起動に関連する待ち時間がありますが、起動すると、ローカルマシンを使用しているかのように、ほぼリアルタイムでアプリを実行できます。
今、私はTextMateやTextWranglerのようなものを使ってコードを書いています。そのターミナル(qsub -I one)でテキストエディタ(または任意のエディタ)から直接コマンドを実行する方法はありますか?このようにして、ファイルをサーバーに手動でコピーし、そこでコンパイルして実行するよりもはるかに高速に変更を加えてテストすることができます。
-トーマス
bash - qsub と source を一緒に使用する方法はありますか?
このように、一連のファイルを個別に処理するシェルスクリプトを作成しました
MyProcessing.sh
は呼び出しスクリプトであり、メイン スクリプトの変数と関数は呼び出しスクリプトで使用されます。
qsub
ここで、シェル スクリプトをクラスターに移動し、反復で使用したいと思います。私は試した
しかし、この方法では機能しません。誰でも助けることができますか?前もって感謝します。
cluster-computing - 2つの計算ノードと1つのヘッドノードを備えたトルククラスターでパケットキャプチャプログラムを実行する方法は?
2つの計算ノードと1つのヘッドノードを持つトルクpbsを使用してクラスターを構成しました。qsubmyscript.shのようなqsubコマンドを使用してジョブを送信しました
myscript.shにはいくつかのシェルコードが含まれています。このスクリプトは、任意の計算ノードで正常に実行され、出力ファイルに関して取得した結果です。このタイプのジョブの送信と実行は非常に簡単です。しかし、私は次の問題に直面しています...
libpcap依存関係を持つCで記述されたネットワークパケットキャプチャモジュールがあります。私の要件はそのようなものです。このプログラムを別の計算ノード(computenode-0-0、computenode-0-1)に送信したいと思います。そのため、すべてのパケットがヘッドノードに到達すると、それらのパケットは、計算ノードで実行されているプログラムによって処理されます。
Cプログラムを提出するにはどうすればよいですか?計算ノードで負荷分散はどのように行われますか?クラスターで実行する必要のある追加の構成は何ですか?