4

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)
4

1 に答える 1

5

GPU にもモデルをデプロイしたい場合は、アクターまたはタスクが実際に GPU にアクセスできることを確認する必要があります (@ray.remote(num_gpus=1) を使用すると、これにより torch.cuda.is_available が確実になります) () はそのリモート関数で true になります)。モデルを CPU にデプロイする場合は、モデルをロードするときにそれを指定する必要があります。たとえば、https://github.com/pytorch/pytorch/issues/9139を参照してください。

于 2019-01-31T00:12:20.407 に答える