処理が完了したら、bash コマンドを実行します。

処理が完了したら、bash コマンドを実行します。

GPUを使用してMLモデルを学習する2つのスクリプトがあります。寝る前に始めて夜に効果を見て朝に効果を見たいです。

しかし、GPUメモリが限られているので、並列ではなくシリアルで実行したいと思います。

python train_v1.py && python train_v2.py;使用できますが、train_v1同時にトレーニングに時間がかかるため、2番目のスクリプトの実装を開始し、完了したら自動的に実行しようとしていtrain_v2.pyます。python train_v1.py

どうすればいいですか?ありがとうございます。

ベストアンサー1

train_v1.py以下は、他のプロセスがまだ生きているかどうかを繰り返し、確認すること、または通常行われている方法とは異なる方法で呼び出すことを含まない方法です。

$ python train_v1.py
^Z
[1]+  Stopped                 python train_v1.py
$ % && python train_v2.py

^Zプロセスの実行中に+を押してCtrl信号を送信してスリープモードに切り替えます。次に、シェルにを使用して目覚めさせるように指示します。これを最後にコマンドとして追加できます。これにより、最初からやったように動作します。Ztrain_v1.pySIGTSTP%&& python train_v2.pypython train_v1.py && python train_v2.py

代わりに使用すること%もできますfg。このタイプのシェル機能についてもっと知りたい場合は、次をお読みください。Bash マンページの「ジョブ制御」セクション

編集:キューに追加し続ける方法

Jamesdlinがコメントで指摘したように、train_v3.pyv2が開始される前にスキーマを追加しようとすると、次のことができないことがわかります。

$ % && python train_v2.py
^Z
[1]+  Stopped                 python train_v1.py

train_v1.pyまだ起動していないため停止しtrain_v2.py、まだ起動していないジョブは停止/一時停止/スリープできません。

$ % && python train_v3.py

同じ結果をもたらすでしょう

python train_v1.py && python train_v3.py

%最後に停止したプロセスに対応するためです。v3このように追加しようとしないでください。履歴を使用する必要があります。

$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py

上記のように履歴拡張を実行するか、キーバインディング(upなど)を使用して最後のコマンドを呼び出し、最後にv3を追加できます。

$ % && python train_v2.py && python train_v3.py

これは、パイプラインにさらにコンテンツを追加するために繰り返すことができる操作です。

$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py
^Z
[1]+  Stopped                 python train_v1.py
$ !! && python train_v4.py
% && python train_v2.py && python train_v3.py && python train_v4.py

おすすめ記事