GameFormer-Planner for PyTorch [终止随版本演进]

目录

简介

模型介绍

在复杂的现实环境中运行的自动驾驶车辆需要准确预测交通参与者之间的交互行为。GameFormer-Planner模型结合了一个Transformer编码器,以及一个分层Transformer解码器结构,来有效地模拟场景元素之间的关系。在每个解码层级,除了共享的环境上下文之外,解码器还利用前一级别的预测结果来迭代地完善交互过程。该模型在nuPlan规划基准数据集上验证了有效性,取得了领先的性能。本仓库针对GameFormer-Planner模型进行了昇腾NPU适配,并且提供了适配Patch,方便用户在NPU上进行模型训练。

支持任务列表

本仓已经支持以下模型任务类型

模型 任务列表 是否支持
GameFormer-Planner 训练

代码实现

  • 参考实现:

    url=https://github.com/MCZhi/GameFormer-Planner
    commit_id=c6f3a69b947edd0c3079e458275fc490520e8bde
    
  • 适配昇腾 AI 处理器的实现:

    url=https://gitcode.com/Ascend/DrivingSDK.git
    code_path=model_examples/GameFormer-Planner
    

GameFormer-Planner

准备训练环境

安装昇腾环境

请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境,本仓已支持表1中软件版本。

表 1 昇腾软件版本支持表

软件类型 首次支持版本
FrameworkPTAdapter 6.0.0
CANN 8.0.0

安装模型环境

表 2 三方库版本支持表

三方库 支持版本
PyTorch 2.1.0
  1. 激活 CANN 环境

  2. 安装torch2.1、torch_npu2.1 以及其他依赖项

    pip install torch==2.1.0
    pip install torch_npu==2.1.0
    pip install -r requirements.txt
    
  3. 安装nuplan-devkit库(如果需要进行数据集预处理,可选):

    git clone https://github.com/motional/nuplan-devkit.git && cd nuplan-devkit
    pip install -r requirements.txt
    pip install -e .
    cd ..
    
  4. 拉取GameFormer-Planner模型仓库代码并使用Patch进行代码修改

    git clone https://github.com/MCZhi/GameFormer-Planner.git && cd GameFormer-Planner
    git checkout c6f3a69b947edd0c3079e458275fc490520e8bde
    cp ../GameFormer-Planner_NPU.patch .
    git apply --reject --whitespace=fix GameFormer-Planner_NPU.patch
    cd ..
    
  5. 根据操作系统,安装tcmalloc动态库。

    • OpenEuler系统

    在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。

    mkdir gperftools
    cd gperftools
    wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
    tar -zvxf gperftools-2.16.tar.gz
    cd gperftools-2.16
    ./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
    make
    make install
    echo '/usr/local/lib/lib/' >> /etc/ld.so.conf
    ldconfig
    export LD_LIBRARY_PATH=/usr/local/lib/lib/:$LD_LIBRARY_PATH
    export PATH=/usr/local/lib/bin:$PATH
    export LD_PRELOAD=/usr/local/lib/lib/libtcmalloc.so.4
    
    • Ubuntu系统

    在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。在安装tcmalloc前,需确保环境中含有autoconf和libtool依赖包。

    安装libunwind依赖:

    git clone https://github.com/libunwind/libunwind.git
    cd libunwind
    autoreconf -i
    ./configure --prefix=/usr/local
    make -j128
    make install
    

    安装tcmalloc动态库:

    wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
    tar -xf gperftools-2.16.tar.gz && cd gperftools-2.16
    ./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
    make -j128
    make install
    export LD_PRELOAD="$LD_PRELOAD:/usr/local/lib/lib/libtcmalloc.so"
    
  6. 安装Driving SDK加速库

    请参考昇腾Driving SDK代码仓说明编译安装Driving SDK

