Skip to content

Conversation

@Andy-Jost
Copy link
Contributor

@Andy-Jost Andy-Jost commented Feb 7, 2026

Summary

Use opt-in package-data approach to control what goes into wheels, significantly reducing wheel size:

  • Set include-package-data = false to prevent MANIFEST.in auto-inclusion
  • Explicitly include only .pxd files (for downstream cimport), .pxi files (included by .pxd files), and required headers

cuda_core wheel size reduced from ~5 MB to ~1.6 MB (68% reduction)

Closes #766

Changes

cuda_core:

  • MANIFEST.in: Added _include headers for sdist builds
  • pyproject.toml: Opt-in package-data for .pxd and headers only

cuda_bindings:

  • MANIFEST.in: Added template files (.pyx.in, .pxd.in, .pxi.in) and .h for sdist
  • pyproject.toml: Opt-in package-data for .pxd, .pxi (needed because .pxd files use include directives), and headers

Wheel contents after change

Included:

  • .so/.pyd (compiled extensions)
  • .py (Python source)
  • .pxd (for downstream cimport)
  • .pxi (cuda_bindings only - required by .pxd files that use include directives)
  • Headers referenced by .pxd files

Excluded:

  • .pyx (Cython source)
  • .pxi (cuda_core only - these are included from .pyx files, not .pxd)
  • .cpp (generated C++ files)
  • Template files (.pyx.in, .pxd.in, .pxi.in)

Test plan

  • CI passes for both cuda_core and cuda_bindings
  • Verify wheel contents on Linux and Windows
  • Test downstream cimport still works (Cython test compilation validates this)

Made with Cursor

@Andy-Jost Andy-Jost added cuda.bindings Everything related to the cuda.bindings module cuda.core Everything related to the cuda.core module labels Feb 7, 2026
@Andy-Jost Andy-Jost self-assigned this Feb 7, 2026
@copy-pr-bot
Copy link
Contributor

copy-pr-bot bot commented Feb 7, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@Andy-Jost
Copy link
Contributor Author

/ok to test 17c0179

@Andy-Jost Andy-Jost force-pushed the wheel-size-reduction branch from 17c0179 to 2881d2b Compare February 9, 2026 20:18
@Andy-Jost
Copy link
Contributor Author

/ok to test 2881d2b

@github-actions

This comment has been minimized.

@Andy-Jost
Copy link
Contributor Author

cuda_core wheel contents (cp311-linux-x86_64)

