分布式Dask无法使用numpy.array和sparse.matrix反序列化

分布式Dask无法使用numpy.array和sparse.matrix反序列化,dask,dask-distributed,Dask,Dask Distributed,我在图形中的不同任务上多次遇到以下错误(执行之间的更改)。可能是当某些任务返回numpy.arrays和scipy.sparse矩阵时 distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x04' Traceback (most recent call last): File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/pic

我在图形中的不同任务上多次遇到以下错误(执行之间的更改)。可能是当某些任务返回
numpy.array
s和
scipy.sparse
矩阵时

distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x04'
Traceback (most recent call last):
  File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/pickle.py", line 59, in loads
    return pickle.loads(x)
EOFError: Ran out of input
distributed.protocol.core - CRITICAL - Failed to deserialize
Traceback (most recent call last):
  File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/core.py", line 119, in loads
    value = _deserialize(head, fs)
  File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/serialize.py", line 158, in deserialize
    return f(header, frames)
  File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/serialize.py", line 20, in <lambda>
    deserializers = {None: lambda header, frames: pickle.loads(b''.join(frames))}
  File "/home/user/venv/lib/python3.5/site-packages/distributed/protocol/pickle.py", line 59, in loads
    return pickle.loads(x)
EOFError: Ran out of input
distributed.comm.utils - ERROR - truncated data stream (485 bytes): [b'', b"\x92\x83\xa6report\xc2\xa4keys\x91\xd9P('_avro_body-read-block-bag-from-delayed-67c7a9690149de9743ed970f873fa1d6', 283)\xa2op\xabdelete-data\x86\xa8priority\x93\x00\x01\xcc\xce\xa6nbytes\x81\xd9:('bag-from-delayed-67c7a9690149de9743ed970f873fa1d6', 283)\xce\x00 \x86p\xa8duration\xcb@\x18\x16m\x88xX\x00\xa7who_has\x81\xd9:('bag-from-delayed-67c7a9690149de9743ed970f873fa1d6', 283)\x91\xb5tcp://127.0.0.1:38623\xa2op\xaccompute-task\xa3key\xd9K('pluck-map-process_features_sparse-d94d304dc59efb780c39bfb0ca4df37f', 283)", b'\x83\xabbytestrings\x90\xa7headers\x81\x92\x01\xa4task\x83\xabcompression\x91\xc0\xa5count\x01\xa7lengths\x91\x02\xa4keys\x91\x92\x01\xa4task', b'\x80\x04']
distributed.worker - INFO - Connection to scheduler broken. Reregistering
distributed.worker - INFO - -------------------------------------------------
distributed.worker - INFO -         Registered to:       tcp://127.0.0.1:8786
distributed.worker - INFO - -------------------------------------------------
distributed.protocol.pickle-INFO-未能反序列化b'\x80\x04'
回溯(最近一次呼叫最后一次):
文件“/home/user/venv/lib/python3.5/site packages/distributed/protocol/pickle.py”,第59行,加载
返回酸洗。装载量(x)
EOFError:输入不足
distributed.protocol.core-严重-未能反序列化
回溯(最近一次呼叫最后一次):
文件“/home/user/venv/lib/python3.5/site packages/distributed/protocol/core.py”,第119行,加载
值=_反序列化(head,fs)
文件“/home/user/venv/lib/python3.5/site packages/distributed/protocol/serialize.py”,第158行,反序列化
返回f(标题、帧)
文件“/home/user/venv/lib/python3.5/site packages/distributed/protocol/serialize.py”,第20行,在
反序列化程序={None:lambda头,帧:pickle.loads(b.)。加入(帧))}
文件“/home/user/venv/lib/python3.5/site packages/distributed/protocol/pickle.py”,第59行,加载
返回酸洗。装载量(x)
EOFError:输入不足
distributed.comm.utils-错误-截断的数据流(485字节):[b'',b'\x92\x83\xa6report\xc2\xa4keys\x91\xd9P(''u avro_body-read-block-bag-from-delayed-67c7a9690149de9743ed970f873fa1d6',283)\xa2op\xabdelete-data\x86\x86\Xa8优先级\x93\x00\x01\xcc\xce\xa6nbytes\x81\xd9:('bag-from-delayed-67C970ED970F87314FA1D283)\xce\x00\x86p\xa8duration\xcb@\x18\x16m\x88xX\x00\xa7谁拥有\x81\xd9:('bag-from-delayed-67c7a9690149de9743ed970f873fa1d6',283)\x91\xb5tcp://127.0.0.1:38623\xa2op\xaccompute task\xa3key\xd9K('PULLK-map-process_特征_sparse-d94d304dc59efb780c39bfb0ca4df37f',283)”,b'\x83\xabbytestings\x90\xa7headers\x81\x92\x01\xa4task\x83\xabcompression\x91\x0\xa5count\x01\xa7length\x91\x02\xa4keys\x91\x92\x01\xa4task',b'\x80\x04']
distributed.worker-信息-与计划程序的连接已断开。重新登记
distributed.worker-信息--------------------------------------------------
distributed.worker-信息-注册到:tcp://127.0.0.1:8786
distributed.worker-信息--------------------------------------------------
这始终是一个
eoferor:输入不足
错误,缓冲区大小不同(有时小到几个字节),整个集群在一台机器上运行

理想情况下,我希望找到解决实际问题的方法,但也希望能找到调查问题和了解可能出错的方法。现在我有点困了,不知道如何解决手头的问题


运行
client.get\u versions(check=True)
完成时没有错误,并且在更新所有包(即numpy、scipy、dask、dask distributed、cloudpickle)后,这种情况仍然存在。

最近修补了
cloudpickle
项目(dask使用的项目),以修复可能导致此错误的问题

本评论中解释了一些细节:

…更多详细信息可在
cloudpickle
github repo中的相关问题/PRs中找到


FWIW,我今天遇到了这个错误(包括
b'\x80\x04'
部分),将
cloudpickle
更新到
0.8.0
似乎已经解决了这个问题。

我不知道。我建议试着写一份遗嘱就行了。我应该打开一个github问题还是用最少的复制来编辑这个问题?此外,将
,b'\x80\x04']
作为数据流列表中的第三项是否合理?随您的喜好而定。我没有你的
b'\x80\x04']
问题的答案。ray项目的一期[1]中也提到了
b'\x80\x04'
标题。他们追踪到了
cloudpickle
中的一个bug,因此升级
cloudpickle
可能会解决这个问题。[1]: