куда я должен вставить `os.environ [" MKL_NUM_THREADS "] =" 1 "`? - PullRequest
0 голосов
/ 04 июня 2019

Согласно этому документу , мне нужно вставить 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 Ответ

1 голос
/ 04 июня 2019

Вы можете проверить, работает ли он, посмотрев в top и убедившись, что ни одна из загрузок ЦП рабочего процесса не превышает 100%.

Вы хотите установить это перед вызовом ray.init(), чтобы прирабочие процессы разветвляются, переменная окружения распространяется на них.

Этого можно добиться, запустив скрипт Python с MKL_NUM_THREADS=1 python script.py.

. Обратите внимание, что эта переменная среды имеет смысл, когда numpy использует MKL, но в зависимости от реализации BLAS вам может потребоваться установить переменную среды, такую ​​как OPENBLAS_NUM_THREADS=1 или OMP_NUM_THREADS=1.

...