denizyuret / Knet.jl

Koç University deep learning framework.
https://denizyuret.github.io/Knet.jl/latest
Other
1.43k stars 230 forks source link

MethodError: no method matching LinearIndices #658

Closed jonathan-laurent closed 3 years ago

jonathan-laurent commented 3 years ago

I got the following error while trying to train a small resnet (using some old code that used to work):

ERROR: MethodError: no method matching LinearIndices(::Knet.KnetArrays.KnetVector{Float32})

Replication instructions

git clone --branch cuda-oom https://github.com/jonathan-laurent/AlphaZero.jl.git
cd AlphaZero.jl
julia --project -e "import Pkg; Pkg.instantiate()"

NUM_FILTERS=64 julia --project scripts/profile/debug_oom.jl

My Configuration

Julia 1.6-rc1, CUDA 2.6.1, Knet 1.4.5.

Stacktrace:

ERROR: MethodError: no method matching LinearIndices(::Knet.KnetArrays.KnetVector{Float32})
Closest candidates are:
  LinearIndices(::Tuple{}) at indices.jl:451
  LinearIndices(::R) where {N, R<:Tuple{Vararg{AbstractUnitRange{Int64}, N}}} at indices.jl:448
  LinearIndices(::Tuple{Vararg{AbstractUnitRange{var"#s77"} where var"#s77"<:Integer, N}}) where N at indices.jl:452
  ...
