当我将pytorch与Ray一起使用时,我没有为远程类设置任何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)
答案 0 :(得分:3)
如果您还想在gpu上部署模型,则需要确保您的参与者或任务确实有权访问gpu(使用@ ray.remote(num_gpus = 1)),这将确保该炬管。 cuda.is_available()在该远程函数中为true)。如果要在CPU上部署模型,则需要在加载模型时指定该模型,例如,参见https://github.com/pytorch/pytorch/issues/9139。