Unverified Commit cd204adf authored by ooctipus's avatar ooctipus Committed by GitHub

Adds torch hook to export libgomp.so.1 from installed torch (#3512)

# Description

This PR makes the LD_PRELOAD always points to the right python
libgomp.so.1 when conda activate is invoked.

The ARM machines doesn't really work with conda unless LD_PRELOAD is
point to `torch/lib/libgomp.so.1`

This has been tested to work on linux and arm to work on both machines

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

Please attach before and after screenshots of the change if applicable.

<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [ ] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
parent 3a0db9d7
......@@ -247,6 +247,45 @@ install_isaaclab_extension() {
fi
}
# Resolve Torch-bundled libgomp and prepend to LD_PRELOAD, once per shell session
write_torch_gomp_hooks() {
mkdir -p "${CONDA_PREFIX}/etc/conda/activate.d" "${CONDA_PREFIX}/etc/conda/deactivate.d"
# activation: resolve Torch's libgomp via this env's Python and prepend to LD_PRELOAD
cat > "${CONDA_PREFIX}/etc/conda/activate.d/torch_gomp.sh" <<'EOS'
# Resolve Torch-bundled libgomp and prepend to LD_PRELOAD (quiet + idempotent)
: "${_IL_PREV_LD_PRELOAD:=${LD_PRELOAD-}}"
__gomp="$("$CONDA_PREFIX/bin/python" - <<'PY' 2>/dev/null || true
import pathlib
try:
import torch
p = pathlib.Path(torch.__file__).parent / 'lib' / 'libgomp.so.1'
print(p if p.exists() else "", end="")
except Exception:
pass
PY
)"
if [ -n "$__gomp" ] && [ -r "$__gomp" ]; then
case ":${LD_PRELOAD:-}:" in
*":$__gomp:"*) : ;; # already present
*) export LD_PRELOAD="$__gomp${LD_PRELOAD:+:$LD_PRELOAD}";;
esac
fi
unset __gomp
EOS
# deactivation: restore original LD_PRELOAD
cat > "${CONDA_PREFIX}/etc/conda/deactivate.d/torch_gomp_unset.sh" <<'EOS'
# restore LD_PRELOAD to pre-activation value
if [ -v _IL_PREV_LD_PRELOAD ]; then
export LD_PRELOAD="$_IL_PREV_LD_PRELOAD"
unset _IL_PREV_LD_PRELOAD
fi
EOS
}
# setup anaconda environment for Isaac Lab
setup_conda_env() {
# get environment name from input
......@@ -311,6 +350,7 @@ setup_conda_env() {
'export RESOURCE_NAME="IsaacSim"' \
'' > ${CONDA_PREFIX}/etc/conda/activate.d/setenv.sh
write_torch_gomp_hooks
# check if we have _isaac_sim directory -> if so that means binaries were installed.
# we need to setup conda variables to load the binaries
local isaacsim_setup_conda_env_script=${ISAACLAB_PATH}/_isaac_sim/setup_conda_env.sh
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment