netrans/docs/netrans_cli.md

364 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Netrans CLI 参考手册
本手册提供 Netrans 命令行接口的完整规范。
## 命令总览
```
netrans load → quantize → export
```
| 子命令 | 用途 |
|--------|------|
| load | 加载模型并配置预处理参数 |
| quantize | 对模型进行量化 |
| quantize_hybrid | 混合精度量化 |
| add_pre_post | 嵌入前后处理节点 |
| export | 导出 NBG 文件 |
| dump | 导出各层张量用于调试 |
| inference | 执行推理并保存输入输出 |
| measure | 统计模型计算量FLOPs和参数量 |
| check_opset | 检查 ONNX 模型 opset 版本 |
---
## 快速参考
### 命令速查
| 命令 | 示例 |
|------|------|
| load | `netrans load ./model --mean 0 0 0 --std 255` |
| quantize | `netrans quantize ./model asymu8 --algorithm 1` |
| export | `netrans export ./model asymu8 --platform pnna` |
| dump | `netrans dump ./model asymu8` |
| inference | `netrans inference ./model asymu8 --iterations 1` |
| measure | `netrans measure ./model asymu8` |
### 参数速查
#### 量化类型
- `asymu8`: 非对称8位默认
- `symi8`: 对称8位
- `symi16`: 对称16位
- `fp16`: 半精度浮点
**注意事项**
- **FP16**: v6.33.4+ 支持嵌入前后处理节点
- **symi16**: 不支持预处理嵌入,需设置 `--preprocess False` 或改用 `dfpi16`
#### 量化算法
- `0` / `normal`: 普通量化
- `1` / `KL`: KL散度默认
- `2` / `moving_average`: 移动平均
- `3` / `auto`: 自动选择
#### 平台
- `pnna`: 单核架构
- `pnna2`: 多核架构(支持 1-4 核)
#### 多核配置(仅 pnna2
- `1core` / `1`: 单核
- `2core` / `2`: 双核
- `3core` / `3`: 三核
- `4core` / `4`: 四核
---
## 命令详解
### netrans load
加载模型并配置预处理参数。
**用法:**
```bash
netrans load <dir> [--mean <values>] [--std <values>] [--verbose]
```
**参数:**
- `dir` (必选): 模型目录路径
- `--mean` (可选): 通道均值,如 `"0 0 0"`
- `--std` (可选): 通道标准差(归一化除数),如 `255`
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
# 三通道模型
netrans load ./yolov5s --mean "0 0 0" --std "255"
# 单通道模型
netrans load ./lenet_gray --mean "127.5" --std "255"
```
**模型文件查找优先级:**
目录中可能存在多种文件时,按以下固定优先级识别(`get_modelfile_name`
1. `.json` / `.data` — 已生成的模型产物(优先级最高)
2. `.onnx` > `.pb` (TF) > `.prototxt` (Caffe) > `.tflite` > `.pt` (PyTorch) > `.h5` (Keras) > `.cfg` (Darknet)
文件名含 `quantize` 的文件会被忽略。v6.33.5 起改为确定性优先级,不再依赖文件系统排序。
**输出:**
- `channel_mean_value.txt`: 预处理参数文件
- `<model>.json`: 网络结构描述
- `<model>.data`: 权重数据
---
### netrans quantize
对模型进行量化。
**用法:**
```bash
netrans quantize <dir> <qtype> [--algorithm <int>] [--iterations <int>]
[--entropy] [--mle] [--verbose]
```
**参数:**
- `dir` (必选): 已加载模型的目录
- `qtype` (必选): 量化类型,如 `asymu8`
- `--algorithm` (可选): 量化算法0/1/2/3默认 1
- `--iterations` (可选): 迭代次数,默认 1
- `--entropy` (可选): 计算张量熵(分析用)
- `--mle` (可选): 最小化层间误差(分析用)
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
# 基础量化
netrans quantize ./model asymu8
# 高精度量化
netrans quantize ./model asymu8 --algorithm 1 --iterations 5
# 量化分析
netrans quantize ./model asymu8 --entropy --mle
```
**输出:**
- `<model>_<qtype>.quantize`: 量化参数文件
---
### netrans quantize_hybrid
混合精度量化。
**用法:**
```bash
netrans quantize_hybrid <dir> <qtype> --cust-qnt-layers <file>
[--hybrid-qtype <type>] [--algorithm <int>]
[--iterations <int>] [--verbose]
```
**参数:**
- `dir` (必选): 已加载模型的目录
- `qtype` (必选): 基础量化类型
- `--cust-qnt-layers` (必选): 层配置文件路径
- `--hybrid-qtype` (可选): 混合层量化类型,默认 `dfpi16`
- `--algorithm` (可选): 量化算法,默认 1
- `--iterations` (可选): 迭代次数,默认 1
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
netrans quantize_hybrid ./model asymu8 --cust-qnt-layers layers.txt
```
---
### netrans add_pre_post
嵌入前后处理节点。
**用法:**
```bash
netrans add_pre_post <dir> <qtype> [--preprocess] [--postprocess]
[--use-hybrid] [--verbose]
```
**参数:**
- `dir` (必选): 已量化模型目录
- `qtype` (必选): 量化类型
- `--preprocess` (可选): 嵌入预处理节点(默认启用)。传入即启用,与 API `preprocess=True` 一致
- `--postprocess` (可选): 嵌入后处理节点(默认启用)。传入即启用,与 API `postprocess=True` 一致
- `--use-hybrid` (可选): 使用混合量化文件
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
# 默认同时嵌入前后处理节点(无需传参)
netrans add_pre_post ./model asymu8
```
---
### netrans export
导出 NBG 文件。
**用法:**
```bash
netrans export <dir> <qtype> [--platform <plat>] [--use-hybrid]
[--preprocess <bool>] [--postprocess <bool>]
[--core-num <n>] [--set-name <name>] [--verbose]
```
**参数:**
- `dir` (必选): 已量化模型目录
- `qtype` (必选): 量化类型
- `--platform` (可选): 平台,`pnna` 或 `pnna2`,默认 `pnna`
- `--use-hybrid` (可选): 使用混合量化文件
- `--preprocess` (可选): 嵌入预处理,默认 `true`
- `--postprocess` (可选): 嵌入后处理,默认 `true`
- `--core-num` (可选): 多核配置,`1core`/`2core`/`4core`(仅 pnna2
- `--set-name` (可选): 自定义 NB 文件名,导出后将 `network_binary.nb` 复制为 `{name}.nb`
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
# 基础导出
netrans export ./model asymu8 --platform pnna
# 多核导出(仅 pnna2
netrans export ./model asymu8 --platform pnna2 --core-num 4core
# 自定义 NB 文件名
netrans export ./model asymu8 --platform pnna --set-name my_model
```
**输出:**
- `wksp/<model>_<qtype>_nbg_unify/network_binary.nb`: NBG 文件
- `wksp/<model>_<qtype>_nbg_unify/nbg_meta.json`: 元数据
---
### netrans dump
导出各层张量用于调试。
**用法:**
```bash
netrans dump <dir> <qtype> [--use-hybrid] [--save-bin] [--verbose]
```
**参数:**
- `dir` (必选): 已量化模型目录
- `qtype` (必选): 量化类型
- `--use-hybrid` (可选): 使用混合量化文件
- `--save-bin` (可选): 额外保存二进制 `.tensor.bin` 文件,方便 C 语言端读取
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
netrans dump ./model asymu8
netrans dump ./model asymu8 --save-bin
```
**输出:** `dump/<model>_<qtype>/` 目录
---
### netrans inference
执行推理并保存输入输出。
**用法:**
```bash
netrans inference <dir> <qtype> [--iterations <int>] [--use-hybrid]
[--save-bin] [--verbose]
```
**参数:**
- `dir` (必选): 已量化模型目录
- `qtype` (必选): 量化类型
- `--iterations` (可选): 迭代次数,默认 1
- `--use-hybrid` (可选): 使用混合量化文件
- `--save-bin` (可选): 额外保存二进制 `.tensor.bin` 文件,方便 C 语言端读取
- `--verbose, -v` (可选): 输出 DEBUG 日志
**示例:**
```bash
netrans inference ./model asymu8 --iterations 1
```
**输出:** `wksp/<model>_<qtype>/golden/` 目录
---
### netrans measure
计算网络计算量FLOPs、MACs 等)。
**用法:**
```bash
netrans measure <dir> [qtype] [--use-hybrid] [--verbose]
```
**参数:**
- `dir` (必选): 已执行 `netrans load` 的模型目录
- `qtype` (可选): 量化类型,默认 `float32`;统计量化模型时必须与已有 `.quantize` 文件的类型一致
- `--use-hybrid` (可选): 使用 `<model>_<qtype>_hy.quantize` 和对应的 Hybrid 模型文件
- `--verbose, -v` (可选): 输出 DEBUG 日志
**前置产物:**
- 所有模式均需要 `<model>.json`、`<model>.data` 和 `<model>_inputmeta.yml`
-`float32` 模式还需要先执行 `netrans quantize <dir> <qtype>`
- Hybrid 模式需要先执行 `netrans quantize_hybrid`,并传入 `--use-hybrid`
**示例:**
```bash
# qtype 省略时统计 float32 网络
netrans measure ./model
netrans measure ./model asymu8
netrans measure ./model asymu8 --use-hybrid
# 安装后也可使用等价入口
netrans-measure ./model asymu8
```
**输出:** 模型目录下的 `wksp/<model>_<qtype>/`Hybrid 模式输出到 `wksp/<model>_<qtype>_hy/`。统计文件的具体名称和字段以实际生成结果为准。
完整可运行流程见 [measure 示例](../examples/measure/README.md)。
---
### netrans check_opset
检查 ONNX 模型 opset 版本。
**用法:**
```bash
netrans check_opset <path> [--verbose]
```
**参数:**
- `path` (必选): ONNX 文件路径或目录
- `--verbose, -v` (可选): 显示详细信息
**示例:**
```bash
netrans check_opset ./model.onnx
netrans check_opset ./model_dir/
```
**支持的 opset 版本:** 7 - 17
**退出码:**
- 0: 符合要求
- 1: 不符合或检查失败
---
## 相关文档
- [cookbook.md](cookbook.md) - 实用指南、速查表、场景示例、故障排查
- [netrans_api.md](netrans_api.md) - Python API 参考
- [release.md](release.md) - 版本发布记录