.
├── cuda
│   └── core
│       ├── __init__.py
│       ├── _cpp
│       │   └── resource_handles.hpp
│       ├── _include
│       │   ├── dlpack.h
│       │   ├── layout.hpp
│       │   └── utility.hpp
│       ├── _resource_handles.cpython-311-x86_64-linux-gnu.so
│       ├── _resource_handles.pxd
│       ├── _version.py
│       ├── cu12
│       │   ├── __init__.pxd
│       │   ├── __init__.py
│       │   ├── _context.cpython-311-x86_64-linux-gnu.so
│       │   ├── _context.pxd
│       │   ├── _cpp
│       │   │   └── resource_handles.hpp
│       │   ├── _device.cpython-311-x86_64-linux-gnu.so
│       │   ├── _dlpack.cpython-311-x86_64-linux-gnu.so
│       │   ├── _dlpack.pxd
│       │   ├── _event.cpython-311-x86_64-linux-gnu.so
│       │   ├── _event.pxd
│       │   ├── _graph.py
│       │   ├── _include
│       │   │   ├── dlpack.h
│       │   │   ├── layout.hpp
│       │   │   └── utility.hpp
│       │   ├── _kernel_arg_handler.cpython-311-x86_64-linux-gnu.so
│       │   ├── _kernel_arg_handler.pxd
│       │   ├── _launch_config.cpython-311-x86_64-linux-gnu.so
│       │   ├── _launch_config.pxd
│       │   ├── _launcher.cpython-311-x86_64-linux-gnu.so
│       │   ├── _layout.cpython-311-x86_64-linux-gnu.so
│       │   ├── _layout.pxd
│       │   ├── _linker.py
│       │   ├── _memory
│       │   │   ├── __init__.pxd
│       │   │   ├── __init__.py
│       │   │   ├── _buffer.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _buffer.pxd
│       │   │   ├── _device_memory_resource.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _device_memory_resource.pxd
│       │   │   ├── _graph_memory_resource.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _graph_memory_resource.pxd
│       │   │   ├── _ipc.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _ipc.pxd
│       │   │   ├── _legacy.py
│       │   │   ├── _managed_memory_resource.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _managed_memory_resource.pxd
│       │   │   ├── _memory_pool.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _memory_pool.pxd
│       │   │   ├── _pinned_memory_resource.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _pinned_memory_resource.pxd
│       │   │   └── _virtual_memory_resource.py
│       │   ├── _memoryview.cpython-311-x86_64-linux-gnu.so
│       │   ├── _module.cpython-311-x86_64-linux-gnu.so
│       │   ├── _module.pxd
│       │   ├── _program.py
│       │   ├── _resource_handles.cpython-311-x86_64-linux-gnu.so
│       │   ├── _resource_handles.pxd
│       │   ├── _stream.cpython-311-x86_64-linux-gnu.so
│       │   ├── _stream.pxd
│       │   ├── _utils
│       │   │   ├── __init__.pxd
│       │   │   ├── __init__.py
│       │   │   ├── clear_error_support.py
│       │   │   ├── cuda_utils.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── cuda_utils.pxd
│       │   │   ├── driver_cu_result_explanations.py
│       │   │   └── runtime_cuda_error_explanations.py
│       │   ├── _version.py
│       │   ├── experimental
│       │   │   ├── __init__.pxd
│       │   │   └── __init__.py
│       │   ├── system
│       │   │   ├── __init__.py
│       │   │   ├── _device.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _nvml_context.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _nvml_context.pxd
│       │   │   ├── _system.cpython-311-x86_64-linux-gnu.so
│       │   │   ├── _system_events.cpython-311-x86_64-linux-gnu.so
│       │   │   └── exceptions.py
│       │   └── utils.py
│       └── cu13
│           ├── __init__.pxd
│           ├── __init__.py
│           ├── _context.cpython-311-x86_64-linux-gnu.so
│           ├── _context.pxd
│           ├── _cpp
│           │   └── resource_handles.hpp
│           ├── _device.cpython-311-x86_64-linux-gnu.so
│           ├── _dlpack.cpython-311-x86_64-linux-gnu.so
│           ├── _dlpack.pxd
│           ├── _event.cpython-311-x86_64-linux-gnu.so
│           ├── _event.pxd
│           ├── _graph.py
│           ├── _include
│           │   ├── dlpack.h
│           │   ├── layout.hpp
│           │   └── utility.hpp
│           ├── _kernel_arg_handler.cpython-311-x86_64-linux-gnu.so
│           ├── _kernel_arg_handler.pxd
│           ├── _launch_config.cpython-311-x86_64-linux-gnu.so
│           ├── _launch_config.pxd
│           ├── _launcher.cpython-311-x86_64-linux-gnu.so
│           ├── _layout.cpython-311-x86_64-linux-gnu.so
│           ├── _layout.pxd
│           ├── _linker.py
│           ├── _memory
│           │   ├── __init__.pxd
│           │   ├── __init__.py
│           │   ├── _buffer.cpython-311-x86_64-linux-gnu.so
│           │   ├── _buffer.pxd
│           │   ├── _device_memory_resource.cpython-311-x86_64-linux-gnu.so
│           │   ├── _device_memory_resource.pxd
│           │   ├── _graph_memory_resource.cpython-311-x86_64-linux-gnu.so
│           │   ├── _graph_memory_resource.pxd
│           │   ├── _ipc.cpython-311-x86_64-linux-gnu.so
│           │   ├── _ipc.pxd
│           │   ├── _legacy.py
│           │   ├── _managed_memory_resource.cpython-311-x86_64-linux-gnu.so
│           │   ├── _managed_memory_resource.pxd
│           │   ├── _memory_pool.cpython-311-x86_64-linux-gnu.so
│           │   ├── _memory_pool.pxd
│           │   ├── _pinned_memory_resource.cpython-311-x86_64-linux-gnu.so
│           │   ├── _pinned_memory_resource.pxd
│           │   └── _virtual_memory_resource.py
│           ├── _memoryview.cpython-311-x86_64-linux-gnu.so
│           ├── _module.cpython-311-x86_64-linux-gnu.so
│           ├── _module.pxd
│           ├── _program.py
│           ├── _resource_handles.cpython-311-x86_64-linux-gnu.so
│           ├── _resource_handles.pxd
│           ├── _stream.cpython-311-x86_64-linux-gnu.so
│           ├── _stream.pxd
│           ├── _utils
│           │   ├── __init__.pxd
│           │   ├── __init__.py
│           │   ├── clear_error_support.py
│           │   ├── cuda_utils.cpython-311-x86_64-linux-gnu.so
│           │   ├── cuda_utils.pxd
│           │   ├── driver_cu_result_explanations.py
│           │   └── runtime_cuda_error_explanations.py
│           ├── _version.py
│           ├── experimental
│           │   ├── __init__.pxd
│           │   └── __init__.py
│           ├── system
│           │   ├── __init__.py
│           │   ├── _device.cpython-311-x86_64-linux-gnu.so
│           │   ├── _nvml_context.cpython-311-x86_64-linux-gnu.so
│           │   ├── _nvml_context.pxd
│           │   ├── _system.cpython-311-x86_64-linux-gnu.so
│           │   ├── _system_events.cpython-311-x86_64-linux-gnu.so
│           │   └── exceptions.py
│           └── utils.py
└── cuda_core-0.5.1.dev96+g2881d2b80.dist-info
    ├── METADATA
    ├── RECORD
    ├── WHEEL
    ├── licenses
    │   └── LICENSE
    └── top_level.txt

21 directories, 145 files

@Andy-Jost
Copy link
Contributor Author

cuda_bindings wheel contents (cp311-linux-x86_64)

.
├── cuda
│   └── bindings
│       ├── __init__.pxd
│       ├── __init__.py
│       ├── _bindings
│       │   ├── __init__.py
│       │   ├── cydriver.cpython-311-x86_64-linux-gnu.so
│       │   ├── cydriver.pxd
│       │   ├── cynvrtc.cpython-311-x86_64-linux-gnu.so
│       │   ├── cynvrtc.pxd
│       │   ├── cyruntime.cpython-311-x86_64-linux-gnu.so
│       │   ├── cyruntime.pxd
│       │   ├── cyruntime_ptds.cpython-311-x86_64-linux-gnu.so
│       │   ├── cyruntime_ptds.pxd
│       │   ├── loader.h
│       │   └── loader.pxd
│       ├── _internal
│       │   ├── __init__.py
│       │   ├── cufile.cpython-311-x86_64-linux-gnu.so
│       │   ├── cufile.pxd
│       │   ├── nvfatbin.cpython-311-x86_64-linux-gnu.so
│       │   ├── nvfatbin.pxd
│       │   ├── nvjitlink.cpython-311-x86_64-linux-gnu.so
│       │   ├── nvjitlink.pxd
│       │   ├── nvml.cpython-311-x86_64-linux-gnu.so
│       │   ├── nvml.pxd
│       │   ├── nvvm.cpython-311-x86_64-linux-gnu.so
│       │   ├── nvvm.pxd
│       │   ├── utils.cpython-311-x86_64-linux-gnu.so
│       │   └── utils.pxd
│       ├── _lib
│       │   ├── __init__.py
│       │   ├── cyruntime
│       │   │   ├── cyruntime.pxd
│       │   │   └── cyruntime.pxi
│       │   ├── dlfcn.pxd
│       │   ├── param_packer.h
│       │   ├── param_packer.pxd
│       │   ├── utils.pxd
│       │   ├── utils.pxi
│       │   └── windll.pxd
│       ├── _test_helpers
│       │   ├── __init__.py
│       │   └── arch_check.py
│       ├── _version.py
│       ├── cufile.cpython-311-x86_64-linux-gnu.so
│       ├── cufile.pxd
│       ├── cycufile.cpython-311-x86_64-linux-gnu.so
│       ├── cycufile.pxd
│       ├── cydriver.cpython-311-x86_64-linux-gnu.so
│       ├── cydriver.pxd
│       ├── cynvfatbin.cpython-311-x86_64-linux-gnu.so
│       ├── cynvfatbin.pxd
│       ├── cynvjitlink.cpython-311-x86_64-linux-gnu.so
│       ├── cynvjitlink.pxd
│       ├── cynvml.cpython-311-x86_64-linux-gnu.so
│       ├── cynvml.pxd
│       ├── cynvrtc.cpython-311-x86_64-linux-gnu.so
│       ├── cynvrtc.pxd
│       ├── cynvvm.cpython-311-x86_64-linux-gnu.so
│       ├── cynvvm.pxd
│       ├── cyruntime.cpython-311-x86_64-linux-gnu.so
│       ├── cyruntime.pxd
│       ├── cyruntime_functions.pxi
│       ├── cyruntime_types.pxi
│       ├── driver.cpython-311-x86_64-linux-gnu.so
│       ├── driver.pxd
│       ├── nvfatbin.cpython-311-x86_64-linux-gnu.so
│       ├── nvfatbin.pxd
│       ├── nvjitlink.cpython-311-x86_64-linux-gnu.so
│       ├── nvjitlink.pxd
│       ├── nvml.cpython-311-x86_64-linux-gnu.so
│       ├── nvml.pxd
│       ├── nvrtc.cpython-311-x86_64-linux-gnu.so
│       ├── nvrtc.pxd
│       ├── nvvm.cpython-311-x86_64-linux-gnu.so
│       ├── nvvm.pxd
│       ├── runtime.cpython-311-x86_64-linux-gnu.so
│       ├── runtime.pxd
│       └── utils
│           ├── __init__.py
│           ├── _ptx_utils.py
│           └── _version_check.py
└── cuda_bindings-13.1.2.dev129+g2881d2b80.dist-info
    ├── METADATA
    ├── RECORD
    ├── WHEEL
    ├── licenses
    │   └── LICENSE
    └── top_level.txt

11 directories, 80 files

@Andy-Jost Andy-Jost requested review from leofang and mdboom February 9, 2026 21:30
@Andy-Jost Andy-Jost marked this pull request as ready for review February 9, 2026 21:30
@leofang leofang added this to the cuda.core v0.6.0 milestone Feb 10, 2026
@leofang leofang added P0 High priority - Must do! packaging Anything related to wheels or Conda packages labels Feb 10, 2026
Andy-Jost and others added 2 commits February 10, 2026 12:19
Use opt-in package-data approach to control what goes into wheels:
- Set include-package-data = false to prevent MANIFEST.in auto-inclusion
- Explicitly include only .pxd files (for downstream cimport) and headers

cuda_core wheel size reduced from ~5 MB to ~1.6 MB (68% reduction).

Also fix MANIFEST.in for both packages to include all files needed
for sdist builds (headers, template files).

Co-authored-by: Cursor <cursoragent@cursor.com>
@Andy-Jost Andy-Jost force-pushed the wheel-size-reduction branch from 2881d2b to 0645cce Compare February 10, 2026 20:19
@Andy-Jost
Copy link
Contributor Author

/ok to test 0645cce

@Andy-Jost
Copy link
Contributor Author

/ok to test ec8ef83

@Andy-Jost Andy-Jost merged commit 0921933 into NVIDIA:main Feb 11, 2026
86 checks passed
@Andy-Jost Andy-Jost deleted the wheel-size-reduction branch February 11, 2026 17:29
@github-actions

This comment has been minimized.

1 similar comment
@github-actions
Copy link

Doc Preview CI
Preview removed because the pull request was closed or merged.

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

Labels

cuda.bindings Everything related to the cuda.bindings module cuda.core Everything related to the cuda.core module P0 High priority - Must do! packaging Anything related to wheels or Conda packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG]: cython files packaged as part of the wheel

2 participants