Skip to content

[auto-merge] release/26.06 to main [skip ci] [bot] - #1030

Merged
nvauto merged 1 commit into
mainfrom
release/26.06
Jul 17, 2026
Merged

[auto-merge] release/26.06 to main [skip ci] [bot]#1030
nvauto merged 1 commit into
mainfrom
release/26.06

Conversation

@nvauto

@nvauto nvauto commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

auto-merge triggered by github actions on release/26.06 to create a PR keeping main up-to-date. If this PR is unable to be merged due to conflicts, it will remain open until manually fix.

Signed-off-by: Erik Ordentlich <eordentlich@gmail.com>
@nvauto
nvauto merged commit ba9ff52 into main Jul 17, 2026
@nvauto

nvauto commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator Author

SUCCESS - auto-merge

@greptile-apps

greptile-apps Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR merges release/26.06 into main via an automated bot merge. The only code change extends two conditional checks in umap.py to also trigger when cuda_system_mem_enabled is set, matching the same pattern already used earlier in the same function.

  • The fix adds or cuda_system_mem_enabled to the two yield-site conditions in _train_udf (lines 1259 and 1284), ensuring .get() is called to copy CuPy GPU arrays back to host memory before they are wrapped into a pandas DataFrame — previously this copy only happened when cuda_managed_mem_enabled was set, leaving system-memory mode without a proper device-to-host transfer.
  • The change is consistent with an identical guard at line 1203 in the same function.

Confidence Score: 5/5

Safe to merge — the two-line change closes a gap where CuPy arrays were not transferred to host memory before being wrapped in a pandas DataFrame when running in system-memory mode.

Both changed lines mirror an identical guard that already exists at line 1203 in the same function, making the fix well-precedented. The else branches (no .get()) are only reached when data is already on the host, so the logic remains correct in all four memory-mode combinations.

No files require special attention.

Important Files Changed

Filename Overview
python/src/spark_rapids_ml/umap.py Two conditions extended to include cuda_system_mem_enabled, ensuring .get() is called to transfer CuPy arrays from GPU to host before yielding pandas DataFrames; consistent with the existing guard at line 1203.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[_train_udf: iterate embedding chunks] --> B{use_sparse_array?}
    B -- yes --> C[slice csr_chunk, indices, indptr, data]
    B -- no --> D{cuda_managed_mem_enabled\nor cuda_system_mem_enabled?}
    C --> E{cuda_managed_mem_enabled\nor cuda_system_mem_enabled?}
    E -- yes --> F["yield DataFrame with .get()\n(GPU → host transfer)"]
    E -- no --> G["yield DataFrame without .get()\n(data already on host)"]
    D -- yes --> H["yield DataFrame with .get()\n(GPU → host transfer)"]
    D -- no --> I["yield DataFrame without .get()\n(data already on host)"]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[_train_udf: iterate embedding chunks] --> B{use_sparse_array?}
    B -- yes --> C[slice csr_chunk, indices, indptr, data]
    B -- no --> D{cuda_managed_mem_enabled\nor cuda_system_mem_enabled?}
    C --> E{cuda_managed_mem_enabled\nor cuda_system_mem_enabled?}
    E -- yes --> F["yield DataFrame with .get()\n(GPU → host transfer)"]
    E -- no --> G["yield DataFrame without .get()\n(data already on host)"]
    D -- yes --> H["yield DataFrame with .get()\n(GPU → host transfer)"]
    D -- no --> I["yield DataFrame without .get()\n(data already on host)"]
Loading

Reviews (1): Last reviewed commit: "assume cupy for sam when returning embed..." | Re-trigger Greptile

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants