我应该在哪里插入`os.environ [“ MKL_NUM_THREADS”] =“ 1”`?

时间:2019-06-04 11:29:36

标签: python numpy ray

根据this document,我必须插入os.environ["MKL_NUM_THREADS"] = "1"以防止numpy使用多个内核。但是我应该在哪里插入呢?在numpy之前还是在每个演员的构造中?应该在Learner中使用它吗?

例如,如果我具有以下三个文件,应该在哪里插入它?

""" learner.py """
import numpy as np
import ray

@ray.remote
class Learner:
    def __init__(self):
        # do something
""" worker.py """
import numpy as np
import ray

@ray.remote
class Worker:
    def __init__(self):
        # do something
""" main.py """
# program starts from here

import numpy as np
import ray

from learner import Learner
from worker import Worker

ray.init()

learner = Learner.remote()
worker = Worker.remote()

# do something...

如何检查它是否按预期工作? 这是我真实项目中的top的快照,我在os.environ["MKL_NUM_THREADS"] = "1"的开头插入了main.py。它行得通吗? enter image description here

1 个答案:

答案 0 :(得分:1)

您可以通过查看top并确保所有工作进程的CPU利用率都不超过100%来检查其是否正常工作。

您要在调用ray.init()之前进行设置,以便在派生工作进程时,环境变量会传播到它们。

您可以通过使用MKL_NUM_THREADS=1 python script.py启动Python脚本来实现相同的目的。

请注意,当numpy使用MKL时,此环境变量才有意义,但是根据BLAS的实现,您可能需要设置一个OPENBLAS_NUM_THREADS=1OMP_NUM_THREADS=1之类的环境变量。