TensorFlow示例*
这里提供个TensorFlow示例,通过下面的连接下载源码
1. 生成 NPU 文件*
1.1 编写推理模型*
一般来说,推理模型和训练模型略有差异。推理模型中会去掉只在训练中需要用到的运算,如Dropout
,并加载训练时产生的 CKPT 文件,最终生成推理模型的 PB 文件。
具体见下面代码。
self.inputs=tf.placeholder(tf.float32,[1,1,256,1],name='Feats') # 指定输入 feats 名字
self.state_in = tf.placeholder(tf.float32,[1, 64],name="State_c0") # 指定输入 state0 名字
...
self.net_output , self.state = eval_network(self.inputs,self.state_in)
self.predProb = tf.reshape(self.net_output,[1],name='probOut')
self.state_out = tf.identity(self.state, name="State_c0_out") # 指定输出 state0 名字
...
with tf.Session(config=config) as sess:
sess.run(tf.global_variables_initializer())
saver=tf.train.Saver(tf.global_variables(),max_to_keep=100)
ckpt = './ckpt_dir/tfMask-8000'
saver.restore(sess,ckpt) # 加载训练时生成的 CKPT 文件
...
with tf.gfile.FastGFile('./model.pb', mode='wb') as f:
f.write(constant_graph.SerializeToString())# 生成推理模型的 PB 文件
1.2 生成 PB 文件*
可参考生成PB文件 和 把CKPT和PB文件合并成FROZEN_PB文件
1.3 编辑 NPU 配置文件*
编辑配置文件config.yaml
文件
config.yaml
CORENAME: LEO
PB_FILE: ./model.pb
OUTPUT_FILE: model.c
SECURE: false # true/false
NPU_UNIT: NPU32 # NPU16/NPU32/NPU64
COMPRESS: true # true/false
COMPRESS_QUANT_BITS: 8
COMPRESS_TYPE: LINEAR
OUTPUT_TYPE: c_code # c_code/raw
#DEBUG_INFO_ENABLE: false # true/false
CONV2D_COMPRESS: true # true/false
INPUT_OPS:
Feats: [1, 1, 256, 1]
State_c0: [1, 64]
OUTPUT_OPS: [ model/State_c0_out,model/probOut]
FP16_OUT_OPS: [model/State_c0_out,]
#FUSE_BN: true
DUMP_OPS_TIME: false
注意
这里的 Feats,State_c0,State_c0_out,probOut 跟模型的输入、输出的 op 名字是一一对应的。
注意
配置项OUTPUT_OPS
中,状态输出结点需要放在模型实际输出结点前面。
1.4 编译*
使用 gxnpuc 工具编译
$ gxnpuc config.yaml
model.c
,并且打印出模型需要的内存信息:
------------------------
Memory allocation info:
Mem0(ops): 6148
Mem1(data): 16312
Mem2(instruction): 181536
Mem3(in): 640
Mem4(out): 130
Mem5(tmp content): 9216
Total Memory Size: 213982
------------------------
Compile OK.