Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[BUG] Nullable Array columns fail in partitioned DataFrameScan #24130

Description

@0guban0v

Describe the bug

Direct pl.Array pass-through works with in-memory executor after #23773, but nullable Array fails when in-memory DataFrame is split into multiple streaming partitions.

With currently supported Polars 1.42.1, slicing Array containing outer nulls produces Arrow C layout that double-counts slice offset, parent retains nonzero offset while child is already sliced. libcudf correctly rejects this layout.

Polars fixed underlying export issue in 28602, first included in Polars 1.43.2., but cudf-polars currently supports polars>=1.35,<1.43.

Steps/Code to reproduce bug

import polars as pl

print("Polars:", pl.__version__)

query = pl.LazyFrame(
    {
        "embedding": pl.Series(
            [
                [0.0, 1.0],
                [2.0, None],
                None,  # Outer null in the second partition.
                [3.0, 4.0],
            ],
            dtype=pl.Array(pl.Float32, 2),
        )
    }
)

engine = pl.GPUEngine(
    executor="streaming",
    raise_on_fail=True,
    executor_options={
        "max_rows_per_partition": 2,
        "fallback_mode": "raise",
        "dynamic_planning": None,
    },
)

print("CPU result:")
print(query.collect())

print("Streaming GPU result:")
print(query.collect(engine=engine))

Outer null is in the nonzero-offset second partition. Single partition succeeds.

Output

The second partition fails while being converted from Polars through Arrow:

ValueError: CUDF failure at: .../from_arrow_host.cu:
fixed-size-list child is shorter than its parent layout requires

Expected behavior

Query completes on streaming GPU executor, preserves values and nulls, and returns Array(Float32, shape=(2,)).

Environment details

Click here to see environment details
 **git***
 commit 0e44ceba6365ba04a4fb47ef2de2ad9d771737bc (grafted, HEAD -> fix/cudf-polars-nullable-array-streaming, origin/fix/cudf-polars-nullable-array-streaming)
 Author: 0guban0v <[email protected]>
 Date:   Thu Sep 10 23:35:33 2026 -0700
 
 Fix nullable Array streaming scans
 **git submodules***
 
 ***OS Information***
 DISTRIB_ID=Ubuntu
 DISTRIB_RELEASE=22.04
 DISTRIB_CODENAME=jammy
 DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
 PRETTY_NAME="Ubuntu 22.04.5 LTS"
 NAME="Ubuntu"
 VERSION_ID="22.04"
 VERSION="22.04.5 LTS (Jammy Jellyfish)"
 VERSION_CODENAME=jammy
 ID=ubuntu
 ID_LIKE=debian
 HOME_URL="https://www.ubuntu.com/"
 SUPPORT_URL="https://help.ubuntu.com/"
 BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
 PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
 UBUNTU_CODENAME=jammy
 Linux instance-5ndnjfzx-main 6.17.0-35-generic #35~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 19:30:42 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
 
 ***GPU Information***
 Fri Sep 11 07:00:47 2026
 +-----------------------------------------------------------------------------------------+
 | NVIDIA-SMI 610.43.02              KMD Version: 610.43.02     CUDA UMD Version: 13.3     |
 +-----------------------------------------+------------------------+----------------------+
 | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
 | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
 |                                         |                        |               MIG M. |
 |=========================================+========================+======================|
 |   0  NVIDIA RTX A6000               Off |   00000000:07:00.0 Off |                  Off |
 | 30%   25C    P8             25W /  300W |       1MiB /  49140MiB |      0%      Default |
 |                                         |                        |                  N/A |
 +-----------------------------------------+------------------------+----------------------+
 
 +-----------------------------------------------------------------------------------------+
 | Processes:                                                                              |
 |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
 |        ID   ID                                                               Usage      |
 |=========================================================================================|
 |  No running processes found                                                             |
 +-----------------------------------------------------------------------------------------+
 
 ***CPU***
 Architecture:                            x86_64
 CPU op-mode(s):                          32-bit, 64-bit
 Address sizes:                           46 bits physical, 48 bits virtual
 Byte Order:                              Little Endian
 CPU(s):                                  64
 On-line CPU(s) list:                     0-5
 Off-line CPU(s) list:                    6-63
 Vendor ID:                               GenuineIntel
 Model name:                              Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
 CPU family:                              6
 Model:                                   79
 Thread(s) per core:                      2
 Core(s) per socket:                      16
 Socket(s):                               2
 Stepping:                                1
 CPU max MHz:                             3000.0000
 CPU min MHz:                             1200.0000
 BogoMIPS:                                4199.64
 Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 pti intel_ppin ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts vnmi md_clear flush_l1d
 Virtualization:                          VT-x
 L1d cache:                               1 MiB (32 instances)
 L1i cache:                               1 MiB (32 instances)
 L2 cache:                                8 MiB (32 instances)
 L3 cache:                                80 MiB (2 instances)
 NUMA node(s):                            2
 NUMA node0 CPU(s):                       0-15,32-47
 NUMA node1 CPU(s):                       16-31,48-63
 Vulnerability Gather data sampling:      Not affected
 Vulnerability Ghostwrite:                Not affected
 Vulnerability Indirect target selection: Not affected
 Vulnerability Itlb multihit:             KVM: Mitigation: Split huge pages
 Vulnerability L1tf:                      Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
 Vulnerability Mds:                       Mitigation; Clear CPU buffers; SMT vulnerable
 Vulnerability Meltdown:                  Mitigation; PTI
 Vulnerability Mmio stale data:           Mitigation; Clear CPU buffers; SMT vulnerable
 Vulnerability Old microcode:             Not affected
 Vulnerability Reg file data sampling:    Not affected
 Vulnerability Retbleed:                  Not affected
 Vulnerability Spec rstack overflow:      Not affected
 Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
 Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
 Vulnerability Spectre v2:                Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP conditional; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
 Vulnerability Srbds:                     Not affected
 Vulnerability Tsa:                       Not affected
 Vulnerability Tsx async abort:           Mitigation; Clear CPU buffers; SMT vulnerable
 Vulnerability Vmscape:                   Mitigation; IBPB before exit to userspace
 
 ***CMake***
 
 ***g++***
 /usr/bin/g++
 g++ (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
 Copyright (C) 2021 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 
 ***nvcc***
 
 ***Python***
 /home/ubuntu/cudf_pr_cu12/bin/python
 Python 3.12.13
 
 ***Environment Variables***
 PATH                            : /home/ubuntu/cudf_pr_cu12/bin:/home/ubuntu/.local/bin:/home/ubuntu/.vscodium-server/bin/4c0b0c6cc561d2d3636d1ec250935431876ce4dc/bin/remote-cli:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
 LD_LIBRARY_PATH                 :
 NUMBAPRO_NVVM                   :
 NUMBAPRO_LIBDEVICE              :
 CONDA_PREFIX                    :
 PYTHON_PATH                     :
 
 conda not found
 ***pip packages***
 /home/ubuntu/cudf_pr_cu12/bin/pip
 Package                  Version
 ------------------------ ---------------------------
 cuda-bindings            12.9.7
 cuda-core                1.2.0
 cuda-pathfinder          1.8.1
 cuda-toolkit             12.9.2.0
 cudf-polars-cu12         26.12.0a54.post260911053105
 cudf-streaming-cu12      26.12.0a54.post260911053105
 cupy-cuda12x             14.2.0
 kvikio-cu12              26.12.0a4.post260911050846
 libcudf-cu12             26.12.0a54.post260911053105
 libcudf-streaming-cu12   26.12.0a54.post260911053105
 libkvikio-cu12           26.12.0a4.post260911050846
 librapidsmpf-cu12        26.12.0a8.post260910164721
 librmm-cu12              26.12.0a3.post260911050837
 libucx-cu12              1.21.0
 libucxx-cu12             0.53.0a6.post260911053052
 numpy                    2.5.3
 nvidia-cublas-cu12       12.9.2.10
 nvidia-cuda-nvrtc-cu12   12.9.86
 nvidia-cuda-runtime-cu12 12.9.79
 nvidia-cufft-cu12        11.4.1.4
 nvidia-cufile-cu12       1.14.1.1
 nvidia-curand-cu12       10.3.10.19
 nvidia-cusolver-cu12     11.7.5.82
 nvidia-cusparse-cu12     12.5.10.65
 nvidia-libnvcomp-cu12    5.3.0.16
 nvidia-ml-py             13.610.43
 nvidia-nvjitlink-cu12    12.9.86
 nvtx                     0.2.16
 packaging                26.3
 pip                      26.2.1
 polars                   1.42.1
 polars-runtime-32        1.42.1
 pyarrow                  25.0.1
 pylibcudf-cu12           26.12.0a54.post260911053105
 rapids-logger            0.3.0
 rapidsmpf-cu12           26.12.0a8.post260910164721
 rmm-cu12                 26.12.0a3.post260911050837
 typing_extensions        4.16.0
 ucxx-cu12                0.53.0a6.post260911053052

Additional context

Source checkout shown by print_env.sh was used only to run env-report script. The failure was reproduced with installed cudf-polars-cu12 wheel listed above.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions