IQ-Learn 在 RTX 3090 服务器上的环境配置与踩坑记录

最近在远程服务器上配置 IQ-Learn 的强化学习环境时,按照项目的 requirements.txt 直接安装依赖,过程中连续遇到了多个老项目兼容性问题。这里把排查和修复过程整理下来,方便以后快速复现。

1.项目依赖

项目的 requirements.txt 如下:

gym[box2d]==0.17.1

hydra-core==1.0.6

stable_baselines3==1.0

tensorboard==2.4.0

tensorboardX==2.1

torch==1.7.1

torchvision==0.8.2

tornado==5.1.1

tqdm==4.42.1

wandb

opencv-python==4.5.1.48

atari-py==0.2.6

gym_minigrid==1.0.2

mujoco_py==2.0.2

项目 README 中说明:

  • pytorch >= 1.4
  • hydra-core=1.0
  • hydra-core >= 1.1 当前不兼容

因此,真正不能随便升级的是 hydra-core,而 torch 虽然写得较老,但实际上可以根据 GPU 做适配。

2. 原始环境的问题

一开始直接执行:

pip install -r requirements.txt

报错主要集中在以下几个方面:

2.1 mujoco-py 找不到动态库路径

报错提示缺少:

LD_LIBRARY_PATH

说明 MuJoCo 路径没有正确导出。

2.2 box2d-py 编译失败

报错:

error: command 'swig' failed: No such file or directory

说明服务器缺少 swig。

2.3 mujoco-py 与 Cython 3.x 不兼容

报错涉及 noexcept / Cython.Compiler.Errors.CompileError,本质是:

  • mujoco-py==2.0.2.0
  • 不兼容 Cython 3.x

2.4 stable_baselines3 / tensorboard / protobuf 冲突

报错中出现:

Descriptors cannot be created directly

这是旧 tensorboard 与新 protobuf 不兼容。

2.5 tensorboard / stable_baselines3 与 numpy 冲突

报错:

AttributeError: module 'numpy' has no attribute 'object'

这是因为旧版 tensorboard 还在使用 np.object。

2.6 wandb 版本过新

运行 train_iq.py 时,wandb 对 Hydra/OmegaConf 配置对象的处理不兼容,报错:

TypeError: first argument must be callable or None

2.7 torch 1.7.1 无法驱动 RTX 3090

运行训练时出现:

NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation

说明 torch==1.7.1 太老,不支持 sm_86 架构。


3. 最终思路:单独创建适配 3090 的新环境

为了兼容 RTX 3090,我没有继续使用原来的 torch==1.7.1,而是新建了一个环境 irl,核心策略是:

  • 保留项目真正敏感的老依赖:
    • hydra-core==1.0.6
    • stable_baselines3==1.0
    • tensorboard==2.4.0
  • 将 torch / torchvision 升级到支持 3090 的版本:
    • torch==1.10.2+cu113
    • torchvision==0.11.3+cu113
  • 对其他依赖做兼容性回退:
    • Cython==0.29.37
    • protobuf==3.20.3
    • numpy==1.23.5
    • wandb==0.10.33
    • setuptools==59.5.0

4. 最终安装命令

4.1 创建环境

conda create -n irl python=3.8 -y conda activate irl

4.2 安装兼容旧 Hydra/OmegaConf 的 pip 和 setuptools

pip install --no-cache-dir "pip<24.1" pip install --no-cache-dir setuptools==59.5.0

说明:

  • pip>=24.1 会拒绝 omegaconf 2.0.x 的旧元数据格式
  • 较新的 setuptools 会让旧版 tensorboard/torch.utils.tensorboard 出现 distutils 兼容问题

4.3 安装编译工具

conda install -n irl -c conda-forge swig "cmake<4" make -y

说明:

  • swig 用于 box2d-py
  • cmake<4 用于兼容 atari-py==0.2.6

4.4 安装支持 RTX 3090 的 PyTorch

pip install --no-cache-dir \ torch==1.10.2+cu113 \ torchvision==0.11.3+cu113 \ --extra-index-url https://download.pytorch.org/whl/cu113

4.5 安装主依赖

pip install --no-cache-dir \ "gym[box2d]==0.17.1" \ hydra-core==1.0.6 \ stable_baselines3==1.0 \ tensorboard==2.4.0 \ tensorboardX==2.1 \ tornado==5.1.1 \ tqdm==4.42.1 \ opencv-python==4.5.1.48 \ gym_minigrid==1.0.2 \ termcolor

