GNU Parallel - Alternatif argüman

Sep 09 2020

Paralel komutumun her yürütülmesi için bir argüman değiştirebilmek istiyorum.

Görüntüleri işlemek için bir komut dosyam var ve aynı anda birkaç işlemi başlatmak için GNU Parallel'i kullanıyorum. Bu komut dosyasında GPU çekirdeği kullanıyorum ancak 2 GPU çekirdeğimden yalnızca biri kullanılıyor.

2 farklı yapılandırma dosyası kullanabilmek istiyorum (biri GPU 1 için diğeri GPU 2 için) ama bunu nasıl yapacağımı bilmiyorum.

gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year $config" $ Config her iki çalıştırmada gpu_1'den gpu_2'ye değişiyor

Bu mümkün mü değil mi?

Teşekkürler 😉

DÜZENLE:

Paralel komutun ( {#}) iş numarasını bağımsız değişken olarak kullanarak, ardından bu iş numarasının modulo'sunu kullanarak 0 veya 1 elde edin:

gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year {#}"

Gelen görev fonksiyonu:

task(){
...
jobnumber=$4 gpu=$(expr $jobnumber% 2)
...
}

Yanıtlar

1 OleTange Sep 10 2020 at 14:26

Açıklamanız göz önüne alındığında, muhtemelen GNU Parallel'in değişmesini istemezsiniz. Tüm garip işlerin 1 saniye sürdüğünü ve tüm çift işlerin 2 saniye sürdüğünü hayal edin. Ardından, hiçbiri diğerinde çalışmıyorken aynı GPU'da çalışan işlerle sonuçlanırsınız.

Bunun yerine istediğiniz şey, GPU2'de bir iş biter bitmez GPU2'de başlayan bir işe sahip olmaktır. {%}(aka. job slot) bunun için yapılmıştır:

parallel -j2 'sleep {}; echo {}-GPU{%} seq {#}' ::: 1 2 1 2 1 2 1 2 1 2 1 2
MarkSetchell Sep 09 2020 at 18:35

Bunun gibi bir şey çalışmalı:

seq 14 | parallel -k echo task {} {= '$_=seq() % 2 ? "gpu1" : "gpu2"' =}

Çıktı

task 1 gpu1
task 2 gpu2
task 3 gpu1
task 4 gpu2
task 5 gpu1
task 6 gpu2
task 7 gpu1
task 8 gpu2
task 9 gpu1
task 10 gpu2
task 11 gpu1
task 12 gpu2
task 13 gpu1
task 14 gpu2