質問:
snakemake --clusterおよび--dramaオプションはどのように実装されていますか?
Chris_Rands
2017-06-06 19:30:00 UTC
view on stackexchange narkive permalink

私は snakemakeにかなり慣れておらず、 -cluster フラグと -drmaa フラグの違いを理解しようとしています。 、どちらもクラスター/ノードを計算するためのジョブを送信するために使用されます。

ドキュメントには、 -drmaa ここ aを使用する利点に関するヒントがいくつか記載されています。 >:

クラスターシステムがDRMAAをサポートしている場合、Snakemakeはそれを利用してジョブの制御を強化できます。例えば。 Ctrl + Cを押すとジョブをキャンセルできますが、これは一般的な--clusterサポートでは不可能です。

そしてここ

利用可能な場合、DRMAAは、より優れた制御とエラー処理を提供するため、汎用クラスターモードよりも推奨されます。

したがって、を使用する利点の概念を理解しています- drmaa 。ただし、上記の完全な説明は考慮していません。また、これらのフラグが内部でsnakemakeにどのように実装されているかわかりませんが、誰かが詳しく説明できますか?

これは考慮できますが、より一般的なプログラミングの質問ですが、snakemakeは主にバイオインフォマティクスで使用されます。 このメタ投稿この回答により、この質問はトピックに沿ったものと見なされると私は確信しました。

こんにちはクリス!ここで実際の質問は何ですか? DRMAAは、クラスター/グリッドジョブの送信と制御を記述するオープンAPIのようです。したがって、それをサポートするクラスターまたは送信システム(SLURMなど)がある場合、 `snakemake`は、そのAPIでサポートされる追加のコントロールを提供します。これには、質問に応じて、Ctrl +を渡す機能が含まれます。コンソールでグリッドにC-たとえば、Sun GridEngineで `qdel`コマンドを使用する必要があるシナリオ。したがって、DRMAAをサポートするスケジューラーを備えたインフラストラクチャーがある場合は、 `--drmaa`を使用した方がよい理由がわかります。
たぶん、私たちが実際にsnakemake開発者を密猟するまで待ってください:)
コードはオープンソースであり、従うのはかなり簡単です。ソースを10分間ノーズすることで、DRMAAジョブがどのように送信されたかを理解するのは非常に簡単であることがわかりました。しかし、質問が何を探しているのか完全にはわかりません。
二 答え:
#1
+5
Devon Ryan
2017-06-07 00:38:15 UTC
view on stackexchange narkive permalink

これもどのように機能するのかといつも思っていたので、これを言い訳としてsnakemakeコードを調べました。結局のところ、これは(1)ジョブが実際にどのように送信され、(2)ジョブが完了したかどうか(そして失敗したかどうか)をどのように判断するかという問題になりますか?

DRMAAの場合、pythonほとんどのスケジューラに付属しているlibdrmaaライブラリをラップするモジュール(適切な名前は「drmaa」)があります。これは非常に人気のあるルートです。たとえば、Galaxyプロジェクトはこれを使用してほとんどのクラスターを処理します(たとえば、内部のGalaxyインスタンスをslurmクラスターに接続するために使用します)。ここでの大きな利点は、DRMAAが魔法を使って、 qsub または srun などを実行する必要があるかどうかを知らなくてもクラスターにコマンドを送信できることです。さらに、ジョブが実行されているかどうか、およびその終了ステータスを単純に照会するメソッドを提供します。

-cluster コマンドを使用するには、さらに多くの魔法が必要です。 snakemakeの側面。 1日の終わりに、シェルスクリプトを作成し、指定したコマンドを使用して送信します。重要なのは、スクリプトにいくつかの秘密のファイルが含まれていて、それを監視できることです(スクリプトを実行する .snakemake ディレクトリに気づいたことがありますか?これは、スクリプトが使用されているものの1つです)。これらの名前は {jobid} .jobfinished および {jobid} .jobfailed であり、コマンド/スクリプトの終了ステータスに応じて、そのうちの1つが変更されます。それらの1つがそこにあると、snakemakeはDAG内を移動できます(失敗した場合は移動できません)。これは明らかに追跡することがたくさんあり、snakemakeが実行中のジョブをキャンセルすることはできません。これはDRMAAで簡単に実行できることです。

