NaVILA 在 RTX5090 上的复现笔记
复现过程
本配置成功在 AutoDL算例平台 所租 RTX 5090 服务器上复现
-
迁移conda到数据盘(避免系统盘空间不足)并创建环境
navila-evalmv ~/miniconda3 ~/autodl-tmp/miniconda3 ln -s ~/autodl-tmp/miniconda3 ~/miniconda3 conda create -n navila-eval python=3.10 conda activate navila-eval -
拉取NaVILA
cd ~ git clone https://github.com/anjiecheng/navila.git NaVILA -
构建Habitat-Sim & Lab (使用 v0.1.7 老版本,新版有兼容性问题)
-
从源码构建 Habitat-Sim:
cd ~/NaVILA conda activate navila-eval git clone --branch v0.1.7 https://github.com/facebookresearch/habitat-sim.git # 可能需要..上网 cd habitat-sim git submodule update --init --recursive # 递归下载子仓库,可能需要..上网 # 为了解决新版NumPy的兼容性问题,运行下面: python ../evaluation/scripts/habitat_sim_autofix.py # 将会自动修改habitat-sim/habitat_sim/utils/common.py pip install -r requirements.txt # 如果出现路径问题编译不成功,可能因为之前编译过了,进入到habitat-sim目录删除build(rm -rf build) pip install cmake sudo apt-get update || true sudo apt-get install -y --no-install-recommends \ libjpeg-dev libglm-dev libgl1-mesa-glx libegl1-mesa-dev mesa-utils xorg-dev freeglut3-dev pip install --upgrade pybind11 # 注意,编译要采用headless模式 # rm -rf build python setup.py install --headless --cmake-args="-DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_CXX_STANDARD=11" -
从源码构建 Habitat-Lab:
cd ~/NaVILA conda activate navila-eval git clone --branch v0.1.7 https://github.com/facebookresearch/habitat-lab.git # 可能需要..上网 cd habitat-lab # installs both habitat and habitat_baselines python -m pip install -r requirements.txt python -m pip install -r habitat_baselines/rl/requirements.txt # 注意,habitat_baselines/rl/requirements.txt中的tensorflow==1.13.1会产生版本冲突,需手动改为tensorflow>=2.8.0 python -m pip install -r habitat_baselines/rl/ddppo/requirements.txt python setup.py develop --all -
安装后可用命令检查是否都是0.1.7:
pip list | grep habitat
-
-
安装VLN-CE依赖
cd ~/NaVILA pip install -r evaluation/requirements.txt -
安装VILA依赖
cd ~/NaVILA # Install VILA pip install -e . pip install -e ".[train]" pip install -e ".[eval]" # Install FlashAttention2 pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.3/flash_attn-2.8.3+cu12torch2.7cxx11abiFALSE-cp310-cp310-linux_x86_64.whl # 可能需要..上网 # Install HF's Transformers pip install git+https://github.com/huggingface/transformers@v4.37.2 site_pkg_path=$(python -c 'import site; print(site.getsitepackages()[0])') cp -rv ./llava/train/transformers_replace/* $site_pkg_path/transformers/ cp -rv ./llava/train/deepspeed_replace/* $site_pkg_path/deepspeed/ -
修改VLN-CE的WebDataset版本
pip install webdataset==0.1.103 -
修改torch版本(
torch>=2.7.0方支持RTX 5090)pip install torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu128 -
Hugging Face下载模型
-
安装库
conda activate navila-eval pip install huggingface_hub -
到Hugging Face网站,注册用户并获取token
-
创建python脚本
download_huggingface.py如下所示from huggingface_hub import snapshot_download local_dir = snapshot_download( repo_id="a8cheng/navila-llama3-8b-8f", local_dir="~/autodl-tmp/checkpoints/navila-llama3-8b-8f", cache_dir="~/autodl-tmp/checkpoints/navila-llama3-8b-8f/cache", token="hf_******", # ✅ 在这里传 token endpoint="https://hf-mirror.com" # 如果需要走镜像 ) print("模型下载到本地路径:", local_dir) -
运行上述脚本
python download_huggingface.py -
若遇到需要..上网,可在运行py文件前:
export https_proxy=127.0.0.1:7890 # 可通过`ssh -R 7890:localhost:7890 NaVILA-AutoDL(主机名)`转发本地端口到服务器 python download_huggingface.py
-
数据集下载
-
参考 VLN-CE 将 R2R 数据下载到
~/autodl-tmp/data/datasets/路径并解压,下载链接(需..上网)# 通过 sftp 等方式将本地下载好的压缩包上传到 ~/auto-tmp/data/datasets/R2R_VLNCE_v1-3_preprocessed.zip cd ~/auto-tmp/data/datasets unzip R2R_VLNCE_v1-3_preprocessed.zip cd ~/NaVILA ln -s ~/auto-tmp/data/datasets ./evaluation/data/datasets -
然后下载Matterport3D (MP3D) ,也可通过第三方下载工具下载。下载到
~/autodl-tmp/data/scene_datasets/路径下并解压,而后创建软连接cd ~/NaVILA ln -s ~/auto-tmp/data/scene_datasets ./evaluation/data/scene_datasets
-
注意,最终数据目录结构应该如下:
data/datasets ├─ R2R_VLNCE_v1-3_preprocessed | ├─ train | | ├─ train.json.gz | | ├─ ... | ├─ val_unseen | | ├─ val_unseen.json.gz | | ├─ ... data/scene_datasets ├─ mp3d | ├─ 1LXtFkjw3qL | | ├─ 1LXtFkjw3qL_semantic.ply | | ├─ ... | ├─ ...
-
运行与结果
验证R2R:
cd ~/NaVILA/evaluation
conda activate navila-eval
bash scripts/eval/r2r.sh ~/autodl-tmp/checkpoints/navila-llama3-8b-8f 1 0 "0"
- 可视化的视频存放在:
./eval_out/CKPT_NAME/VLN-CE-v1/val_unseen/videos
而在终端会实时可视化action指令:
实验效果
- 运行下面代码,对应的在
eval_out文件下会生成大量的视频
cd evaluation
conda activate navila-eval
bash scripts/eval/r2r.sh ~/NaVILA/navila-llama3-8b-8f 1 0 "0"
# 汇总结果以及查看分数
# python scripts/eval_jsons.py ./eval_out/CKPT_NAME/VLN-CE-v1/val_unseen NUM_CHUNKS
实验结果是通过R2R数据集/MP3D模拟器来验证的,指令信息在视频的左下方。
考察指标为 SPL,即基于路径加权的成功率(Success weighted by Path Length,SPL):SPL同时考虑了成功率(SR)和路径长度(PL),并对过长的(即效率低)路径进行惩罚。
首先先看 R2R 数据集的第 1, 2, 3 个测试点:下面三组视频对应的SPL分别为0.48,0.91,0.96.可以看到第一个测试点虽然最终能走到终点,但是一开始走的路径并不对,所以对应SPL值较小。
-
Episode=1

-
Episode=2

-
Episode=3

下面三个例子为三个成功例子,路线非常完美,因此SPL都为1:
-
Episode=13

-
Episode=14

-
Episode=15

而下面三个例子则是三次测试都没找到路,因此SPL都为0:
-
Episode=40

-
Episode=41

-
Episode=42

原论文中,NaVILA 算法在 R2R 数据集上的平均 SPL 值为49.0,复现结果符合预期。
参考与感谢
本经验主要在参考 Kwan Wai-Pang 的博客 的基础上适应性迁移而来。该博客讲解了NaVILA在RTX4090及H200上的复现过程

浙公网安备 33010602011771号