Scalar indexing error using prod(...)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- julia
- Área
- machine-learning
Línea de trabajo
Empieza reproduciendo el fallo de prod con la configuración de Flux, Zygote, ChainRules y CuArray mostrada en el stack trace. Lee src/rulesets/Base/mapreduce.jl alrededor de las líneas 265 y 287 y determina después el comportamiento esperado para entradas que contienen ceros. Se considera completado cuando se evita el error de indexación escalar o se documenta y notifica de forma más clara.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
This might not be a bug, but at the least it seems to be a mysterious error.
I'm using Flux and in the loss function (which is processed by Zygote and so uses ChainRules.jl), I'm using prod. The surprising thing was that it ran for several iterations before failing with a scalar index error.
I'm guessing the error happens when it goes into this branch because it finds a zero somewhere. That would explain why some iterations occur before hitting this error. I don't know if the code can be changed to avoid scalar indexing, or maybe a more informative error, or maybe it's just something I need to better understand.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] assertscalar(op::String)
@ GPUArraysCore C:\Users\joel\.julia\packages\GPUArraysCore\uOYfN\src\GPUArraysCore.jl:103
[3] getindex(::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ::Int64, ::Int64)
@ GPUArrays C:\Users\joel\.julia\packages\GPUArrays\5XhED\src\host\indexing.jl:9
[4] maybeview
@ .\views.jl:149 [inlined]
[5] ∇prod_dims!(dx::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, #unused#::Val{1}, x::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, dy::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, y::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer})
@ ChainRules C:\Users\joel\.julia\packages\ChainRules\9sNmB\src\rulesets\Base\mapreduce.jl:287
[6] ∇prod_dims(vald::Val{1}, x::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, dy::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, y::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer})
@ ChainRules C:\Users\joel\.julia\packages\ChainRules\9sNmB\src\rulesets\Base\mapreduce.jl:278
[7] (::ChainRules.var"#1683#1686"{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ChainRulesCore.ProjectTo{AbstractArray, NamedTuple{(:element, :axes), Tuple{ChainRulesCore.ProjectTo{Float32, NamedTuple{(), Tuple{}}}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}})()
@ ChainRules C:\Users\joel\.julia\packages\ChainRules\9sNmB\src\rulesets\Base\mapreduce.jl:265
[8] unthunk
@ C:\Users\joel\.julia\packages\ChainRulesCore\0t04l\src\tangent_types\thunks.jl:204 [inlined]
[9] unthunk
@ C:\Users\joel\.julia\packages\ChainRulesCore\0t04l\src\tangent_types\thunks.jl:237 [inlined]
[10] wrap_chainrules_output
@ C:\Users\joel\.julia\packages\Zygote\4rucm\src\compiler\chainrules.jl:110 [inlined]
[11] map
@ .\tuple.jl:274 [inlined]
[12] wrap_chainrules_output
@ C:\Users\joel\.julia\packages\Zygote\4rucm\src\compiler\chainrules.jl:111 [inlined]
[13] ZBack
@ C:\Users\joel\.julia\packages\Zygote\4rucm\src\compiler\chainrules.jl:211 [inlined]
[14] (::Zygote.var"#kw_zpullback#53"{ChainRules.var"#prod_pullback#1684"{Int64, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ChainRulesCore.ProjectTo{AbstractArray, NamedTuple{(:element, :axes), Tuple{ChainRulesCore.ProjectTo{Float32, NamedTuple{(), Tuple{}}}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}})(dy::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer})
@ Zygote C:\Users\joel\.julia\packages\Zygote\4rucm\src\compiler\chainrules.jl:237
...
- Lenguaje dominante
- Julia
- Estrellas
- 475
- Forks
- 98
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaDiff/ChainRules.jl
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
JuliaDiff/ChainRules.jl#844 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 55/100
JuliaDiff/ChainRules.jl#818 ·
-
refactoring
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaDiff/ChainRules.jl#815 ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
JuliaDiff/ChainRules.jl#810 ·
-
stack overflow issueAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
JuliaDiff/ChainRules.jl#809 ·
Todos los issues de JuliaDiff/ChainRules.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
oscar-system/GAP.jl#1455 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
Los mantenedores suelen responder en 4 días