Я пытаюсь воспроизвести учебник PySyft по асинхронному FedML на MNIST с моими собственными данными. Хотя у меня это сработало, теперь я сталкиваюсь с проблемами, когда я не могу обучать и размещать данные на двух разных устройствах. Когда я запускаю руководство на одном устройстве, все работает без сбоев. Однако на двух устройствах я получаю следующее значение ValueError из-за несоответствия размеров кортежей:
ValueError Traceback (most recent call last)
<ipython-input-24-40944cb95694> in <module>
5 logger.info("Training round %s/%s", curr_round, args.training_rounds)
6
----> 7 results = await asyncio.gather(
8 *[
9 rwc.fit_model_on_worker(
~/Documents/async_learning/run_websocket_client.py in fit_model_on_worker(worker, traced_model, batch_size, curr_round, max_nr_batches, lr)
368 )
369 train_config.send(worker)
--> 370 loss = await worker.async_fit(dataset_key="bank", return_ids=[0])
371 model = train_config.model_ptr.get().obj
372 return worker.id, model, loss
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/workers/websocket_client.py in async_fit(self, dataset_key, device, return_ids)
173
174 # Return the deserialized response.
--> 175 return sy.serde.deserialize(response)
176
177 def fit(self, dataset_key: str, **kwargs):
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/serde/serde.py in deserialize(binary, worker, strategy)
67 object: the deserialized form of the binary input.
68 """
---> 69 return strategy(binary, worker)
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/serde/msgpack/serde.py in deserialize(binary, worker)
380
381 simple_objects = _deserialize_msgpack_binary(binary, worker)
--> 382 return _deserialize_msgpack_simple(simple_objects, worker)
383
384
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/serde/msgpack/serde.py in _deserialize_msgpack_simple(simple_objects, worker)
371 # as msgpack's inability to serialize torch tensors or ... or
372 # python slice objects
--> 373 return _detail(worker, simple_objects)
374
375
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/serde/msgpack/serde.py in _detail(worker, obj, **kwargs)
497 """
498 if type(obj) in (list, tuple):
--> 499 val = detailers[obj[0]](worker, obj[1], **kwargs)
500 return _detail_field(obj[0], val)
501 else:
/opt/anaconda3/envs/fedML/lib/python3.8/site-packages/syft/serde/msgpack/torch_serde.py in _detail_torch_tensor(worker, tensor_tuple)
180 """
181
--> 182 (
183 tensor_id,
184 tensor_bin,
ValueError: not enough values to unpack (expected 9, got 7)
Есть идеи, почему это может быть так? Я считаю, что это связано со следующей строкой в run_websocket_client.py
: loss = await worker.async_fit(dataset_key="bank", return_ids=[0])