|
|
||
|---|---|---|
| docs | ||
| examples | ||
| script | ||
| src/netrans | ||
| test | ||
| README.md | ||
| requirements_py3.10.txt | ||
| setup.sh | ||
README.md
Netrans 简介
Netrans 是 Pnna NPU 配套的AI编译器,提供命令行工具 Netrans_cli 和 python API, 其功能是将模型权重转换成在 Pnna NPU 上运行的 nbg(network binary graph)格式文件(.nb 后缀)。 Nbg 文件用于后续模型部署和推理工程的交叉编译。
工程结构
Netrans 目录结构如下:
netrans/
├── bin # binary file
├── docs # 文档,包括用户指南和命令行工具的详细说明
├── examples # 示例代码,展示不同框架如何使用netrans进行模型转换
├── README.md # 说明文档,通常包含项目概述、安装指南等
├── script # 命令行工具
├── setup.sh # 用于设置环境或安装依赖的Shell脚本
└── test # 测试代码
安装指南
系统依赖
- CPU : Intel® Core™ i5-6500 CPU @ 3.2 GHz x4 支持 the Intel® Advanced Vector Extensions.
- RAM : 至少8GB
- 硬盘 : 160GB
- 操作系统 : Ubuntu 20.04 LTS 64-bit with Python 3.10,不推荐使用其他版本
安装步骤
- 安装依赖
sudo apt update
sudo apt install build-essential
# 安装 mamba ,本项目使用 mamba 创建虚拟环境,演示安装过程
# 下载 mamba 安装脚本
wget "https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease//Miniforge3-$(uname)-$(uname -m).sh"
# 创建 mamba 的安装目录
mkdir -p ~/app
# 安装 mamba 到 ~/app/
bash Miniforge3-Linux-x86_64.sh -b -p ${HOME}/app/miniforge3
# 添加 mamba 的初始化脚本到环境配置文件
echo "source " ${HOME}/app/miniforge3/etc/profile.d/mamba.sh"" >> ${HOME}/.bashrc
# 重新加载 ~/.bashrc 文件,使 mamba 初始化生效
source ${HOME}/.bashrc
# 创建一个名为 netrans 的虚拟环境,并安装 Python 3.10
mamba create -n netrans python=3.10 -y
# 激活 netrans 虚拟环境
mamba activate netrans
- 下载 Netrans
# 下载 Netrans 到 ~/app
cd ~/app
git clone https://gitlink.org.cn/nudt_dsp/netrans.git
- 运行配置脚本
cd ~/app/netrans
bash setup.sh
Netrans 使用说明
Netrans 提供 Tensorflow、Caffe、Darknet、ONNX 和 Pytorch 的模型转换示例,请参考目录 ~/app/netrans/examples
命令行工具
Netrans 提供了简单的命令行接口,用于编译和优化模型。
# 以 转成 ONNX 格式的 YOLOv8s 模型为例,演示使用 Netrans 命令行工具完成转换的全过程。
# 1. 定义模型路径,模型路径默认为工作路径。
work_path='~/app/netrans/examples/infer_with_pre_post_process/yolov8s'
cd ${work_path}
# 2. 激活环境
mamba activate netrans
# 3. 模型导入
netrans load ./ --mean 0 0 0 --scale 1 1 1
# 4. 模型量化
netrans quantize ./ asymu8
# 5. 将前后处理加入推理网络
netrans add_pre_post ./ asymu8
# 6. 导出 nbg 文件
netrans export ./ asymu8
详细说明请参考netrans 命令行使用说明。
Python接口
通过Netrans Python接口,可以方便地在Python脚本中调用编译器。 示例代码:
from netrans import Netrans
# 定义模型路径,模型路径默认为工作路径。
model_path='~/app/netrans/examples/infer_with_pre_post_process/yolov8s'
import sys
model_path=sys.argv[1]
# 初始化netrans
net = Netrans()
# 模型载入,同时配置 mean 和 scale
net.load(model_path, mean=[128,128,128] ,scale=[1,1,1] )
# 模型量化
net.quantize("asymu8", pre = False, post= False)
# 前后处理添加进推理
net.add_pre_post("asymu8")
# 模型导出
net.export("asymu8")
详细说明请参考netrans api 使用说明。