Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor fixes for NumPy 2.0 compatibility #746

Merged
merged 2 commits into from
Jul 11, 2024

Conversation

grlee77
Copy link
Contributor

@grlee77 grlee77 commented Jul 10, 2024

This MR resolves issues 3 and 4 reported here when testing with NumPy 2.0 and CuPy 13.2 locally (issues 1 and 2 will be addressed in CuPy itself)
#742 (comment)

For now, leave NumPy pinning as-is. Tests should continue to pass with NumPy 1.x

grlee77 added 2 commits July 9, 2024 23:37
rtol of 1e-6 is sufficient given that the precision used internally is always float32
@grlee77 grlee77 added improvement Improves an existing functionality non-breaking Introduces a non-breaking change labels Jul 10, 2024
@grlee77 grlee77 added this to the v24.08.00 milestone Jul 10, 2024
@grlee77 grlee77 requested review from gigony and jakirkham July 10, 2024 03:47
@grlee77 grlee77 requested a review from a team as a code owner July 10, 2024 03:47
Copy link
Member

@jakirkham jakirkham left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Greg! 🙏

@@ -429,6 +429,7 @@ def chan_vese(
energies = []
phivar = tol + 1

dt = cp.asarray(dt, dtype=float_dtype)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM to me also.

Just FYI, I'll note that in some places using float(dt) may also make sense to ensure "weak" promotion handling (i.e. float scalars behave like they used to in most cases on both NumPy 1 and 2).
I don't think this needs a fix here!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I think here we realized that we were passing a Python float to a CuPy-based custom kernel and relying on whatever default promotion it was doing, which CuPy changed recently. There's more context in 3 under comment: #742 (comment)

So we decided it was better that we determine the type here instead. Hence the change

Hopefully that context is helpful

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, NumPy 2 + CuPy 13.2 interaction might make promotion a bit more tricky even, so I guess the Python float thing may not work there.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah actually in the case where the error was seen, we are using the default value for dt (as it is unspecified)

result = chan_vese(img, mu=0.0, tol=1e-8, extended_output=True)

Looking at the default value for dt, it appears to be 0.5

So perhaps CuPy has decided to always promote float to float64 before CUDA kernel calls

Greg did the investigation here. So likely knows more about the issue

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All, good, I don't think it's worth to track this down exactly. Eventually (probably with CuPy 14), this shouldn't be necessary for Python floats at least. But it is definitely the pragmatic thing right now.

@jakirkham
Copy link
Member

/merge

@rapids-bot rapids-bot bot merged commit 540e96e into rapidsai:branch-24.08 Jul 11, 2024
45 checks passed
@jakirkham
Copy link
Member

Thanks Greg and Sebastian! 🙏

@jakirkham jakirkham changed the title Minor fixes for NumPy 2.0 compatiblity Minor fixes for NumPy 2.0 compatibility Aug 8, 2024
@jakirkham
Copy link
Member

Fixed a minor typo in the PR title and in the CHANGELOG. This was picked up by a style check in 24.10

xref: #759

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
improvement Improves an existing functionality non-breaking Introduces a non-breaking change
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants