欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 富文本富文本富文本

富文本富文本富文本

2025/9/21 17:11:39 来源:https://blog.csdn.net/cpongo13/article/details/145058036  浏览:    关键词:富文本富文本富文本

NeuroPilot 离线工具(Quantization, Converter etc.)常见问题

**在将模型从Caffe/PyTorch转换为TFLite格式后,因为输入从NCHW更改为NHWC,需要额外添加一个转置节点,有可能避免增加这个额外的操作吗?

【问题描述】

在将模型从Caffe/PyTorch转换为TFLite格式后,因为输入从NCHW更改为NHWC,需要额外添加一个转置节点,有可能避免增加这个额外的操作吗?

 

 【解答】

为了避免添加这个额外的节点,您可以向Caffe/PyTorch模型添加一个wrapper。

对于Caffe,参见NeuroPilot SDK文档:Developer Tools > Model Development > Converter > Converter Tool Examples > Converting from Caffe > Floating-point (with NHWC Input/Output Tensors)。
对于PyTorch,参见NeuroPilot SDK文档:Developer Tools > Model Development > Converter > Converter Tool Examples > Converting from PyTorch > Floating-point (with NHWC Input/Output Tensors)。

 

**Per-axis Quantization(Per-channel Quantization)和 Per-tensor Quantization两种量化方式解析

【问题描述】

NeuroPilot Quantization tool支持的Per-axis Quantization (Per-channel Quantization)和 Per-tensor Quantization两种量化有什么区别?两者分别的适宜的使用场景是什么?对于最终量化出的模型精度有差异吗?分别通过什么参数进行配置使用?

【解答】

1)区别:

per-tensor就是整个神经网络层用一组量化参数(scale, zero-point),per-channel就是一层神经网络的每个通道用一组量化参数(scale, zero-point),最终会有多组(通道数)量化参数。

2)使用场景:

这个要依据客户模型的需求来看,是否要求每个 channel 有不同的量化参数需求,一般使用场景下一套量化参数(per-tensor)即可满足量化需求。

3)精度有差异吗:

要视具体情况而定,如果要求每个 channel 都有不同的量化参数,那肯定 per-channel 精度更高,反之,不一定。

4)参数配置:

在使用mtk_converter转模型时,通过use_per_output_channel_quantization参数来控制使用per-tensor Quantization (False)还是per-channel Quantization (True)

 

【适用NP版本】

NP5, NP6

 

NP-Online Doc Reference:

1. Developer Tools » Model Development » Quantization » Quantization Tool Introduction » Background » Per-axis Quantization and Per-tensor Quantization

2. Mediatek API Reference » Converter Tool API Documentation» Python API

**模型量化后精度不达标的情况,MTK建议有什么继续优化的方案? 混合精度在端侧是否有成熟方案?

【解答】

建议使用 QAT对模型进行量化。精度可以选择 a16w16, 如果对 performance 有要求,也可以使用 a16w8混合量化精度。

如果仍然不满足精度可以再 case by case 讨论。混合精度量化是NeuroPilot5.0后的成熟功能,已有成功落地的案例。

Note:

1)a16w16中的“a”指模型中的activation,“w”指模型中的weight

2)NP-Online Doc Reference:

Developer Tools » Model Development » Quantization » Quantization Tool Introduction » Quantization-Aware Training Tool

**如何判断模型OP是symmetric 还是asymmetric minmax?它们之间的误差范围是多少?

【问题描述】

如何根据Quantization-Aware Training后生成的pb,判断模型OP是symmetric 还是asymmetric minmax?它们之间的误差范围是多少?

【解答】

判断条件:

1)首先查看模型的ATTRIBUTES: narrow range是False还是True?如果是False,则为asymmetric;如果是True,则再进入2)进行判断。

2)查看Fakequant OP中的min/max值,根据bit width来判断,例如min =? (-128/127) * max

参考:Developer Tools » Model Development » Converter » Appendix – Integrate with Custom Quantization-aware Training Tools

【例子】

1)asymmetric

 

 

2)symmetric

 

Neuron SDK常见问题(包括Tools和Neuron RuntimeAPI)

** TFlite编译dla时,报错不支持float32,如何进一步处理?

【问题描述】

 

【解答】

