Connection between 32 and 64 bits platforms

I have a Dask cluster run on python 3.9 32bit platform which I try to connect from python 3.9 64 bit on another machine and got the following error:

...
numpy.core._exceptions._ArrayMemoryError: Unable to allocate 3.62 EiB for an array with shape (4179340454199820288,) and data type uint8

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/client.py", line 942, in __init__
    self.start(timeout=timeout)
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/client.py", line 1100, in start
    sync(self.loop, self._start, **kwargs)
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/utils.py", line 385, in sync
    raise exc.with_traceback(tb)
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/utils.py", line 358, in f
    result = yield future
  File "/opt/foa_python_venv/lib/python3.9/site-packages/tornado/gen.py", line 762, in run
    value = future.result()
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/client.py", line 1192, in _start
    await self._ensure_connected(timeout=timeout)
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/client.py", line 1255, in _ensure_connected
    comm = await connect(
  File "/opt/foa_python_venv/lib/python3.9/site-packages/distributed/comm/core.py", line 331, in connect
    raise OSError(
OSError: Timed out during handshake while connecting to tcp://192.168.1.14:8786 after 30 s

Is there any way to connect both platforms?
TIA

My exploration showed that the issue is not bitness of the connecting platforms but byteorder - the client has little byteorder, whereas the scheduler has big one. I haven’t found any options for client or scheduler influencing endianess so I think it’s not possible. Anyway I don’t think I’m not the only one who ran into such a problem, so are there any plans to support the work of the distributed with different byteorders?

@bulklodd Welcome to Discourse!

The error message checks out, 32-bit machines have a maximum of ~4GB RAM, and it looks like the numpy array is hitting this memory limit. Edit: See Guido’s message below!

I looked at this with @ian, and we’d be curious to see if even accessing the cluster from a 32-bit client would actually work?

Is there any way to connect both platforms?

are there any plans to support the work of the distributed with different byteorders?

We don’t think so, because it’s a very niche scenario.

@crusaderky do you have thoughts on this?

32-bit machines can allocate either 2GiB or 3GiB of memory per process, depending on kernel configuration.

The error message, however, complains about being unable to allocate 3.6 EiB (exabytes), or a bit less than FOUR MILLION TERABYTES - so something else is going on.
I would check for a “fat finger” error to begin with.

In theory, a 32 bit client connecting to a 64 bit server could work.
In practice, many numpy data types (like int) default to 32 or 64 bits respectively on the two architectures, so I expect many bugs. There are no tests whatsoever on such a mixed configuration, and writing them would not be straightforward either.

1 Like