【问题标题】:How to inference using fp16 with a fp32 trained model?如何使用 fp16 和 fp32 训练模型进行推理?
【发布时间】:2019-01-30 02:50:24
【问题描述】:

我想使用 fp16 推断 fp32 模型以验证半精度结果。加载checkpoint后,参数可以转换为float16,那么如何在session中使用这些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() ???

【问题讨论】:

    标签: tensorflow precision


    【解决方案1】:

    我找到了实现它的方法。

    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的传统单位吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2019-08-09
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2021-03-18
      相关资源
      最近更新 更多