netrans/docs/release.md

36 KiB
Raw Permalink Blame History

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 APIload(..., scale=...) 改为 load(..., std=...)
  • CLInetrans 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.pynetrans.py

问题描述

使用 Python API 在多核模式pnna2下导出模型时量化类型错误地回退为 fp16而 CLI 路径正常。

根因

export_nbg_without_reload() 只重新加载了被 add_pre_post 修改过的 inputmetapostprocess 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.pyimporter.pynetrans.py

修复清单

Bug 1 — is_float_quantize 遗漏 float32update_preprocess() 中浮点量化判断只检查 fp16bf16,遗漏了 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.txtmean/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.pynetrans_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-012026-07-09

影响范围: setup.shMakefileVERSION.gitignore

功能说明

新增智能增量安装对比上次安装状态快照vendor 指纹、requirements 指纹、script/setup/安装路径指纹),只执行必要的安装步骤,避免每次都全量重装。

判断逻辑

  • .install_state(本地快照,不提交)记录上次安装时各组件的指纹
  • .install_state 只按白名单字段解析,不再作为 shell 脚本 source 执行
  • script/setup.sh 指纹按文件内容计算,并排除 Python 缓存文件
  • vendor/ 使用路径、大小、mtime 的快速元数据指纹,避免每次对完整 SDK 做内容 hash
  • VERSION 中的 FORCE_REINSTALL_SINCE 字段指定最低全量重装版本
  • 日常 git pull 后vendor 和 requirements 未变时,仅 pip install -e(秒级完成)
  • pip 调用统一使用 python3 -m pip,确保安装到当前 Python 环境
  • 安装脚本会检查必要文件、acuity whl 和 Vivante SDK cmdtools 目录
  • ~/.bashrc 中的 PATHVIV_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: 保留 installupdatereinstallversioncheckclean 用户目标
  • 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-112026-07-09 影响范围: VERSIONdevtools/release/netrans_versionscript/netrans_versionMakefile

功能说明

新增强制版本一致性校验,确保 __init__.pysetup.pyrelease.mdnetrans_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.pyexport_nbg.pyadd_prepost_to_graph.pyimporter.pyutils.py

功能说明

全面增强错误处理和防御性编程策略,确保 Python API 模式下异常安全,提供清晰的中文错误信息。

具体改动

  1. 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")。

  2. 文件存在性前置校验add_prepost_to_graph.py 新增 _check_file_exists() 通用校验函数,覆盖 6 个入口函数,所有 YAML 读取前先检查文件存在性。

  3. YAML 空内容检测3 处):读取 YAML 后检查 data is None,防止空文件或格式错误导致的隐式 AttributeError / KeyError

  4. 量化产物验证quantize() 保存 .quantize 文件后立即 os.path.exists() 检查是否成功生成,失败时抛出 NetransError

  5. 目录创建安全化importer.pyos.system("mkdir") 替换为 os.makedirs(exist_ok=True),消除 shell 注入风险,修复 dataset fallback 时 inputs 目录创建失败问题。

  6. CLI/API 默认行为统一add_pre_post CLI 的 --preprocess / --postprocess 默认值改为 True,与 export() API 的 preprocess=True, postprocess=True 一致。

  7. get_modelfile_name 确定性修复:从依赖 os.listdir() 文件系统排序改为按固定优先级查找:.json/.data(产物优先,load_generated 依赖)> .onnx > .pb > .prototxt > .tflite > .pt > .h5 > .cfg。消除多模型文件并存时的非确定性。

  8. Bug 修复4 个):

    • BUG-2quantize.py set_input_output_quant_params() 变量名 layer_lidlid
    • BUG-3quantize.py quantize()in_out_quantized_dict 未初始化 NameError补充 a_w_diff_quantizer_dict 分支
    • BUG-4export_nbg.py main()quantized_format.insert(0, 'float32') 全局可变状态污染,改为直接拼接字符串
    • BUG-5quantize.py qat_quantize()print("{}") format string 未生效 → raise FileNotFoundError(f"...")

