文档首页/ AI开发平台ModelArts/ 最佳实践/ 自动驾驶模型训练推理/ MapTRv2模型基于ModelArts Lite Server适配PyTorch NPU训练指导
更新时间:2025-08-06 GMT+08:00
分享

MapTRv2模型基于ModelArts Lite Server适配PyTorch NPU训练指导

方案概览

MapTR是一种高效的端到端Transformer模型,用于在线构建矢量化高清地图(HD Map)。高清地图在自动驾驶系统中是规划的基础和关键组件,提供了丰富而精确的环境信息。MapTR提出了一种统一的置换等价建模方法,将地图元素表示为等价置换组的点集,这样不仅可以准确描述地图元素的形状,还能稳定学习过程。此外,MapTR设计了一个分层查询嵌入方案,以灵活地编码结构化地图信息,并执行分层二分匹配来学习地图元素。

资源规格要求

推荐使用“西南-贵阳一”Region上的Lite Server资源。

表1 环境要求

名称

版本

NPU卡数

Ascend Snt9B:8卡

Ascend Snt9B23:8卡 或 16卡

Driver

Ascend Snt9B:24.1.0.6

Ascend Snt9B23:24.1.RC3.5

PyTorch

PyTorch-2.1.0

获取软件和镜像

表2 获取软件和镜像

分类

名称

获取路径

插件代码包

AscendCloud-ACD-xxx.zip

文件名中的xxx表示具体的版本号和时间戳,以实际发布的包名为准。

获取路径:Support-E,在此路径中查找下载ModelArts 6.5.906.1版本。

说明:

如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。

Snt9B基础镜像包

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-hce_2.0.2503-aarch64-snt9b-20250513111215-29295f8

SWR上拉取。

Snt9B23基础镜像包

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-hce_2.0.2503-aarch64-snt9b23-20250509115535-21587eb

SWR上拉取。

约束限制

  • 本文档适配昇腾云ModelArts 6.5.906版本,请参考表2 获取软件和镜像获取配套版本的软件包和镜像,请严格遵照版本配套关系使用本文档。
  • 确保容器可以访问公网。

步骤一:检查环境

  1. 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。

    购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。

    当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据

  2. SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。
    npu-smi info                    # 在每个实例节点上运行此命令可以看到NPU卡状态

    如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。

  3. 检查是否安装docker。
    docker -v   #检查docker是否安装

    如尚未安装,运行以下命令安装docker。

    yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
  4. 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
    sysctl -p | grep net.ipv4.ip_forward
    如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。
    sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf
    sysctl -p | grep net.ipv4.ip_forward

步骤二:下载镜像并启动容器

  1. 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表2 获取软件和镜像
    docker pull {image_url}
  2. 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。
    export work_dir="自定义挂载的工作目录"  
    export container_work_dir="自定义挂载到容器内的工作目录"  
    export container_name="自定义容器名称"  
    export image_name="镜像名称"  
    docker run -itd \
       -u root \
       --device=/dev/davinci0 \
       --device=/dev/davinci1 \
       --device=/dev/davinci2 \
       --device=/dev/davinci3 \
       --device=/dev/davinci4 \
       --device=/dev/davinci5 \
       --device=/dev/davinci6 \
       --device=/dev/davinci7 \
       --device=/dev/davinci8 \
       --device=/dev/davinci9 \
       --device=/dev/davinci10 \
       --device=/dev/davinci11 \
       --device=/dev/davinci12 \
       --device=/dev/davinci13 \
       --device=/dev/davinci14 \
       --device=/dev/davinci15 \
       --device=/dev/davinci_manager \
       --device=/dev/devmm_svm \
       --device=/dev/hisi_hdc \
       -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
       -v /usr/local/dcmi:/usr/local/dcmi \
       -v /etc/ascend_install.info:/etc/ascend_install.info \
       -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
       -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
       -v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
       -v /etc/hccn.conf:/etc/hccn.conf \
       --shm-size 1024g \
       --net=host \
       -v ${work_dir}:${container_work_dir} \
       --name ${container_name} \
       $image_name \
       /bin/bash

    参数说明:

    • -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。为方便两个地址可以相同。例如“/home/maptrv2:/home/maptrv2”

      ${work_dir}为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。请确保容器内用户对此路径有足够的访问权限。

      ${container_work_dir}为要挂载到的容器中的目录。

    • --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如“maptrv2_test”。
    • --device=/dev/davinci0 :挂载对应卡到容器,请按照机器实际需要使用到的NPU数量来配置,上面给出的是使用16卡NPU训练的例子。
    • image_name:表示镜像名称或者镜像ID。
      • 请确保容器内用户对${work_dir}有足够的访问权限。
      • ${container_work_dir}不能为/home/ma-user目录,此目录为ma-user用户家目录。
      • driver及npu-smi需同时挂载至容器。
      • 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
  3. 进入容器。
    docker exec -u root -it ${container_name} bash

