Through the C++ foundations, PyArrow already has support for representing non-CPU data (e.g. you can have a pyarrow.Table object backed by buffers in GPU memory), but this is not yet exposed very well in the Python bindings. Specifically, over the last years, several features were added on the C++ side (the Device and MemoryManager classes, more recently a set of Copy functions that take a target memory manager) that don't yet have equivalent bindings in PyArrow.
Through the C++ foundations, PyArrow already has support for representing non-CPU data (e.g. you can have a pyarrow.Table object backed by buffers in GPU memory), but this is not yet exposed very well in the Python bindings. Specifically, over the last years, several features were added on the C++ side (the
DeviceandMemoryManagerclasses, more recently a set of Copy functions that take a target memory manager) that don't yet have equivalent bindings in PyArrow.DeviceAllocationType,DeviceandMemoryManagerand expose as attributes on theBufferclass: GH-41126: [Python] Basic bindings for Device and MemoryManager classes #41685pyarrow.cudaAPIs?): GH-41126: [Python] Test Buffer device/device_type access on CUDA #42221CopyToon RecordBatch and Array classes #42222