Repository navigation
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
Contributor
Author
|
/ok to test 1764999 |
Contributor
Author
|
/ok to test ccb8065 |
Contributor
Author
|
/ok to test ba8515b |
Contributor
Author
|
/ok to test 7baf366 |
Contributor
Author
|
/ok to test e392838 |
Contributor
Author
|
/ok to test d7c7601 |
Contributor
Author
|
/ok to test 883c4f6 |
Contributor
Author
|
/ok to test dac3b03 |
Contributor
Author
|
/ok to test 77441db |
Contributor
Author
|
/ok to test 3f56bab |
Contributor
Author
|
/ok to test 24c9e7e |
1 similar comment
Contributor
Author
|
/ok to test 24c9e7e |
Contributor
Author
|
/ok to test 536941f |
… and nvCOMP pinned pool
Contributor
Author
|
/ok to test c55ab88 |
Contributor
Author
|
/ok to test ed82f19 |
Contributor
Author
|
/ok to test b02e3cf |
Contributor
Author
|
/ok to test aa7fad7 |
Contributor
Author
|
/ok to test 9c09137 |
Contributor
Author
|
/ok to test a05f967 |
Contributor
Author
|
/ok to test 81c3a6c |
1 similar comment
Contributor
Author
|
/ok to test 81c3a6c |
Contributor
Author
|
/ok to test 60d9966 |
Contributor
Author
|
/ok to test 17ad09a |
Contributor
Author
|
/ok to test acaf7cf |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes the GB300-only segfaults in pylibcudf's parquet tests (e.g.
test_read_parquet_basic, nightly example). These are not caused by #24590.Root cause
test_interop.py::test_arrow_object_lifetimeinstalls a temporaryrmm.mr.CudaAsyncMemoryResource, allocates a table from it, restores the previous resource, and lets the async resource, and therefore its stream-ordered memory pool, be destroyed while GPU work and frees on that pool are still pending. After that, the next nvCOMP 6 hardware decompression (the Blackwell Decompression Engine, which only GB300 has in our CI) in the same process segfaults inside the CUDA driver at a latercuStreamSynchronize. It started with the nvCOMP 6.0 upgrade (#24580). It needs other processes using the GPU concurrently, so it showed up as a random parquet test crashing in whichever pytest-xdist worker had run this test earlier.How it was isolated (all on GB300 in this PR's CI):
test_arrow_object_lifetimefollowed by a parquet read.ci/gb300_repro.pyreproduces it without cuDF's test suite, and its lowest layer uses only cuda-python plus a pylibcudf parquet read (8 concurrent processes x 3 rounds):cudaDeviceSynchronize()before destroyThe underlying bug is in the CUDA driver / nvCOMP 6 hardware decompression path. Destroying a pool with outstanding work is allowed by the CUDA API, since its release is deferred.
Fix
Synchronize the device before the test's temporary async resource is released, so its pool is never destroyed with work pending. The test now also asserts directly, via a weak reference, that the table keeps the resource alive, instead of relying on a segfault to detect a lifetime bug. No library changes are needed, and hardware decompression stays enabled.
Validation (GB300, full pylibcudf suite with
--numprocesses=8)test_interop.pydiffers: original 2/6 runs crash, fixed 0/10 (11,585 passed each run).gb300-validate(6 full-suite runs per head): 0 crashes or failures on every head validated (24 runs total), and the GB300wheel-tests-cudfjob passes.Follow-ups outside this PR: report the driver/nvCOMP bug, and consider having RMM's
cuda_async_memory_resourcesynchronize beforecudaMemPoolDestroy.Note on CI configuration
As requested for this investigation, this PR's
.github/workflows/pr.yamlruns tests only on GB300: an arm64 CUDA 13 wheel build on CPU runners, the pylibcudf wheel tests, andci/gb300_validate.sh(6 full-suite runs that fail on any crash or test failure, plus theci/gb300_repro.pyreproduction matrix). Revertpr.yamland deleteci/gb300_*before merging; the fix itself is onlypython/pylibcudf/tests/test_interop.py.Checklist