RenderProduct Device Selection
When to Use
Use this skill when a scene, test, or example must constrain a RenderProduct to CUDA-visible GPU 0 or another explicit set of CUDA-visible GPUs, especially for multi-GPU CI or viewport picking.
Inputs
Resolve inputs in this order: existing repository files and referenced snippets, explicit user request, then broader agent context.
- Target API surface: Python, C/C++, USD, or a combination.
- RenderProduct prim path or scene file that needs a
deviceIds restriction.
- CUDA-visible device index allow-list, usually
[0] for picking or deterministic multi-GPU CI.
- Whether the pinning is authored in static USDA, inline USD, or an existing example/test scene.
- Repository source snippets referenced below. Treat these snippets as the API source of truth.
Prerequisites
- Use an ovrtx checkout that contains the referenced examples and docs tests.
- Read the relevant
> **Source:** snippet before writing or explaining API usage.
- Confirm device indices are CUDA-visible indices after
CUDA_VISIBLE_DEVICES filtering, not physical GPU IDs.
- Pin the RenderProduct only; Camera and RenderVar prims do not own
deviceIds.
Instructions
- Identify the RenderProduct path and the CUDA-visible device indices it should be allowed to use.
- Author or update the RenderProduct
deviceIds attribute in USD; do not pin Camera or RenderVar prims.
- Interpret device IDs after
CUDA_VISIBLE_DEVICES remapping, not as physical PCI bus or global GPU IDs.
- For picking workflows, pin the relevant RenderProduct to CUDA-visible GPU 0 until the picking limitation is removed.
- When changing code, run the picking or render-product docs test that owns the GPU-pinning snippet whenever practical.
Output Format
- For explanations, cite the relevant API names, source snippets, and caveats.
- For code changes, summarize the files changed, snippets affected, and validation run.
Scripts
This skill has no scripts.
Limitations
- For picking, pin RenderProducts to CUDA-visible GPU 0 until the current picking limitation is removed.
- The referenced snippets remain the source of truth; update or add tested snippets before documenting new API usage.
Overview
ovrtx can select active CUDA devices at renderer creation and can also restrict
an individual RenderProduct to a specific device list. Author
uint[] deviceIds on the RenderProduct prim before the stage is loaded.
deviceIds is an allow-list of indices into the CUDA-visible device set, after
CUDA_VISIBLE_DEVICES filtering and remapping. ovrtx is free to choose any
CUDA-visible GPU from the list. A one-element list such as [0] restricts the
RenderProduct to CUDA-visible GPU 0.
Use this when a workflow is device-sensitive, needs to constrain eligible GPUs,
or must run on CUDA-visible GPU 0. In the current ovrtx version, viewport
picking only works for RenderProducts running on CUDA-visible GPU 0, so picking
tests and examples should restrict their picking RenderProduct to
deviceIds = [0].
USDA
Restrict a RenderProduct to CUDA-visible GPU 0
Source: tests/docs/data/ovrtx-test-picking-selection.usda snippet doc-pin-render-product-to-gpu-0-usda
Workflow
- Choose the CUDA-visible device indices that may render the product.
- Author
uint[] deviceIds directly on the RenderProduct prim in USD.
- If using renderer-level
active_cuda_gpus, ensure the RenderProduct allow-list is compatible with that active device set.
- Load the scene normally from Python or C.
- Step the constrained RenderProduct path as usual.
For picking, use CUDA-visible GPU 0 until the current picking limitation is
removed.
Key Attribute
| Attribute |
Type |
Use |
deviceIds |
uint[] |
Allow-list of indices into CUDA_VISIBLE_DEVICES that may render this RenderProduct. ovrtx may choose any listed CUDA-visible GPU. Use [0] to restrict picking RenderProducts to CUDA-visible GPU 0. |
Troubleshooting
deviceIds is authored on the RenderProduct prim, not on the renderer config
object, camera, or RenderVar.
deviceIds indexes CUDA-visible devices, not non-CUDA devices, Vulkan device
indices, display adapters, or physical GPU ids masked out by
CUDA_VISIBLE_DEVICES.
deviceIds is an allow-list, not a load-balancing or exact-placement policy.
Exact device selection requires a singleton list such as [0]; [0, 1]
permits ovrtx to choose either listed CUDA-visible GPU.
- Renderer-level CUDA selection and per-RenderProduct
deviceIds must agree.
For picking, leave active_cuda_gpus unset or ensure it includes
CUDA-visible index 0.
- Author the attribute before loading the scene. Do not rely on runtime mutation
for tests that need deterministic device assignment during renderer setup.
- Picking currently requires the picked RenderProduct to run on CUDA-visible
GPU 0. In multi-GPU CI, omit the CUDA-visible GPU 0 restriction only if the
test does not depend on pick results.
Related Skills
picking-selection for viewport picking, marquee selection, and selection
outline drawing.
renderer-creation for renderer-level CUDA device selection.
cuda-interop for mapping a selected CUDA-visible ordinal to the exact Vulkan
physical device, including sibling MIG instances.
References
- Use the
> **Source:** directives in this skill to locate tested snippets before reusing API patterns.
- Keep related skills, docs, and snippets synchronized when changing the workflow.
1---2# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.3# SPDX-License-Identifier: LicenseRef-NvidiaProprietary4#5# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual6# property and proprietary rights in and to this material, related7# documentation and any modifications thereto. Any use, reproduction,8# disclosure or distribution of this material and related documentation9# without an express license agreement from NVIDIA CORPORATION or10# its affiliates is strictly prohibited.11name: render-product-device-pinning12description: >13 Restricting RenderProducts to specific CUDA-visible device indices with the USD14 deviceIds attribute. Use when a scene, test, or example must constrain a15 RenderProduct to CUDA-visible GPU 0 or another explicit set of CUDA-visible GPUs,16 especially for multi-GPU CI or viewport picking.17license: LicenseRef-NvidiaProprietary18author: NVIDIA ovrtx19tags:20 - ovrtx21 - rendering22 - gpu23tools:24 - Read25 - Grep26---2728# RenderProduct Device Selection2930## When to Use3132Use this skill when a scene, test, or example must constrain a RenderProduct to CUDA-visible GPU 0 or another explicit set of CUDA-visible GPUs, especially for multi-GPU CI or viewport picking.3334## Inputs3536Resolve inputs in this order: existing repository files and referenced snippets, explicit user request, then broader agent context.3738- Target API surface: Python, C/C++, USD, or a combination.39- RenderProduct prim path or scene file that needs a `deviceIds` restriction.40- CUDA-visible device index allow-list, usually `[0]` for picking or deterministic multi-GPU CI.41- Whether the pinning is authored in static USDA, inline USD, or an existing example/test scene.42- Repository source snippets referenced below. Treat these snippets as the API source of truth.4344## Prerequisites4546- Use an ovrtx checkout that contains the referenced examples and docs tests.47- Read the relevant `> **Source:**` snippet before writing or explaining API usage.48- Confirm device indices are CUDA-visible indices after `CUDA_VISIBLE_DEVICES` filtering, not physical GPU IDs.49- Pin the RenderProduct only; Camera and RenderVar prims do not own `deviceIds`.5051## Instructions52531. Identify the RenderProduct path and the CUDA-visible device indices it should be allowed to use.542. Author or update the RenderProduct `deviceIds` attribute in USD; do not pin Camera or RenderVar prims.553. Interpret device IDs after `CUDA_VISIBLE_DEVICES` remapping, not as physical PCI bus or global GPU IDs.564. For picking workflows, pin the relevant RenderProduct to CUDA-visible GPU 0 until the picking limitation is removed.575. When changing code, run the picking or render-product docs test that owns the GPU-pinning snippet whenever practical.5859## Output Format6061- For explanations, cite the relevant API names, source snippets, and caveats.62- For code changes, summarize the files changed, snippets affected, and validation run.6364## Scripts6566This skill has no scripts.6768## Limitations6970- For picking, pin RenderProducts to CUDA-visible GPU 0 until the current picking limitation is removed.71- The referenced snippets remain the source of truth; update or add tested snippets before documenting new API usage.7273## Overview7475ovrtx can select active CUDA devices at renderer creation and can also restrict76an individual RenderProduct to a specific device list. Author77`uint[] deviceIds` on the RenderProduct prim before the stage is loaded.7879`deviceIds` is an allow-list of indices into the CUDA-visible device set, after80`CUDA_VISIBLE_DEVICES` filtering and remapping. ovrtx is free to choose any81CUDA-visible GPU from the list. A one-element list such as `[0]` restricts the82RenderProduct to CUDA-visible GPU 0.8384Use this when a workflow is device-sensitive, needs to constrain eligible GPUs,85or must run on CUDA-visible GPU 0. In the current ovrtx version, viewport86picking only works for RenderProducts running on CUDA-visible GPU 0, so picking87tests and examples should restrict their picking RenderProduct to88`deviceIds = [0]`.8990## USDA9192### Restrict a RenderProduct to CUDA-visible GPU 09394> **Source:** `tests/docs/data/ovrtx-test-picking-selection.usda` snippet `doc-pin-render-product-to-gpu-0-usda`9596## Workflow97981. Choose the CUDA-visible device indices that may render the product.992. Author `uint[] deviceIds` directly on the RenderProduct prim in USD.1003. If using renderer-level `active_cuda_gpus`, ensure the RenderProduct allow-list is compatible with that active device set.1014. Load the scene normally from Python or C.1025. Step the constrained RenderProduct path as usual.103104For picking, use CUDA-visible GPU 0 until the current picking limitation is105removed.106107## Key Attribute108109| Attribute | Type | Use |110|-----------|------|-----|111| `deviceIds` | `uint[]` | Allow-list of indices into `CUDA_VISIBLE_DEVICES` that may render this RenderProduct. ovrtx may choose any listed CUDA-visible GPU. Use `[0]` to restrict picking RenderProducts to CUDA-visible GPU 0. |112113## Troubleshooting114115- `deviceIds` is authored on the RenderProduct prim, not on the renderer config116 object, camera, or RenderVar.117- `deviceIds` indexes CUDA-visible devices, not non-CUDA devices, Vulkan device118 indices, display adapters, or physical GPU ids masked out by119 `CUDA_VISIBLE_DEVICES`.120- `deviceIds` is an allow-list, not a load-balancing or exact-placement policy.121 Exact device selection requires a singleton list such as `[0]`; `[0, 1]`122 permits ovrtx to choose either listed CUDA-visible GPU.123- Renderer-level CUDA selection and per-RenderProduct `deviceIds` must agree.124 For picking, leave `active_cuda_gpus` unset or ensure it includes125 CUDA-visible index `0`.126- Author the attribute before loading the scene. Do not rely on runtime mutation127 for tests that need deterministic device assignment during renderer setup.128- Picking currently requires the picked RenderProduct to run on CUDA-visible129 GPU 0. In multi-GPU CI, omit the CUDA-visible GPU 0 restriction only if the130 test does not depend on pick results.131132## Related Skills133134- `picking-selection` for viewport picking, marquee selection, and selection135 outline drawing.136- `renderer-creation` for renderer-level CUDA device selection.137- `cuda-interop` for mapping a selected CUDA-visible ordinal to the exact Vulkan138 physical device, including sibling MIG instances.139140## References141142- Use the `> **Source:**` directives in this skill to locate tested snippets before reusing API patterns.143- Keep related skills, docs, and snippets synchronized when changing the workflow.