FluxML / FluxJS.jl

I heard you like compile times
Other
42 stars 8 forks source link

UndefRefError: access to undefined reference #6

Closed amellnik closed 6 years ago

amellnik commented 6 years ago

I'm on Flux 0.5.1 and FluxJS 0.1. I'm getting lots of UndefRefError: access to undefined reference except for the most trivial uses. This seems to be working for others on the same so I'm not sure what's going on.

# Works
x = rand(10)
@code_js identity(x)
let model = (function () {
  let math = dl.ENV.math;
  function model(owl) {
    return owl;
  };
  model.weights = [];
  return model;
})();
flux.fetchWeights("model.bson").then((function (ws) {
  return model.weights = ws;
}));
# From the readme but doesn't work
x = rand(10)
m = Chain(Dense(10,5,relu),Dense(5,2),softmax)
@code_js m(x)
UndefRefError: access to undefined reference

Stacktrace:
 [1] lookup_var_if_var at /home/alex/.julia/v0.6/ASTInterpreter2/src/ASTInterpreter2.jl:147 [inlined]
 [2] lookup(::ASTInterpreter2.JuliaStackFrame, ::SSAValue) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:21
 [3] broadcast_t(::Function, ::Type{Any}, ::Tuple{Base.OneTo{Int64}}, ::CartesianRange{CartesianIndex{1}}, ::ASTInterpreter2.JuliaStackFrame, ::Array{Any,1}) at ./broadcast.jl:256
 [4] broadcast_c at ./broadcast.jl:319 [inlined]
 [5] broadcast(::Function, ::ASTInterpreter2.JuliaStackFrame, ::Array{Any,1}) at ./broadcast.jl:434
 [6] callargs(::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:29
 [7] runall(::FluxJS.BTrace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:34
 [8] overdub(::FluxJS.BTrace, ::Function) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [9] primitive(::FluxJS.Trace, ::Base.#broadcast, ::Function, ::Tuple{TrackedArray{…,Array{Float64,1}}}) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [10] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [11] overdub(::FluxJS.Trace, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [12] #trace#6(::FluxJS.Trace, ::Function, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [13] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at ./<missing>:0
 [14] #_traceλ#9(::FluxJS.Trace, ::Function, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:39
 [15] (::FluxJS.#kw##_traceλ)(::Array{Any,1}, ::FluxJS.#_traceλ, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at ./<missing>:0
 [16] #tracecall#13(::FluxJS.Trace, ::Function, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:50
 [17] (::FluxJS.#kw##tracecall)(::Array{Any,1}, ::FluxJS.#tracecall, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at ./<missing>:0
 [18] macro expansion at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:58 [inlined]
 [19] primitive(::FluxJS.Trace, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}, ::FluxJS.StagedArray{Float64,1}) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [20] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [21] overdub(::FluxJS.Trace, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [22] #trace#6(::FluxJS.Trace, ::Function, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [23] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Vararg{Any,N} where N) at ./<missing>:0
 [24] macro expansion at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:58 [inlined]
 [25] primitive(::FluxJS.Trace, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Flux.Dense{NNlib.#relu,TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [26] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [27] overdub(::FluxJS.Trace, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [28] #trace#6(::FluxJS.Trace, ::Function, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [29] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Function, ::Function, ::Vararg{Any,N} where N) at ./<missing>:0
 [30] macro expansion at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:58 [inlined]
 [31] primitive(::FluxJS.Trace, ::Function, ::Function, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [32] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [33] overdub(::FluxJS.Trace, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [34] #trace#6(::FluxJS.Trace, ::Function, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [35] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Function, ::Function, ::Vararg{Any,N} where N) at ./<missing>:0
 [36] macro expansion at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:58 [inlined]
 [37] primitive(::FluxJS.Trace, ::Function, ::Function, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [38] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [39] overdub(::FluxJS.Trace, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [40] #trace#6(::FluxJS.Trace, ::Function, ::Function, ::Function, ::Vararg{Any,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [41] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Function, ::Function, ::Vararg{Any,N} where N) at ./<missing>:0
 [42] macro expansion at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:58 [inlined]
 [43] primitive(::FluxJS.Trace, ::Function, ::Function, ::FluxJS.StagedArray{Float64,1}, ::Array{Any,1}, ::Vararg{Array{Any,1},N} where N) at /home/alex/.julia/v0.6/Vinyl/src/hooks.jl:24
 [44] runall(::FluxJS.Trace, ::DebuggerFramework.DebuggerState) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:37
 [45] overdub(::FluxJS.Trace, ::Flux.Chain, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/Vinyl/src/interpret.jl:53
 [46] #trace#6(::FluxJS.Trace, ::Function, ::Flux.Chain, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:30
 [47] (::FluxJS.#kw##trace)(::Array{Any,1}, ::FluxJS.#trace, ::Flux.Chain, ::FluxJS.StagedArray{Float64,1}, ::Vararg{FluxJS.StagedArray{Float64,1},N} where N) at ./<missing>:0
 [48] #_traceλ#9(::FluxJS.Trace, ::Function, ::Flux.Chain, ::Type{T} where T, ::Vararg{Type{T} where T,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:39
 [49] (::FluxJS.#kw##_traceλ)(::Array{Any,1}, ::FluxJS.#_traceλ, ::Flux.Chain, ::DataType, ::Vararg{DataType,N} where N) at ./<missing>:0
 [50] #traceλ#10(::FluxJS.Trace, ::Function, ::Flux.Chain, ::Type{T} where T, ::Vararg{Type{T} where T,N} where N) at /home/alex/.julia/v0.6/FluxJS/src/trace.jl:44
 [51] (::FluxJS.#kw##traceλ)(::Array{Any,1}, ::FluxJS.#traceλ, ::Flux.Chain, ::Type{T} where T, ::Vararg{Type{T} where T,N} where N) at ./<missing>:0
 [52] #compile#42 at /home/alex/.julia/v0.6/FluxJS/src/compile.jl:102 [inlined]
 [53] compile(::Flux.Chain, ::Array{Float64,1}) at /home/alex/.julia/v0.6/FluxJS/src/compile.jl:101
 [54] include_string(::String, ::String) at ./loading.jl:522
Roboneet commented 6 years ago

Seems to be the same as #5

MikeInnes commented 6 years ago

Let me know if checking out astinterpreter doesn't work for you. Otherwise, I've added a note to the readme so this doesn't keep tripping people up.

amellnik commented 6 years ago

Whoops, not sure how I missed #5 -- thanks.