Habitat 3.0 环境配置及报错完美解决(含Linux、MacOS系统)
最近在入门 Embodied AI
,在实验室中了解到
Meta
的Habitat模拟器。这是一个用于agent仿真的模拟平台,并且刚出了Habitat
3.0版本。无奈新版本嘛,难免有各种各样的bug,刚好网上也找不到太多资料,于是我总结了habitat-lab开发库配置过程中遇到的一部分bug。一方面给自己总结记录,另一方面帮助大家避开一些坑。
Linux环境(配置Ubuntu 22.04 + GPU 3090)
笔者一开始是打算用自己的windows机器跑下实例代码,发现居然没法
conda install habitat-sim
,看样子不支持windows环境。于是用linux服务器进行接下来的实验,参考habitat-lab的官方github主页进行安装。
- 创建conda环境
我们采用默认的conda安装方式,先执行
conda create -n habitat python=3.9 cmake=3.14.0 |
- 配置底层模拟器
habitat-sim,也就是habitat-lab的核心模拟器。habitat-sim官方给出了几种安装方式(如果没有显示器也不一定要下载headless版本,下默认版本然后通过NoMachine远程连接查看桌面亲测可行)。那么我们这里就跟着habitat-lab的官方步骤往下走:
conda install habitat-sim withbullet -c conda-forge -c aihabitat |
- 安装开发依赖
这一步官方考虑的是让用户git clone一个稳定版本的分支,但是事实上并没有这个分支,这个问题会让后续的训练运行出错,这里暂且埋一手伏笔[1]。
git clone --branch stable https://github.com/facebookresearch/habitat-lab.git |
- 安装测试数据
第一,需要先配置hugging face的ssh密钥,步骤见huggingface官方说明。事实上这里引用了habitat-sim库中的datasets_downloads文件,并且根据这个文件,我们可以看到里面定义了每个数据对应的下载网址,因此如果无法科学上网也可以自行下载后放在指定位置(按以上的默认命令会下到habitat-lab/data/version_data,而不是habitat-lab/data/)。
随后运行该指令,如果数据集不完整,也不会继续安装,需要把原路径的文件删掉从头安装。如果数据集安装完整了,就会生成symlink,如下图。注意提示Replace versioned data?
的时候务必选n,否则会再下载一次。
第二,安装(点导航)测试数据集的时候,通过搭梯子也可能没法下载,需要直接在datasets_downloads找到对应网址,http://dl.fbaipublicfiles.com/habitat/habitat-test-pointnav-dataset_v1.0.zip,这个链接复制到浏览器就可以直接下载,同样放到路径habitat-lab/data/version_data
- 测试配置环境
有两种方式的测试方法,分为非交互式和交互式(根据用户输入进行活动交互)
- 非交互式:运行
python examples/example.py
,如果没有在前一步安装数据,这一步就会自动安装,最后提示Episode finished after 1 steps.
就算成功。 - 交互式:需要先安装依赖
pip install pygame==2.0.1 pybullet==3.0.4
,随后运行python examples/example.py --never-end
。按理说成功的话会显示一个交互式的pygame页面,可操纵fetch robot在场景中移动。但是Ubuntu 20.04及以上的机子会显示以下报错。
X Error of failed request: BadAccess (attempt to access private resource denied) |
官网中也提到了这个问题还没解决,并且根据github官网相关的Issues,我们可以推断在短期内不太可能解决这个问题,因此我换了MacOS系统来解决交互测试的问题。
MacOS环境(配置Mac M1 Pro)
- 创建conda环境
因为我用了苹果自带芯片M1(arm64架构),不同于intel x86_64,所以conda中有些包下不到对应版本很可能是这个问题,对于这种情况需要创建基于x86架构平台的conda环境。
CONDA_SUBDIR=osx-64 conda create -n habitat python=3.9 cmake=3.14.0 |
- 配置底层模拟器(同上述Linux环境操作)
conda install habitat-sim withbullet -c conda-forge -c aihabitat |
- 安装开发依赖(同上述Linux环境操作)
git clone --branch stable https://github.com/facebookresearch/habitat-lab.git |
- 安装测试数据(同上述Linux环境操作)
安装3D测试场景:
python -m habitat_sim.utils.datasets_download --uids habitat_test_scenes --data-path data/
安装(点导航)测试数据集:
python -m habitat_sim.utils.datasets_download --uids habitat_test_pointnav_dataset --data-path data/
- 测试配置环境
- 非交互式:运行
python examples/example.py
,同样是提示Episode finished after 1 steps.
就算成功。 - 交互式:需要先安装依赖
pip install pygame==2.0.1 pybullet==3.0.4
,随后运行python examples/example.py --never-end
。按理说成功的话会显示一个交互式的pygame页面,可操纵fetch robot在场景中移动。
如果你的代码能正常执行,那么恭喜你不用看后文了。
如果你的代码在测试配置环境中报错,很可能属于以下两种,(Github官网和互联网的相关资料很少),最后总结出完美的解决方法如下:
MacOS环境特殊报错
- 测试代码报错如下:
OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized. |
为了防止该报错,Stackoverflow有多种方法,
方法一:在终端(Terminal)中关闭警告(临时的解决方法)
export KMP_DUPLICATE_LIB_OK=True |
方法二:针对intel mac,参考这个链接,键入以下命令解决
conda uninstall intel-openmp |
方法三:针对m芯片 mac
对于苹果芯片,以上两种方法基本都没用。这是因为苹果自带芯片比较特殊,如果下载的包(主要是numpy, spicy, matplotlib)含有不同的C++编译方法,并行编程会报错。我们参考Stackoverflow的问答找到可能的原因,numpy, scipy, pandas, tensorflow等几个包可能使用了不同的并行编程方式,优先解决它们这几个包的问题。对我来说,我运行了以下代码修复:
conda update --all |
最终归因于numba使用了pip下载,和conda下载的numpy不兼容导致这个问题,该报错完美解决。
- 测试代码报错
AttributeError: 'RearrangeSim' object has no attribute '_initialized’ |
我的代码一开始没有这个报错,后来似乎是因为habitat官方把stable版本的代码更新不全导致,因为我直接在原来的环境使用了以下命令解决:
conda install habitat-sim withbullet -c conda-forge -c aihabitat-nightly |
区别在于原来最后的部分是aihabitat,多了nightly部分,代表官方每天发布的最新版本。
- 安装pybullet报错
交互测试前需要通过pip install pygame==2.0.1 pybullet==3.0.4
下载依赖,单独下载前一个是ok的,后一个的下载却报错如下(只截取最后一句):
ERROR: Could not build wheels for pybullet, which is required to install pyproject.toml-based projects |
直接换下载源(pip换成conda)解决,默认下最新版本就可以了
conda install pybullet |
其他杂七杂八的bug网上应该查得到,这里不一一赘述了,habitat的讨论帖实在太少,欢迎留言评论交流~