使用NeuronSDK中的ncc-tflite编译DLA时有参数 “--relax-fp32” 可以将float32 转为float16

NP-Online Doc Reference:

Developer Tools » Model Development » Neuron SDK » Neuron Compiler (ncc-tflite), "--relax-fp32"

 

【适用NP版本】

NP4, NP5, NP6

**使用neuron runtime API(V1,V2)进行模型推理时的内存分配&释放过程

【问题描述】

基于neuron runtime进行AI模型部署的过程中,内存的分配方式是如何进行的?比如模型初始化阶段内存是否已经完全分配好了?执行阶段是否有新增内存?反初始化(neuron release)是否完全释放掉内存?

【解答】

以NP5的neuron runtime v2 API为例:

(1)对于MDLA和eDMA,模型初始化阶段不会分配Input/output mem,其他的static 、temporary mem会在此阶段时配好;

但如果dla模型推理中是MVPU参与的,那么初始化的时候不仅会把eDMA、MDLA的static、temporary mem分配好,还会把MVPU的input/output、static、temporary mem分配好。

(2)推理的时候,MDLA和eDMA只会另外配input/output mem(假如有用dmabuf就不会再配,因为在此之前已经分配好)。

(3)推理完毕后,所有的mem会被完全释放。

【适用NP版本】

NP4, NP5, NP6

**如何解读使用ncc-tflite编译模型时下“—show-memory-summary”参数后印出的数据中Static和Temporary的数据?

 

Static是指模型离线编译时就知道的constant 或是tflite档案里面就带有的数值,例如模型透过训练得到的weight值。

Temporary指的是模型中间张量的working buffer(工作缓冲区),ncc-tflite (compiler)会分析模型中graph的依赖性并会尽量减少缓冲区的使用。

例如,model中有3个op,op1 --> op2 --> op3,执行时,op1算出来的output (也就是op2的input) ,这种就会放在temporary。

【注】但如果用户在使用ncc-tflite编译模型期间下了“–l1-size-kb”配置了APU的L1 cache,那么这里op1算出来的temp data就会尽可能放在L1中(除非放不下才会有额外的temporary mem申请出来存放这部分temp data)。

使用Neuron Runtime API加载模型并初始化创建runtime instance以后, static和temporary对应的mem就会被申请出来(如果是MVPU,则会在此阶段多申请input/output mem),程序就会占用这么多内存。在模型推理过程中,内存占用会在此基础上再增加Input/Output的内存。

不过需要注意的是,V2 API的时候是runtime instance初始化创建起来后就会有,V1 API则是NeuronRuntime_loadNetwork后才会有static + temporary的内存被分配出来。

**使用NP5.x版本的NeuronSDK尝试将Tflite编译为dla档案时遇到“MDLA:data type mismatch for input and filter”问题

【问题描述】

使用converter1.4.0转出的Tflite模型可以使用ncc-tflite成功编译为dla,但是使用converter1.5.0转出的Tflite模型使用ncc-tflite编译时会报“MDLA:data type mismatch for input and filter”的错误。

【解决】

1.原因:Converter在1.5.0有一个behavior改动造成了此问题

原本PB模型是asymmetric weight minmax的

在1.4.0的converter转下来被我们强制改成symmetric quantized,搭配8w16a运算没有问题 (那时候可能这个强制改动也不会造成太明显quality issue)

但1.5.0的converter转下来,我们保留原本asymmetric weight minmax的行为,疑似造成8W16A相关compile error

2.解决方案:

在QAT时改使用symmetric的weight quantization

如果不能改模型,那可能只能先继续使用v1.4.0的converter了

**使用neuronrt时遇到“error while loading shared libraries: libc++abi.so.1: cannot open shared object file: No such file or directory”报错问题及其解决

【解答】

原因:executor binary找不到相关so导致

解决:在执行binary之前,指定LD_LIBRARY_PATH即可解决,指令:Export LD_LIBRARY_PATH={shared_lib path}

【适用NP版本】

NP4,NP5,NP6

**NeuronRuntimeV2_create API参数解析

 

【问题描述】

1)NeuronRuntimeV2_create中的nbThread和backlog参数的含义是什么?

2)应该怎么设置它们? 如果使用SyncInferenceRequest, nbThreads传递0或1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词