Open likefxz2009 opened 2 years ago
你好,
bolt的计算精度和存储精度是分离的,存储的精度是fp16/int8, 计算可以用fp32,可以参考这个文档https://github.com/huawei-noah/bolt/blob/master/docs/QUANTIZATION.md 但是计算精度是什么,在转模型时候已经定的,写入到bolt模型文件
C/C++ API需要传进去对应计算精度的输入。
Java API是全部传进去float32精度类型的,在Java API内部有一层自动的数据类型转换,从float32到模型所需的精度。https://github.com/huawei-noah/bolt/blob/master/inference/engine/src/BoltModel_Jni.cpp#L486
@jianfeifeng @yuxianzhi 感谢两位的回复,也就是说假设我需要把模型下发到应用里,就必须根据不同的设备下发不同的模型对吧,比如在支持armv8.2的机器上下发fp16的模型,其他机器上下发fp32的模型。 请问一下有没有考虑过开放配置接口,即提供同一个Fp32的模型,如果设置跑fp16的精度,在运行时自行检测设备支持情况,如果支持fp16,则将权重等数据转换到fp16并且使用fp16推理呢?之前使用mnn/tnn等框架时都有这个功能。 再次感谢回复
Bolt的模型精度转换模块可以提取出来单独调用,只需要保证模型数据结构的精度参数和权重类型是目标类型即可。可以参考X2bolt.cpp部分调用的ms_datatype_converter函数https://github.com/huawei-noah/bolt/blob/c3eb7a22e4f7acc2cc450606d1875666d4b11574/model_tools/src/online_conversion.cpp#L99。
bolt的开发人员你们好,我在使用的过程中遇到如下问题,希望你们可以抽空帮忙看一下 问题1:在使用C API时,我发现并没有多少示例代码,而且我根据API也没有发现设置运行时浮点精度的方式(即模型为fp32的,但是按照fp16的精度计算),难道只有将模型转换为fp16的才能跑fp16代码吗? 问题2:如果只有fp16的模型才能跑fp16代码,那么请问如何设置输入,因为fp16的tensor也是fp16的,难道需要外部给进去fp16的数据吗?