多个模型调度时需要了解推理BPU的的最细调度单位,请问在J6上是什么呢?
多个模型调度时需要了解推理BPU的的最细调度单位,请问在J6上是什么呢?




补充一点开发者相对容易理解的解释,从应用层面来看多模型部署调度问题,可以分拆成几种情况来看
多个模型都是完全BPU推理的计算图(中间没有CPU算子),不考虑抢占的情况,那么应用层面看调度是以模型为粒度。模型A推理结束后,才能模型B推理
在多模型并发时,可能同时下发多个推理任务到推理库(libdnn),此次推理库中有队列机制,基于队列机制支持优先级设置(0~255),从应用层面看是具备了优先级的调度策略,虽然在BPU核上某一时刻只能独占的推理一个模型,但通过设置优先级可以影响队列中的排队顺序。
基于优先级又支持抢占模式,该模式支持低优先级的模型在运行过程中被打断,被抢占优先级的模型抢占BPU资源,要实现抢占调度,有两个前提,一是在编译被抢占模型时设置 max_time_per_fc 编译选项,将模型按配置编译成可拆断执行的指令模型,二是运行时指定高优模型的优先级为255(抢占优先级),在多模型并发时,抢占调度才会发生。
J6 上支持的优先级有3个层次,0~253,254,255, 后两个优先级能够抢占低优先级,前提是#3
至于内部实现将模型解析成function call在BPU上执行的细节对于应用部署可以当作黑盒。