У меня есть актеры Ray, которые взаимодействуют друг с другом, один из них генерирует массив numpy. Когда я собираю ссылку на объект и отправляю ее другому актеру, кажется, что он автоматически десериализуется.
Для контекста см. следующее:
sp_refs = [sp.self_play.remote() for _ in range(GAMES_TOTAL)]
buffer_refs = []
start_time = time.time()
# ? Preload the ReplayBuffer
print(f"Number of Jobs Running: {len(sp_refs)=}")
while sp_refs:
complete, sp_refs = ray.wait(sp_refs)
print(f"{complete=}")
buffer.add.remote(complete)
for r in complete:
buffer_refs.append(buffer.add.remote(r))
Обратите внимание, это только один объект. Мы также можем видеть, что функция, по сути, была вызвана дважды: один раз для ссылки на объект, а затем еще раз для фактического списка (содержащего массив), который затем завершается с ошибкой.
У меня есть актеры Ray, которые взаимодействуют друг с другом, один из них генерирует массив numpy. Когда я собираю ссылку на объект и отправляю ее другому актеру, кажется, что он автоматически десериализуется. Для контекста см. следующее: [code]sp_refs = [sp.self_play.remote() for _ in range(GAMES_TOTAL)] buffer_refs = [] start_time = time.time() # ? Preload the ReplayBuffer
print(f"Number of Jobs Running: {len(sp_refs)=}") while sp_refs: complete, sp_refs = ray.wait(sp_refs) print(f"{complete=}") buffer.add.remote(complete) for r in complete: buffer_refs.append(buffer.add.remote(r)) [/code] Код добавления буферов: [code] def add(self, experience: ray.ObjectRef): print(f"{experience} - add function") print(f"{type(experience)=}") print(f"{type(experience[0])}") data = ray.get(experience) print(data) print(type(data)) assert False [/code] что дает следующий результат: [code]ValueError: Invalid type of object refs, , is given. 'object_refs' must either be an ObjectRef or a list of ObjectRefs. (ReplayBuffer pid=527599) [ObjectRef(f91b78d7db9a659302e1adadcf69844dfe0a8bc60100000001000000)] - add function (ReplayBuffer pid=527599) type(experience)= (ReplayBuffer pid=527599) (ReplayBuffer pid=527599) [array([[1.000e+00, 1.000e+00, 1.000e+00, ..., 0.000e+00, 1.829e+03, (ReplayBuffer pid=527599) 0.000e+00], (ReplayBuffer pid=527599) [1.000e+00, 1.000e+00, 1.000e+00, ..., 0.000e+00, 1.837e+03, (ReplayBuffer pid=527599) 0.000e+00], (ReplayBuffer pid=527599) [1.000e+00, 1.000e+00, 1.000e+00, ..., 0.000e+00, 2.997e+03, (ReplayBuffer pid=527599) 0.000e+00], (ReplayBuffer pid=527599) ..., (ReplayBuffer pid=527599) [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 4.105e+03, (ReplayBuffer pid=527599) 0.000e+00], (ReplayBuffer pid=527599) [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 3.510e+03, (ReplayBuffer pid=527599) 0.000e+00], (ReplayBuffer pid=527599) [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 2.358e+03, (ReplayBuffer pid=527599) 0.000e+00]])] (ReplayBuffer pid=527599) (ReplayBuffer pid=527599) [[1.000e+00 1.000e+00 1.000e+00 ... 0.000e+00 1.829e+03 0.000e+00] (ReplayBuffer pid=527599) [1.000e+00 1.000e+00 1.000e+00 ... 0.000e+00 1.837e+03 0.000e+00] (ReplayBuffer pid=527599) [1.000e+00 1.000e+00 1.000e+00 ... 0.000e+00 2.997e+03 0.000e+00] (ReplayBuffer pid=527599) ... (ReplayBuffer pid=527599) [0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 4.105e+03 0.000e+00] (ReplayBuffer pid=527599) [0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 3.510e+03 0.000e+00] (ReplayBuffer pid=527599) [0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 2.358e+03 0.000e+00]] - add function (ReplayBuffer pid=527599) type(experience)= (ReplayBuffer pid=527599) [/code] Обратите внимание, это только один объект. Мы также можем видеть, что функция, по сути, была вызвана дважды: один раз для ссылки на объект, а затем еще раз для фактического списка (содержащего массив), который затем завершается с ошибкой. [code] data = ray.get(experience) [/code] Кто-нибудь знает почему?