36 KiB
Netrans 版本发布记录
当前版本: 6.33.6 最后更新: 2026-07-29
版本速查
| 版本 | 日期 | 主要变更 |
|---|---|---|
| 6.33.6 | 2026-06-11 | 多核dtype修复、5处业务逻辑Bug修复、多模型检测、多输入Concat修复、版本管理、增量安装 |
| 6.33.5 | 2026-05-13 | 防御性编程增强、文档体系完善(SRS/SDD/STD) |
| 6.33.4 | 2026-04-21 | FP16前后处理支持、symi16预处理限制、参数清理机制 |
| 6.33.3 | 2026-02-27 | 多核配置支持 (1-4核) |
| 6.33.2 | 2026-02-25 | 安装脚本优化 |
| 6.33.1 | 2026-02-24 | 目录结构优化 |
| 6.33.0 | 2026-02-09 | Python 3.10 & Acuity 6.33 迁移 |
| 6.42.4 | 2026-02-09 | Acuity 拆分 & 离线打包 |
| 6.42.3 | 2025-12-05 | Hybrid 量化 & Dump 功能 |
| 6.42.2 | 2025-12-05 | Platform 参数替换 Optimize |
目录
- v6.33.6 - 多核dtype修复、5处业务逻辑Bug修复、多模型检测、多输入Concat修复、版本管理
- v6.33.5 - 防御性编程增强、文档体系完善
- v6.33.4 - FP16前后处理支持、symi16预处理限制、参数清理机制
- v6.33.3 - 多核配置支持 (1-4核)
- v6.33.2 - 安装脚本优化 & 消除依赖冲突警告
- v6.33.1 - 目录结构优化 & 安装流程改进
- v6.33.0 - Python 3.10 & Acuity 6.33 迁移
- v6.42.4 - Acuity 拆分 & 离线打包
- v6.42.3+ - Export API 优化
- v6.42.3 - Hybrid 量化 & Dump 功能
- v6.42.2 - Platform 参数替换 Optimize
- 历史版本
详细变更
未发布 (2026-07-29)
安装脚本导出 NETRANS_PYTHON
setup.sh记录本次安装 Netrans 所使用的实际 Python 解释器(sys.executable)- 安装完成后将
NETRANS_PYTHON写入~/.bashrc的 Netrans 托管环境块 NETRANS_PYTHON用于在未激活虚拟环境时明确调用能够运行 Netrans 的 Python- Python 解释器路径纳入安装配置指纹;切换 Python 或虚拟环境后重新运行安装脚本会自动更新配置
script/目录仍通过PATH提供netrans命令,现有调用方式不变
使用示例:
"$NETRANS_PYTHON" -c "import netrans, acuitylib"
"$NETRANS_PYTHON" "$(command -v netrans)" --help
load 预处理参数由 scale 更名为 std
- Python API:
load(..., scale=...)改为load(..., std=...) - CLI:
netrans load --scale ...改为netrans load --std ... std表示标准差/归一化除数,预处理公式为(input - mean) / std- Acuity
_inputmeta.yml的固定字段仍名为scale,生成值为1 / std - 本次更名不保留旧参数别名,调用方需要同步更新
v6.33.6 (2026-06-11)
Bug 修复:多核导出 dtype 回退 fp16
变更日期: 2026-05-25
影响范围: export_nbg.py、netrans.py
问题描述
使用 Python API 在多核模式(pnna2)下导出模型时,量化类型错误地回退为 fp16,而 CLI 路径正常。
根因
export_nbg_without_reload() 只重新加载了被 add_pre_post 修改过的 inputmeta 和 postprocess YAML 文件,从未调用 nn.load_model_quantize() 加载 .quantize 文件。CLI 路径中 load_net() 会加载量化文件,因此 CLI 工作正常。
修复方案
新增 _sync_metadata_to_net() 统一同步函数(export_nbg.py:21-44),作为 inputmeta / postprocess / quantize 三个元数据文件的单点同步入口。export_nbg_without_reload() 改用此函数,一次调用完成全部同步。
def _sync_metadata_to_net(nn, net, model_filename, quantized, use_hybrid=False):
"""单点同步入口:加载 inputmeta + postprocess + quantize 三个元数据文件"""
inputmeta = model_filename + "_inputmeta.yml"
nn.load_model_inputmeta(net, inputmeta)
postprocess_file = model_filename + "_postprocess_file.yml"
if os.path.exists(postprocess_file):
nn.load_model_outputmeta(net, postprocess_file)
if quantized != "float32":
quantize_file = model_filename + '_' + quantized + (
"_hy.quantize" if use_hybrid else ".quantize"
)
if os.path.exists(quantize_file):
nn.load_model_quantize(net, quantize_file)
更新文件
src/netrans/export_nbg.py: 新增_sync_metadata_to_net()(+27行),修改export_nbg_without_reload(-14/+1)devtools/support/260525_multicore_dtype_fp16/diagnose.py: 更新诊断脚本devtools/support/260525_multicore_dtype_fp16/report.md: 技术报告
Bug 修复:5 处业务逻辑 Bug 修复
变更日期: 2026-06-01
影响范围: add_prepost_to_graph.py、importer.py、netrans.py
修复清单
Bug 1 — is_float_quantize 遗漏 float32:update_preprocess() 中浮点量化判断只检查 fp16 和 bf16,遗漏了 float32。导致 float32 模型错误尝试从 quantize 文件获取量化参数。补充 qtype == 'float32' 判断。
Bug 2 — clear_postprocess 残留状态:clear_postprocess() 使用 pop('add_postproc_node', None) 清除字段,但后续 acuitylib 检查字段存在性时触发 KeyError。改为设置 add_postproc_node = False 保留字段但恢复默认值。
Bug 3 — _dataset_txt_is_valid 不兼容两列格式:Acuity 支持 dataset.txt 中每行为 路径 标签(两列),Netrans 取整行当路径去 os.path.exists(),标签也被带入导致校验失败。修复为按空格分割取第一列。
Bug 4 — load() 重复覆盖 channel_mean_value.txt:mean/std 未提供时,load() 始终用默认值 mean=0, std=1.0 覆盖已有 channel_mean_value.txt。修复后优先使用已有文件,仅在文件不存在时生成默认值。
Bug 5 — float32 + preprocess=True 未拦截:浮点模型不需要将预处理嵌入推理节点,但 export() 未对 float32 + preprocess=True 进行拦截。新增 ValueError 拦截,提示用户设为 preprocess=False。
更新文件
src/netrans/add_prepost_to_graph.py: Bug 1 (+1/-1), Bug 2 (+2/-1)src/netrans/importer.py: Bug 3 (+7/-2)src/netrans/netrans.py: Bug 4 (+5/-2), Bug 5 (+8)
功能增强:get_modelfile_name 多模型检测
变更日期: 2026-05-25
影响范围: utils.py、netrans_cli.md
功能说明
目录中存在多个不同名称的模型文件时,原逻辑按后缀优先级选择但不会提示用户。现改为抛出 RuntimeError,明确列出发现的多个模型名,防止选错模型。
同时将 .json/.data 加入后缀优先级列表首位,适配 load_generated() 场景(加载已生成模型时无需原始模型文件)。
更新文件
src/netrans/utils.py: 多模型检测 +.json/.data优先级 (+16/-3)docs/netrans_cli.md: 命令总览表补充 (+9)test/netrans_api/unit/test_error_handling.py: 新增测试用例 (+135)
Bug 修复:多输入/纯 Concat 模型量化参数缺失导致导出崩溃
变更日期: 2026-06-11
影响范围: add_prepost_to_graph.py
问题描述
纯 Concat 连接的多输入模型中,某些输入层直接拼接而不经过卷积,因此不在量化参数文件中。add_input_layer_quantize_parameters() 找不到输入层的量化参数时直接 raise ValueError 崩溃。
修复方案
将 raise ValueError 改为 print Warning + continue 跳过,认为该输入层为浮点输入,不添加 dtype_converter。
更新文件
src/netrans/add_prepost_to_graph.py: (+3/-2)
工程改进:增量安装机制
变更日期: 2026-07-01,2026-07-09
影响范围: setup.sh、Makefile、VERSION、.gitignore
功能说明
新增智能增量安装,对比上次安装状态快照(vendor 指纹、requirements 指纹、script/setup/安装路径指纹),只执行必要的安装步骤,避免每次都全量重装。
判断逻辑:
.install_state(本地快照,不提交)记录上次安装时各组件的指纹.install_state只按白名单字段解析,不再作为 shell 脚本 source 执行script/和setup.sh指纹按文件内容计算,并排除 Python 缓存文件vendor/使用路径、大小、mtime 的快速元数据指纹,避免每次对完整 SDK 做内容 hashVERSION中的FORCE_REINSTALL_SINCE字段指定最低全量重装版本- 日常 git pull 后,vendor 和 requirements 未变时,仅
pip install -e(秒级完成) - pip 调用统一使用
python3 -m pip,确保安装到当前 Python 环境 - 安装脚本会检查必要文件、acuity whl 和 Vivante SDK cmdtools 目录
~/.bashrc中的PATH和VIV_SDK_PATH使用 Netrans 托管块维护,目录迁移时自动重写,避免重复追加旧路径
使用方式:
make install # 首次全量安装,后续自动增量
make update # git pull + 增量安装
make reinstall # 强制全量重装(删除本地快照)
make version # 查看当前源码版本
强制重装门禁场景:用户从 v6.33.5 直接升级到 v6.33.7 时,即使 vendor 指纹匹配,因 installed_version < VERSION.FORCE_REINSTALL_SINCE 也会触发全量重装。
用户入口整理:Makefile 只保留用户安装、更新、重装、版本查看、环境检查和清理命令,删除测试、发布、离线打包、格式化、文档索引等开发维护目标,避免用户命令和发布维护命令混在一起。
更新文件
setup.sh: 新增并修正指纹对比、安装状态读取、结构检查和环境变量维护逻辑Makefile: 保留install、update、reinstall、version、check、clean用户目标README.md: 同步用户安装、更新和强制重装说明VERSION: 新增FORCE_REINSTALL_SINCE强制重装门禁字段.gitignore: 忽略.install_state(新增)
工程改进:Makefile update 目标
变更日期: 2026-06-01
影响范围: Makefile
功能说明
新增 make update 目标,一键执行 git pull + 安装,方便快速升级。现已与增量安装机制集成,自动跳过未变更的组件。
make update # 拉取最新代码并增量安装
更新文件
Makefile: 新增update目标 (+10/-1)
文档更新:README 新增 mamba 安装说明
变更日期: 2026-06-01
影响范围: README.md
新增 miniforge 下载、mamba 环境创建步骤,提供完整的 Python 3.10 环境搭建指引。
更新文件
README.md: (+8)
工程改进:版本一致性校验机制
变更日期: 2026-06-11,2026-07-09
影响范围: VERSION、devtools/release/netrans_version、script/netrans_version、Makefile
功能说明
新增强制版本一致性校验,确保 __init__.py、setup.py、release.md、netrans_api.md 等文件中的版本号一致。
VERSION文件作为版本元数据单一事实源,包含当前版本和强制重装门禁版本- 版本同步、版本一致性校验、强制重装门禁标记等发布维护能力迁移到
devtools/release/netrans_version - 新增发布者流程命令:
prepare <version> [--force-reinstall]:设置版本号、同步受管理文件,可同时更新强制重装门禁preflight:发布前检查版本一致性并提示 git 工作区状态
script/netrans_version从用户脚本目录移除,不再随script/暴露到用户 PATH- 用户侧
Makefile不再提供版本发布/测试/同步目标,仅保留安装和更新相关入口
更新文件
VERSION: 版本元数据单一事实源(新增)devtools/release/netrans_version: 发布者版本管理工具(不进入用户安装入口)script/netrans_version: 从用户脚本目录移除Makefile: 移除开发/发布维护目标
测试目录清理
变更日期: 2026-06-11
删除 test/uint_test/ 残留目录(测试目录重组后的旧目录,文件已迁移至 test/netrans_api/unit/)。
v6.33.5 (2026-05-13)
防御性编程增强
变更日期: 2026-05-13
影响范围: quantize.py、export_nbg.py、add_prepost_to_graph.py、importer.py、utils.py
功能说明
全面增强错误处理和防御性编程策略,确保 Python API 模式下异常安全,提供清晰的中文错误信息。
具体改动:
-
sys.exit(1) → 异常抛出(14 处):
quantize.py(4处)、export_nbg.py(4处)、importer.py(5处)、add_prepost_to_graph.py(1处) 中的底层函数全部替换为FileNotFoundError/ValueError/NetransError。Python API 模式下不再因底层错误直接杀进程,改为可捕获的异常。错误信息均为中文,含文件路径和修复建议(如"请先执行 netrans load")。 -
文件存在性前置校验:
add_prepost_to_graph.py新增_check_file_exists()通用校验函数,覆盖 6 个入口函数,所有 YAML 读取前先检查文件存在性。 -
YAML 空内容检测(3 处):读取 YAML 后检查
data is None,防止空文件或格式错误导致的隐式AttributeError/KeyError。 -
量化产物验证:
quantize()保存.quantize文件后立即os.path.exists()检查是否成功生成,失败时抛出NetransError。 -
目录创建安全化:
importer.py中os.system("mkdir")替换为os.makedirs(exist_ok=True),消除 shell 注入风险,修复 dataset fallback 时 inputs 目录创建失败问题。 -
CLI/API 默认行为统一:
add_pre_postCLI 的--preprocess/--postprocess默认值改为True,与export()API 的preprocess=True, postprocess=True一致。 -
get_modelfile_name确定性修复:从依赖os.listdir()文件系统排序改为按固定优先级查找:.json/.data(产物优先,load_generated依赖)>.onnx>.pb>.prototxt>.tflite>.pt>.h5>.cfg。消除多模型文件并存时的非确定性。 -
Bug 修复(4 个):
- BUG-2:
quantize.pyset_input_output_quant_params()变量名layer_lid→lid - BUG-3:
quantize.pyquantize()中in_out_quantized_dict未初始化 NameError,补充a_w_diff_quantizer_dict分支 - BUG-4:
export_nbg.pymain()中quantized_format.insert(0, 'float32')全局可变状态污染,改为直接拼接字符串 - BUG-5:
quantize.pyqat_quantize()中print("{}")format string 未生效 →raise FileNotFoundError(f"...")
- BUG-2:
文档体系完善
变更日期: 2026-05-13
影响范围: docs/pmf/、docs/、test/
功能说明
补充完善三份过程文档,同步更新所有相关文档。
新增文档:
docs/pmf/产品需求规格书-Netrans软件-v5.md— 软件需求规格说明,对齐基线文档docs/pmf/软件设计说明-Netrans软件.md— 软件设计说明,含体系结构和详细设计docs/pmf/软件测试说明-Netrans软件.md— 软件测试说明,含 84 个测试用例
更新文档:
test/README.md— 补充遗漏的测试文件,同步修复状态docs/netrans_cli.md— 命令总览表补充measure命令docs/cookbook.md— 补充measure命令使用说明README.md— 同步版本号
v6.33.4 (2026-04-21)
新增功能:FP16 前后处理支持
变更日期: 2026-03-25
影响范围: add_prepost_to_graph.py、netrans.py
功能说明
FP16 量化类型现在支持将预处理和后处理嵌入推理计算图。
技术细节:
- FP16 等浮点量化类型不需要从 quantize 文件获取量化参数(输入层本身就是浮点)
- 浮点类型不添加
preproc_dtype_converter,避免不必要的类型转换
Python API
# FP16 量化支持前后处理
model.load('./model', mean=[0, 0, 0], std=255)
model.quantize('fp16')
model.export('fp16', platform='pnna', preprocess=True, postprocess=True)
更新文件
src/netrans/add_prepost_to_graph.py: 新增is_float_quantize判断逻辑src/netrans/netrans.py: 移除 fp16 屏蔽代码
新增功能:symi16 预处理限制
变更日期: 2026-04-13
影响范围: netrans.py
功能说明
symi16 量化类型不支持将预处理嵌入推理节点,导出时会抛出明确的 ValueError。
原因: symi16 量化类型与预处理节点存在兼容性问题。
错误示例
model.export('symi16', preprocess=True)
# ValueError: symi16的量化类型不支持将预处理加入推理节点,
# 建议将preprocess配置为False,或者将量化类型改成dfpi16。
正确用法
# symi16 需要关闭预处理
model.export('symi16', platform='pnna', preprocess=False, postprocess=True)
# 或者使用 dfpi16 替代
model.export('dfpi16', platform='pnna', preprocess=True, postprocess=True)
更新文件
src/netrans/netrans.py: 新增 symi16 预处理检查和断言
新增功能:参数清理机制
变更日期: 2026-04-13
影响范围: add_prepost_to_graph.py、netrans.py
功能说明
新增 clear_preprocess() 和 clear_postprocess() 函数,在添加新参数前自动清除历史动态参数,避免不同量化类型/参数组合之间的残留。
解决问题: 连续运行不同量化类型时,之前的参数会残留导致冲突。
技术细节
# add_pre_post() 内部逻辑
def add_pre_post(self, quantized, preprocess=True, postprocess=True, use_hybrid=False):
# 总是先清空历史动态参数
clear_preprocess(self._meta.name, quantized, use_hybrid)
clear_postprocess(self._meta.name, quantized, use_hybrid)
# 再添加新参数
if preprocess:
update_preprocess(...)
if postprocess:
update_postprocess(...)
更新文件
src/netrans/add_prepost_to_graph.py: 新增clear_preprocess()、clear_postprocess()函数src/netrans/netrans.py:add_pre_post()中调用清理函数
功能增强:dataset 路径校验
变更日期: 2026-04-14
影响范围: importer.py
功能说明
新增 _dataset_txt_is_valid() 函数,逐行校验 dataset.txt 中的路径是否存在。路径无效时自动 fallback 到 fake data 生成,并输出警告日志。
示例输出
Warning: dataset path does not exist: ../res/space_shuttle_224x224.jpg
Dataset not available, generating fake data...
更新文件
src/netrans/importer.py: 新增_dataset_txt_is_valid()、_generate_fake_data()函数
功能增强:mean/std 参数自动广播
变更日期: 2026-04-21
影响范围: netrans.py
功能说明
load() 方法的 mean 和 std 参数支持自动广播,无需手动填写所有通道的值。std 是归一化除数;Acuity inputmeta 中的 scale 为 1/std。
广播规则:
- 单值 → 自动广播到所有通道
- 单元素列表 → 自动广播到所有通道
- 多值列表 → 原样使用,长度必须匹配通道数
- 不提供参数 → 使用默认值 (mean=0, std=1.0) 并自动广播
使用示例
# 以前:必须写全所有通道
model.load('./model', mean=[128, 128, 128], std=[255, 255, 255])
# 现在:自动广播(推荐)
model.load('./model', mean=128, std=255) # 单值自动广播
model.load('./model', mean=[128], std=[255]) # 单元素列表也广播
model.load('./model', mean=[128, 128, 128], std=255) # std 单值广播
# 不提供参数,使用默认值
model.load('./model') # → mean=[0, 0, 0], std=[1.0, 1.0, 1.0](三通道)
channel_mean_value.txt 文件
- 用途: 兼容供应商业务流程,用户可通过修改文件配置参数
- 格式:
mean1 mean2 mean3 std1 std2 std3;导入时转换为 Acuityscale=1/std - 生成时机:
load()时始终生成(使用用户参数或默认值)
更新文件
src/netrans/netrans.py: 新增_get_input_channels(),_broadcast_channel_params()方法
文档更新
变更日期: 2026-04-21
docs/netrans_api.md: 新增 symi16 预处理限制说明、自动广播说明docs/cookbook.md: 新增自动广播使用示例docs/release.md: 新增 v6.33.4 版本记录test/README.md: 更新测试报告
v6.33.3 (2026-02-27)
新增功能:多核配置支持 (1-4核)
变更日期: 2026-02-27
影响范围: export() 方法、CLI、文档
功能说明
支持在导出 NBG 模型时配置 VIP 多核运行模式(1-4核)。
多核配置映射:
| core_num | VIV_MGPU_AFFINITY | VIV_OVX_MULTI_DEVICES | 说明 |
|---|---|---|---|
1core / 1 |
1:0 |
0:1 |
单核模式 |
2core / 2 |
1:2 |
0:2-2 |
双核模式 |
3core / 3 |
1:3 |
0:3-1 |
三核模式 |
4core / 4 |
1:4 |
0:4-1 |
四核模式 |
配置说明:
VIV_MGPU_AFFINITY: GPU 亲和性配置1:n- 启用独立模式,n 表示核心数0- 多核模式(4核)
VIV_OVX_MULTI_DEVICES: 多设备配置,格式0:n-m表示设备0包含两组内核
Python API
# 4核导出
model.export('asymu8', core_num='4core')
# 简写形式
model.export('asymu8', core_num='4')
# 指定平台
model.export('asymu8', platform='pnna2', core_num='4core')
CLI
# 4核导出
netrans export model asymu8 --core-num 4core
# 简写形式
netrans export model asymu8 --core-num 4
# 指定平台
netrans export model asymu8 --platform pnna2 --core-num 4core
更新文件
src/netrans/netrans.py: 添加_MULTICORE_CONFIGS和_set_multicore_env()script/netrans: 添加--core-num参数test/uint_test/test_multicore.py: 多核配置单元测试docs/netrans_cli.md: CLI 文档更新docs/netrans_api.md: API 文档更新AGENTS.md: 项目设计文档更新
文档更新:CLI/API 文档同步与链接修复
变更日期: 2026-03-13 影响范围: 文档文件
变更内容
-
CLI 版本号修正: 修正
script/netrans中的版本号(从错误的6.42.3改为正确的6.33.3) -
API 文档更新 (
docs/netrans_api.md):- 移除已废弃的
viv_sdk参数(已改用VIV_SDK_PATH环境变量) - 添加
model_path参数说明 - 更新 4 核配置表(
1:4/0:4-1) - 修复文档链接引用
- 移除已废弃的
-
CLI 文档更新 (
docs/netrans_cli.md):- 从 quantize 命令移除
--preprocess/--postprocess参数(已移至 export 命令) - 向 export 命令添加
--preprocess/--postprocess/--core-num参数说明 - 移除
--viv-sdk参数说明
- 从 quantize 命令移除
-
README 增强 (
README.md):- 添加文档描述和链接说明
- 添加 CI 自动同步说明
-
文档链接修复 (
docs/release.md):- 修复文档文件名引用(
cli-reference.md→netrans_cli.md)
- 修复文档文件名引用(
更新文件
script/netrans: 版本号修正docs/netrans_api.md: API 文档同步docs/netrans_cli.md: CLI 文档同步README.md: 文档链接增强docs/release.md: 链接修复
注意事项
- 多核配置通过环境变量实现,仅影响当前进程
core_num=None(默认)时不修改环境变量,使用当前环境配置- 无效的配置值会抛出
ValueError
功能优化:Export 默认启用前后处理
变更日期: 2026-02-27
影响范围: export() 方法、CLI
变更内容
export() 方法的 preprocess 和 postprocess 参数默认值从 False 改为 True。
| 参数 | 旧默认值 | 新默认值 | 说明 |
|---|---|---|---|
preprocess |
False |
True |
将均值节点并入网络 |
postprocess |
False |
True |
将反量化节点并入网络 |
Python API
# 默认启用前后处理
model.export('asymu8')
# 显式禁用前后处理
model.export('asymu8', preprocess=False, postprocess=False)
CLI
# 默认启用前后处理
netrans export model asymu8
# 显式传 False 禁用
netrans export model asymu8 --preprocess False --postprocess False
更新文件
src/netrans/netrans.py: 修改preprocess和postprocess默认值为Truescript/netrans: CLI 参数支持布尔值类型docs/cli-reference.md: 更新 CLI 文档docs/netrans_api.md: 更新 API 文档
v6.33.2 (2026-02-25)
变更:安装脚本优化 - 消除依赖冲突警告
变更日期: 2026-02-25
影响范围: setup.sh 安装脚本
问题
安装时出现依赖冲突警告:
acuity 6.33.19 requires torch==1.5.1, but you have torch 2.2.2 which is incompatible.
解决方案
调整 setup.sh 安装顺序:
- 先安装 Python 依赖(包括 torch 2.2.2)
- 再用
--no-deps安装 acuity(跳过其依赖检查)
修改的文件:
setup.sh: 交换步骤1和步骤2的顺序,确保依赖先安装
安装顺序对比
| 顺序 | 变更前 | 变更后 |
|---|---|---|
| 步骤1 | 安装 acuity (--no-deps) |
安装 Python 依赖 |
| 步骤2 | 安装 Python 依赖 | 安装 acuity (--no-deps) |
v6.33.1 (2026-02-24)
变更:目录结构优化 & 安装流程改进
变更日期: 2026-02-24
影响范围: 目录结构、安装脚本、文档
1. 目录结构优化
| 变更 | 原位置 | 新位置 |
|---|---|---|
| packing 目录 | packaging/ |
devtools/packing/ |
更新内容:
- 将
packaging/目录移动到devtools/packing/ - 更新所有相关脚本和文档中的路径引用
- 更新
Makefile中的package和sync命令
2. Python 3.10 环境迁移
| 项目 | 变更前 | 变更后 |
|---|---|---|
| Python | 3.8 | 3.10 |
| acuity whl | cp38 | cp310 |
文件变更:
.python-version:3.8→3.10setup.py:python_requires=">=3.8"→python_requires=">=3.10"setup.sh: 安装acuity-6.33.19-cp310-cp310-*.whlrequirements_py3.8.txt→requirements.txt
3. acuity 安装优化
问题: acuity 安装时会覆盖已安装的 torch 版本
解决方案:
- 使用
--no-deps参数安装 acuity - torch 已在 requirements.txt 中单独安装
修改的文件:
setup.sh:pip install "$ACUITY_WHL" --no-depsdevtools/packing/install.sh: 更新install_package函数支持额外参数- 所有相关文档更新安装说明
4. 版本号统一
统一所有版本号为 6.33.0:
setup.py: 6.33.0devtools/packing/setup.py: 6.42.4 → 6.33.0src/netrans/__init__.py: 6.42.3 → 6.33.0
v6.33.0 (2026-02-09)
重大变更:Python 3.10 & Acuity 6.33 迁移
变更日期: 2026-02-09
影响范围: Python 版本、Acuity 版本、模型加载逻辑
1. Python 版本升级
| 项目 | 变更前 | 变更后 |
|---|---|---|
| Python | 3.8 | 3.10 |
| Acuity | 6.42.x | 6.33.x |
文件变更:
setup.py:python_requires=">=3.8"→python_requires=">=3.10"requirements_py3.8.txt→requirements.txtvendor/acuity-6.33.19-cp38-...→vendor/acuity-6.33.19-cp310-...
2. 模型加载逻辑重构
问题: export() 等操作会重新调用 importer() 导致 add_pre_post 配置丢失。
解决方案:
- 新增
load_generated()方法:专门用于加载已生成的文件(.json, .data, .quantize) load()方法:仅用于从原始模型格式导入(.cfg, .weights, .pb 等)- CLI 各命令使用正确的加载方式
API 变更:
| 方法 | 用途 | 加载来源 |
|---|---|---|
load() |
首次导入原始模型 | .cfg, .weights, .pb, .onnx 等 |
load_generated() |
加载已生成模型 | .json, .data, .quantize, _inputmeta.yml |
3. CLI 命令加载方式更新
| 命令 | 加载方式 | 说明 |
|---|---|---|
netrans load |
load() |
从原始模型导入 |
netrans quantize |
load_generated() |
加载已生成的 .json, .data |
netrans export |
load_generated() |
加载已生成的文件(包含 inputmeta) |
netrans dump |
load_generated() |
加载已生成的文件 |
netrans inference |
load_generated() |
加载已生成的文件 |
netrans add_pre_post |
直接操作文件 | 修改 _inputmeta.yml |
4. Export Pre/Post 参数位置调整
| 版本 | quantize() |
export() |
|---|---|---|
| 旧版 | 支持 --preprocess/--postprocess |
不支持 |
| 新版 | 移除该参数 | 支持 --preprocess/--postprocess |
正确 Workflow:
# 1. 从原始模型导入(生成 .json, .data, _inputmeta.yml)
netrans load yolov4_tiny --mean 128 128 128 --std 1 1 1
# 2. 量化(加载已生成的文件)
netrans quantize yolov4_tiny asymu8
# 3. 添加前后处理(修改 _inputmeta.yml 和 _postprocess_file.yml)
netrans add_pre_post yolov4_tiny asymu8 --preprocess --postprocess
# 4. 导出时集成前后处理(加载已生成的文件,包含修改后的配置)
netrans export yolov4_tiny asymu8 --platform pnna --preprocess --postprocess
5. 迁移指南
从 v6.42.x 迁移到 v6.33.0:
-
Python 环境: 升级到 Python 3.10
conda create -n netrans python=3.10 -
Acuity 安装: 安装 cp310 版本(使用
--no-deps避免覆盖 torch)pip install vendor/acuity-6.33.19-cp310-cp310-manylinux2010_x86_64.whl --no-deps -
代码更新: 更新
requirements.txtpip install -r requirements.txt -
Workflow 更新: 确保使用正确的加载顺序
- 先用
netrans load导入原始模型 - 后续操作使用
netrans quantize/export/dump(自动使用 load_generated)
- 先用
v6.42.4 (2026-02-09)
重大变更
1. Acuity 拆分
将 acuity 解码库从 netrans 包中拆分,作为独立依赖:
- 变更前: acuitylib 打包在 netrans whl 中
- 变更后: acuity 通过独立 whl 安装
- 安装方式:
pip install acuity-6.42.10-*.whl --no-deps
影响:
- 减小 netrans 包体积
- 允许独立更新 acuity
- 安装时需要额外安装 acuity
2. 离线打包支持
新增 devtools/packing/ 目录,支持离线环境安装:
# 开发环境(联网)
cd devtools/packing/
python3 download_dependencies.py # 下载依赖
bash build.sh # 构建离线包(输出到 dist/release/)
# 用户环境(离线)
tar -xzf netrans_offline_v*.tar.gz
cd netrans_offline/
bash install.sh
特性:
- 自动处理 TensorFlow 2.17.0 与 ml-dtypes 版本冲突
- 一键构建离线安装包
- 支持完全离线的环境部署
目录结构优化
netrans/
├── src/netrans/ # 源码(移除 acuitylib)
├── devtools/packing/ # 离线打包配置(新增)
├── devtools/ # 开发工具(新增)
│ ├── debug/ # 调试脚本
│ ├── verify/ # 验证脚本
│ └── dev/ # 开发辅助
│
├── vendor/ # 第三方依赖(新增)
│ └── acuity-*.whl # Acuity 核心库
└── tests/unit/ # 单元测试(新增)
依赖更新
# 新增
ml-dtypes==0.4.1 # TensorFlow 2.17.0 兼容
# acuity 变为外部依赖
acuity>=6.42.0 # 独立安装
v6.42.3+ (2025-12 - 2026-01)
API 优化:Export Pre/Post 参数迁移
变更日期: 2026-02-04
影响范围: quantize() 和 export() 方法
变更内容
| 方法 | 变更前 | 变更后 |
|---|---|---|
quantize() |
preprocess=True, postprocess=True |
移除 pre/post 参数 |
export() |
无 pre/post 参数 | 新增 preprocess=False, postprocess=False |
迁移示例
旧代码 (v1.x):
model.quantize('asymu8', preprocess=True, postprocess=True)
model.export('asymu8')
新代码 (v2.0):
model.quantize('asymu8') # 仅量化
model.export('asymu8', preprocess=True, postprocess=True) # 导出时集成
修复问题
解决 export() 重新加载模型导致 add_pre_post 配置被重置的问题。
v6.42.3 (2025-12-05)
新增功能
1. Hybrid 量化 (quantize_hybrid)
对模型的不同层使用不同的量化策略,实现混合精度。
支持组合:
- 基础量化:
asymu8,symi8,pcqi8 - Hybrid 类型:
dfpi16,float32
使用方式:
# Python API
model.quantize_hybrid(
quantized='asymu8',
hybrid_qtype='dfpi16',
cust_qnt_layers='layers.txt'
)
model.export('asymu8', use_hybrid=True)
# CLI
netrans quantize_hybrid model asymu8 --cust-qnt-layers layers.txt
netrans export model asymu8 --use-hybrid
适用场景:
- 目标检测:Backbone (asymu8) + Head (dfpi16)
- 分割模型:主体 (symi8) + 上采样 (float32)
- Transformer:全连接 (asymu8) + 注意力 (dfpi16)
2. Dump 功能 (dump)
导出网络各层的输入输出张量数据,用于调试分析。
使用方式:
# Python API
model.dump('asymu8') # 普通量化
model.dump('asymu8', use_hybrid=True) # Hybrid 量化
# CLI
netrans dump model asymu8
netrans dump model asymu8 --use-hybrid
输出:
dump/
└── model_name_quantized/
├── layer1_input_0.tensor
├── layer1_output_0.tensor
└── ...
v6.42.2 (2025-12-05)
平台参数优化
将 export 功能的 optimize 参数改为更友好的 platform 参数。
变更对比
| 旧方式 | 新方式 |
|---|---|
optimize='...'(长字符串) |
platform='pnna' |
平台映射
| platform | 架构 | 说明 |
|---|---|---|
pnna |
单核 | 默认平台 |
pnna2 |
多核 | 支持 1-4 核配置 |
迁移示例
Python API:
# 旧
model.export('asymu8', optimize='...') # 长字符串
# 新
model.export('asymu8', platform='pnna') # 更简洁
CLI:
# 旧
netrans export model asymu8 --optimize ...
# 新
netrans export model asymu8 --platform pnna
⚠️ 破坏性变更: 需要更新所有使用 optimize 的代码。
功能更新详情
Add_pre_post 功能增强
支持 Hybrid 量化 (v6.42.3)
新增 --use-hybrid 参数,支持处理 Hybrid 量化模型:
# 普通量化
netrans add_pre_post model asymu8 --preprocess --postprocess
# Hybrid 量化
netrans add_pre_post model asymu8 --preprocess --postprocess --use-hybrid
显式控制 Pre/Post (v6.42.3+)
支持显式控制 pre 和 post 处理:
# 只启用前处理
model.add_pre_post('asymu8', pre=True, post=False, use_hybrid=True)
# 只启用后处理
model.add_pre_post('asymu8', pre=False, post=True, use_hybrid=True)
命令行工具更新
当前支持的子命令
netrans load # 加载模型
netrans quantize # 模型量化
netrans quantize_hybrid # Hybrid 量化(v6.42.3+)
netrans add_pre_post # 添加前后处理
netrans export # 导出模型
netrans dump # Dump 张量数据(v6.42.3+)
netrans inference # 执行推理
netrans measure # 统计计算量
新增入口点
安装后提供以下命令:
netrans-dump
netrans-export-nbg
netrans-inference
netrans-importer
netrans-measure
netrans-quantize
netrans-quantize-hybrid
netrans-add-prepost
历史版本
v6.42.1 及更早
- 基础模型导入、量化、导出功能
- 支持 TensorFlow、PyTorch、ONNX、Caffe、Darknet
- 命令行工具和 Python API
迁移指南汇总
从 v6.42.2 迁移到 v6.42.3+
- Platform 参数:
optimize→platform - Hybrid 量化: 新增工作流,使用
quantize_hybrid - Dump 功能: 新增调试功能
从 v6.42.3 迁移到 v6.42.4
- Acuity 安装: 需要单独安装 acuity whl
- 依赖更新: 添加
ml-dtypes==0.4.1
从 v6.42.3+ 迁移到 v6.33.0
- 环境降级: Python 3.10 → 3.8, Acuity 6.42 → 6.33
- 加载逻辑: 区分
load()和load_generated() - Pre/Post 迁移: 从
quantize()移到export()
相关文档
- netrans_cli.md - CLI 参考
- netrans_api.md - Python API 参考
当前版本: v6.33.6 (Python 3.10 + Acuity 6.33)
维护团队: Netrans 开发组
问题反馈: 请联系项目维护团队