私のMakefileには次のコマンドがあります
parallel \
--eta \
--bar \
--joblog mnist/embedder.joblog \
pipenv run python3 \
-m mnist.train_embedder \
--embedder_name {1} \
--embedder_dim {2} \
--embedder_lr {3} \
--embedder_epochs {4} \
:::: grid/embedder_name \
:::: grid/embedder_dim \
:::: grid/embedder_lr \
:::: grid/embedder_epochs
各ファイルには、次のような内容が含まれています。
$ cat grid/embedder_name
ae
cnn
$ cat grid/embedder_dim
24
32
48
64
ドライランの結果は次のとおりです。
$ parallel \
--dry-run \
--eta \
--joblog mnist/embedder.joblog \
pipenv run python3 \
-m mnist.train_embedder \
--embedder_name {1} \
--embedder_dim {2} \
--embedder_lr {3} \
--embedder_epochs {4} \
:::: grid/embedder_name \
:::: grid/embedder_dim \
:::: grid/embedder_lr \
:::: grid/embedder_epochs
Computers / CPU cores / Max jobs to run
1:local / 96 / 8
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
ETA: 0s Left: 8 AVG: 0.00s local:8/0/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name ae --embedder_dim 24 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 7 AVG: 0.00s local:7/1/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name ae --embedder_dim 32 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 6 AVG: 0.00s local:6/2/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name ae --embedder_dim 48 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 5 AVG: 0.00s local:5/3/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name ae --embedder_dim 64 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 4 AVG: 0.00s local:4/4/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name cnn --embedder_dim 24 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 3 AVG: 0.00s local:3/5/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name cnn --embedder_dim 32 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 2 AVG: 0.00s local:2/6/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name cnn --embedder_dim 48 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 1 AVG: 0.00s local:1/7/100%/0.0s pipenv run python3 -m mnist.train_embedder --embedder_name cnn --embedder_dim 64 --embedder_lr 0.001 --embedder_epochs 32
ETA: 0s Left: 0 AVG: 0.00s local:0/8/100%/0.0s
--embedder_name
パラメータリストは増え続けています。との間にパラメータを追加するには、まで編集する--embedder_dim
必要があります。これは退屈でエラーが発生しやすいです。--embedder_dim {2}
--embedder_dim {3}
--embedder_lr {3}
--embedder_lr {4}
場所パラメータを名前付きパラメータに置き換えることはできますか?私は次のように想像しています。
parallel \
--eta \
--bar \
--joblog mnist/embedder.joblog \
pipenv run python3 \
-m mnist.train_embedder \
--embedder_name {embedder_name} \
--embedder_dim {embedder_dim} \
--embedder_lr {embedder_lr} \
--embedder_epochs {embedder_epochs} \
:::: grid/embedder_name \
:::: grid/embedder_dim \
:::: grid/embedder_lr \
:::: grid/embedder_epochs
これは重複した名前をたくさん生成しますが(文字列はコマンドembedder_name
に3回表示されます!)、少なくとも誤って誤った引数の順序に対してより強力です。
関連がある場合
$ uname -a
Linux t1v-n-5d019513-w-0 5.13.0-1023-gcp #28~20.04.1-Ubuntu SMP Wed Mar 30 03:51:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
ベストアンサー1
--header :
するほぼあなたは何が欲しいですか?
最初の行がヘッダーであるCSVファイル用に作成されました。
したがって、「grid/embedder_name」の前に「name」を追加する必要があります。
$ cat grid/embedder_name
name
ae
cnn
$ cat grid/embedder_dim
dim
24
32
48
64
また、各ファイル間で :::: を使用する必要はありません。一つで十分です。 (しかし読みやすいと思われる場合は保管してください。)
parallel --header : echo {name} {dim} :::: grid/embedder_dim grid/embedder_name
(@ r_31415は、コマンドラインに名前を入力すると機能しない例を示しました。example::::
代わりに-を使用すると::::
これを行うことができます。parallel --header : echo {foo} ::: foo 1 2 3
)
編集する:
バージョン20220822以降、次のことができます。
parallel --header 0 echo {grid/embedder_name} {grid/embedder_dim} :::: grid/embedder_dim grid/embedder_name
parallel --header 0 echo {embedder_name} {embedder_dim} :::: embedder_dim embedder_name
これを行うには、ファイルの最初の行にヘッダーを含めないでください。