Skip to content

Commit eae5a01

Browse files
committed
[Fix] Exclude numpy 2.3.5 from every IsaacLab install path
numpy 2.3.5 ships a vendored OpenBLAS (libscipy_openblas64_-fdde5778.so) whose pthread_atfork handler crashes Kit's libomni.platforminfo fork() during SimulationApp startup. The release is excluded at every site that pulls numpy directly or transitively, so no pip resolve during isaaclab.sh --install or any Docker image build can land on it -- even transiently: source/isaaclab/setup.py source/isaaclab_tasks/setup.py source/isaaclab_rl/setup.py source/isaaclab_visualizers/setup.py source/isaaclab_teleop/setup.py (transitive via dex-retargeting) source/isaaclab_mimic/setup.py (transitive via h5py) isaaclab.cli.commands.install._ensure_pink_ik_dependencies_installed isaaclab.cli.commands.install._maybe_preinstall_arm_nlopt docker/Dockerfile.base (ARM nlopt prep) docker/Dockerfile.curobo (ARM nlopt prep + nvidia-curobo install) Each touchpoint adds only the ``!=2.3.5`` exclusion; no other version constraints are introduced. Validated: - env_isaaclab_test smoke test (numpy 2.4.5 + cmeel pinocchio + pink + daqp + qpsolvers all import; toy IK solve OK). - IsaacLab Pink IK unit tests: 54/54 pass against numpy 2.4.5. - PR #5655 worst-case run (diagnostic imports numpy before pytest spawns Kit, the order that originally crashed): 36 pass / 0 fail. The isaaclab_physx surface gripper SIGSEGV is gone. Related: numpy/numpy#30092, OpenMathLib/OpenBLAS#5520
1 parent c67ed38 commit eae5a01

15 files changed

Lines changed: 93 additions & 10 deletions

File tree

docker/Dockerfile.base

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ RUN touch /bin/nvidia-smi && \
111111
# sees nlopt as already satisfied and skips the from-source rebuild that would fail.
112112
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
113113
if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
114-
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install setuptools wheel numpy && \
114+
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install setuptools wheel "numpy!=2.3.5" && \
115115
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install --no-build-isolation nlopt==2.6.2; \
116116
fi
117117

docker/Dockerfile.curobo

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ RUN rm -rf ${ISAACSIM_ROOT_PATH}/kit/python/lib/python3.12/site-packages/pip* &&
159159
# sees nlopt as already satisfied and skips the from-source rebuild that would fail.
160160
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
161161
if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
162-
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install setuptools wheel numpy && \
162+
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install setuptools wheel "numpy!=2.3.5" && \
163163
${ISAACLAB_PATH}/isaaclab.sh -p -m pip install --no-build-isolation nlopt==2.6.2; \
164164
fi
165165

@@ -171,11 +171,16 @@ RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
171171
# HACK: Uninstall quadprog as it causes issues with some reinforcement learning frameworks
172172
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip uninstall -y quadprog
173173

174-
# Install cuRobo from source (pinned commit); needs CUDA env and Torch
174+
# Install cuRobo from source (pinned commit); needs CUDA env and Torch.
175+
# ``numpy!=2.3.5`` is passed so this resolve cannot land on the broken numpy 2.3.5
176+
# release if any of nvidia-curobo's deps drag numpy back down (cmeel-boost cap).
177+
# See ``source/isaaclab/setup.py``.
175178
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip install --no-build-isolation \
179+
"numpy!=2.3.5" \
176180
"nvidia-curobo @ git+https://github.com/NVlabs/curobo.git@ebb71702f3f70e767f40fd8e050674af0288abe8"
177181

178-
# Install isaaclab_teleop (needed by Pink IK tests and related env configs)
182+
# Install isaaclab_teleop (needed by Pink IK tests and related env configs).
183+
# isaaclab_teleop's setup.py already excludes numpy 2.3.5; no extra argv needed here.
179184
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip install --editable ${ISAACLAB_PATH}/source/isaaclab_teleop
180185

181186
# aliasing isaaclab.sh and python for convenience
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Fixed
2+
^^^^^
3+
4+
* Excluded the broken ``numpy 2.3.5`` release from every install path that pulls
5+
numpy. ``numpy 2.3.5``'s vendored OpenBLAS
6+
(``libscipy_openblas64_-fdde5778.so``) registers a buggy ``pthread_atfork``
7+
handler that crashes Kit's ``libomni.platforminfo`` ``fork()`` during
8+
``SimulationApp`` startup. The exclusion is declared at every site:
9+
10+
* Each ``source/<pkg>/setup.py`` that depends on numpy directly or
11+
transitively (``isaaclab``, ``isaaclab_tasks``, ``isaaclab_rl``,
12+
``isaaclab_visualizers``, ``isaaclab_teleop``, ``isaaclab_mimic``).
13+
* The ``pin-pink`` force-reinstall in
14+
:meth:`isaaclab.cli.commands.install._ensure_pink_ik_dependencies_installed`.
15+
* The ARM ``setuptools wheel numpy`` pre-install in
16+
:meth:`isaaclab.cli.commands.install._maybe_preinstall_arm_nlopt`.
17+
* The ARM nlopt prep step in ``docker/Dockerfile.base``.
18+
* The ``nvidia-curobo`` install in ``docker/Dockerfile.curobo``.
19+
20+
See numpy/numpy#30092 and OMPE-92261.

