[BUG]: cuda.bindings GL interop tests open EGL device 0 on headless multi-GPU hosts and fail with cudaErrorInvalidDevice
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
Direção de pesquisa
Leia cuda_bindings_13/tests/test_graphics_apis.py, especialmente _configure_pyglet_headless e test_cuda_gl_register_image_smoketest; compare com a correção do teste de cuda.core na issue #2865. Verifique como select_headless_egl_device_for_cuda(0) é importada e chamada, depois execute os testes da API gráfica em um host headless com várias GPUs, no qual uma GPU diferente da primeira esteja visível. O trabalho estará concluído quando os dois parâmetros de teste passarem sem definir PYGLET_HEADLESS_DEVICE manualmente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Is this a duplicate?
- I confirmed there appear to be no duplicate issues for this bug and that I agree to the Code of Conduct
Type of Bug
Something else (test-only failure)
Component
cuda.bindings
Describe the bug
cuda_bindings_13/tests/test_graphics_apis.py::test_cuda_gl_register_image_smoketest (both parameters) fails on a headless 8-GPU B300 host when the tests see one GPU through CUDA_VISIBLE_DEVICES:
AssertionError: cudaGraphicsGLRegisterImage returned cudaErrorInvalidDevice
assert 'cudaErrorInvalidDevice' in {'cudaErrorOperatingSystem', 'cudaSuccess'}
CUDA_VISIBLE_DEVICES does not reorder EGL's device enumeration, so the headless context lands on EGL device 0, which is not the GPU behind CUDA device 0. #2865 fixed exactly this for cuda.core's tests/test_graphics.py with select_headless_egl_device_for_cuda. The cuda.bindings test has its own _configure_pyglet_headless, and that function still sets only pyglet.options["headless"]. The nightly GH200 / GB300 rows have one GPU, so they never see this.
On the B300 host the EGL devices report these CUDA ordinals (eglQueryDeviceAttribEXT(EGL_CUDA_DEVICE_NV), with only the 6th GPU visible):
- EGL device 5 → CUDA ordinal 0.
- Every other EGL device → none.
How to Reproduce
On a headless multi-GPU Linux host, with EGL available and no DISPLAY:
CUDA_VISIBLE_DEVICES=<uuid of a GPU other than the first> pytest cuda_bindings_13/tests/test_graphics_apis.py
Expected behavior
The test registers against the GL context on the GPU it uses for CUDA, as the cuda.core test does.
Proposed fix
Call select_headless_egl_device_for_cuda(0) in the bindings test's _configure_pyglet_headless, the same way cuda.core does. These tests register against CUDA device 0. With that change, tests/test_graphics_apis.py passes 3/3 on the host above without any extra environment variable. Without the change, it passes only when PYGLET_HEADLESS_DEVICE=5 is set by hand. I have the change ready as a PR if this sounds right.
The fix was written with Claude Opus 5.5 and reviewed by the contributor.
Environment
GPU: B300 (cc 10.3, x86_64, 8 GPUs, one visible) | driver 610.57.04 | CUDA 13.4.2 (local CTK) | Python 3.12 | cuda-python 2da9c65a
- Linguagem predominante
- Cython
- Estrelas
- 3.4k
- Forks
- 341
- Merge médio
- 1d 18h
- PRs com merge (30d)
- 147
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de NVIDIA/cuda-python
-
CI/CD P1
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
NVIDIA/cuda-python#3273 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
[BUG]: multi-GPU cuda.core samples take the CUDA device count from NVML and break under CUDA_VISIBLE_DEVICESTalvez já em andamento @Andy-Jost assumiu há 2 dias. Abertabug cuda.core P2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
NVIDIA/cuda-python#3215 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
lychee should specify which links are failingTalvez já em andamento @kkonnerharris assumiu há 2 dias. Abertatriage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
NVIDIA/cuda-python#3204 · 2 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[BUG]: cleanup-pr-previews never removes previews of deleted PRsTalvez já em andamento @rwgk assumiu há 22 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
NVIDIA/cuda-python#2952 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[BUG]: LocatedHeaderDir is mutable, so callers can poison the cached header-directory lookupTalvez já em andamento @rwgk assumiu há 36 dias. Abertatriage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
NVIDIA/cuda-python#2646 · 1 reação ·
Mantenedores costumam responder em até 1 dia
Todas as issues de NVIDIA/cuda-python
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
react/react-native#59699 ·
Mantenedores costumam responder em até 2 dias
-
chore other
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
alastair-smith/card-games#342 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
PolicyEngine/microcosm#1431 ·
Mantenedores costumam responder em até 1 dia
-
area: futures effort: S enhancement priority: P2
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
PINNeAPPle-Labs/PINNeAPPle#987 ·
Mantenedores costumam responder em até 1 dia
-
good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100