以下の記事で言及した、KMP_AFFINITY=disabled について続報。
KMP_AFFINITY を disabled に(tensorflow)
os.environ[“KMP_AFFINITY”] = “disabled”
ある日、コードのリファクタリングを進めていた際に、
突然、深層学習の処理時間が長くなる現象が起きた。
色々試した結果、
import keras
より「後」に上述の KMP_AFFINITY=disabled を設定すると
処理時間が長くなる現象を確認した。
処理時間が 2~3 倍となる場合もあれば、6倍になる場合もある。
入力データの量によるのかも。
keras のロードより先に、環境変数[KMP_AFFINITY]に
disabled を設定しておく必要があるのかもしれない。
詳しくないため、確実なことは言えないが、
KMP_AFFINITY=disabled は冒頭の最初の最初に
行ったほうが良さそう。
① 冒頭に disabled を設定した場合、
OMP: Info #212: KMP_AFFINITY: decoding x2APIC ids.
で始まる KMP_AFFINITY の出力行が、表示されなかった。
② 逆に、import keras の後に、KMP_AFFINITY=disabled を
設定した場合は、以下の出力が出て、処理時間が大きくなった。
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-15
OMP: Info #156: KMP_AFFINITY: 16 available OS procs OMP: Info #157: KMP_AFFINITY: Uniform topology
OMP: Info #179: KMP_AFFINITY: 1 packages x 8 cores/pkg x 2 threads/core (8 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 core 0 thread 0
OMP: Info #171: KMP_AFFINITY: OS proc 8 maps to package 0 core 0 thread 1
:
OMP: Info #250: KMP_AFFINITY: pid 10590 tid 10590 thread 0 bound to OS proc set 0
OMP: Info #250: KMP_AFFINITY: pid 10590 tid 11341 thread 1 bound to OS proc set 1
:
③ 後日、KMP_AFFINITY=disabled をコメントアウトして
実行したところ、上記 ② と同じ出力・処理時間が得られた。
disabled は import keras の前に、という事らしい。
あと、よく読んでないんだけれど、
ここの記事によると、disabled でなく、none でも良いみたい。
より望ましいと書いてある気もする。
Suggested KMP_AFFINITY settings harm performance
私の事例ではそれほど差がなかったので、disabled のままにした。