JuliaGPU/CUDA.jl

CUDNN convolution incorrect for small images

Open

#848 ouverte le 19 avr. 2021

Voir sur GitHub
 (4 commentaires) (0 réactions) (1 assigné)Julia (274 forks)batch import
good first issueneeds tests

Métriques du dépôt

Stars
 (1 408 stars)
Métriques de merge PR
 (Merge moyen 5j 5h) (16 PRs mergées en 30 j)

Description

The CUDNN convolution is giving incorrect results for small images, e.g.

julia> f(k, x, padding) = CUDA.CUDNN.cudnnConvolutionForward(CuArray(Float32.(k)),
                                                             CuArray(Float32.(x)),
                                                             padding=padding)
f (generic function with 1 method)

julia> size(f(rand(7, 1, 1, 1), rand(5, 5, 1, 1), 5))
(9, 15, 1, 1)  # Correct

julia> size(f(rand(7, 1, 1, 1), rand(3, 5, 1, 1), 5))
(3, 15, 1, 1)  # Should have been (7, 15, 1, 1)

julia> size(f(rand(7, 1, 1, 1), rand(1, 5, 1, 1), 5))
ERROR: CUDNNError: CUDNN_STATUS_BAD_PARAM (code 3)  # Should have been (5, 15, 1, 1)

The cause of the problem can be located to

https://github.com/JuliaGPU/CUDA.jl/blob/445081cf78a250941b2ecdef1a3a2ecead3fec44/lib/cudnn/convolution.jl#L157-L162

where the min silently changes the requested padding.

Cc: @denizyuret

Guide contributeur