融合算子的优化原理为,通过数学意义上的等价替换,将多个算子融为一个算子的计算,减少冗余计算,同时减少下发次数,从而提高性能。
在很多开源代码中,由于作者在编写时很少考虑性能,因此在代码中可能存在增加很多的stream同步操作,这些同步通常是由h2d(host to device,从CPU侧下发到NPU侧)、d2h(device to host,从NPU侧搬回到CPU侧)操作(如tensor.item、reduce_all、torch.isfinite等)引入的,原则上,我们需要尽可能减少这些异步流同步的操作,让模型通过异步流实现最佳的并行效率。
在mask-rcnn中,模型的mask decode运行CPU上进行,且仅用单核实现,性能不够理想。此时,可以将计算部分放到NPU上,或者在CPU上,通过多进程的方式进行加速。