步骤三:容器内训练环境准备

  1. 创建新的虚拟环境。
    conda create -n Maptrv2 --clone PyTorch-2.1.0
    conda activate Maptrv2
  2. 创建项目目录。
    mkdir -p /home/Maptrv2
    cd /home/Maptrv2
    export P_HOME=`pwd`
  3. 将获取到的插件代码包AscendCloud-ACD-*.zip文件上传到容器的${P_HOME}目录下,并解压。插件代码包获取请参见表2
    cd $P_HOME
    unzip -q AscendCloud-ACD-*.zip    # 解压自动驾驶相关版本包
  4. 安装 DrivingSDK。
    cd $P_HOME
    git clone https://gitee.com/ascend/DrivingSDK.git -b master
    cd DrivingSDK/
    git checkout 633ef95628c23c76d5e3c2f81aaf4b2954895a4a
    pip3 install -r requirements.txt
    vim CMakePresets.json   # 修改 "ENABLE_ONNX": 为False
    umask 0027  # 保证文件权限正确
    bash ci/build.sh --python=3.10
    cd dist/
    pip install mx_driving-1.0.0+git633ef95-cp310-cp310-linux_aarch64.whl
    pip3 show mx-driving
    # mx-driving   1.0.0+git633ef95
  5. 安装mmcv-full 1.x。
    # 卸载镜像内原有的mmcv 
    pip uninstall mmcv
    cd $P_HOME
    git clone -b 1.x https://github.com/open-mmlab/mmcv.git
    cd mmcv
    git checkout 1d8f9285674f2b1f9f2d7758d3f945ebb74fcf82
    git apply ../AscendCloudDriving-*/models/MapTRv2/mmcv_full.patch
    MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_NPU=1 python setup.py build_ext
    MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py install
    pip list|grep mmcv
    # mmcv-full  1.7.2
  6. 更新模型代码。
    cd $P_HOME
    git clone -b maptrv2 https://github.com/hustvl/MapTR.git
    cd MapTR
    git checkout e03f097abef19e1ba3fed5f471a8d80fbfa0a064
    git apply ../AscendCloudDriving-*/models/MapTRv2/maptrv2.patch
    cp -r ../AscendCloudDriving-*/models/MapTRv2/npu_scripts ./
  7. 安装mmdetection3d v1.0.0rc4源码。
    cd $P_HOME/MapTR
    rm -rf mmdetection3d
    git clone -b v1.0.0rc4 https://github.com/open-mmlab/mmdetection3d.git
    cd mmdetection3d
    git checkout c9541b0db89498fdea5cafd05b7b17f7b625b858
    git apply ../../AscendCloudDriving-*/models/MapTRv2/mmdetection.patch
    pip install -e .
  8. 安装其它依赖。
    pip install mmdet==2.28.2
    pip install mmsegmentation==0.30.0
    pip install av2
    pip install numpy==1.23.2
    conda install -c conda-forge geos
    pip install Shapely==1.8.5

步骤四:准备训练数据集和模型权重

若没有准备数据集,需下载nuscenes数据集,然后再软连接到data目录。

  1. 创建data目录并将下载的数据集做预处理。
    cd $P_HOME/MapTR
    mkdir data && cd data
    # 将下载好的数据集移动到此目录
    ln -s /path/nuscenes ./
    ln -s /path/can_bus ./
    # 对数据集进行预处理
    cd $P_HOME/MapTR
    python tools/maptrv2/custom_nusc_map_converter.py --root-path ./data/nuscenes --out-dir ./data/nuscenes_pkl --extra-tag nuscenes --version v1.0 --canbus ./data
  2. 下载预训练模型权重。
    cd $P_HOME/MapTR
    mkdir ckpts
    cd ckpts 
    wget https://download.pytorch.org/models/resnet50-19c8e357.pth
    最终目录结构如下。
    MapTR
    ├── data/
    │   ├── can_bus/
    │   ├── nuscenes/
    │   │   ├── lidarseg/
    │   │   ├── maps/
    │   │   ├── panoptic/
    │   │   ├── samples/
    │   │   ├── v1.0-test/
    |    |    ├── v1.0-trainval/
    |    |    ├── nuscenes_map_anns_val.json
    |    |    ├── nuscenes_map_infos_temporal_test.pkl
    |    |    ├── nuscenes_map_infos_temporal_train.pkl
    |    |    ├── nuscenes_map_infos_temporal_val.pkl

步骤五:开始训练与评估

  • 进行8卡训练(精度)
    cd $P_HOME/MapTR
    bash npu_scripts/train_full.sh  8
  • 进行8卡训练(性能)
    cd $P_HOME/MapTR
    bash npu_scripts/train_perf.sh  8
  • 进行16卡训练(性能)
    cd $P_HOME/MapTR
    bash npu_scripts/train_perf.sh  16
  • 查看输出日志
    # 精度结果目录
    $P_HOME/MapTR/test/out/0/full
    # 评估结果目录
    $P_HOME/MapTR/test/out/0/perf

相关文档