Skip to content

Commit 071d079

Browse files
committed
[CI] Fix libs
ghstack-source-id: 8598e46 Pull-Request: #3203
1 parent bd93f13 commit 071d079

File tree

5 files changed

+94
-56
lines changed

5 files changed

+94
-56
lines changed

.github/unittest/linux_libs/scripts_isaaclab/isaac.sh

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export TF_CPP_MIN_LOG_LEVEL=0
2020
export BATCHED_PIPE_TIMEOUT=60
2121
export TD_GET_DEFAULTS_TO_NONE=1
2222
export OMNI_KIT_ACCEPT_EULA=yes
23+
export PIP_DISABLE_PIP_VERSION_CHECK=1
24+
export PYTHONNOUSERSITE=1
2325

2426
nvidia-smi
2527

@@ -46,36 +48,49 @@ eval "$(${conda_dir}/bin/conda shell.bash hook)"
4648
conda create --prefix ${env_dir} python=3.10 -y
4749
conda activate ${env_dir}
4850

51+
# Set LD_LIBRARY_PATH to prioritize conda environment libraries
52+
export LD_LIBRARY_PATH=${lib_dir}:${LD_LIBRARY_PATH:-}
53+
54+
# Install a compatible version of expat (< 2.6.0 to avoid XML_SetReparseDeferralEnabled symbol issues)
55+
conda install -c conda-forge "expat<2.6" -y
56+
57+
# Reinstall Python to ensure it's properly linked against the conda expat
58+
conda install --force-reinstall python=3.10 -y
59+
60+
# Verify the expat linkage
61+
echo "* Checking pyexpat linkage:"
62+
python -c "import pyexpat; print('pyexpat imported successfully')" || echo "WARNING: pyexpat import failed"
63+
4964
# Pin pytorch to 2.5.1 for IsaacLab
5065
conda install pytorch==2.5.1 torchvision==0.20.1 pytorch-cuda=12.4 -c pytorch -c nvidia -y
5166

52-
conda run -p ${env_dir} pip install --upgrade pip
53-
conda run -p ${env_dir} pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com
67+
python -m pip install --upgrade pip --disable-pip-version-check
68+
python -m pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com --disable-pip-version-check
5469
conda install conda-forge::"cmake>3.22" -y
5570

5671
git clone https://github.com/isaac-sim/IsaacLab.git
5772
cd IsaacLab
58-
conda run -p ${env_dir} ./isaaclab.sh --install sb3
73+
./isaaclab.sh --install sb3
5974
cd ../
6075

6176
# install tensordict
6277
if [[ "$RELEASE" == 0 ]]; then
6378
conda install "anaconda::cmake>=3.22" -y
64-
conda run -p ${env_dir} python -m pip install "pybind11[global]"
65-
conda run -p ${env_dir} python -m pip install git+https://github.com/pytorch/tensordict.git
79+
python -m pip install "pybind11[global]" --disable-pip-version-check
80+
python -m pip install git+https://github.com/pytorch/tensordict.git --disable-pip-version-check
6681
else
67-
conda run -p ${env_dir} python -m pip install tensordict
82+
python -m pip install tensordict --disable-pip-version-check
6883
fi
6984

7085
# smoke test
71-
conda run -p ${env_dir} python -c "import tensordict"
86+
python -c "import tensordict"
7287

7388
printf "* Installing torchrl\n"
74-
conda run -p ${env_dir} python -m pip install -e . --no-build-isolation
75-
conda run -p ${env_dir} python -c "import torchrl"
89+
python -m pip install -e . --no-build-isolation --disable-pip-version-check
90+
python -c "import torchrl"
7691

7792
# Install pytest
78-
conda run -p ${env_dir} python -m pip install pytest pytest-cov pytest-mock pytest-instafail pytest-rerunfailures pytest-error-for-skips pytest-asyncio
93+
python -m pip install pytest pytest-cov pytest-mock pytest-instafail pytest-rerunfailures pytest-error-for-skips pytest-asyncio --disable-pip-version-check
7994

8095
# Run tests
81-
conda run -p ${env_dir} python -m pytest test/test_libs.py -k isaac -s
96+
python -m pytest test/test_libs.py -k isaac -s

.github/unittest/linux_libs/scripts_minari/environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ dependencies:
2525
- gymnasium-robotics
2626
- minari[create]
2727
- jax>=0.7.0
28-
- mujoco<3.3.6
28+
- mujoco>=2.3.0,<3.0.0
2929
- mujoco-py<2.2,>=2.1
3030
- minigrid

