Merge branch ‘master’ of https://gitlink.org.cn/nudt_dsp/models
本工具通过 Python 接口实现板卡推理,批量测试每个模型的多种量化类型板卡推理时间,结果保存到 CSV 文件中。支持多输入模型的自动化测试。
graph TD subgraph 模型批量处理流程 A[开始] --> B[板卡建立WebSocket连接] B --> C[清空CSV文件写入表头] C --> D[遍历模型文件夹获取所有模型] D --> E{遍历每个模型} subgraph E[单个模型处理流程] E1[查找inputmeta配置文件] --> E2[解析YAML生成随机输入数据] E2 --> E3[获取量化文件夹列表] E3 --> E4{遍历每个量化类型} end subgraph F[单次推理测试流程] F1[删除旧模型] --> F2[加载新量化模型] F2 --> F3[执行多次推理] F3 --> F4[统计推理时间计算平均和最佳时间] F4 --> F5[追加结果到CSV] end E4 --> F F --> G{是否还有下一个量化类型?} G -- 是 --> E4 G -- 否 --> H{是否还有下一个模型?} H -- 是 --> E H -- 否 --> I[关闭连接结束] end
├── resource/ # 算法模型 ├── src/ # 源码 │ ├── utils/ # 公共组件 │ │ └── client.py # PNNA设备客户端 │ └── auto_test.py # 批量测试脚本 ├── README.md # 项目说明文档 └── requirements.txt # 依赖包
硬件要求
编译和使用
examples/jsonrpc_server
192.168.23.100
192.168.23.132
./server
通信基础信息
ws://192.168.23.100:8000/websocket
创建 Python 3.8 环境
wget "https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease//Miniforge3-$(uname)-$(uname -m).sh" mkdir -p ~/app INSTALL_PATH="${HOME}/app/miniforge3" bash Miniforge3-Linux-x86_64.sh -b -p ${INSTALL_PATH} echo "source "${INSTALL_PATH}/etc/profile.d/conda.sh"" >> ${HOME}/.bashrc echo "source "${INSTALL_PATH}/etc/profile.d/mamba.sh"" >> ${HOME}/.bashrc source ${HOME}/.bashrc mamba create -n netrans python=3.8 -y mamba activate netrans
pip install -r requirements.txt
git clone https://gitlink.org.cn/nudt_dsp/models.git
python auto_test.py --models_dir models_test
--models_dir
models_test
--output_csv
results.csv
--runs
3
--host
192.168.23.100:8000
生成的 CSV 文件包含以下列:
清空 CSV 文件,只保留表头。
参数:
csv_file
追加单条结果到 CSV 文件。
result
返回:
bool
处理单个 .nb 文件并返回测试结果。
pnna_device
nb_path
model_name
quant_type
input_data_list
num_runs
dict
None
从 YAML 配置文件中读取所有输入数据的 shape 并生成 uint8 随机数据。
yml_path
list
在模型目录中查找 inputmeta 配置文件。
model_path
str
获取量化文件夹列表并按指定顺序排序。
排序优先级:asymu8 → symi8 → dfpi16 → fp16
asymu8
symi8
dfpi16
fp16
wksp_path
处理单个模型的所有量化文件,并实时保存到 CSV。
int
增量处理所有模型,处理完一个模型就保存一次。
models_dir
output_csv
主函数:解析命令行参数并启动测试。
作者: liangliangou
tested models
模型批量时间测试工具
概述
本工具通过 Python 接口实现板卡推理,批量测试每个模型的多种量化类型板卡推理时间,结果保存到 CSV 文件中。支持多输入模型的自动化测试。
流程图
graph TD subgraph 模型批量处理流程 A[开始] --> B[板卡建立WebSocket连接] B --> C[清空CSV文件写入表头] C --> D[遍历模型文件夹
获取所有模型] D --> E{遍历每个模型} subgraph E[单个模型处理流程] E1[查找inputmeta配置文件] --> E2[解析YAML
生成随机输入数据] E2 --> E3[获取量化文件夹列表] E3 --> E4{遍历每个量化类型} end subgraph F[单次推理测试流程] F1[删除旧模型] --> F2[加载新量化模型] F2 --> F3[执行多次推理] F3 --> F4[统计推理时间
计算平均和最佳时间] F4 --> F5[追加结果到CSV] end E4 --> F F --> G{是否还有
下一个量化类型?} G -- 是 --> E4 G -- 否 --> H{是否还有
下一个模型?} H -- 是 --> E H -- 否 --> I[关闭连接
结束] end
项目结构
快速开始
环境要求及配置
硬件要求
编译和使用
examples/jsonrpc_server下192.168.23.100,在电脑上添加192.168.23.132这个 IP(与板子 IP 保持在同一网段)./server运行即可通信基础信息
ws://192.168.23.100:8000/websocket,与板卡保持一致创建 Python 3.8 环境
安装依赖
下载工程
使用方法
执行脚本
命令行参数
--models_dirmodels_test--output_csvresults.csv--runs3--host192.168.23.100:8000输出结果
生成的 CSV 文件包含以下列:
评估指标
函数说明
clear_csv_file(csv_file)
清空 CSV 文件,只保留表头。
参数:
csv_file(str): CSV 文件路径append_to_csv(result, csv_file)
追加单条结果到 CSV 文件。
参数:
result(dict): 包含测试结果的数据字典csv_file(str): CSV 文件路径返回:
bool: 写入是否成功process_nb_file(pnna_device, nb_path, model_name, quant_type, input_data_list, num_runs)
处理单个 .nb 文件并返回测试结果。
参数:
pnna_device(Client): PNNA 设备客户端nb_path(str): .nb 模型文件路径model_name(str): 模型名称quant_type(str): 量化类型input_data_list(list): 输入数据列表,每个元素是一个 numpy 数组num_runs(int): 推理次数返回:
dict或None: 测试结果字典,错误时返回 Nonegenerate_data_from_yml(yml_path)
从 YAML 配置文件中读取所有输入数据的 shape 并生成 uint8 随机数据。
参数:
yml_path(str): YAML 配置文件路径返回:
list或None: 输入数据列表,每个元素是一个 numpy 数组find_inputmeta_yml(model_path)
在模型目录中查找 inputmeta 配置文件。
参数:
model_path(str): 模型目录路径返回:
str或None: 配置文件路径,未找到返回 Noneget_quant_folders(wksp_path)
获取量化文件夹列表并按指定顺序排序。
排序优先级:
asymu8→symi8→dfpi16→fp16参数:
wksp_path(str): wksp 目录路径返回:
list: 排序后的量化文件夹名称列表process_and_save_model(pnna_device, model_path, model_name, csv_file, num_runs)
处理单个模型的所有量化文件,并实时保存到 CSV。
参数:
pnna_device(Client): PNNA 设备客户端model_path(str): 模型目录路径model_name(str): 模型名称csv_file(str): 输出 CSV 文件路径num_runs(int): 推理次数返回:
int: 成功处理的配置数量process_models_incremental(pnna_device, models_dir, output_csv, num_runs)
增量处理所有模型,处理完一个模型就保存一次。
参数:
pnna_device(Client): PNNA 设备客户端models_dir(str): 模型根目录output_csv(str): 输出 CSV 文件路径num_runs(int): 推理次数main()
主函数:解析命令行参数并启动测试。
作者: liangliangou