文件最后提交记录最后更新时间
4 个月前
6 个月前
4 个月前
8 个月前
4 个月前
4 个月前
6 个月前
3 个月前
4 个月前
7 个月前
README.md

在昇腾Atlas A2环境上适配VGGT模型的推理

本样例基于VGGT开源模型完成其在NPU上的推理适配,并提供其在相机位姿估计、点云重建、深度估计三个任务上的精度评测脚本。详细内容可至精度评测章节查看。

此外,本样例基于VGGT模型在NPU进行了性能优化,目前VGGT模型在25张图片输入下,推理时间下降至1.12秒。详细内容可至性能优化章节查看。


执行样例

CANN环境准备

  1. 本样例的执行依赖CANN开发套件包(cann-toolkit)与CANN二进制算子包(cann-kernels),目前使用CANN软件版本为CANN.8.5.0。 请从CANN软件包下载地址下载Ascend-cann-toolkit_${version}_linux-${arch}.runAscend-cann-${chip_type}-ops_linux-${arch}.run软件包,并参考CANN安装文档进行安装。

  2. 本样例依赖的torch以及torch_npu版本为2.7.1。 请从Ascend Extension for PyTorch插件下载torch与torch_npu安装包,本样例依赖的torch与torch_npu版本分别为2.7.1和2.7.1.post2。

    conda create -n vggt python==3.11.13
    conda activate vggt
    pip3 install torch==2.7.1
    pip3 install torch_npu==2.7.1.post2
    

网络模型代码准备

  • 本仓库依赖VGGT的开源仓库代码。
  • 进入VGGT的官方仓库,下载VGGT模型网络结构代码:
    git clone https://github.com/facebookresearch/vggt.git
    
  • 下载本仓库代码:
    git clone https://gitcode.com/cann/cann-recipes-spatial-intelligence.git
    
  • 将VGGT仓库的网络模型文件以非覆盖模式复制到本项目目录下。
    cp vggt/visual_utils.py cann-recipes-spatial-intelligence/models/vggt/
    cp -r vggt/examples cann-recipes-spatial-intelligence/models/vggt/
    cp -rn vggt/vggt/dependency cann-recipes-spatial-intelligence/models/vggt/vggt/dependency
    cp -rn vggt/vggt/heads cann-recipes-spatial-intelligence/models/vggt/vggt/
    cp -rn vggt/vggt/layers cann-recipes-spatial-intelligence/models/vggt/vggt/
    cp -rn vggt/vggt/utils cann-recipes-spatial-intelligence/models/vggt/vggt/ 
    
  • 安装Python依赖:
    cd cann-recipes-spatial-intelligence/models/vggt/
    pip3 install -r requirements.txt
    
  • VGGT 模型权重下载:VGGT model checkpoint,并将权重文件model.pt复制到ckpt目录下。
  • 模型权重与模型结构在文件目录中罗列如下:
    VGGT
      +--- examples
      +--- demo_infer.py
      +--- eval
      +--- ckpt
            +--- model.pt
      +--- quant
      +--- vggt
            +--- dependency
            +--- heads
            +--- layers
            +--- models
            +--- utils
            +--- sp
    

快速启动

本样例准备了单卡和多卡环境下的推理样例脚本。 执行脚本前,请参考Ascend社区中的CANN安装软件教程,配置环境变量:

source /usr/local/Ascend/ascend-toolkit/set_env.sh 

推理bf16模型脚本单卡运行:

python demo_infer.py --ckpt "ckpt/model.pt"

推理bf16模型脚本多卡运行:

bash infer_test.sh

多卡推理的参数说明:

torchrun --nproc_per_node=1 demo_infer.py \
    --ckpt ${model_base} \
    --images_path examples/kitchen/images \
    --enable_sp \
    --ulysses_degree 1 \
    --ring_degree 1
  • --nproc_per_node:torchrun参数,每个节点启动的进程数,需要等于使用的NPU卡数
  • --ckpt:模型checkpoint文件路径
  • --images_path:输入图像序列所在目录
  • --enable_sp:是否启用序列并行,默认值: False,前提条件为nproc_per_node > 1
  • --ulysses_degree:Ulysses并行度,约束ulysses_degree × ring_degree = nproc_per_node;num_attention_heads 必须能被 ulysses_degree 整除
  • --ring_degree:Ring并行度,约束ulysses_degree × ring_degree = nproc_per_node

推理int8模型,需要先生成int8模型(当前实现中,只将VGGT模型中K=4096的Linear层进行了8bit量化):

python demo_infer.py --ckpt "ckpt/model.pt" --buildW8A8

in8模型会生成在当前路径,再使用该int8模型进行推理:

python demo_infer.py --ckpt VGGT_model_W8A8.pt --enableW8A8

Citation

@inproceedings{wang2025vggt,
  title={VGGT: Visual Geometry Grounded Transformer},
  author={Wang, Jianyuan and Chen, Minghao and Karaev, Nikita and Vedaldi, Andrea and Rupprecht, Christian and Novotny, David},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  year={2025}
}