4.6 安装兼容性固定版本

pip install --no-cache-dir \ Cython==0.29.37 \ numpy==1.23.5 \ protobuf==3.20.3 \ wandb==0.10.33

4.7 配置 MuJoCo 路径

export MUJOCO_PY_MUJOCO_PATH=/home/duweicheng/.mujoco/mujoco200 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/duweicheng/.mujoco/mujoco200/bin

为了避免每次登录都重新设置,可以写入 ~/.bashrc:

echo 'export MUJOCO_PY_MUJOCO_PATH=/home/duweicheng/.mujoco/mujoco200' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/duweicheng/.mujoco/mujoco200/bin' >> ~/.bashrc source ~/.bashrc

4.8 安装 Box2D、MuJoCo、Atari 相关依赖

先安装 box2d-py:

pip install --no-cache-dir box2d-py==2.3.8

再安装 mujoco-py 的构建依赖:

pip install --no-cache-dir \ cffi==1.17.1 \ glfw==2.10.0 \ imageio==2.35.1 \ lockfile==0.12.2

安装 mujoco-py 时关闭构建隔离:

pip install --no-cache-dir --no-build-isolation mujoco-py==2.0.2.0

最后安装 Atari:

pip install --no-cache-dir atari-py==0.2.6


5. 如何验证安装成功

5.1 验证 PyTorch 和 3090 是否可用

python -c "import torch; print('torch:', torch.__version__); print('cuda available:', torch.cuda.is_available()); print('device 0:', torch.cuda.get_device_name(0))"

以及做一次真实的 CUDA 计算:

python -c "import torch; x=torch.randn(1024,1024, device='cuda'); y=torch.randn(1024,1024, device='cuda'); z=x@y; print('cuda matmul ok:', z.shape)"

如果这两步通过,说明:

  • PyTorch 版本支持 3090
  • CUDA 驱动和当前 wheel 匹配
  • GPU 计算是可用的

5.2 验证主要依赖导入成功

python -c "from stable_baselines3 import PPO; print('sb3 ok')" python -c "from torch.utils.tensorboard import SummaryWriter; print('tensorboard ok')" python -c "import mujoco_py; print('mujoco_py ok')" python -c "import atari_py; print('atari_py ok')"

5.3 运行训练命令

CUDA_VISIBLE_DEVICES=1 python train_iq.py env=hopper agent=sac expert.demos=1 method.loss=v0 method.regularize=True agent.actor_lr=3e-5 seed=0

如果能进入训练流程,就说明整个环境已经可用。


6. 这次实际解决了什么问题

本次环境配置最终解决了以下问题:

  • mujoco-py 缺少 LD_LIBRARY_PATH
  • box2d-py 需要 swig
  • mujoco-py 与 Cython 3.x 不兼容
  • tensorboard 2.4.0 与 protobuf 5.x 不兼容
  • tensorboard 2.4.0 与 numpy 1.24+ 不兼容
  • 过新 wandb 与旧版 Hydra/OmegaConf 配置对象不兼容
  • torch 1.7.1 不支持 RTX 3090 (sm_86)
  • 新版 pip 不兼容旧 omegaconf 2.0.x
  • 新版 setuptools 导致旧版 torch.utils.tensorboard 的 distutils 兼容问题
  • atari-py 与 cmake 4.x 不兼容
  • 项目还缺少 termcolor 这个未写入 requirements.txt 的依赖

7. 最终可用环境版本

下面是最终验证通过的核心版本组合:

python==3.8 pip==24.0 setuptools==59.5.0 torch==1.10.2+cu113 torchvision==0.11.3+cu113 gym==0.17.1 hydra-core==1.0.6 stable_baselines3==1.0 tensorboard==2.4.0 tensorboardX==2.1 tornado==5.1.1 tqdm==4.42.1 opencv-python==4.5.1.48 gym_minigrid==1.0.2 atari-py==0.2.6 mujoco-py==2.0.2.0 box2d-py==2.3.8 Cython==0.29.37 numpy==1.23.5 protobuf==3.20.3 wandb==0.10.33 setuptools==59.5.0 termcolor==*


8. 最终环境打印结果

