如何通过fp32训练模型使用fp16进行推理?

时间:2019-01-30 02:50:24

标签: tensorflow precision

我想用fp16推断一个fp32模型,以验证半精度结果。加载检查点后,可以将这些参数转换为float16,然后如何在会话中使用这些fp16参数?

reader = tf.train.NewCheckpointReader(model_file)
var_to_map = reader.get_variable_to_dtype_map()

for key, val in var_to_map.items():
    tsr = reader.get_tensor(key)
    val_f16 = tf.cast(tsr, tf.float16)

# sess.restore() ???

1 个答案:

答案 0 :(得分:0)

我找到了实现它的方法。

  1. 使用 tf.train.NewCheckpointReader()加载检查点,然后读取参数并将其转换为float16类型。
  2. 使用float16读取参数初始化图层
    weight_name = scope_name + '/' + get_layer_str() + '/' + 'weight'
    initw = inits[weight_name]
    weight = tf.get_variable('weight', dtype=initw.dtype, initializer=initw)
    out = tf.nn.conv2d(self.get_output(), weight, strides=[1, stride, stride, 1], padding='SAME')
  1. 运行图形

我的GPU是没有张量核心的GTX1080,但是使用fp16的推理要比使用fp32的推理快20%-30%,我不明白原因,并且使用了哪个“硬件单元”计算fp16,fp32的传统单位是吗?