![]() |
||
---|---|---|
.. | ||
1_scripts | ||
3_deploy/modelzoo/drl4vrp | ||
weights | ||
download.ps1 | ||
download.sh | ||
readme.md |
readme.md
drl4vrp
下载
✨ 一键下载开发流程中所需的各种文件,包括编译使用的量化校准集、运行时工程的依赖库,以及输入输出文件。
💡 推荐使用linux版下载脚本,其wget包含断网自动重连功能,不会出现下载文件遗漏情况。
windows
📌 第一次使用,请在C盘根目录下新建icraft_auth.txt
,保存下载站账号密码,以换行符分隔
需要事先下载windows版本wget:
(若点击以下链接后未直接下载,请选择 1.20.3 版本下的对应系统链接进行下载)
使用时需要将wget.exe的路径作为命令行参数传入,注意不是exe的父文件夹目录,而是包含wget.exe的完整绝对路径:
不下载Deps:./download.ps1 "PATH_TO_WGET_EXE"
如果您是第一次使用我们的模型库,请下载包括工程依赖库的所有文件:./download.ps1 "PATH_TO_WGET_EXE" -d
💡 下载过程中可能因网络问题出现中断情况,需 自行重新运行 下载脚本。
linux
📌 第一次使用,请在/usr根目录下新建icraft_auth.txt
,保存下载站账号密码,以换行符分隔
为确保文件格式正确,请在运行脚本前安装格式转换工具dos2unix
,并执行格式转换命令:
sudo apt-get install dos2unix
dos2unix /usr/icraft_auth.txt
dos2unix ./download.sh
如果您是第一次使用我们的模型库,请下载包括工程依赖库的所有文件:./download.sh -d
如果之前已经在使用别的模型时下载过Deps依赖库,可以直接将其中的thirdparty部分复制到路径3_deploy/Deps
,只需下载量化校准集和输入输出文件即可:./download.sh
🌟 Tips:
0. 文件结构说明
AI部署模型需要以下几部分文件
- 0_drl4vrp >模型原始工程,需要自行下载
- weights >存放原始权重,需要自行下载
- 1_scripts >若干脚本,用于保存部署所需模型、模型导出验证等功能
- 3_deploy >将模型部署到硬件时需要的c++工程
1. python工程准备
1. 模型来源:
- code:https://github.com/mveres01/pytorch-drl4vrp
- branch:master
- commit_id:5b9b86e
- weights:https://drive.google.com/open?id=1wxccGStVglspW-qIpUeMPXAGHh2HsFpF
2. 保存模型
目的:将模型保存成可部署的形态
1)根据模型来源中的地址:https://drive.google.com/open?id=1wxccGStVglspW-qIpUeMPXAGHh2HsFpF ,下载原始weights,存放于 /weights
文件夹中
- 有时开源的weights url可能会变更。如果我们提供的weights url失效,请根据原工程相应的branch以及commit版本寻找正确的下载链接
- 若上述weights url永久失效,请联系本模型库相关人员获取权限下载
2)根据模型来源中的地址,下载指定commit id版本的源代码,文件夹名称要设置为:0_drl4vrp
# 在此模型根目录
mkdir 0_drl4vrp
git clone -b master https://github.com/mveres01/pytorch-drl4vrp 0_drl4vrp
cd 0_drl4vrp
git checkout 5b9b86e
3)进入1_scripts执行保存模型脚本
# 在此模型根目录
cd 1_scripts
python 1_save.py
1_scripts提供脚本说明:
-
环境要求:Icraft编译器对导出框架模型时使用的框架版本有要求。即以下脚本中所有导出模型的脚本
1_save.py
,必须在要求的框架版本下执行,其他脚本不限制。要求的版本:- pytorch:支持pytorch1.9.0、pytorch2.0.1两个版本的原生网络模型文件(.pt格式),以及pytorch框架保存为onnx(opset=17)格式的模型文件(.onnx格式)
- paddle:仅支持PaddlePaddle框架保存为onnx(opset=11)格式的模型文件(.onnx格式),不支持框架原生网络模型文件
- darknet:支持Darknet框架原生网络模型GitHub - pjreddie/darknet: Convolutional Neural Networks
-
0_infer.py >可以推理一张图并得到最终结果,模型原始权重会从
/weights
中寻找,需要您预先下载 -
1_save.py >保存模型,保存好的用于部署的模型,会存放在
/3_deploy/modelzoo/drl4vrp/imodel
保存模型时的修改点:- 将模型由3输入修改为5输入
- 导出迭代一次的结果(max_steps=1)
- 将ptr计算之后的操作去掉,并添加last_hh作为输出算子
- 将模型由3输入修改为5输入
-
2_save_infer.py >用修改后保存的模型做前向推理,验证保存的模型与原模型是否一致
2. 部署模型
目的:编译c/c++可执行程序,在硬件上调用onnxruntime进行前向推理
模型库以ubuntu操作系统为例:
-
编译环境准备
- os: ubuntu20.04
- cmake>=3.10
- compiler: aarch64-linux-gnu-g++/aarch64-linux-gnu-gcc
-
版本依赖下载
请至modelzoo_pub/deploy/Deps/onnxruntime.zip下载主要版本依赖,解压后存放在
\3_deploy\modelzoo\drl4vrp\onnxruntime
。
下载后文件结构为:├── include │ ├── cpu_provider_factory.h │ ├── onnxruntime_c_api.h │ ├── onnxruntime_cxx_api.h │ ├── onnxruntime_cxx_inline.h │ ├── onnxruntime_float16.h │ ├── onnxruntime_run_options_config_keys.h │ ├── onnxruntime_session_options_config_keys.h │ ├── onnxruntime_training_c_api.h │ ├── onnxruntime_training_cxx_api.h │ ├── onnxruntime_training_cxx_inline.h │ └── provider_options.h └── lib ├── aarch64 │ ├── libonnxruntime.so │ └── libonnxruntime.so.1.17.1 └── x64 ├── libonnxruntime.so └── libonnxruntime.so.1.17.1
-
编译c++程序 目前只支持linux_x64和linux_aarch64环境的Release编译,需要提前安装好aarch64交叉编译器(apt install g++-aarch64-linux-gnu)
- 交叉编译 aarch64可执行文件:
#在3.1所需的linux编译环境中
cd 3_deploy/modelzoo/drl4vrp/build_arm
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++
make -j12
- 运行前需要手动把libonnxruntime.so, libonnxruntime.so.1.17.1复制到运行环境中,例如 usr/lib下
- 将编译得到的的可执行文件
drl_run
复制至片上系统/home/fmsh/ModelZoo/drl4vrp/
即可
模型输入均在 3_deploy/modelzoo/drl4vrp/io
中,可根据需要进行替换,生成方式如下:
# input
static =torch.rand((1, 2, 20))
dynamic = torch.zeros((1,1,20))
decoder_input = torch.zeros((1,2,1))
last_hh = torch.zeros((1,1,128))
mask = torch.ones((1,20))
最后手动放入对应3_deploy/modelzoo/drl4vrp/io
中
-
部署环境检查
- 以root账户登录片上系统terminal(ssh或串口皆可),模型库默认的模型存放路径为以下目录,如果没有请预先创建:
/home/fmsh/ModelZoo/
-
将3_deploy中所有文件夹复制到以上目录中(如果Deps中已经存在相同版本的依赖则可以不必再复制)
-
3_deploy/modelzoo/drl4vrp工程结构如下
├── build
├── build_arm
├── CMakeLists.txt
├── CMakePresets.json
├── cmake
├── onnxruntime
├── imodel
├── io
├── drl_run
└── source -
3_deploy/modelzoo/drl4vrp工程文件说明
- build: linux_x64下的运行示例,drl_run是source工程的编译结果
- build_arm: linux_aarch64下的运行示例,drl_run是source工程的编译结果,运行前需要手动把libonnxruntime.so, libonnxruntime.so.1.17.1复制到运行环境中,例如 usr/lib下
- drl_run: 模型前向推理工程
- CMakeLists.txt: CMake配置文件
- CMakePresets.json: CMake配置文件
- cmake: CMake配置文件
- onnxruntime: include和lib依赖文件,include文件是共享的,lib文件分别对应aarch64交叉编译和x64编译环境,cmake编译会自动选择依赖;
- source: 工程前向代码main.cpp
- io: 输入,可根据需求手动生成替换
-
执行程序
运行前请确保已经手动将3_deploy\modelzoo\drl4vrp\onnxruntime\lib\aarch64下的libonnxruntime.so, libonnxruntime.so.1.17.1复制到运行环境中,例如 usr/lib下, 然后执行:
cd /home/fmsh/ModelZoo/modelzoo/drl4vrp chmod 777 * ./drl_run
在终端可查看程序运行结果,显示最终迭代的输出及耗时
3. 模型性能记录
drl4vrp | input shape | hard time |
---|---|---|
float | [1,2,20],[1,1,20],[1,2,1],[1,1,128],[1,20] | 26ms |