安装并验证通过后,环境关键输出如下:

torch: 1.10.2+cu113 cuda available: True device 0: NVIDIA GeForce RTX 3090 cuda matmul ok: torch.Size([1024, 1024]) sb3 ok tensorboard ok mujoco_py ok atari_py ok

这说明:

  • GPU 可用
  • 3090 可被当前 PyTorch 正常驱动
  • stable_baselines3 可导入
  • tensorboard 可导入
  • mujoco_py 可导入
  • atari_py 可导入

环境已经满足 IQ-Learn 在 MuJoCo、Atari 等任务上的运行需求。


9. 整理好的完整bash指令

#!/usr/bin/env bash

set -euo pipefail

ENV_NAME="irl"

PYTHON_VERSION="3.8"

MUJOCO_PATH="/home/duweicheng/.mujoco/mujoco200"

echo "==> Creating conda environment: ${ENV_NAME}"

conda create -n "{ENV_NAME}" python="{PYTHON_VERSION}" -y

echo "==> Activating environment: ${ENV_NAME}"

source "$(conda info --base)/etc/profile.d/conda.sh"

conda activate "${ENV_NAME}"

echo "==> Downgrading pip for old hydra/omegaconf compatibility"

pip install --no-cache-dir "pip<24.1"

pip install --no-cache-dir setuptools==59.5.0

echo "==> Installing build tools"

conda install -n "${ENV_NAME}" -c conda-forge swig "cmake<4" make -y

echo "==> Installing PyTorch for RTX 3090"

pip install --no-cache-dir \

torch==1.10.2+cu113 \

torchvision==0.11.3+cu113 \

--extra-index-url https://download.pytorch.org/whl/cu113

echo "==> Installing base project dependencies"

pip install --no-cache-dir \

"gym[box2d]==0.17.1" \

hydra-core==1.0.6 \

stable_baselines3==1.0 \

tensorboard==2.4.0 \

tensorboardX==2.1 \

tornado==5.1.1 \

tqdm==4.42.1 \

opencv-python==4.5.1.48 \

gym_minigrid==1.0.2 \

termcolor

echo "==> Installing compatibility-pinned packages"

pip install --no-cache-dir \

Cython==0.29.37 \

numpy==1.23.5 \

protobuf==3.20.3 \

wandb==0.10.33

echo "==> Exporting MuJoCo environment variables for current session"

export MUJOCO_PY_MUJOCO_PATH="${MUJOCO_PATH}"

export LD_LIBRARY_PATH="{LD_LIBRARY_PATH:-}:{MUJOCO_PATH}/bin"

echo "==> Checking MuJoCo path"

test -d "${MUJOCO_PATH}/bin"

echo "==> Installing Box2D"

pip install --no-cache-dir box2d-py==2.3.8

echo "==> Installing explicit MuJoCo build deps"

pip install --no-cache-dir \

cffi==1.17.1 \

glfw==2.10.0 \

imageio==2.35.1 \

lockfile==0.12.2

echo "==> Installing mujoco-py without build isolation"

pip install --no-cache-dir --no-build-isolation mujoco-py==2.0.2.0

echo "==> Installing Atari dependency"

cmake --version

pip install --no-cache-dir atari-py==0.2.6

echo "==> Persisting MuJoCo environment variables to ~/.bashrc if missing"

grep -qxF "export MUJOCO_PY_MUJOCO_PATH=${MUJOCO_PATH}" ~/.bashrc || \

echo "export MUJOCO_PY_MUJOCO_PATH=${MUJOCO_PATH}" >> ~/.bashrc

grep -qxF "export LD_LIBRARY_PATH=\LD_LIBRARY_PATH:{MUJOCO_PATH}/bin" ~/.bashrc || \

echo "export LD_LIBRARY_PATH=\LD_LIBRARY_PATH:{MUJOCO_PATH}/bin" >> ~/.bashrc

echo "==> Verifying installation"

python -c "import torch; print('torch:', torch.version); print('cuda available:', torch.cuda.is_available()); print('device 0:', torch.cuda.get_device_name(0))"

python -c "import torch; x=torch.randn(1024,1024, device='cuda'); y=torch.randn(1024,1024, device='cuda'); z=x@y; print('cuda matmul ok:', z.shape)"

python -c "from stable_baselines3 import PPO; print('sb3 ok')"

