1つのCPUコアのみを使用するGNUパラレル

1つのCPUコアのみを使用するGNUパラレル

私はGNUを使っていくつかのトレーニングを並行しています。トレーニングは1回の繰り返しを実行するのに約30秒かかり、約3000回実行する必要があります。トレーニング自体は並​​列化することはできませんが(少なくともかなりの努力がない限り)、さまざまなシードを使用してこのトレーニングを実行しましたが、すべて異なるコアで簡単に実行できます。

これが私が並列性を使用する方法です。

#!/bin/bash
parallel ./train.py config/config.yml _results/ \
--seed {1} \
::: {1..5}

同じコア(core0)で5つのプロセスすべてと並列に実行すると、各プロセスのCPU使用率は20%です(htopを使用して確認)。

同じコマンドを使用して別のトレーニングセットを実行すると、5つのプロセスがcore0に追加され、すべて10%のCPU使用率が表示されます。

Ubuntu 18.04を使用しています

Operating System: Ubuntu 18.04.4 LTS
          Kernel: Linux 5.3.0-28-generic

そしてライゼン5 3600

processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 23
model       : 113
model name  : AMD Ryzen 5 3600 6-Core Processor
stepping    : 0
microcode   : 0x8701013
cpu MHz     : 3868.329
cache size  : 512 KB
physical id : 0
siblings    : 12
core id     : 0
cpu cores   : 6
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 16
wp      : yes
...

現在の(非)解決策は、ワークセットを使用してトレーニングを開始した後、各シードを別のコアに配置することです。

答え1

GNU Parallel はどのコアで実行されるかを制御しないので、同じコアでも実行したいと思います。

bzip2 < /dev/zero >/dev/null &
bzip2 < /dev/zero >/dev/null &
bzip2 < /dev/zero >/dev/null &
bzip2 < /dev/zero >/dev/null &
bzip2 < /dev/zero >/dev/null &

この場合、シェルが同じコアですべてのプロセスを生成するように強制することがあり、原因が何であるかを特定する必要があります。

しかし、tasksetうまくいけば、次のことを回避策として使用できます。

parallel taskset -c '{=$_=slot()-1=}' train...

関連情報