问题描述:
【背景信息】
整个Model是一个文字识别任务,包含CNN,Transformer,Loss只有一个CrossEntropy的分类loss。
【问题描述】
整个代码已经在PyNative模式下顺利运行,并且训练到了很高的性能。
训练输入是batchsize=64的160x48的图片。输出类别数为7000左右。
单卡单机,PyNative下训练,每个Batch平均需要3秒左右
现在拿在PyNative模式下训练好的Model,load进来以后切换成GRAPH Mode继续finetune,发现精度几乎一致,没有下降,但是速度慢了一大截!比PyNative模式,每个batch慢了10倍左右的时间!
解答:
应该是图重复编译了,dict,list,tuple都不要作为根图的入参,因为graph是有编译缓存的,tensor作为入参时,是把shape和type看做是key的,其他类型都是要看object的属性和value的,如果传入一个dict可能导致某些value一直在变,导致图缓存不下来,每个step都在编译图,时间会大大增加。