TensorFlow 混合精度训练:Conv2DBackpropFilter 不使用 TensorCore

时间:2021-02-05 07:47:33

标签: tensorflow keras gpu half-precision-float automatic-mixed-precision

我正在使用 keras 混合精度 API,以便在 GPU 中适应我的网络。 通常在我的代码中,这看起来是 like this。 MWE 将是:

from tensorflow.keras.mixed_precision import experimental as mixed_precision

use_mixed_precision = True

if use_mixed_precision:
  policy_type = 'mixed_float16'
else:
  policy_type = 'float32'
policy = mixed_precision.Policy(policy_type)
mixed_precision.set_policy(policy)

这似乎达到了预期的效果,因为当我训练我的模型并使用 TensorBoard Callback 对其进行分析时,我的大部分操作以半精度运行,其中一些使用 TensorCore(我有一个 GPU 7.0以上的计算能力)。

然而,Conv2DBackpropFilter 没有使用 TensorCore,尽管根据 TensorBoard 信息它有资格使用它。

TensorCore ops

我还没有关于整个事情的最小可重复示例,如果需要,我可以进行处理,但我想首先知道这是预期行为还是有一些已知问题,因为我不能' t 在线查找任何信息。

编辑

我有一个 MRE,它有不同的行为,但有同样的问题:为什么不使用 TensorCore(所需的所有维度都是 8 的倍数)?

import tensorflow as tf
from tensorflow.keras.mixed_precision import experimental as mixed_precision

use_mixed_precision = True

if use_mixed_precision:
    policy_type = 'mixed_float16'
else:
    policy_type = 'float32'
policy = mixed_precision.Policy(policy_type)
mixed_precision.set_policy(policy)

nf = 8
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(filters=nf, kernel_size=3, padding='same'),
    tf.keras.layers.Conv2D(filters=nf, kernel_size=3, padding='same'),
    tf.keras.layers.Conv2D(filters=nf, kernel_size=3, padding='same'),
])
model.compile(loss='mse', optimizer='sgd')

bs = 8
inputs = tf.random.normal([bs, 32, 32, 1])
outputs = tf.random.normal([bs, 32, 32, nf])

tboard_cback = tf.keras.callbacks.TensorBoard(
    profile_batch='5, 10',
    log_dir='logs',
    histogram_freq=0,
    write_graph=False,
    write_images=False,
)

model.fit(inputs, outputs, callbacks=[tboard_cback], epochs=15)

在这个 MRE 中,64.2% 的 ops 时间花在了半精度上,这意味着半精度确实发生了。 在我的日志中,我还检查了计算能力:

NFO:tensorflow:Mixed precision compatibility check (mixed_float16): OK
Your GPU will likely run quickly with dtype policy mixed_float16 as it has compute capability of at least 7.0. Your GPU: Tesla V100-SXM2-32GB, compute capability 7.0

然而,没有任何操作(这次不仅仅是 Conv2DBackpropFilter)与 TensorCore 一起运行。我不明白为什么。

tensorcore_for_mre

0 个答案:

没有答案