项目介绍
华为昇腾-自动驾驶加速库
项目详情
通知: 本项目已经正式迁移至 Gitcode 平台
Driving SDK
简介
Driving SDK是基于昇腾NPU平台开发的适用于自动驾驶场景的算子和模型加速库,提供了一系列高性能的算子和模型加速接口,支持PyTorch框架。
安装
前提条件
- 本项目依赖昇腾提供的pytorch_npu包和CANN包,需要先安装对应版本的pytorch_npu和CANN软件包,具体配套关系见pytorch仓README。
请参考昇腾官方文档Pytorch框架训练环境准备。 - 使用
pip3 install -r requirements.txt安装python依赖,requirements.txt文件位于项目根目录下。 - 如果您需要编译
ONNX插件,请安装protobuf-devel-3.14.0, 在centos系统上可以执行yum install protobuf-devel-3-14.0,否则请将CMakePresets.json中的ENABLE_ONNX选项改为FALSE,CMakePresets.json文件位于项目根目录下。 - 建议您在准备好环境后,使用
umask 0027将umask调整为0027,以保证文件权限正确。 - 建议您以非root用户身份执行以下操作。
- 使用gcc编译本仓时,推荐使用gcc 10.2版本。
从发布包安装
当前并未正式发布whl包 ,请参考源码安装方式。
从源码安装
1. 克隆原始仓。
git clone https://gitee.com/ascend/DrivingSDK.git -b master2. 编译Driving SDK。
注意:请在仓库根目录下执行编译命令
bash ci/build.sh --python=3.8参数--python指定编译过程中使用的python版本,支持 3.8 及以上版本,缺省值为 3.8。请参考编译指导获取更多编译细节。
生成的whl包在DrivingSDK/dist目录下, 命名规则为mx_driving-1.0.0+git{commit_id}-cp{python_version}-linux_{arch}.whl。
3. 安装Driving SDK。
cd DrivingSDK/dist
pip3 install mx_driving-1.0.0+git{commit_id}-cp{python_version}-linux_{arch}.whl如需要保存安装日志,可在pip3 install命令后添加--log 参数,并对您指定的目录做好权限控制。
配套关系
DrivingSDK支持的CPU架构,Python,PyTorch和torch_npu版本对应关系如下:
| Gitee分支 | CPU架构 | 支持的Python版本 | 支持的PyTorch版本 | 支持的torch_npu版本 |
|---|---|---|---|---|
| master | x86&aarch64 | Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.1.0 | v2.1.0 |
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.5.1 | v2.5.1 | ||
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.6.0 | v2.6.0 | ||
| branch_v7.1.RC1 | x86&aarch64 | Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.1.0 | v2.1.0-7.1.0 |
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.5.1 | v2.5.1-7.1.0 | ||
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.6.0 | v2.6.0-7.1.0 | ||
| branch_v7.0.RC1 | x86&aarch64 | Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.1.0 | v2.1.0-7.0.0 |
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.3.1 | v2.3.1-7.0.0 | ||
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.4.0 | v2.4.0-7.0.0 | ||
| branch_v6.0.0 | x86&aarch64 | Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.1.0 | v2.1.0-6.0.0 |
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.3.1 | v2.3.1-6.0.0 | ||
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.4.0 | v2.4.0-6.0.0 | ||
| branch_v6.0.0-RC3 | x86&aarch64 | Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.1.0 | v2.1.0-6.0.rc3 |
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.3.1 | v2.3.1-6.0.rc3 | ||
| Python3.8.x,Python3.9.x,Python3.10.x,Python3.11.x | 2.4.0 | v2.4.0-6.0.rc3 | ||
| branch_v6.0.0-RC2 | x86&aarch64 | Python3.7.x(>=3.7.5),Python3.8.x,Python3.9.x,Python3.10.x | 1.11.0 | v1.11.0-6.0.rc2 |
| Python3.8.x,Python3.9.x,Python3.10.x | 2.1.0 | v2.1.0-6.0.rc2 | ||
| Python3.8.x,Python3.9.x,Python3.10.x | 2.2.0 | v2.2.0-6.0.rc2 | ||
| Python3.8.x,Python3.9.x,Python3.10.x | 2.3.1 | v2.3.1-6.0.rc2 | ||
| branch_v6.0.0-RC1 | x86&aarch64 | Python3.7.x(>=3.7.5),Python3.8.x,Python3.9.x,Python3.10.x | 1.11.0 | v1.11.0-6.0.rc1 |
| Python3.8.x,Python3.9.x,Python3.10.x | 2.1.0 | v2.1.0-6.0.rc1 | ||
| Python3.8.x,Python3.9.x,Python3.10.x | 2.2.0 | v2.2.0-6.0.rc1 |
卸载
Pytorch 框架训练环境的卸载请参考昇腾官方文档Pytorch框架训练环境卸载。
Driving SDK的卸载只需执行以下命令:
pip3 uninstall mx_driving快速上手
import torch, torch_npu
from mx_driving.common import scatter_max
updates = torch.tensor([[2, 0, 1, 3, 1, 0, 0, 4], [0, 2, 1, 3, 0, 3, 4, 2], [1, 2, 3, 4, 4, 3, 2, 1]], dtype=torch.float32).npu()
indices = torch.tensor([0, 2, 0], dtype=torch.int32).npu()
out = updates.new_zeros((3, 8))
out, argmax = scatter_max(updates, indices, out)特性介绍
目录结构及说明
.
├── kernels # 算子实现
│ ├── op_host
│ ├── op_kernel
│ └── CMakeLists.txt
├── onnx_plugin # onnx框架适配层
├── mx_driving
│ ├── __init__.py
│ ├── csrc # 加速库API适配层
│ └── ...
├── model_examples # 自动驾驶模型示例
│ └── BEVFormer # BEVFormer模型示例
├── ci # ci脚本
├── cmake # cmake脚本
├── CMakeLists.txt # cmake配置文件
├── CMakePresets.json # cmake配置文件
├── docs # 文档
| ├── api # 算子api调用文档
| └── ...
├── include # 头文件
├── LICENSE # 开源协议
├── OWNERS # 代码审查
├── README.md # 项目说明
├── requirements.txt # 依赖
├── scripts # 工程脚本
├── setup.py # whl打包配置
└── tests # 测试文件
算子清单
请参见算子清单。
支持特性
- 支持PyTorch 2.1.0,2.3.1,2.4.0
- 支持ONNX模型转换,训推一体
[ ] 支持图模式
onnx转换om
转换前需要手动添加环境变量
# 查看mx_driving安装路径 pip3 show mx_driving export ASCEND_CUSTOM_OPP_PATH=xxx/site-packages/mx_driving/packages/vendors/customize/ export LD_LIBRARY_PATH=xxx/site-packages/mx_driving/packages/vendors/customize/op_api/lib/:$LD_LIBRARY_PATH
模型清单
DrivingSDK仓提供了包括感知、规划、端到端、VLA等自动驾驶模型基于昇腾机器的实操案例。每个模型都有详细的使用指导,后续将持续增加和优化典型模型。使用过程中,若遇到报错问题,可查看自动驾驶模型FAQ自助解决,或在Issues中留言。如下列表中Released为Y的表示已经过测试验证,N的表示开发自验通过。
| Model | 8p-Atlas 800T A2性能(FPS) | 8p-竞品性能(FPS) | Released |
|---|---|---|---|
| BEVDepth | 32.29 | 22.11 | Y |
| BEVDet | 70.41 | 35.56 | Y |
| BEVDet4D | 7.04 | 5.59 | Y |
| BevFormer | 3.66 | 3.32 | Y |
| BEVFusion | 23.62 | 22.54 | Y |
| CenterNet | 1257.444 | 542 | Y |
| CenterPoint(2D) | 66.160 | 85.712 | Y |
| CenterPoint(3D) | 39.41 | 48.48 | Y |
| Deformable-DETR | 63 | 65 | Y |
| DenseTNT | 166 | 237 | Y |
| DETR | 122 | 126 | Y |
| DETR3D | 14.35 | 14.28 | Y |
| Diffusion-Planner | 5672.96 | 5304.32 | Y |
| DiffusionDrive | 28.43 | 30.53 | Y |
| FCOS-resnet | 196 | 196 | Y |
| FCOS3D | 44.31 | 44.30 | Y |
| FlashOCC | 104.85 | 67.98 | Y |
| GameFormer | 7501.8 | 6400 | Y |
| GameFormer-Planner | 5319 | 5185 | Y |
| LaneSegNet | 18.0 | 23.75 | Y |
| MapTR | 34.85 | 33.2 | Y |
| MapTRv2 | 23.03 | 21.91 | Y |
| Mask2Former | 26.03 | 28.42 | Y |
| MatrixVT | 46.19 | 36.89 | Y |
| MultiPath++ | 149.53 | 198.14 | Y |
| OpenDWM | 1.82 | 1.82 | Y |
| OpenVLA | 56.14 | 73.12 | Y |
| PanoOcc | 4.32 | 4.87 | Y |
| Pi-0 | 116.36 | 136.17 | Y |
| PivotNet | 9.75 | 13.8 | Y |
| PointPillar(2D) | 70.79 | 60.75 | Y |
| SalsaNext | 197.2 | 241.6 | Y |
| Sparse4D | 70.59 | 65.75 | Y |
| SparseDrive | Stage1: 46.3Stage2: 37.9 | Stage1: 41.0Stage2: 35.2 | Y |
| StreamPETR | 26.016 | 25.397 | Y |
| SurroundOcc | 7.59 | 7.78 | Y |
| TPVFormer | 6.69 | 10.32 | Y |
| UniAD | Stage1: 1.002Stage2: 1.554 | Stage1: 1.359Stage2: 2.000 | Y |
| BEVNeXt | Stage1: 16.568Stage2: 7.572 | Stage1: 36.643Stage2: 11.651 | N |
| DexVLA | Stage2: 16.72Stage3: 15.85 | Stage2: 18.88Stage3: 18.67 | N |
| HiVT | 645 | 652 | N |
| HPTR | 25.12 | 36.07 | N |
| LMDrive | 8.02 | 13.85 | N |
| MagicDriveDiT | Stage1: 0.83 | Stage1: 1.50 | N |
| Panoptic-PolarNet | 1.28 | 1.69 | N |
| PointTransformerV3 | 11.92 | 35.56 | N |
| QCNet | 75.29 | 94.11 | N |
| Senna | 1.376 | 1.824 | N |
| VAD | 2.847 | 7.476 | N |
| VGGT | 25.04 | 15.30 | N |
| YoloV8 | 214.64 | 479.73 | N |
支持的产品型号
- Atlas A2 训练系列产品
安全声明
系统安全加固
建议您在运行系统配置时开启ASLR(级别2),又称全随机地址空间布局随机化,以提高系统安全性,可参考以下方式进行配置:
echo 2 > /proc/sys/kernel/randomize_va_space由于Driving SDK需要用户自行编译,建议您对编译后生成的so文件开启
strip, 又称移除调试符号信息, 开启方式如下:strip -s具体so文件如下:
- mx_driving/packages/vendors/customize/op_api/lib/libcust_opapi.so
- mx_driving/packages/vendors/customize/op_proto/lib/linux/aarch64/libcust_opsproto_rt2.0.so
- mx_driving/packages/vendors/customize/op_impl/ai_core/tbe/op_tiling/lib/linux/aarch64/libcust_opmaster_rt2.0.so
运行用户建议
出于安全性及权限最小化角度考虑,不建议使用
root等管理员类型账户使用Driving SDK。
文件权限控制
在使用Driving SDK时,您可能会进行profiling、调试等操作,建议您对相关目录及文件做好权限控制,以保证文件安全。
- 建议您在使用Driving SDK时,将umask调整为
0027及以上,保障新增文件夹默认最高权限为750,文件默认最高权限为640。 建议您对个人数据、商业资产、源文件、训练过程中保存的各类文件等敏感内容做好权限管控,可参考下表设置安全权限。
文件权限参考
| 类型 | Linux权限参考最大值 |
|---|---|
| 用户主目录 | 750(rwxr-x---) |
| 程序文件(含脚本文件、库文件等) | 550(r-xr-x---) |
| 程序文件目录 | 550(r-xr-x---) |
| 配置文件 | 640(rw-r-----) |
| 配置文件目录 | 750(rwxr-x---) |
| 日志文件(记录完毕或者已经归档) | 440(r--r-----) |
| 日志文件(正在记录) | 640(rw-r-----) |
| 日志文件目录 | 750(rwxr-x---) |
| Debug文件 | 640(rw-r-----) |
| Debug文件目录 | 750(rwxr-x---) |
| 临时文件目录 | 750(rwxr-x---) |
| 维护升级文件目录 | 770(rwxrwx---) |
| 业务数据文件 | 640(rw-r-----) |
| 业务数据文件目录 | 750(rwxr-x---) |
| 密钥组件、私钥、证书、密文文件目录 | 700(rwx------) |
| 密钥组件、私钥、证书、加密密文 | 600(rw-------) |
| 加解密接口、加解密脚本 | 500(r-x------) |
构建安全声明
在源码编译安装Driving SDK时,需要您自行编译,编译过程中会生成一些中间文件,建议您在编译完成后,对中间文件做好权限控制,以保证文件安全。
运行安全声明
- 建议您结合运行环境资源状况编写对应训练脚本。若训练脚本与资源状况不匹配,如数据集加载内存大小超出内存容量限制、训练脚本在本地生成数据超过磁盘空间大小等情况,可能引发错误并导致进程意外退出。
Driving SDK在运行异常时(如输入校验异常(请参考api文档说明),环境变量配置错误,算子执行报错等)会退出进程并打印报错信息,属于正常现象。建议用户根据报错提示定位具体错误原因,包括通过设定算子同步执行、查看CANN日志、解析生成的Core Dump文件等方式。
公网地址声明
Driving SDK代码中包含公网地址声明如下表所示:
公网地址
| 类型 | 开源代码地址 | 文件名 | 公网IP地址/公网URL地址/域名/邮箱地址 | 用途说明 | |
|---|---|---|---|---|---|
| 自研 | 不涉及 | ci/docker/ARM/Dockerfile | https://mirrors.aliyun.com/pypi/simple | docker配置文件,用于配置pip源 | |
| 自研 | 不涉及 | ci/docker/X86/Dockerfile | https://mirrors.huaweicloud.com/repository/pypi/simple | docker配置文件,用于配置pip源 | |
| 自研 | 不涉及 | ci/docker/ARM/install_cann.sh | https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN | cann包下载地址 | |
| 自研 | 不涉及 | ci/docker/x86/install_cann.sh | https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN | cann包下载地址 | |
| 自研 |
...(内容过长,已截断,更多详情请访问项目地址)