DRMAAを使用せずに[SunGrid Engineにジョブを送信するためのパッケージ](https://github.com/SamStudio8/sunblock)を作成したことで、ここで魔法が強力でなければならないことを確実に確認できます。ファイルが変更されたかどうかを監視する代わりに、監視サーバーでPOSTリクエストを実行することを選択しました。 DRMAAは、奇妙な回避策を実行せずにジョブステータスを取得するために、いくつかの優れたAPIを公開する必要があることがわかります。
うん、それは私が思いついたものよりも便利です:)
#2
+4
Sam Nicholls
2017-06-06 20:31:12 UTC
view on stackexchange narkive permalink

DRMAA (分散リソース管理アプリケーションAPI)は、グリッド/クラスターに送信された作業の送信と管理の仕様を説明するオープンAPIのようです。 スケジューラがDRMAAに準拠している場合 snakemake -drmaa フラグを使用すると、それによって公開される追加のコントロールが提供されると思います。 API。

DRMAAサポートに関する質問で述べたように、送信されたジョブを強制終了または停止するために、コンソールのCtrl + Cがグリッドに渡されます。たとえば、 Sun Grid Engine qdel コマンドを使用する必要があるタスク。

提案が有効になる理由がわかりました。 -drmaa は、ジョブの送信と管理を少し簡単にする機能(ジョブの制御、ログとエラーの可用性など)を公開する可能性があるため、可能な場合は snakemake snakemake の経験がある人ならもう少し説明できるかもしれませんが、これがお役に立てば幸いです。

価値があるので、DRMAAなしでSun GridEngineを使用しています。 qstat からの優れた情報、およびその qacct ログ形式は、おそらく私が今まで遭遇した中で最悪のファイル形式です。 DRMAAは、 snakemake (およびその他)がこの情報をより簡単に取得できる優れた(または少なくともより合理的な)APIを提供していると思います。

追加:

内部では、フラグは __ init __。py 内のPythonの argparse モジュールによって解析されます。 相互に排他的なオプションのグループは、 -cluster または -drmaa (または -cluster-sync コード>)。

-cluster または -c では、引数を指定する必要があります。クラスターでジョブを送信するコマンド(例では qsub という名前)。 -drmaa フラグは、DRMAAが使用されることを snakemake に示しているように見えます。これは、コンソールから実行するコマンドの方法に関してはあまり変わりません。 __ init __。py または workflow.py で処理されます。

ただし、スケジューラー( scheduler.py で指定)、 elif ステートメントは、クラスターモードとのいずれかの形式になっているかどうかを確認します。 else は、代わりに -drmaa フラグを立てた場合をキャッチします。

ここで魔法が起こります。これで、ジョブはデフォルトのエグゼキュータの代わりに executors.pyで指定されたDRMAAExecutor

さらに調査しなくても、 DRMAAExecutor いくつかのクラス属性を備えており、他の属性と比較して追加の関数を公開しています。

これがもっと役立つことを願っていますか?繰り返しになりますが、私は自分でコードを見ただけですが、 snakemake ユーザーがチャイムを鳴らす代わりに、私は鼻を持っていると思いました。

ありがとう、でもこれは私がすでに知っていることを教えてくれます。私は概念を理解していますが、2つの異なるアプローチがsnakemakeでどのように実装されているかについて詳しく知りたいので、質問を少し明確にしようと思います
コメントを書く余地があまりなかったので、あなたが求めていたかもしれないものを先取りして申し訳ありません。私が助けることができるならば、私はあなたの編集された質問に対処するために拡大しようとします!
私が拡張した@Chris_Rands、これは関連性がありますか?
おかげで、賛成、申し訳ありませんが、私の質問がはっきりしていなかった場合は、これは他の人にとって役立つ質問かもしれないと思っていました。答えが得られなかった場合は自分で答えるつもりでしたが、詳しくは説明していません。ソースはまだ
@Chris_Rands問題ありません(そしてありがとう)!コードベースを掘り下げて、それらがどのように機能するかを確認するのが好きです。デボンと私の間で、あなたが探していたものを見つけましたか?そうでない場合は、これについてチャットしてください。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...