tensorflow DepthwiseConv2D比带有CUDA 11.8和jit_compile=True的Conv2D慢24倍,

bpsygsoo  于 6个月前  发布在  其他
关注(0)|答案(8)|浏览(44)

问题类型

性能问题

你是否在TF nightly版本中复现了这个bug?

是的

问题来源

源代码

Tensorflow版本

'v1.12.1-89750-g9f16e373ca8', '2.13.0'

自定义代码

OS平台和发行版

Ubuntu 22.04

移动设备

  • 无响应*

Python版本

3.10.6

Bazel版本

5.3.0

GCC/编译器版本

11.3.0

CUDA/cuDNN版本

12.0 / 8.8

GPU型号和内存

RTX 4090 Aorus Master

当前行为?

After upgrading to RTX4090 i installed cuda 12.0 + cudnn 8.8 and found that some models become slower (e.g. EfficientNets) and some not (SwinTransformer).

I localized the issue to combination of `DepthwiseConv2D + model.compile(jit_compile=True)`. 
In my case this combination is 24 times slower then `Conv2D + model.compile(jit_compile=True)` and 8 times slower then `DepthwiseConv2D + model.compile(jit_compile=False)`.
Here are some numbers:

Colab + TF 2.11.0 with fp32
dw=True,  jit_compile=True,  ETA after 200 steps: 1:18:06
dw=False, jit_compile=True,  ETA after 200 steps: 1:18:20
dw=True,  jit_compile=False, ETA after 200 steps: 2:29:57

Colab + TF nightly with fp32
dw=True,  jit_compile=True,  ETA after 200 steps: 1:21:25
dw=False, jit_compile=True,  ETA after 200 steps: 1:18:23
dw=True,  jit_compile=False, ETA after 200 steps: 2:29:40

RTX4090 + Cuda 12.0 + Cudnn 8.8 + TF nightly with fp32
dw=True,  jit_compile=True,  ETA after 200 steps: 3:43:26
dw=False, jit_compile=True,  ETA after 200 steps:    9:13
dw=True,  jit_compile=False, ETA after 200 steps:   26:18

RTX4090 + Cuda 12.0 + Cudnn 8.8 + TF nightly with mixed_fp16
dw=True,  jit_compile=True,  ETA after 200 steps: 1:17:36
dw=False, jit_compile=True,  ETA after 200 steps:    4:33
dw=True,  jit_compile=False, ETA after 200 steps:   21:57

独立代码以重现问题

https://colab.research.google.com/drive/1KTMAVhpQLQhRphRfRjHNo8faR9NBOlK6#scrollTo=IEGDQp7G6aUq

相关日志输出

  • 无响应*
xzlaal3s

xzlaal3s1#

Downgrading to cuda 11.8 did not help.

RTX4090 + Cuda 11.8 + Cudnn 8.8 + TF nightly with mixed_fp16
dw=True,  jit_compile=True,  ETA after 200 steps: 1:17:38

But when i downgraded to TF 2.11 and cuda 11.2, depthwise conv become just 2 times slower then normal one.

RTX4090 + Cuda 11.2 + Cudnn 8.1 + TF 2.11 with mixed_fp16
dw=True,  jit_compile=True,  ETA after 200 steps:    9:39
dw=False, jit_compile=True,  ETA after 200 steps:    4:58
dw=True,  jit_compile=False, ETA after 200 steps:   21:10

Compilation from source with TF 2.11 and Cuda 11.2 required to limit compute compatibility with 8.6
And now, when running model i get warning:

2023-02-22 16:45:51.222824: W tensorflow/compiler/xla/stream_executor/gpu/asm_compiler.cc:234] Falling back to the CUDA driver for PTX compilation; ptxas does not support CC 8.9
2023-02-22 16:45:51.222852: W tensorflow/compiler/xla/stream_executor/gpu/asm_compiler.cc:237] Used ptxas at ptxas
2023-02-22 16:45:51.222934: W tensorflow/compiler/xla/stream_executor/gpu/redzone_allocator.cc:318] UNIMPLEMENTED: ptxas ptxas too old. Falling back to the driver to compile.
Relying on driver to perform ptx compilation. 
Modify $PATH to customize ptxas location.
This message will be only logged once.
2023-02-22 16:45:51.225390: W tensorflow/compiler/xla/service/gpu/buffer_comparator.cc:641] UNIMPLEMENTED: ptxas ptxas too old. Falling back to the driver to compile.
Relying on driver to perform ptx compilation. 
Setting XLA_FLAGS=--xla_gpu_cuda_data_dir=/path/to/cuda  or modifying $PATH can be used to set the location of ptxas
dgjrabp2

dgjrabp22#

@shkarupa-alex,
感谢您报告此问题。此问题与Keras有关。Keras的开发已转移到另一个仓库。
您能否在此将此问题发布到keras-team/keras仓库?
如需了解更多信息,请参考:
感谢您!

sg2wtvxw

sg2wtvxw3#

@tilakrayal,请问您能解释一下为什么您认为这个问题与Keras有关吗?
在底层,它使用了tf.nn.depthwise_conv2d,这是TensorFlow核心的一部分。除了这一点之外,这个层没有什么特别之处。
因此,我认为这个问题完全与TensorFlow有关。

jutyujz0

jutyujz04#

@sachinprasadhs,
我能够在tensorflow v2.11和tf-nightly上重现这个问题。请查看这个问题的摘要here

zzzyeukh

zzzyeukh5#

你好,TensorFlow 2.12或2.13仍是一个开发分支,我们计划在即将发布的Tensorflow 2.12版本中迁移cuDNN和CUDA版本。
在此之前,请根据以下发布的测试配置对其进行测试。
| 版本 | Python版本 | 编译器 | 构建工具 | cuDNN | CUDA |
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
| tensorflow_gpu-2.11.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.3.0 | 8.1 | 11.2 |
根据你的发现,DepthwiseConv2D比Conv2D慢2倍,这可能是因为在DepthwiseConv2D中采用了不同的实现方法。

fcg9iug3

fcg9iug36#

在此之前,请将以下文本内容与以下发布的测试配置进行对比。
@sachinprasadhs ,我的稳定版本和CUDA 11.2的测试结果在这里 #59772 (评论)
//ptxas警告,DWConv速度慢2倍

6yoyoihd

6yoyoihd7#

更令人困惑的是,带有jit_compile=True的DWConv比没有jit_compile的DWConv慢。
RTX4090 + Cuda 12.0 + Cudnn 8.8 + TF nightly with fp32
dw=True, jit_compile=True, 200步后的预计时间:3分43秒26
dw=False, jit_compile=True, 200步后的预计时间:9分13秒
dw=True, jit_compile=False, 200步后的预计时间:26分18秒

dzhpxtsq

dzhpxtsq8#

在2.12版本的新鲜发布和cuda 11.8上测试,看到相同的数字。
Conv2D = 4分31秒 vs DepthwiseConv2d = 1小时17分22秒

相关问题