名前付きパラメータを使用したGNUパラレル

名前付きパラメータを使用したGNUパラレル

私の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

これを行うには、ファイルの最初の行にヘッダーを含めないでください。

おすすめ記事