Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人强化学习训练平台。

1.配置系统环境

Ubuntu22.04 安装 CUDA

Ubuntu22.04 安装 Miniconda3

2.安装Isaac Gym

NVIDIA Developer 下载安装文件IsaacGym_Preview_4_Package.tar.gz,下载后解压。

添加虚拟环境

# 创建虚拟环境,环境名称可自定义
conda create -n rlgpu python=3.8
conda activate rlgpu

# 安装Python包及相关依赖
cd isaacgym/python
pip install -e .

3. 配置环境变量

如果此时运行例程,会报错:ImportError: libpython3.8.so.1.0: cannot open shared object file: No such file or directory。这是因为Isaac Gym 适配到python3.8,而ubuntu22.04 使用的python是3.10。

conda 提供了钩子(hooks)机制,允许在激活和去激活环境时运行自定义脚本。现在通过脚本将虚拟环境中动态链接库路径链接到环境变量 LD_LIBRARY_PATH 中。

3.1.创建激活脚本

在激活虚拟环境时,activate.d 文件夹中的脚本会被依次执行。通过在 activate.d 中添加脚本,可以在激活环境时设置环境变量,创建脚本,例如 set_env_vars.sh:

# 要先确保已激活虚拟环境
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
touch $CONDA_PREFIX/etc/conda/activate.d/set_env_vars.sh

编辑脚本文件,添加以下内容:

#!/bin/bash
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

3.2.创建去激活脚本

在退出虚拟环境时,deactivate.d 文件夹中的脚本会被依次执行。通过在 deactivate.d 中添加脚本,可以在退出环境时清理环境变量,创建脚本,例如 unset_env_vars.sh:

mkdir -p $CONDA_PREFIX/etc/conda/deactivate.d
touch $CONDA_PREFIX/etc/conda/deactivate.d/unset_env_vars.sh

编辑脚本文件,添加以下内容,从环境变量中移除 $CONDA_PREFIX/lib:

#!/bin/bash
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed "s|$CONDA_PREFIX/lib:||")

3.3.确保脚本可执行

运行以下命令,确保这两个脚本是可执行的:

chmod +x $CONDA_PREFIX/etc/conda/activate.d/set_env_vars.sh
chmod +x $CONDA_PREFIX/etc/conda/deactivate.d/unset_env_vars.sh

3.4.测试

检查 LD_LIBRARY_PATH 是否正确添加:

# 退出环境重新激活
conda activate rlgpu
echo $LD_LIBRARY_PATH

应该会看到虚拟环境的动态链接库路径被添加到了 LD_LIBRARY_PATH 中,例如:/home/q/miniconda3/envs/rlgpu/lib:/other/lib

退出虚拟环境,检查动态链接库路径是否正确移除:

conda deactivate
echo $LD_LIBRARY_PATH

正确的情况是没有了conda相关的路径,例如:/other/lib

4.运行例程

运行例程验证效果,能出现下图情况则配置完成。

cd examples
python 1080_balls_of_solitude.py

在这里插入图片描述

5.附:Isaac Gym 无响应问题

以下问题如果没有遇到则略过。

在有些电脑上,可能打开Isaac Gym界面会卡住,具体是卡在 gym.draw_viewer(viewer, sim, True)

在这里插入图片描述

可以强制指定使用 NVIDIA 的 Vulkan 驱动解决。

具体操作还是采用 Conda 的钩子机制(避免污染全局环境)。

5.1.创建激活脚本

# 要先确保已激活虚拟环境,并创建了activate.d文件夹
touch $CONDA_PREFIX/etc/conda/activate.d/set_nvidia_vulkan.sh

编辑脚本文件,添加以下内容:

#!/bin/bash
# backup
export _CONDA_BACKUP_VK_ICD_FILENAMES="${VK_ICD_FILENAMES:-}"
# set new value
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json

5.2.创建去激活脚本

在退出环境时恢复 VK_ICD_FILENAMES,创建脚本:

# 要先确保已激活虚拟环境,并创建了deactivate.d文件夹
touch $CONDA_PREFIX/etc/conda/deactivate.d/unset_nvidia_vulkan.sh

编辑脚本文件,添加以下内容:

#!/bin/bash
if [[ -n "${_CONDA_BACKUP_VK_ICD_FILENAMES:-}" ]]; then
    export VK_ICD_FILENAMES="$_CONDA_BACKUP_VK_ICD_FILENAMES"
else
    unset VK_ICD_FILENAMES
fi
unset _CONDA_BACKUP_VK_ICD_FILENAMES

5.3.确保脚本可执行

运行以下命令,确保这两个脚本是可执行的:

chmod +x $CONDA_PREFIX/etc/conda/activate.d/set_nvidia_vulkan.sh
chmod +x $CONDA_PREFIX/etc/conda/deactivate.d/unset_nvidia_vulkan.sh

5.4.测试

检查 VK_ICD_FILENAMES 是否正确添加:

conda activate rlgpu
echo $VK_ICD_FILENAMES

应该会看到 /usr/share/vulkan/icd.d/nvidia_icd.json

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