数据预处理中资源类算子LookupTableFindV2在Host侧执行,而当前昇腾AI处理器默认采用计算全下沉模式,即所有的计算类算子(包括资源类算子的初始化图)全部在Device侧执行。数据预处理中的资源类算子和资源类算子的初始化图未在同一设备执行,而出现报错。
需要通过使能混合计算能力,将资源类算子的初始化图也留在Host侧执行。
当用户的数据预处理脚本中存在此类API(tf.contrib.lookup下的Table类的API,例如tf.contrib.lookup.HashTable)时,需要手工使能混合计算:
from npu_bridge.npu_init import * config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["mix_compile_mode"].b = True config.graph_options.rewrite_options.remapping = RewriterConfig.OFF config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config) as sess: sess.run(...)