Skip to content

Commit c2d7833

Browse files
committed
[Fix] Force numpy>=2.4.1 in --install to escape OpenBLAS atfork SIGSEGV
The setup.py constraint "numpy>=2,!=2.3.5" landed in isaac-sim#5642 is silently overridden during isaaclab.sh --install because pip resolves each submodule install independently: - isaaclab -> numpy stays at 2.3.1 (already satisfied) - isaaclab_mimic[h5py]-> numpy 1.26.4 (h5py wheel ABI) - isaaclab_rl -> numpy 2.4.5 - isaaclab_teleop[dex-retargeting] -> numpy 2.3.5 (cmeel-boost <2.4 cap) - isaaclab_visualizers-> numpy 2.3.4 - isaaclab_mimic[robomimic] -> numpy 1.26.4 - _ensure_pink_ik_dependencies_installed force-reinstall -> numpy 2.3.5 The final pin-pink force-reinstall sees only pin-pink's numpy>=1.19 plus cmeel-boost's numpy<2.4 cap and lands on numpy 2.3.5 - the exact release whose vendored OpenBLAS (libscipy_openblas64_-fdde5778.so) registers a buggy pthread_atfork handler that SIGSEGVs Kit's libomni.platforminfo fork() during SimulationApp startup. After the pin-pink force-reinstall, append one more pip invocation that explicitly upgrades numpy to >= 2.4.1. pip prints a resolver warning about cmeel-boost's cap but installs numpy 2.4.5 anyway; numpy's stable C ABI (numpy >= 2.0) keeps cmeel's compiled extensions (libpinocchio, libcoal, ...) working at runtime. The atfork fix landed upstream in numpy 2.4.1, so the entire 2.3.x risk class is bypassed. Validated locally on env_isaaclab_test (numpy 2.4.5 + pinocchio 3.9.0 + pin 3.9.0 + daqp + qpsolvers): - import numpy, pinocchio, pink, daqp: OK - Bundled OpenBLAS hash: -32a4b2a6 (not the broken -fdde5778) - IsaacLab Pink IK unit tests: 54/54 pass (test_pink_ik_components.py 21/21, test_local_frame_task.py 24/24, test_null_space_posture_task.py 9/9) Related: numpy/numpy#30092, OpenMathLib/OpenBLAS#5520
1 parent 51cde76 commit c2d7833

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,24 @@ def _ensure_pink_ik_dependencies_installed(python_exe: str, pip_cmd: list[str],
223223
f"{install_result.returncode}). The pink IK controller and its tests will not be"
224224
" usable until ``pin pin-pink==3.1.0 daqp==0.8.5`` is installed manually."
225225
)
226+
return
227+
228+
# Force numpy >= 2.4.1 to bypass the OpenBLAS atfork SIGSEGV that crashes
229+
# Kit's libomni.platforminfo fork() with numpy 2.3.5's vendored OpenBLAS
230+
# (libscipy_openblas64_-fdde5778.so). pip is asked to ignore cmeel-boost's
231+
# `numpy<2.4` cap; numpy's stable C ABI keeps cmeel's compiled extensions
232+
# (libpinocchio, libcoal, ...) working at runtime. See numpy/numpy#30092,
233+
# OpenMathLib/OpenBLAS#5520, OMPE-92261.
234+
print_info("Forcing numpy >= 2.4.1 to skip the OpenBLAS atfork SIGSEGV in numpy 2.3.5.")
235+
numpy_upgrade = run_command(
236+
pip_cmd + ["install", "--upgrade", "numpy>=2.4.1"],
237+
check=False,
238+
)
239+
if numpy_upgrade.returncode != 0:
240+
print_warning(
241+
f"Forcing numpy >= 2.4.1 failed (returncode {numpy_upgrade.returncode}). "
242+
"Kit fork() may SIGSEGV on numpy 2.3.5's vendored OpenBLAS."
243+
)
226244

227245

228246
def _ensure_cuda_torch() -> None:

0 commit comments

Comments
 (0)