sophgo/LLM-TPU

bm1684x的芯片是否在seq_length增加时,推理时间就会变得很长的问题?

Opened this issue · 1 comments

如标题,以qwen为例子(int4),如果模型编译时,seq_length 为 512,推理时就很快,FTL1秒以内

如果seq_length 为8192,那FTL为16秒多

其它模型GLM4也有类似问题,seq_length 的长度对于生产应用非常重要,如果FTL 16秒这个几乎没法用于实际生产了,有办法改进吗?

存在,首token延时业界方案比较少,因为这个是个compute bound问题,目前解决方案有

  1. 动态编译,首token用dynamic动态编译,长度可变。这个要看输入长度的最大值和均值,看值不值得做,因为如果做动态,最大输入与静态编译相比,耗时是增加30%。如果每批次输入均值接近动态的最大长度的20~50%,那可以用这个方案
  2. 公共序列复用,如果多输入情况下,有一部分序列是完全一样的,那么可以复用
  3. 公共序列缓存。同上,如果输入句式前面部分比较固定,并且很少,可以直接缓存下来,不用当场计算
  4. slidewindow、去掉一部分layer这种方案,基本上都以牺牲性能为代价