.github/workflows/test-linux-libs.yml

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -91,40 +91,40 @@ jobs:
9191
9292
bash .github/unittest/linux_libs/scripts_brax/run_all.sh
9393
94-
unittests-d4rl:
95-
strategy:
96-
matrix:
97-
python_version: ["3.10"]
98-
cuda_arch_version: ["12.8"]
99-
if: ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'Data') }}
100-
uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main
101-
with:
102-
repository: pytorch/rl
103-
runner: "linux.g5.4xlarge.nvidia.gpu"
104-
docker-image: "nvidia/cuda:12.4.0-devel-ubuntu22.04"
105-
timeout: 120
106-
script: |
107-
if [[ "${{ github.ref }}" =~ release/* ]]; then
108-
export RELEASE=1
109-
export TORCH_VERSION=stable
110-
else
111-
export RELEASE=0
112-
export TORCH_VERSION=nightly
113-
fi
94+
# unittests-d4rl:
95+
# strategy:
96+
# matrix:
97+
# python_version: ["3.10"]
98+
# cuda_arch_version: ["12.8"]
99+
# if: ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'Data') }}
100+
# uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main
101+
# with:
102+
# repository: pytorch/rl
103+
# runner: "linux.g5.4xlarge.nvidia.gpu"
104+
# docker-image: "nvidia/cuda:12.4.0-devel-ubuntu22.04"
105+
# timeout: 120
106+
# script: |
107+
# if [[ "${{ github.ref }}" =~ release/* ]]; then
108+
# export RELEASE=1
109+
# export TORCH_VERSION=stable
110+
# else
111+
# export RELEASE=0
112+
# export TORCH_VERSION=nightly
113+
# fi
114114

115-
set -euo pipefail
116-
export PYTHON_VERSION="3.10"
117-
export CU_VERSION="cu128"
118-
export TAR_OPTIONS="--no-same-owner"
119-
export UPLOAD_CHANNEL="nightly"
120-
export TF_CPP_MIN_LOG_LEVEL=0
121-
export BATCHED_PIPE_TIMEOUT=60
122-
export TD_GET_DEFAULTS_TO_NONE=1
115+
# set -euo pipefail
116+
# export PYTHON_VERSION="3.10"
117+
# export CU_VERSION="cu128"
118+
# export TAR_OPTIONS="--no-same-owner"
119+
# export UPLOAD_CHANNEL="nightly"
120+
# export TF_CPP_MIN_LOG_LEVEL=0
121+
# export BATCHED_PIPE_TIMEOUT=60
122+
# export TD_GET_DEFAULTS_TO_NONE=1
123123

124-
bash .github/unittest/linux_libs/scripts_d4rl/setup_env.sh
125-
bash .github/unittest/linux_libs/scripts_d4rl/install.sh
126-
bash .github/unittest/linux_libs/scripts_d4rl/run_test.sh
127-
bash .github/unittest/linux_libs/scripts_d4rl/post_process.sh
124+
# bash .github/unittest/linux_libs/scripts_d4rl/setup_env.sh
125+
# bash .github/unittest/linux_libs/scripts_d4rl/install.sh
126+
# bash .github/unittest/linux_libs/scripts_d4rl/run_test.sh
127+
# bash .github/unittest/linux_libs/scripts_d4rl/post_process.sh
128128

129129
unittests-envpool:
130130
strategy:
@@ -156,10 +156,10 @@ jobs:
156156
export BATCHED_PIPE_TIMEOUT=60
157157
export TD_GET_DEFAULTS_TO_NONE=1
158158
159-
bash .github/unittest/linux_libs/scripts_d4rl/setup_env.sh
160-
bash .github/unittest/linux_libs/scripts_d4rl/install.sh
161-
bash .github/unittest/linux_libs/scripts_d4rl/run_test.sh
162-
bash .github/unittest/linux_libs/scripts_d4rl/post_process.sh
159+
bash .github/unittest/linux_libs/scripts_envpool/setup_env.sh
160+
bash .github/unittest/linux_libs/scripts_envpool/install.sh
161+
bash .github/unittest/linux_libs/scripts_envpool/run_test.sh
162+
bash .github/unittest/linux_libs/scripts_envpool/post_process.sh
163163
164164
unittests-gendgrl:
165165
strategy:

test/test_libs.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
from torchrl.data.datasets.roboset import RobosetExperienceReplay
7474
from torchrl.data.datasets.vd4rl import VD4RLExperienceReplay
7575
from torchrl.data.replay_buffers import SamplerWithoutReplacement
76+
from torchrl.data.replay_buffers.samplers import SliceSampler
77+
from torchrl.data.replay_buffers.storages import LazyTensorStorage
7678
from torchrl.data.utils import CloudpickleWrapper
7779
from torchrl.envs import (
7880
CatTensors,
@@ -82,6 +84,7 @@
8284
EnvCreator,
8385
RemoveEmptySpecs,
8486
RenameTransform,
87+
StepCounter,
8588
)
8689
from torchrl.envs.batched_envs import SerialEnv
8790
from torchrl.envs.libs.brax import _has_brax, BraxEnv, BraxWrapper
@@ -2790,7 +2793,6 @@ class TestVmas:
27902793
@pytest.mark.parametrize("scenario_name", VmasWrapper.available_envs)
27912794
@pytest.mark.parametrize("continuous_actions", [True, False])
27922795
def test_all_vmas_scenarios(self, scenario_name, continuous_actions):
2793-
27942796
env = VmasEnv(
27952797
scenario=scenario_name,
27962798
continuous_actions=continuous_actions,
@@ -3455,12 +3457,16 @@ def test_d4rl_dummy(self, task):
34553457
@pytest.mark.parametrize("split_trajs", [True, False])
34563458
@pytest.mark.parametrize("from_env", [True, False])
34573459
def test_dataset_build(self, task, split_trajs, from_env):
3460+
import d4rl # noqa: F401
3461+
34583462
t0 = time.time()
34593463
data = D4RLExperienceReplay(
34603464
task, split_trajs=split_trajs, from_env=from_env, batch_size=2
34613465
)
34623466
sample = data.sample()
3463-
env = GymWrapper(gym.make(task))
3467+
# D4RL environments are registered with gym, not gymnasium
3468+
with set_gym_backend("gym"):
3469+
env = GymWrapper(gym.make(task))
34643470
rollout = env.rollout(2)
34653471
for key in rollout.keys(True, True):
34663472
if "truncated" in key:
@@ -5144,6 +5150,17 @@ def test_isaaclab(self, env):
51445150
env.check_env_specs(break_when_any_done="both")
51455151
torchrl_logger.info("Check succeeded!")
51465152

5153+
def test_isaaclab_rb(self, env):
5154+
env = env.append_transform(StepCounter())
5155+
rb = ReplayBuffer(
5156+
storage=LazyTensorStorage(50, ndim=2), sampler=SliceSampler(num_slices=5)
5157+
)
5158+
rb.extend(env.rollout(20))
5159+
# check that rb["step_count"].flatten() is made of sequences of 4 consecutive numbers
5160+
flat_ranges = rb["step_count"].flatten() % 4
5161+
arange = torch.arange(flat_ranges.numel(), device=flat_ranges.device) % 4
5162+
assert (flat_ranges == arange).all()
5163+
51475164
def test_isaac_collector(self, env):
51485165
col = SyncDataCollector(
51495166
env, env.rand_action, frames_per_batch=1000, total_frames=100_000_000

torchrl/data/datasets/d4rl.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,16 +267,19 @@ def _get_dataset_direct_download(self, name, env_kwargs):
267267
return dataset
268268

269269
def _get_dataset_direct(self, name, env_kwargs):
270-
from torchrl.envs.libs.gym import GymWrapper
270+
from torchrl.envs.libs.gym import GymWrapper, set_gym_backend
271271

272272
type(self)._import_d4rl()
273273

274274
if not self._has_d4rl:
275275
raise ImportError("Could not import d4rl") from self.D4RL_ERR
276276
import d4rl
277-
import gym
278277

279-
env = GymWrapper(gym.make(name))
278+
# D4RL environments are registered with gym, not gymnasium
279+
# so we need to ensure we're using the gym backend
280+
with set_gym_backend("gym"):
281+
import gym
282+
env = GymWrapper(gym.make(name))
280283
with tempfile.TemporaryDirectory() as tmpdir:
281284
os.environ["D4RL_DATASET_DIR"] = tmpdir
282285
dataset = d4rl.qlearning_dataset(env._env, **env_kwargs)
@@ -346,12 +349,15 @@ def _get_dataset_from_env(self, name, env_kwargs):
346349
"""
347350
if env_kwargs:
348351
raise RuntimeError("env_kwargs cannot be passed with using from_env=True")
349-
import gym
352+
import d4rl # noqa: F401
350353

351354
# we do a local import to avoid circular import issues
352-
from torchrl.envs.libs.gym import GymWrapper
355+
from torchrl.envs.libs.gym import GymWrapper, set_gym_backend
353356

354-
with tempfile.TemporaryDirectory() as tmpdir:
357+
# D4RL environments are registered with gym, not gymnasium
358+
# so we need to ensure we're using the gym backend
359+
with set_gym_backend("gym"), tempfile.TemporaryDirectory() as tmpdir:
360+
import gym
355361
os.environ["D4RL_DATASET_DIR"] = tmpdir
356362
env = GymWrapper(gym.make(name))
357363
dataset = make_tensordict(

0 commit comments

Comments
 (0)