問題タブ [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.
python - python2.4でサブプロセスを使った並列処理
非常に大きな行列の列のすべてのペアごとの組み合わせについて統計を計算したいと考えています。jaccard.py
私は、列のペアを受け入れ、行列に対してこの統計を計算すると呼ばれる Python スクリプトを持っています。
私の作業用マシンでは、各計算に約 10 秒かかり、約 95,000 回の計算を完了する必要があります。ただし、これらの計算はすべて互いに独立しているため、Torque キューイング システムと python2.4 を使用するクラスターを使用したいと考えています。Torque と互換性があるように、この計算を並列化する最良の方法は何ですか?
subprocess
計算自体は python2.4 に対応させましたが、 を使用してこれらの計算を並列化する方法、または GIL のためにそれを実行できるかどうかで途方に暮れています。
私が持っている主なアイデアは、サブプロセスの一定のプールを維持することです。終了したら、出力を読み取り、次の列のペアで新しい出力を開始します。計算が終了したら、出力のみが必要です。その後、新しい計算でプロセスを再開できます。
私の考えは、この方法でジョブを送信することでした
myjob.sh
次のようなメインの python ファイルを呼び出します。
これを最善の方法で行うためのアドバイスはありますか?私は Torque を使用したことがなく、このようなサブプロセッシングに慣れていません。multiprocessing.Pool
ワークステーションで使用してみましたが、問題なく動作しましPool.map
たが、クラスターが python2.4 を使用しているため、続行する方法がわかりません。
EDIT : 実際には、考え直して、複数の qsub スクリプトを記述し、それぞれが 95000 の計算の 1 つのチャンクのみで動作するようにすることができました。それぞれ 7125 回の計算を行う 16 の異なるジョブのようなものを送信できます。それは本質的に同じことです。
sed - qsub内のawk
いくつかのqsubを含むbashスクリプトがあります。それらのそれぞれは、開始する前に前の qsub が完了するのを待っています。
私の最初の qsub は、特定のディレクトリ内のファイルを perl プログラムに送信し、出力ファイルを新しいディレクトリに出力することで構成されています。最後に、すべてのジョブ名を配列にエコーします。このスクリプトは意図したとおりに機能します。
私の 2 番目の qsub は、perl スクリプトで作成した以前のすべてのファイルを新しい出力ファイルに並べ替え、これらすべてのジョブ (約 100 ジョブ) が完了した後にdepend=afterany
. 繰り返しますが、この部分は正常に機能しています。
awk
私の問題は、ソートさsed
れたファイルに、削除したい列がいくつかあることです (2 から 6)。depend=afterany
この最後のステップfinal_file.txt
で が作成されますが、空のままになります。エコーの前に追加SED=
したのは、そうしないとCommand not found
.
パイプなしで試したので、すべてが印刷されます。残念ながら、何も印刷されません。ソートされたファイルを開いていないと思います。これが、sedの後に最終ファイルが空になる理由です。もしそうなら、なぜ awk はそれを読まないのでしょうか?
私のスクリプトでは、変数を使用してディレクトリとファイルを (正しいパスで) 定義しています。ファイルやディレクトリは最初に完全に定義され、スクリプト全体で使用されるため、私の問題はファイルやディレクトリを見つけることではないことを私は知っています。変数の代わりにパス全体を書き込もうとしましたが、同じ結果が得られました。
bash - bash スクリプトの PBS_ARRAYID 変数引数がジョブに qsub しない
qsub を介して PBS_ARRAYID をメインの引数ベクトル (argv) に渡したいのですが、Google の結果のページですべての戻り値を読み取った後、これを機能させることができません。定数引数 qsubs は問題ありません。
ここで与えられたソリューションから配列コードを持ち上げました。 bash スクリプトでループ変数を使用して、さまざまなコマンドライン引数を渡します。
私が読んだすべてから、これはうまくいくはずです。そして、それは例外を除いて機能しますvar1=$(echo "$PBS_ARRAYID" -l)
qsub - qsub で負荷状態を判断する
複数のジョブを qsub に送信するスクリプトを Python で作成していますが、ユーザーに通知してジョブのローカル環境を実行する必要があるよりも多くのジョブがキューに入っているか、qsub の負荷が高い場合は、qsub の負荷を判断する必要があります。コマンド ページを確認しましたが、有用な情報を取得できませんでした。