Stacktrace:
  [1] compute_linindex
    @ ./subarray.jl:395 [inlined]
  [2] compute_offset1
    @ ./subarray.jl:387 [inlined]
  [3] compute_offset1
    @ ./subarray.jl:385 [inlined]
  [4] SubArray
    @ ./subarray.jl:38 [inlined]
  [5] SubArray
    @ ~/.julia/packages/Knet/C0PoK/src/knetarrays/dotview.jl:37 [inlined]
  [6] unsafe_view
    @ ~/.julia/packages/Knet/C0PoK/src/knetarrays/dotview.jl:21 [inlined]
  [7] view
    @ ~/.julia/packages/Knet/C0PoK/src/knetarrays/dotview.jl:16 [inlined]
  [8] dotview(A::Knet.KnetArrays.KnetMatrix{Float32}, I::Function)
    @ Knet.KnetArrays ~/.julia/packages/Knet/C0PoK/src/knetarrays/dotview.jl:10
  [9] fill!(a::Knet.KnetArrays.KnetMatrix{Float32}, x::Float32)
    @ Knet.KnetArrays ~/.julia/packages/Knet/C0PoK/src/knetarrays/abstractarray.jl:13
 [10] sum(x::Knet.KnetArrays.KnetMatrix{Float32}; dims::Vector{Any})
    @ Knet.KnetArrays ~/.julia/packages/Knet/C0PoK/src/knetarrays/reduction.jl:41
 [11] unbroadcast(x::AutoGrad.Param{Knet.KnetArrays.KnetVector{Float32}}, dx::Knet.KnetArrays.KnetMatrix{Float32})
    @ AutoGrad ~/.julia/packages/AutoGrad/TTpeo/src/unbroadcast.jl:24
 [12] back(#unused#::typeof(Base.Broadcast.broadcasted), #unused#::Type{AutoGrad.Arg{3}}, dy::Knet.KnetArrays.KnetMatrix{Float32}, 269::AutoGrad.Result{Knet.KnetArrays.KnetMatrix{Float32}}, #unused#::typeof(+), x1::AutoGrad.Result{Knet.KnetArrays.KnetMatrix{Float32}}, x2::AutoGrad.Param{Knet.KnetArrays.KnetVector{Float32}})
    @ AutoGrad ./none:0
 [13] differentiate(::Function; o::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ AutoGrad ~/.julia/packages/AutoGrad/TTpeo/src/core.jl:165
 [14] differentiate
    @ ~/.julia/packages/AutoGrad/TTpeo/src/core.jl:135 [inlined]
 [15] iterate
    @ ~/.julia/packages/Knet/C0PoK/src/train20/train.jl:26 [inlined]
 [16] iterate
    @ ./iterators.jl:159 [inlined]
 [17] iterate
    @ ./iterators.jl:158 [inlined]
 [18] train!(callback::AlphaZero.var"#109#111"{Vector{Float32}}, nn::ResNet, opt::Adam, loss::Function, data::Base.Iterators.Take{Base.Iterators.Stateful{Base.Iterators.Flatten{Base.Generator{Base.Iterators.Repeated{Nothing}, AlphaZero.Util.var"#12#13"{AlphaZero.var"#106#108"{ResNet}, Tuple{Matrix{Float32}, Array{Float32, 4}, Matrix{Float32}, Matrix{Float32}, Matrix{Float32}}, Int64, Bool}}}, Tuple{Tuple{Union{Matrix{Float32}, Knet.KnetArrays.KnetMatrix{Float32}}, Union{Array{Float32, 4}, Knet.KnetArrays.KnetArray{Float32, 4}}, Union{Matrix{Float32}, Knet.KnetArrays.KnetMatrix{Float32}}, Union{Matrix{Float32}, Knet.KnetArrays.KnetMatrix{Float32}}, Union{Matrix{Float32}, Knet.KnetArrays.KnetMatrix{Float32}}}, Tuple{Nothing, Base.Generator{Vector{Tuple{Matrix{Float32}, Array{Float32, 4}, Matrix{Float32}, Matrix{Float32}, Matrix{Float32}}}, AlphaZero.Util.var"#9#11"{AlphaZero.var"#106#108"{ResNet}}}, Int64}}}}, n::Int64)
    @ AlphaZero.KnetLib ~/AlphaZero.jl/src/networks/knet.jl:119
 [19] batch_updates!(tr::AlphaZero.Trainer, n::Int64)
    @ AlphaZero ~/AlphaZero.jl/src/learning.jl:125
 [20] macro expansion
    @ ./timing.jl:356 [inlined]
 [21] learning_step!(env::Env{AlphaZero.Examples.ConnectFour.GameSpec, ResNet, NamedTuple{(:board, :curplayer), Tuple{StaticArrays.SMatrix{7, 6, UInt8, 42}, UInt8}}}, handler::Session{Env{AlphaZero.Examples.ConnectFour.GameSpec, ResNet, NamedTuple{(:board, :curplayer), Tuple{StaticArrays.SMatrix{7, 6, UInt8, 42}, UInt8}}}})
    @ AlphaZero ~/AlphaZero.jl/src/training.jl:223
 [22] macro expansion
    @ ./timing.jl:356 [inlined]
 [23] macro expansion
    @ ~/AlphaZero.jl/src/report.jl:267 [inlined]
 [24] train!(env::Env{AlphaZero.Examples.ConnectFour.GameSpec, ResNet, NamedTuple{(:board, :curplayer), Tuple{StaticArrays.SMatrix{7, 6, UInt8, 42}, UInt8}}}, handler::Session{Env{AlphaZero.Examples.ConnectFour.GameSpec, ResNet, NamedTuple{(:board, :curplayer), Tuple{StaticArrays.SMatrix{7, 6, UInt8, 42}, UInt8}}}})
    @ AlphaZero ~/AlphaZero.jl/src/training.jl:326
 [25] resume!(session::Session{Env{AlphaZero.Examples.ConnectFour.GameSpec, ResNet, NamedTuple{(:board, :curplayer), Tuple{StaticArrays.SMatrix{7, 6, UInt8, 42}, UInt8}}}})
    @ AlphaZero.UserInterface ~/AlphaZero.jl/src/ui/session.jl:316
 [26] train(e::Experiment; args::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ AlphaZero.Scripts ~/AlphaZero.jl/src/scripts/scripts.jl:26
 [27] train
    @ ~/AlphaZero.jl/src/scripts/scripts.jl:26 [inlined]
 [28] #train#15
    @ ~/AlphaZero.jl/src/scripts/scripts.jl:28 [inlined]
 [29] train(s::String)
    @ AlphaZero.Scripts ~/AlphaZero.jl/src/scripts/scripts.jl:28
 [30] top-level scope
    @ none:1
denizyuret commented 3 years ago

This seems to be a julia-1.6 issue. Please try https://github.com/denizyuret/Knet.jl/pull/659 and I will merge if it passes your tests.

jonathan-laurent commented 3 years ago

This fixes it, thanks!