文档体系完善

变更日期: 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.pynetrans.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.pynetrans.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() 方法的 meanstd 参数支持自动广播,无需手动填写所有通道的值。std 是归一化除数Acuity inputmeta 中的 scale1/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;导入时转换为 Acuity scale=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 影响范围: 文档文件

变更内容

  1. CLI 版本号修正: 修正 script/netrans 中的版本号(从错误的 6.42.3 改为正确的 6.33.3

  2. API 文档更新 (docs/netrans_api.md):

    • 移除已废弃的 viv_sdk 参数(已改用 VIV_SDK_PATH 环境变量)
    • 添加 model_path 参数说明
    • 更新 4 核配置表(1:4 / 0:4-1
    • 修复文档链接引用
  3. CLI 文档更新 (docs/netrans_cli.md):

    • 从 quantize 命令移除 --preprocess/--postprocess 参数(已移至 export 命令)
    • 向 export 命令添加 --preprocess/--postprocess/--core-num 参数说明
    • 移除 --viv-sdk 参数说明
  4. README 增强 (README.md):

    • 添加文档描述和链接说明
    • 添加 CI 自动同步说明
  5. 文档链接修复 (docs/release.md):

    • 修复文档文件名引用(cli-reference.mdnetrans_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() 方法的 preprocesspostprocess 参数默认值从 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: 修改 preprocesspostprocess 默认值为 True
  • script/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 安装顺序:

  1. 先安装 Python 依赖(包括 torch 2.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 中的 packagesync 命令

2. Python 3.10 环境迁移

项目 变更前 变更后
Python 3.8 3.10
acuity whl cp38 cp310

文件变更:

  • .python-version: 3.83.10
  • setup.py: python_requires=">=3.8"python_requires=">=3.10"
  • setup.sh: 安装 acuity-6.33.19-cp310-cp310-*.whl
  • requirements_py3.8.txtrequirements.txt

3. acuity 安装优化

问题: acuity 安装时会覆盖已安装的 torch 版本

解决方案:

  • 使用 --no-deps 参数安装 acuity
  • torch 已在 requirements.txt 中单独安装

修改的文件:

  • setup.sh: pip install "$ACUITY_WHL" --no-deps
  • devtools/packing/install.sh: 更新 install_package 函数支持额外参数
  • 所有相关文档更新安装说明

4. 版本号统一

统一所有版本号为 6.33.0:

  • setup.py: 6.33.0
  • devtools/packing/setup.py: 6.42.4 → 6.33.0
  • src/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.txtrequirements.txt
  • vendor/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:

  1. Python 环境: 升级到 Python 3.10

    conda create -n netrans python=3.10
    
  2. Acuity 安装: 安装 cp310 版本(使用 --no-deps 避免覆盖 torch

    pip install vendor/acuity-6.33.19-cp310-cp310-manylinux2010_x86_64.whl --no-deps
    
  3. 代码更新: 更新 requirements.txt

    pip install -r requirements.txt
    
  4. 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+

  1. Platform 参数: optimizeplatform
  2. Hybrid 量化: 新增工作流,使用 quantize_hybrid
  3. Dump 功能: 新增调试功能

从 v6.42.3 迁移到 v6.42.4

  1. Acuity 安装: 需要单独安装 acuity whl
  2. 依赖更新: 添加 ml-dtypes==0.4.1

从 v6.42.3+ 迁移到 v6.33.0

  1. 环境降级: Python 3.10 → 3.8, Acuity 6.42 → 6.33
  2. 加载逻辑: 区分 load()load_generated()
  3. Pre/Post 迁移: 从 quantize() 移到 export()

相关文档


当前版本: v6.33.6 (Python 3.10 + Acuity 6.33) 维护团队: Netrans 开发组
问题反馈: 请联系项目维护团队