代码之家  ›  专栏  ›  技术社区  ›  Grr

在大数组乘法之后,进程关联将转到{0}

  •  1
  • Grr  · 技术社区  · 7 年前

    系统信息:

    • 操作系统:CentOS Linux 7
    • 处理器:24x Intel(R)Xeon(R)Gold 6140 CPU@2.30GHz

    软件信息:

    • 蟒蛇3.7.3
    • 纽比1.16.2

    我找到这个是因为我想 sklearn.ensemble.RandomForestClassifier 在并行的1M记录数据集上( n_jobs=-1 ). 试穿后我注意到 joblib 后端已恢复到 SequentialBackend 一次运行一个作业。

    我打电话就确定了 fit 流程关联性(如 os.sched_getaffinity )已设置为单个核心,而不是正常的24。事实证明,在数据转换中有一个步骤 numpy.array 乘以 float . 在这一点上,OpenMP抛出了一系列关于KMP_关联性的消息,这些消息似乎都不表示进程已设置为单个核心,但我不是OpenMP日志记录方面的专家。下面是一个在我的系统上重现这个错误的简单例子。

    import numpy as np
    from os import sched_getaffinity as aff
    
    aff(0)
    {0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23}
    arr = np.random.rand(1000000)
    arr *= .5
    OMP: Info #212: KMP_AFFINITY: decoding x2APIC ids.
    OMP: Info #210: KMP_AFFINITY: Affinity capable, using global cpuid leaf 11 info
    OMP: Info #154: KMP_AFFINITY: Initial OS proc set respected: 0-23
    OMP: Info #156: KMP_AFFINITY: 24 available OS procs
    OMP: Info #157: KMP_AFFINITY: Uniform topology
    OMP: Info #179: KMP_AFFINITY: 24 packages x 1 cores/pkg x 1 threads/core (24 total cores)
    OMP: Info #214: KMP_AFFINITY: OS proc to physical thread map:
    OMP: Info #171: KMP_AFFINITY: OS proc 0 maps to package 0
    OMP: Info #171: KMP_AFFINITY: OS proc 1 maps to package 2
    OMP: Info #171: KMP_AFFINITY: OS proc 2 maps to package 4
    OMP: Info #171: KMP_AFFINITY: OS proc 3 maps to package 6
    OMP: Info #171: KMP_AFFINITY: OS proc 4 maps to package 8
    OMP: Info #171: KMP_AFFINITY: OS proc 5 maps to package 10
    OMP: Info #171: KMP_AFFINITY: OS proc 6 maps to package 12
    OMP: Info #171: KMP_AFFINITY: OS proc 7 maps to package 14
    OMP: Info #171: KMP_AFFINITY: OS proc 8 maps to package 16
    OMP: Info #171: KMP_AFFINITY: OS proc 9 maps to package 18
    OMP: Info #171: KMP_AFFINITY: OS proc 10 maps to package 20
    OMP: Info #171: KMP_AFFINITY: OS proc 11 maps to package 22
    OMP: Info #171: KMP_AFFINITY: OS proc 12 maps to package 24
    OMP: Info #171: KMP_AFFINITY: OS proc 13 maps to package 26
    OMP: Info #171: KMP_AFFINITY: OS proc 14 maps to package 28
    OMP: Info #171: KMP_AFFINITY: OS proc 15 maps to package 30
    OMP: Info #171: KMP_AFFINITY: OS proc 16 maps to package 32
    OMP: Info #171: KMP_AFFINITY: OS proc 17 maps to package 34
    OMP: Info #171: KMP_AFFINITY: OS proc 18 maps to package 36
    OMP: Info #171: KMP_AFFINITY: OS proc 19 maps to package 38
    OMP: Info #171: KMP_AFFINITY: OS proc 20 maps to package 40
    OMP: Info #171: KMP_AFFINITY: OS proc 21 maps to package 42
    OMP: Info #171: KMP_AFFINITY: OS proc 22 maps to package 44
    OMP: Info #171: KMP_AFFINITY: OS proc 23 maps to package 46
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 8822 thread 0 bound to OS proc set 0
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9374 thread 1 bound to OS proc set 1
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9375 thread 2 bound to OS proc set 2
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9376 thread 3 bound to OS proc set 3
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9377 thread 4 bound to OS proc set 4
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9378 thread 5 bound to OS proc set 5
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9380 thread 7 bound to OS proc set 7
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9379 thread 6 bound to OS proc set 6
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9381 thread 8 bound to OS proc set 8
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9383 thread 10 bound to OS proc set 10
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9382 thread 9 bound to OS proc set 9
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9384 thread 11 bound to OS proc set 11
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9385 thread 12 bound to OS proc set 12
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9386 thread 13 bound to OS proc set 13
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9387 thread 14 bound to OS proc set 14
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9388 thread 15 bound to OS proc set 15
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9389 thread 16 bound to OS proc set 16
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9390 thread 17 bound to OS proc set 17
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9391 thread 18 bound to OS proc set 18
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9392 thread 19 bound to OS proc set 19
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9394 thread 21 bound to OS proc set 21
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9393 thread 20 bound to OS proc set 20
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9395 thread 22 bound to OS proc set 22
    OMP: Info #250: KMP_AFFINITY: pid 8822 tid 9396 thread 23 bound to OS proc set 23
    
    aff(0)
    {0}
    

    对于如何解释这种行为,甚至重新设置与 os.sched_setaffinity 之后不会恢复使用所有核心的容量。

    注意。

    当数组的大小为1e5而不是1e6时,不会发生这种情况。内存不是问题,因为这个系统有256GB。

    0 回复  |  直到 7 年前
        1
  •  0
  •   Grr    7 年前

    我在OpenMP bugzilla页面上 Multiplication of array with float causes cascade of OpenMP messages and sets process affinity to {0} .

    我从一个英特尔工程师那里得到的建议是使用 norespect KMP_AFFINITY 修饰语。有关此修饰符和其他修饰符的文档可以在 Intel C++ Compiler Developer Guide - Thread Affinity Interface . 这对我有效。

    export KMP_AFFINITY=norespect
    
    ipython
    In [1]: import numpy as np
    In [2]: from os import sched_getaffinity as aff
    In [3]: aff(0)
    Out[3]:
    {0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23}
    In [4]: arr = np.random.rand(1000000)
    In [5]: arr *= .5
    OMP: Info #212: KMP_AFFINITY: decoding x2APIC ids.
    OMP: Info #210: KMP_AFFINITY: Affinity capable, using global cpuid leaf 11 info
    OMP: Info #155: KMP_AFFINITY: Initial OS proc set not respected: 0-23
    OMP: Info #156: KMP_AFFINITY: 24 available OS procs
    OMP: Info #157: KMP_AFFINITY: Uniform topology
    OMP: Info #179: KMP_AFFINITY: 24 packages x 1 cores/pkg x 1 threads/core (24 total cores)
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4274 thread 0 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4697 thread 3 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4698 thread 4 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4699 thread 5 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4700 thread 6 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4701 thread 7 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4702 thread 8 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4703 thread 9 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4704 thread 10 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4705 thread 11 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4706 thread 12 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4708 thread 14 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4709 thread 15 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4710 thread 16 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4711 thread 17 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4712 thread 18 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4714 thread 20 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4715 thread 21 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4716 thread 22 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4717 thread 23 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4713 thread 19 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4707 thread 13 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4695 thread 1 bound to OS proc set 0-23
    OMP: Info #250: KMP_AFFINITY: pid 4274 tid 4696 thread 2 bound to OS proc set 0-23
    In [6]: aff(0)
    Out[6]:
    {0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23}