根据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
。它行得通吗?
答案 0 :(得分:1)
您可以通过查看top
并确保所有工作进程的CPU利用率都不超过100%来检查其是否正常工作。
您要在调用ray.init()
之前进行设置,以便在派生工作进程时,环境变量会传播到它们。
您可以通过使用MKL_NUM_THREADS=1 python script.py
启动Python脚本来实现相同的目的。
请注意,当numpy
使用MKL时,此环境变量才有意义,但是根据BLAS的实现,您可能需要设置一个OPENBLAS_NUM_THREADS=1
或OMP_NUM_THREADS=1
之类的环境变量。