Как использовать графические процессоры с Ray в Pytorch? Должен ли я указать num_gpus для удаленного класса?
Когда я использую Ray с pytorch, я не устанавливаю флаг num_gpus для удаленного класса.
Я получаю следующую ошибку:
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False.
Основной процесс: я создаю удаленный класс и передаю модель pytorch state_dict()(created in main function)
к этому. В основной функции torch.cuda.is_available()
является True
, но в удаленной функции, torch.cuda.is_available()
является False
, Спасибо
Я пытаюсь установить num_gpus=1 и получил новую проблему: программа просто застряла. Ниже приведен минимальный пример кода для воспроизведения этой проблемы. Благодарю.
import ray
@ray.remote(num_gpus=1)
class Worker(object):
def __init__(self, args):
self.args = args
self.gen_frames = 0
def set_gen_frames(self, value):
self.gen_frames = value
return self.gen_frames
def get_gen_num(self):
return self.gen_frames
class Parameters:
def __init__(self):
self.is_cuda = False;
self.is_memory_cuda = True
self.pop_size = 10
if __name__ == "__main__":
ray.init()
args = Parameters()
workers = [Worker.remote(args) for _ in range(args.pop_size)]
get_num_ids = [worker.get_gen_num.remote() for worker in workers]
gen_nums = ray.get(get_num_ids)
print(gen_nums)
1 ответ
Если вы также хотите развернуть модель на графическом процессоре, вам нужно убедиться, что ваш актер или задача действительно имеет доступ к графическому процессору (с @ray.remote(num_gpus=1), это гарантирует, что torch.cuda.is_available() будет верно в этой удаленной функции). Если вы хотите развернуть модель на ЦП, вам необходимо указать это при загрузке модели, см., Например, https://github.com/pytorch/pytorch/issues/9139.