NaVILA 在 RTX5090 上的复现笔记

复现过程

本配置成功在 AutoDL算例平台 所租 RTX 5090 服务器上复现

  • 迁移conda到数据盘(避免系统盘空间不足)并创建环境navila-eval

    mv ~/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下载模型

    • 模型地址:a8cheng/navila-llama3-8b-8f

    • 安装库

      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指令:

image-20260602163623253

实验效果

  • 运行下面代码,对应的在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=1-ckpt=0-spl=0.48 00_00_00-00_00_30

  • Episode=2

    episode=2-ckpt=0-spl=0.91 00_00_00-00_00_30

  • Episode=3

    episode=3-ckpt=0-spl=0.96 00_00_00-00_00_30

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

  • Episode=13

    episode=13-ckpt=0-spl=1.00 00_00_00-00_00_30

  • Episode=14

    episode=14-ckpt=0-spl=1.00 00_00_00-00_00_30

  • Episode=15

    episode=15-ckpt=0-spl=1.00 00_00_00-00_00_30

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

  • Episode=40

    episode=40-ckpt=0-spl=0.00 00_00_00-00_00_30

  • Episode=41

    episode=41-ckpt=0-spl=0.00 00_00_00-00_00_30

  • Episode=42

    episode=42-ckpt=0-spl=0.00 00_00_00-00_00_30

原论文中,NaVILA 算法在 R2R 数据集上的平均 SPL 值为49.0,复现结果符合预期。

参考与感谢

本经验主要在参考 Kwan Wai-Pang 的博客 的基础上适应性迁移而来。该博客讲解了NaVILA在RTX4090及H200上的复现过程

posted @ 2026-06-10 20:01  Wh_Xcjm  阅读(4)  评论(0)    收藏  举报