专栏算法工具链j6m ptq 时候能否将calib batch 设置大一点

j6m ptq 时候能否将calib batch 设置大一点

已解决
默认232322025-03-05
160
41

设置calib batch > 1 , 网络输入是单batch的  但是为了calib更快以及calib 收集scale 更优, 

 

2025-03-05 10:39:10,998 INFO Start to calibrate the model.

2025-03-05 10:39:11,355 INFO There are 371 samples in the dataset.

2025-03-05 10:39:17,629 INFO Provided calibration data md5: 217904568588cdfd32f7bc6b7b4b5c48

2025-03-05 10:39:17,630 INFO Run calibration model with modelwise search method.

2025-03-05 10:39:18,182 INFO Calibration using batch 1

算法工具链
征程6
评论1
0/1000
  • Huanghui
    Lv.5

    你好,在进行量化时候PTQ可以适当增大batch,能够提高计算效率。另外, 量化时通常会计算激活值的分布(如均值、方差、最大值等),使用更大 batch 可以让分布更稳定,提高量化精度

    2025-03-05
    0
    40
    • 默认23232回复Huanghui:

      谢谢, 我使用hb_compile 方式基于onnx 量化的, onnx目前的输入为 4*3*800*1024,10*128*128, 4*4*4 这种,实际batch size =1, 请问我怎样增大calib batch, 是将onnx 导出成动态batch吗 ,或者还有其他方式?

      2025-03-06
      0
    • Huanghui回复默认23232:

      是的 可以在导出onnx时候将其设置成动态输入的

      2025-03-06
      0
    • Huanghui回复默认23232:

      重新导出下onnx你先试下

      2025-03-06
      0
    • Huanghui回复默认23232:

      或者修改你的ptq配置文件也可以

      2025-03-06
      0
    • Huanghui回复默认23232:

      在input_parameter参数组,里面有个key是input_batch 你将其设置成4在试下

      2025-03-06
      0
    • Huanghui回复默认23232:
      2025-03-06
      0
    • 默认23232回复Huanghui:

      谢谢, 我这里 输入 4*3*800*1024 ,4*4*4 这些实际组成一组(4个相机图像作为一次推理输入) ,即 1*4*3*800*1024,1*4*4*4, 如果改成dynamic batch 那就要拓展一个batch维度?

      2025-03-06
      0
    • Huanghui回复默认23232:

      你就看你的onnx模型是怎么输入的 ,batch是多大 ,你调整input_batch就可以了 , 确保跟你的onnx输入对上,你这个四个相机输入的,那在模型入口应该有四个不同input吧?因为每个相机图像有不同的含义。你用netron看下你的模型输入是怎么样的。如果是四个分开的input,那你就需要改你的config文件,校准集四个输入对应的不同路径,剩下的参数也需要复制成一样的。你可以直接用hb_config_generator生成一样模板config然后在对其参数进行i需改。

      2025-03-06
      0
    • 默认23232回复Huanghui:
      2025-03-06
      0
    • 默认23232:

      类似 这样, 5个周视相机进行同步 作为一组

      2025-03-06
      0
    • Huanghui回复默认23232:

      那这样还是只有一个input单输入模型 ,你把你的数据,五个相机的数据,数据前处理时候 在dim=0维度concat在一起就可以了 ,作为一个输入,不过要注意concat的顺序 ,

      2025-03-06
      0
    • 默认23232回复Huanghui:

      也就是说, 我的onnx 不用重新生成, 只需要保证输入数据连接好,修改input_parameter中的input_batch参数,如 input_batch = 4, 即将4个 5*3*256*704的数据cat 组成1个npy,其他输入类似处理?

      2025-03-06
      0
    • Huanghui回复默认23232:

      应该不用将四个样本链接在一起吧只需要 5*3*256*704然后把input_batch设置成4他从校准集读取样本的时候就会默认四个为一批的去校准

      2025-03-06
      0
    • 默认23232回复Huanghui:

      多谢~,我试一试

      2025-03-06
      0
    • Huanghui回复默认23232:

      嗯呢 ,你先试下。如果不型的话。那说明还是得从onnx输入上面改动 ,加一维,然后加的这一维度设置成batch数量,

      2025-03-06
      0
    • 默认23232回复Huanghui:

      2025-03-06
      0
    • 默认23232回复默认23232:

      input_batch为转换后上板hbm模型输入batch数量而我这边依然希望上板推理也是5*3*256*704 数据 (5个相机各取一帧的数据, 这些数据在网络中有交互),所以修改input_batch 不行

      2025-03-06
      0
    • Huanghui回复默认23232:

      因为你的onnx模型输入已经固定了即 5*3*256*704,所以 你传入的数据也只能是这样的,你可以试着将前面两个维度展平变成(15,256,704)然后扩展维度(batch,15,256,704),这样的话你的原始模型可能要重新训练重新导出onnx

      2025-03-06
      0
    • 默认23232回复Huanghui:

      好, 这样就是改的网络结构比较多,要空出一个batch维度贯穿整个网络。

      2025-03-06
      0
    • Huanghui回复默认23232:

      是的 ,因为目前常见的数据维度都是(B,C,H,W),一般都是四个维度。所以咱们也尽量遵循这样使用,

      2025-03-06
      0
    • Huanghui:

      这里面C,H,W就相当于你的一个完整样本(五个相机各取一帧)。然后再加一个B维度,就可以以bchw格式输入了。不过挺有意思的是看你这个onnx输入这五帧图像不是分开输入,而是作为一个batch整体为一个样本输入。但是您要求在加一个batch。相当于对一叠图像(一个批量),在叠成一叠,就好像是(B,B,C,H,W)一样

      2025-03-06
      0
    • 默认23232回复Huanghui:
      您好,我拿 动态batch resnet50 ( 此处故意export dynamic,实际推理时候固定batch size=1,并且只需1个输入1*3*224*224 ) 做了一个实验,的确可以多batch calib, 但是最终生成的hbm 的输入也变多了 有8个 1*3*224*224,如果将separate_batch : False, 输入有1个但是shape 8*3*224*224又不符合,均与期望不符合!
      2025-03-07
      0
    • 默认23232:
      2025-03-07
      0
    • Huanghui回复默认23232:

      如果在数据前处理阶段将8张3x224x224 图片在dim=0维度拼接在一起呢 作为一个batch,这样是否可以呢

      2025-03-07
      0
    • Huanghui:

      然后 separate_batch : False

      2025-03-07
      0
    • 默认23232回复Huanghui:
      也不行的
      2025-03-07
      0
    • Huanghui回复默认23232:

      提示的什么

      2025-03-07
      0
    • Huanghui回复默认23232:

      那如果你导出来onnx时候直接指定输入是8 ,3 ,224 ,244 呢

      2025-03-07
      0
    • 默认23232回复Huanghui:
      提示如下
      2025-03-08
      0
    • Huanghui回复默认23232:

      现在你的onnx模型图输入是8,3。224。224吗

      2025-03-10
      0
    • 默认23232回复Huanghui:
      是的8*3*224*224


      报错 如下
      2025-03-10
      0
    • 默认23232回复Huanghui:

      @huanghui, 我这边仅仅希望在ptq 校准的时候使用 多batch, 而推理的时候还是使用单batch

      2025-03-11
      0
    • Huanghui回复默认23232:

      刚和他们讨论了一下,onnx模型batch需要指定为1,他在推理时候,会优先使用batch 8,到那时遇到特殊情况 会回退到1.

      2025-03-12
      0
    • Huanghui回复默认23232:

      你如果不设置input batch参数呢,这个好像是他默认会优先使用batch为8的批量,

      2025-03-12
      0
    • 默认23232回复Huanghui:
      谢谢 @Huanghui,我将onnx导出shape为 1*3*224*224
      设置 input_batch=8, separate_batch : False得到如下hbm ,
      请问 在 hrt_model_exec 推理时候 怎么保证是 按1*3*224*224 shape进行推理的 ?
      2025-03-12
      0
    • Huanghui回复默认23232:

      纠正下,是在校准时候会优先使用batch为8的批量

      2025-03-12
      0
    • Huanghui回复默认23232:

      推理时候就是一张一张推理的

      2025-03-12
      0
    • 默认23232回复Huanghui:

      明白了, 这个8 是hb_compile 里面写死了(我刚刚跑了一下,onnx 导出的dim_0 =1,在config里面 input batch 不设置),和你说的是一致的,再次谢谢。

      2025-03-12
      0
    • 默认23232回复Huanghui:

      如果还想增大校准时期的batch size,是否有方法修改这个默认的 batch 8 呢

      2025-03-12
      0
    • Huanghui回复默认23232:

      可以调大的,但是校准集个数必须是batch的整数倍。比如你将batchsize设置16,那么你的校准集个数就必须能除尽16

      2025-04-03
      0