准备数据集

  1. 下载NuPlan数据集,并将数据集结构排布成如下格式:

    ~/nuplan
    └── dataset
        ├── maps
        │   ├── nuplan-maps-v1.0.json
        │   ├── sg-one-north
        │   │   └── 9.17.1964
        │   │       └── map.gpkg
        │   ├── us-ma-boston
        │   │   └── 9.12.1817
        │   │       └── map.gpkg
        │   ├── us-nv-las-vegas-strip
        │   │   └── 9.15.1915
        │   │       └── map.gpkg
        │   └── us-pa-pittsburgh-hazelwood
        │       └── 9.17.1937
        │           └── map.gpkg
        └── nuplan-v1.1
            ├── splits
                ├── mini
                │    ├── 2021.05.12.22.00.38_veh-35_01008_01518.db
                │    ├── 2021.06.09.17.23.18_veh-38_00773_01140.db
                │    ├── ...
                │    └── 2021.10.11.08.31.07_veh-50_01750_01948.db
                └── trainval
                    ├── 2021.05.12.22.00.38_veh-35_01008_01518.db
                    ├── 2021.06.09.17.23.18_veh-38_00773_01140.db
                    ├── ...
                    └── 2021.10.11.08.31.07_veh-50_01750_01948.db
    
    
  2. 数据预处理

    python GameFormer-Planner/data_process.py
        --data_path nuplan/dataset/nuplan-v1.1/splits/mini
        --map_path nuplan/dataset/maps
        --save_path nuplan/nuplan_processed
    

    --scenarios_per_type和--total_scenarios可以用于控制生成数据点的数量,请根据原仓库的指引,生成150万个数据点,并用其中的十分之一作为Validation Set,剩余的部分作为Training Set。预处理完成之后数据排布如下所示:

    nuplan
    └── nuplan_processed
        ├── train
        │   ├── us-nv-las-vegas-strip_12b86ec515a15de0.npz
        │   ├── ...
        │   └── us-nv-las-vegas-strip_b880c406318b552f.npz
        └── val
            ├── us-pa-pittsburgh-hazelwood_db2c7a20fb6453d4.npz
            ├── ...
            └── us-pa-pittsburgh-hazelwood_ffd6690ff3ba5ee5.npz
    
    

快速开始

本任务主要提供单机8卡的训练脚本以及双机16卡的多机多卡训练脚本。

开始训练

  • 单机多卡:在模型根目录下,运行训练脚本。

    bash script/train_gameformer_8x512_performance.sh 8 1 # 8卡性能(1 epoch)
    bash script/train_gameformer_8x512.sh 8 30 # 8卡精度(30 epoch)
    bash script/train_gameformer_8x256_performance.sh 8 1 # 8卡性能(1 epoch)
    bash script/train_gameformer_8x256.sh 8 30 # 8卡精度(30 epoch)
    
  • 多机多卡:在模型根目录下,运行训练脚本。

    # 'XX.XX.XX.XX'为主节点的IP地址;端口号可以换成未被占用的可用端口
    # 多机多卡训练精度
    bash script/train_gameformer_multi_server_8x512.sh 8 30 0 'XX.XX.XX.XX' '3389'  # 主节点
    bash script/train_gameformer_multi_server_8x512.sh 8 30 1 'XX.XX.XX.XX' '3389'  # 副节点
    # 多机多卡性能
    bash script/train_gameformer_multi_server_8x512_performance.sh 8 1 0 'XX.XX.XX.XX' '3389'  # 主节点
    bash script/train_gameformer_multi_server_8x512_performance.sh 8 1 1 'XX.XX.XX.XX' '3389'  # 副节点
    

训练结果

  • 单机8卡
芯片 卡数 global batch size Precision epoch plannerADE plannerFDE plannerAHE plannerFHE predictorADE predictorFDE 性能-单步迭代耗时(ms) 性能-FPS
竞品A 8p 4096 fp32 30 1.17 3.11 0.10 0.07 0.70 1.30 790 5185
Atlas 800T A2 8p 4096 fp32 30 1.17 3.10 0.10 0.07 0.69 1.29 770 5319
竞品A 8p 2048 fp32 30 1.07 2.78 0.14 0.06 0.55 1.10 440 4655
Atlas 800T A2 8p 2048 fp32 30 1.05 2.79 0.09 0.06 0.54 1.07 421 4865
  • 多机多卡线性度
芯片 卡数 global batch size Precision epoch 性能-单步迭代耗时(ms) 性能-FPS 线性度
Atlas 800T A2*2 16p 8192 fp32 30 971 8436 99.3%
Atlas 800T A2*2 16p 4096 fp32 30 651 6292 99.6%

变更说明

2024.09.19:首次发布。

2024.11.11:资料更新。

2025.04.24: 更新性能数据和FPS计算方式

2025.04.28: 更新8卡性能数据和多机线性度

2025.05.08: 更新FPS数据

2025.06.03: 性能优化,更新8p性能

FAQ

  1. 镜像中可能由于不支持awk的扩展正则表达式导致出现syntax error at or near,需要在镜像中安装gawk解决

    # Debian/Ubuntu
    apt-get update && apt-get install -y gawk
    
    # CentOS/OpenEuler
    yum install -y gawk
    
  2. tcmalloc的动态库文件位置可能因环境配置会有所不同,找不到文件时可以进行搜索,一般安装在/usr/lib64或者/usr/local目录下:

    find /usr -name libtcmalloc.so*
    

找到对应路径下的动态库文件,libtcmalloc.so或者libtcmalloc.so.版本号都可以使用。