У меня только один графический процессор, и я хочу запустить много актеров на этом графическом процессоре.Вот что я делаю, используя ray
, после чего https://ray.readthedocs.io/en/latest/actors.html
- сначала определим сеть на gpu
class Network():
def __init__(self, ***some args here***):
self._graph = tf.Graph()
os.environ['CUDA_VISIBLE_DIVICES'] = ','.join([str(i) for i in ray.get_gpu_ids()])
with self._graph.as_default():
with tf.device('/gpu:0'):
# network, loss, and optimizer are defined here
sess_config = tf.ConfigProto(allow_soft_placement=True)
sess_config.gpu_options.allow_growth=True
self.sess = tf.Session(graph=self._graph, config=sess_config)
self.sess.run(tf.global_variables_initializer())
atexit.register(self.sess.close)
self.variables = ray.experimental.TensorFlowVariables(self.loss, self.sess)
затем определите рабочий класс
@ray.remote(num_gpus=1)
class Worker(Network):
# do something
определить класс ученика
@ray.remote(num_gpus=1)
class Learner(Network):
# do something
функция поезда
def train():
ray.init(num_gpus=1)
leaner = Learner.remote(...)
workers = [Worker.remote(...) for i in range(10)]
# do something
Этот процесс работает нормально, когда я не пытаюсь заставить его работать на GPU.То есть работает нормально, когда я удаляю все with tf.device('/gpu:0')
и (num_gpus=1)
.Проблема возникает, когда я сохраняю их: кажется, что создается только learner
, но ни один из workers
не создается.Что я должен сделать, чтобы это работало?