

AWS EC2 c5.9xlarge インスタンプを使用しております。  
（36 vCPU, 72 GB RAM）  
AMI は ubuntu 18.04 を使用しております。

python で並列計算を、36コア使って実施したいのですが、CPUを認識しないのか、一部のCPUコアが使用されません。  
pythonスクリプトではCPUの数を36に指定しています。  
（指定しなくても、自動でコアの最大数に並列してくれるはずですが、１コアでのみしか動きませんでした。  
36コアと指定すると、25コア使ってくれるようです。）

top でCPU使用率を見ると、以下のようになっています。

[code]

    top - 01:52:47 up 34 min,  1 user,  load average: 36.03, 34.15, 22.04
    Tasks: 446 total,  37 running, 236 sleeping,   0 stopped,   0 zombie
    %Cpu0  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu4  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu5  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu6  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu7  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu8  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu9  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu10 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu11 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu12 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu13 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu14 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu15 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu16 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu17 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu18 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu19 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu20 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu21 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu22 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu23 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu24 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu25 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu26 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu27 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu28 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu29 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu30 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu31 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu32 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu33 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu34 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu35 :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 72028912 total, 63163192 free,  7853444 used,  1012272 buff/cache
    KiB Swap: 10239996 total, 10239996 free,        0 used. 63486432 avail Mem
    
[/code]

[code]

      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     3302 ubuntu    20   0  488808 235796  48848 R 100.0  0.3  14:49.20 python
     3304 ubuntu    20   0  528140 275044  48816 R 100.0  0.4  14:49.12 python
     3305 ubuntu    20   0  490244 236872  48652 R 100.0  0.3  14:49.16 python
     3306 ubuntu    20   0  493836 240756  48940 R 100.0  0.3  14:49.13 python
     3307 ubuntu    20   0  487884 234388  48496 R 100.0  0.3  14:49.19 python
     3309 ubuntu    20   0  475068 219924  46628 R 100.0  0.3  14:49.13 python
     3312 ubuntu    20   0  528812 275764  48848 R 100.0  0.4  14:49.13 python
     3316 ubuntu    20   0  491356 237732  48512 R 100.0  0.3  14:49.13 python
     3318 ubuntu    20   0  507600 254616  48820 R 100.0  0.4  14:49.14 python
     3322 ubuntu    20   0  529840 276740  48920 R 100.0  0.4  14:49.07 python
     3325 ubuntu    20   0  522588 268868  48348 R 100.0  0.4  14:49.11 python
     3328 ubuntu    20   0  508744 255844  48936 R 100.0  0.4  14:49.11 python
     3331 ubuntu    20   0  528416 275416  48876 R 100.0  0.4  14:49.11 python
     3333 ubuntu    20   0  497844 244440  48616 R 100.0  0.3  14:49.10 python
     3335 ubuntu    20   0  522516 268860  48436 R 100.0  0.4  14:49.06 python
     3338 ubuntu    20   0  493688 240256  48404 R 100.0  0.3  14:49.08 python
     3340 ubuntu    20   0  533152 279548  48484 R 100.0  0.4  14:49.07 python
     3370 ubuntu    20   0  509480 255976  48420 R 100.0  0.4  14:39.26 python
     3373 ubuntu    20   0  492532 239368  48748 R 100.0  0.3  14:32.92 python
     3375 ubuntu    20   0  493040 239400  48380 R 100.0  0.3  14:32.55 python
     3379 ubuntu    20   0  492884 239576  48688 R 100.0  0.3  14:27.08 python
     3382 ubuntu    20   0  531604 278160  48396 R 100.0  0.4  12:41.57 python
     3342 ubuntu    20   0  473212 219792  48540 R  99.7  0.3  14:49.06 python
     3377 ubuntu    20   0  479024 225260  48356 R  99.7  0.3  14:28.90 python
     3298 ubuntu    20   0  449504 194924  49564 R   8.6  0.3   1:15.02 python
     3291 ubuntu    20   0  522544 268260  49784 R   8.3  0.4   1:15.00 python
     3292 ubuntu    20   0  484124 229284  49460 R   8.3  0.3   1:15.02 python
     3293 ubuntu    20   0  524380 269692  49360 R   8.3  0.4   1:15.00 python
     3294 ubuntu    20   0  524916 270384  49528 R   8.3  0.4   1:15.00 python
     3295 ubuntu    20   0  485528 230932  49356 R   8.3  0.3   1:15.00 python
     3296 ubuntu    20   0  483012 228416  49536 R   8.3  0.3   1:15.00 python
     3297 ubuntu    20   0  447140 192612  49580 R   8.3  0.3   1:15.01 python
     3299 ubuntu    20   0  448776 194252  49688 R   8.3  0.3   1:15.00 python
     3300 ubuntu    20   0  442656 187712  49300 R   8.3  0.3   1:14.99 python
     3301 ubuntu    20   0  445364 190980  49580 R   8.3  0.3   1:14.99 python
     3303 ubuntu    20   0  447464 193128  49688 R   8.3  0.3   1:14.99 python
     3398 ubuntu    20   0   44236   4156   3228 R   0.3  0.0   0:00.80 top
    
[/code]

複数のpythonプロセスが1つのCPUコアに押し込められて、パフォーマンスが悪くなっています。

手持ちのローカル環境（MacBook Pro）では、このような挙動は起こりません。  
原因と解決策がわかれば幸いです。


CC BY-SA 4.0
2019-10-17T01:56:41.350
59755
2019-10-19T00:00:32.167
2019-10-17T02:28:31.600
36228
36228
question
python aws amazon-ec2
AWS EC2 インスタンス で並列計算する際に CPUをフル活用できない


AWSの仮想マシン環境に起因する内容ではなく、LinuxあるいはPythonとそのライブラリ等に起因する話のように思われました。

topコマンド等でCPUが見えているわけですので、OSとしてはCPUは適切な数を認識していると言えます。並列計算ライブラリなどを使っているとかではなく、単にCPU数分プロセスをあげているだけですよね？

なぜLinuxがこのようにプロセスをスケジューリングしているのかはわかりませんが、tasksetなどのコマンドでプロセス毎にCPU
IDを指定して実行してみてはどうですかね？


CC BY-SA 4.0
2019-10-18T10:06:52.890
59790
2019-10-18T10:06:52.890
5959
59755
answer