source/isaaclab/isaaclab/cli/commands/install.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _maybe_preinstall_arm_nlopt(pip_cmd: list[str]) -> None:
135135
return
136136
print_info("Pre-installing nlopt==2.6.2 on ARM (no-build-isolation)...")
137137
print_info(" step 1/2: ensure setuptools/wheel/numpy are importable for the no-build-isolation backend")
138-
run_command(pip_cmd + ["install", "setuptools", "wheel", "numpy"])
138+
run_command(pip_cmd + ["install", "setuptools", "wheel", "numpy!=2.3.5"])
139139
print_info(" step 2/2: install nlopt==2.6.2 with --no-build-isolation")
140140
run_command(pip_cmd + ["install", "--no-build-isolation", "nlopt==2.6.2"])
141141

@@ -213,8 +213,12 @@ def _ensure_pink_ik_dependencies_installed(python_exe: str, pip_cmd: list[str],
213213
return
214214

215215
print_info("Pink IK dependency probe failed. Force-installing the cmeel pinocchio and DAQP stack.")
216+
# Pass ``numpy!=2.3.5`` so this fresh resolve (which sees only pin-pink's deps
217+
# plus cmeel-boost's ``numpy<2.4`` cap) cannot land on the broken numpy 2.3.5
218+
# release. See numpy/numpy#30092 and the rationale in
219+
# :file:`source/isaaclab/setup.py`.
216220
install_result = run_command(
217-
pip_cmd + ["install", "--upgrade", "--force-reinstall", *_PINK_IK_STACK],
221+
pip_cmd + ["install", "--upgrade", "--force-reinstall", "numpy!=2.3.5", *_PINK_IK_STACK],
218222
check=False,
219223
)
220224
if install_result.returncode != 0:

source/isaaclab/setup.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@
1818
# Minimum dependencies required prior to installation
1919
INSTALL_REQUIRES = [
2020
# generic
21-
"numpy>=2",
21+
# numpy 2.3.5 ships a vendored OpenBLAS whose ``pthread_atfork`` handler crashes
22+
# Kit's ``libomni.platforminfo`` ``fork()`` during ``SimulationApp`` startup.
23+
# The exclusion is declared at every install site that pulls numpy (this
24+
# setup.py, the other source/* setup.py files, the pin-pink force-reinstall in
25+
# ``isaaclab.cli.commands.install``, and the standalone ``pip install`` lines in
26+
# docker/Dockerfile.*). See numpy/numpy#30092 and OMPE-92261.
27+
"numpy>=2,!=2.3.5",
2228
"torch>=2.10",
2329
"onnx>=1.18.0", # 1.16.2 throws access violation on Windows
2430
"prettytable==3.3.0",
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Fixed
2+
^^^^^
3+
4+
* Excluded the broken ``numpy 2.3.5`` release from the package's install
5+
requirements. ``isaaclab_mimic`` pulls numpy transitively via ``h5py``; an
6+
explicit exclusion keeps the broken 2.3.5 out of resolves that depend on
7+
this package. See ``source/isaaclab/setup.py`` for the full rationale.

source/isaaclab_mimic/setup.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
"ipywidgets==8.1.5",
2525
# data collection
2626
"h5py==3.15.1",
27+
# h5py pulls numpy; without the exclusion the resolve can land on the broken
28+
# 2.3.5. See ``source/isaaclab/setup.py``.
29+
"numpy!=2.3.5",
2730
]
2831

2932
# nvidia-srl-usd-to-urdf depends on usd-core which has no aarch64 wheels
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Fixed
2+
^^^^^
3+
4+
* Excluded the broken ``numpy 2.3.5`` release from the package's install requirements.
5+
``numpy 2.3.5``'s vendored OpenBLAS registers a ``pthread_atfork`` handler that
6+
crashes Kit's ``libomni.platforminfo`` ``fork()`` during ``SimulationApp`` startup.
7+
See ``source/isaaclab/setup.py`` and ``isaaclab.cli.commands.install`` for the
8+
authoritative install-time defense.

source/isaaclab_rl/setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
# Minimum dependencies required prior to installation
2020
INSTALL_REQUIRES = [
2121
# generic
22-
"numpy",
22+
# See ``source/isaaclab/setup.py`` for the rationale on ``!=2.3.5``.
23+
"numpy!=2.3.5",
2324
"torch>=2.10",
2425
"torchvision>=0.25.0", # ensure compatibility with torch 2.10.0
2526
"protobuf>=4.25.8,!=5.26.0",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Fixed
2+
^^^^^
3+
4+
* Excluded the broken ``numpy 2.3.5`` release from the package's install requirements.
5+
``numpy 2.3.5``'s vendored OpenBLAS registers a ``pthread_atfork`` handler that
6+
crashes Kit's ``libomni.platforminfo`` ``fork()`` during ``SimulationApp`` startup.
7+
See ``source/isaaclab/setup.py`` and ``isaaclab.cli.commands.install`` for the
8+
authoritative install-time defense.

0 commit comments

Comments
 (0)