python -c "from torch.utils.tensorboard import SummaryWriter; print('tensorboard ok')"

python -c "import mujoco_py; print('mujoco_py ok')"

python -c "import atari_py; print('atari_py ok')"

echo "==> Done"

echo "Activate with: conda activate ${ENV_NAME}"

echo "Run Hopper training with:"

echo "CUDA_VISIBLE_DEVICES=1 python train_iq.py env=hopper agent=sac expert.demos=1 method.loss=v0 method.regularize=True agent.actor_lr=3e-5 seed=0"

10.现有的环境包

Package Version


absl-py 2.3.1

antlr4-python3-runtime 4.8

atari-py 0.2.6

box2d-py 2.3.8

cachetools 4.2.4

certifi 2026.4.22

cffi 1.17.1

charset-normalizer 3.4.7

click 8.1.8

cloudpickle 1.3.0

configparser 7.1.0

contourpy 1.1.1

cycler 0.12.1

Cython 0.29.37

docker-pycreds 0.4.0

fonttools 4.57.0

future 1.0.0

gitdb 4.0.12

GitPython 3.1.49

glfw 2.10.0

google-auth 1.35.0

google-auth-oauthlib 0.4.6

grpcio 1.70.0

gym 0.17.1

gym-minigrid 1.0.2

hydra-core 1.0.6

idna 3.13

imageio 2.35.1

importlib_metadata 8.5.0

importlib_resources 6.4.5

kiwisolver 1.4.7

lockfile 0.12.2

Markdown 3.7

MarkupSafe 2.1.5

matplotlib 3.7.5

mujoco-py 2.0.2.0

numpy 1.23.5

nvidia-ml-py 13.590.48

nvitop 1.6.2

oauthlib 3.3.1

omegaconf 2.0.6

opencv-python 4.5.1.48

packaging 26.2

pandas 2.0.3

pathtools 0.1.2

pillow 10.4.0

pip 24.0

promise 2.3

protobuf 3.20.3

psutil 7.2.2

pyasn1 0.6.3

pyasn1_modules 0.4.2

pycparser 2.23

pyglet 1.5.0

pyparsing 3.1.4

python-dateutil 2.9.0.post0

pytz 2026.2

PyYAML 6.0.3

requests 2.32.4

requests-oauthlib 2.0.0

rsa 4.9.1

scipy 1.10.1

sentry-sdk 2.58.0

setuptools 59.5.0

shortuuid 1.0.13

six 1.17.0

smmap 5.0.3

stable-baselines3 1.0

subprocess32 3.5.4

tensorboard 2.4.0

tensorboard-plugin-wit 1.8.1

tensorboardX 2.1

termcolor 2.4.0

torch 1.10.2+cu113

torchvision 0.11.3+cu113

tornado 5.1.1

tqdm 4.42.1

typing_extensions 4.13.2

tzdata 2026.2

urllib3 2.2.3

wandb 0.10.33

Werkzeug 3.0.6

wheel 0.44.0

zipp 3.20.2
href="blob:https://mp.csdn.net/9b283dfd-623b-4845-afc2-e02622ff2c66" rel="stylesheet" />

相关推荐
QFIUNE2 小时前
CD-HIT 详解:序列去冗余、安装使用与聚类结果解析
linux·服务器·机器学习·数据挖掘·conda·聚类
marsh02062 小时前
43 openclaw熔断与降级:保障系统在异常情况下的可用性
java·运维·网络·ai·编程·技术
摇滚侠2 小时前
Docker 如何查询挂载的目录
运维·docker·容器
勇闯逆流河3 小时前
【Linux】linux进程控制(进程池的详解与实现)
linux·运维·服务器
zhangfeng11334 小时前
部署到服务器上 宝塔系统 使用宝塔在线编辑器 FTP 批量上传 Git 部署 打包上传 codebudyy 编程程序开发
服务器·git·编辑器
WJ.Polar4 小时前
Scapy基本应用
linux·运维·网络·python
lljss20204 小时前
1. NameServer 域名服务器---NS
linux·服务器·前端
数智顾问6 小时前
(123页PPT)华为流程管理体系精髓提炼(附下载方式)
运维·华为
网络工程小王7 小时前
【LCEL 链式调用详解】调用篇-2
java·服务器·前端·数据库·人工智能