NanoVDB CI on AWS CodeBuild GPUs - #2271
Open
swahtz wants to merge 27 commits into
Open
Conversation
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Generate 64 deterministic upper-node tiles. Put 64 voxels in each tile. Still trigger the >= 32 segmented-sort path. Assert exactly 64 upper nodes were created. Reduce estimated node memory to about 18.6 MiB. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Record the root initialization event on its CUDA stream to prevent dependent GPU work from racing, and improve active voxel count diagnostics. Moved buildspec inside ci/ Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Run the NanoVDB Python suite on GPU workers and expose the selected CodeBuild project and fleet configuration for easier CI diagnosis. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
swahtz
requested review from
Idclip,
apradhana,
danrbailey,
jmlait,
kmuseth and
richhones
as code owners
August 5, 2026 04:59
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
The remaining DenseLeaf undercount is an intermittent race -- the same code failed and passed clang-Debug on consecutive days -- so a single green run says nothing. Run the mgpu tests up to twenty times after the main pass, stopping at the first failure; at seventeen seconds per iteration the worst case adds about six minutes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Mark Harris <mharris@nvidia.com>
Diagnostic for the intermittent DenseLeaf undercount, whose failing value is exactly one device's quarter of the voxels. The counts are printed once they are final -- after the full per-device stream synchronize -- so a failing run shows directly whether a stripe was already lost upstream of aggregation or survived counting and was lost downstream. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Mark Harris <mharris@nvidia.com>
…intsToGrid The distributed builder distributes work by snapping device boundaries to upper-node (tile) boundaries, since each tile subtree is counted and built independently on one device. The previous pairwise rebalance could not consolidate a tile whose points span three or more devices (a fully-interior device lies entirely within the tile), so such a tile stayed split. Multiple devices then concurrently registered and cleared/set the same leaf's value mask with no cross-device ordering, intermittently losing updates and undercounting active voxels (e.g. the single dense-leaf case collapsing to one device's stripe). Replace the pairwise TransformReduce + rebalance kernels with a global, monotonic host-side boundary snap over the globally-sorted keys. Every tile is now owned by exactly one device (interior devices may be left empty), eliminating cross-device writes to shared nodes. Remove the now-unused EqualityIndicator, left/rightRebalanceKernel, and the transformReduce/rebalance event arrays. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Add deterministic tests covering the DistributedPointsToGrid path where a single upper-node tile is split across all devices: - SingleUpperNode: many voxels within one 4096^3 tile spanning many lower/leaf nodes; asserts the exact active-voxel count so a reintroduced cross-device race is caught deterministically rather than probabilistically. - MatchesSingleGpu: cross-checks topology and voxel occupancy against the trusted single-GPU voxelsToGrid builder on a tile-splitting input. - FewerVoxelsThanDevices: guards the empty-stripe edge case. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
The test exercised inputCount < deviceCount, which triggers a pre-existing limitation in radixSortAsync (the initial per-device sort runs on a zero-count segment and CUB returns "invalid device ordinal"). That path is unrelated to the shared-tile ownership fix, and the empty interior-stripe behavior the fix introduces is already covered by SingleUpperNode and MatchesSingleGpu. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
Drop the per-device stripe/voxel-count fprintf in DistributedPointsToGrid and the "--repeat until-fail:20" mgpu loop in the CodeBuild buildspec. Both were temporary scaffolding for diagnosing the shared-tile race, which is now fixed and covered by dedicated regression tests. Signed-off-by: Jonathan Swartz <jonathan@jswartz.info>
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.
Summary
sudousage.Notable Changes to CI Setup
nanovdb.ymlActions, this changes the trigger frompull_requesttopull_request_target. This means that the job runs from the PR'stargetbranch (instead of the PR's branch). The reason is that for security, Github Actions does not allow access to repository secrets from non-local/fork branches and we need these to authenticate with AWS. The code that runs in the PR actions will be from the PR's branch merged with the target but the big effect is that the job definition will have come from the target branch. This means that any PR that changes this job's definition will not be reflected in the CI run for that PR. This is an inherent characteristic of this trigger mode. If a Maintainer wants to test the effects of the candidate PR, the PR branch has to be local to the OpenVDB repo and can be triggered manually in the 'Actions' tab to test run from the PR branch..github/workflows/nanovdb.yamlAction and the CodeBuild tasks that run the tests are defined in theci/buildspec_nanovdb.yml.Test plan
nanovdb-litepass.