環境
Miniconda(Anaconda)を使用して環境構築を行っていることが前提
miniconda.sh
$ conda create -n [new_env] python=3.7
$ conda install numpy
$ pip install chainer # 別にやらなくても良い. conda経由でやろうとするとpythonのバージョンが3.6に下がる
$ conda activate [new_env]
$ python -V
Python3.7.1
問題
chainer.iterators.MultithreadIterator
やchainer.iterators.MultiprocessIterator
使用時にCPU使用率が跳ね上がる
解決策
conda install numpy
でビルドされるnumpyはmklを用いて並列処理によって高速化されるようになっている.
故に,環境変数MKL_NUM_THREADS
を適切な値にすることで,同時スレッド数を制限する必要がある.
注意すべきはMultithreadIterator
やMultiprocessIterator
によって立ち上がる各スレッドがMKL_NUM_THREADS
分のスレッドを立て得ることである.
そのため,n_threads
もしくはn_processes
とMKL_NUM_THREADS
の掛け算の値が,使用したいスレッド数と同じになるようにお互いを設定する必要がある