矢量模型
方案概览
VAD (Vectorized Scene Representation for Efficient Autonomous Driving) 是一种面向自动驾驶的端到端矢量化范式,将驾驶场景建模为完全矢量化的表征。该矢量化范式具有两大显著优势:一方面,VAD利用矢量化的智能体运动轨迹和地图元素作为显式的实例级规划约束,有效提升了规划安全性;另一方面,通过摒弃计算密集的栅格化表征和人工设计的后处理步骤,VAD的运行速度显著快于先前的端到端规划方法。VAD在nuScenes数据集上取得了最先进的端到端规划性能,较先前最佳方法有显著提升。
本方案介绍了在ModelArts Lite Server上使用昇腾计算资源 Ascend Snt9B 或 Ascend Snt9B23 开展VAD模型的训练过程。
资源规格要求
推荐使用“西南-贵阳一”Region上的Lite Server资源。
名称 |
版本 |
---|---|
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 |
获取软件和镜像
分类 |
名称 |
获取路径 |
---|---|---|
插件代码包 |
AscendCloud-ACD-6.5.905-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 |
获取路径:Support-E,在此路径中查找下载ModelArts 6.5.905版本。
说明:
如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 |
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.905版本,请参考表2 获取软件和镜像获取配套版本的软件包和镜像,请严格遵照版本配套关系使用本文档。
- 确保容器可以访问公网。
步骤一:检查环境
- 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。
购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。
当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
- SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。
npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态
如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。
- 检查是否安装docker。
docker -v #检查docker是否安装
如尚未安装,运行以下命令安装docker。
yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
- 配置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
步骤二:下载镜像并启动容器
- 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表2 获取软件和镜像。
docker pull {image_url}
- 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。
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/vad:/home/vad ”
${work_dir}为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。请确保容器内用户对此路径有足够的访问权限。
${container_work_dir}为要挂载到的容器中的目录。
- --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如“vad_test”。
- --device=/dev/davinci0 :挂载对应卡到容器,请按照机器实际需要使用到的NPU数量来配置,上面给出的是使用16卡NPU训练的例子。
- 请确保容器内用户对${work_dir}有足够的访问权限。
- ${container_work_dir}不能为/home/ma-user目录,此目录为ma-user用户家目录。
- driver及npu-smi需同时挂载至容器。
- 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
- -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。为方便两个地址可以相同。例如“/home/vad:/home/vad ”
- 进入容器。
docker exec -u root -it ${container_name} bash
步骤三:容器内训练环境准备
- 创建新的虚拟环境
conda create -n vad --clone PyTorch-2.1.0 conda activate vad
- 创建项目目录
mkdir -p /home/vad/project cd /home/vad/project export P_HOME=`pwd`
- 将获取到的插件代码包AscendCloud-ACD-6.5.905-*.zip文件上传到容器的${P_HOME}目录下,并解压。
cd $P_HOME unzip -q AscendCloud-ACD-6.5.905-*.zip # 解压905自动驾驶相关版本包 cd AscendCloud* mv models/VAD $P_HOME/VAD_support
- 创建patches目录,并将patch文件移入目录
cd $P_HOME mkdir patches && cd patches export PATCH_HOME=`pwd` mv $P_HOME/VAD_support/*.patch . # 将patch相关文件移动到此文件夹
- 安装 DrivingSDK
cd $P_HOME git clone https://gitee.com/ascend/DrivingSDK.git -b master cd DrivingSDK git checkout 059ec6e170152170c407e595e09e0823e44f4ba8 pip3 install -r requirements.txt vim CMakePresets.json # 修改 "ENABLE_ONNX"选项: 为False umask 0027 # 保证文件权限正确 bash ci/build.sh --python=3.10 # 按照镜像内python版本指定 pip3 install ./dist/mx_driving-1.0.0+git059ec6e-cp310-cp310-linux_aarch64.whl pip3 show mx-driving # Version: 1.0.0+git059ec6e
- 安装MindSpeed
cd $P_HOME git clone https://gitee.com/ascend/MindSpeed.git cd MindSpeed git checkout c3f2f77f58efba69dd21840fcbb758645fa5b579 pip3 install -e . pip3 show mindspeed # Version: 0.9.0
- 安装mmcv-full 1.x
# 卸载镜像内原有的mmcv pip3 uninstall mmcv -y cd $P_HOME git clone https://github.com/open-mmlab/mmcv.git cd mmcv git checkout 1d8f9285674f2b1f9f2d7758d3f945ebb74fcf82 git apply $PATCH_HOME/mmcv.patch MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py build_ext MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py develop pip3 show mmcv-full # Version: 1.7.2
- 安装 mmdet3d v1.0.0rc6
cd $P_HOME git clone https://github.com/open-mmlab/mmdetection3d.git cd mmdetection3d git checkout 47285b3f1e9dba358e98fcd12e523cfd0769c876 git apply $PATCH_HOME/mmdet3d.patch pip3 install -e . pip3 show mmdet3d # Version: 1.0.0rc6
- 安装其它依赖
pip3 install mmdet==2.28.2 mmsegmentation==0.30.0 timm==1.0.9 nuscenes-devkit==1.1.11 similaritymeasures==1.2.0 numpy==1.23.4
- 下载模型代码,将插件代码包内的scripts文件夹移动到模型代码目录
cd $P_HOME git clone https://github.com/hustvl/VAD.git cd VAD export VAD_HOME=`pwd` git checkout 081473d6e1756a4ecee95425c05fc6644d17bb5f git apply $PATCH_HOME/vad.patch mv $P_HOME/VAD_support/scripts . # 将scripts文件夹移动到此目录
步骤四:准备训练数据集和模型权重
- 请参考GitHub项目内数据处理部分的文档下载 nuScenes V1.0 full 和 CAN bus 数据集。
- 创建data目录并将下载的数据集做预处理。
cd $VAD_HOME mkdir data && cd data # 将下载好的数据集移动到此目录下并解压 # 对数据集做预处理 cd $VAD_HOME python tools/data_converter/vad_nuscenes_converter.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag vad_nuscenes --version v1.0 --canbus ./data
- 数据处理耗时较长。
- 下载预训练模型权重。
cd $VAD_HOME mkdir ckpts && cd ckpts wget https://download.pytorch.org/models/resnet50-19c8e357.pth
最终目录结构如下。VAD ├── projects/ ├── tools/ ├── configs/ ├── ckpts/ │ ├── resnet50-19c8e357.pth ├── data/ │ ├── can_bus/ │ ├── nuscenes/ │ │ ├── lidarseg/ │ │ ├── maps/ │ │ ├── samples/ │ │ ├── sweeps/ │ │ ├── v1.0-test/ │ │ ├── v1.0-trainval/ │ │ ├── vad_nuscenes_infos_temporal_train.pkl # 由数据预处理生成 │ │ ├── vad_nuscenes_infos_temporal_val.pkl # 由数据预处理生成
步骤五:开始训练与评估
- 进行8卡训练(精度)
cd $VAD_HOME sh scripts/start_train.sh
- 进行8卡训练(性能)
cd $VAD_HOME NPUS=8 MODE=performance sh scripts/start_train.sh
- 进行16卡训练(性能)
cd $VAD_HOME NPUS=16 MODE=performance sh scripts/start_train.sh
- 进行1卡评估
cd $VAD_HOME # 使用上次训练的最后一个模型做评估 sh scripts/start_evl.sh # 指定模型做评估 MODEL_PATH="to/model/path.pt" sh scripts/start_evl.sh
- 输出结果路径
# 训练结果目录 $VAD_HOME/scripts/output # 评估结果目录 $VAD_HOME/scripts/evl_result
- 当前模型训练和评估需要单独进行,无法在训练过程中进行评估。
- 请勿自行修改配置文件内Batch_Size的值。
- 当前只能进行单卡评估,多卡会影响评估结果准确性。
- 如果想使用预训练模型进行评估需要参照项目官网修改配置文件,具体细节可以参考:https://github.com/hustvl/VAD/blob/main/docs/train_eval.md
矢量模型常见问题
更多常见问题 >>-
GaussDB是华为自主创新研发的分布式关系型数据库。具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+节点的扩展能力,PB级海量存储。
-
SFS的常见问题解答。
-
包年包月镜像是基于按需镜像包装出的预付费套餐,一个包年包月镜像同一时间只能用于一台云服务器。包年包月镜像支持续费,在到期前用户可以选择续费继续使用。如果到期不对镜像续费,而云服务器继续使用,请在到期前及时更换系统,否则镜像将以按需的方式开始计费。
-
预热的任务一直在处理中的可能原因有如下几种:可能当前CDN处于预热高峰期,您的预热任务正在排队中。缓存预热的时候CDN要回源请求资源,会占用源站带宽。当您要执行大批量文件预热时,可能会导致您的源站带宽资源被占满,建议:预热时请尽量分批次执行。您可以在访问量低的时间(如夜间)进行预热。升级您的源站带宽。
-
本文为您解答华为云云市场按需付费镜像常见问题。
-
云速邮箱常见问题解答,包括企业邮箱登陆、邮件发送和接收、域名注册和解析、手机客户端设置、垃圾邮件设置等等,你想要的问题答案,都在这里,还可免费试用云速邮箱30天,帮助企业轻松上云!
更多相关专题
增值电信业务经营许可证:B1.B2-20200593 | 域名注册服务机构许可:黔D3-20230001 | 代理域名注册服务机构:新网、西数