【发布时间】:2020-04-06 01:59:08
【问题描述】:
我正在使用 ray 实现 SEED,因此,我定义了一个 Worker 类,如下所示
import numpy as np
import gym
class Worker:
def __init__(self, worker_id, env_name, n):
import os
os.environ['OPENBLAS_NUM_THREADS'] = '1'
self._id = worker_id
self._n_envs = n
self._envs = [gym.make(env_name)
for _ in range(self._n_envs)]
def reset_env(self, env_id):
return self._envs[env_id].reset()
def env_step(self, env_id, action):
return self._envs[env_id].step(action)
除此之外,Leaner 中有一个循环,它在需要与环境交互时调用Worker 的方法。
正如this document 建议的那样,我想确保每个工作人员都使用一个 CPU 资源。以下是我的一些尝试:
- 创建
worker时,我设置num_cpus=1:worker=ray.remote(num_cpus=1)(Worker).remote(...) - 我使用
np.__config__.show()检查了我的 numpy 配置,它提供了以下信息
blas_mkl_info: 不可用
幸福信息: 不可用
openblas_info: 库 = ['openblas', 'openblas'] library_dirs = ['/usr/local/lib'] 语言 = c define_macros = [('HAVE_CBLAS', None)]
blas_opt_info: 库 = ['openblas', 'openblas'] library_dirs = ['/usr/local/lib'] 语言 = c define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info: 不可用
openblas_lapack_info: 库 = ['openblas', 'openblas'] library_dirs = ['/usr/local/lib'] 语言 = c define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info: 库 = ['openblas', 'openblas'] library_dirs = ['/usr/local/lib'] 语言 = c define_macros = [('HAVE_CBLAS', None)]
我注意到 numpy 正在使用 OpenBLAS,因此我在 Worker 类中设置了 os.environ['OPENBLAS_NUM_THREADS'] = '1',就像上面的代码在 this instruction 之后所做的那样。
两者都完成后,我打开top,但仍然注意到每个Worker使用130%-180% CPU,与之前完全相同。我还尝试在主要 python 脚本的开头设置os.environ['OPENBLAS_NUM_THREADS'] = '1' 或使用export OPENBLAS_NUM_THREADS=1,但没有任何帮助。我现在能做什么?
【问题讨论】: