Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MethodError: no method matching iterate(::Core.CodeInfo) #1449

Open
pat-alt opened this issue Aug 18, 2023 · 7 comments
Open

MethodError: no method matching iterate(::Core.CodeInfo) #1449

pat-alt opened this issue Aug 18, 2023 · 7 comments
Labels

Comments

@pat-alt
Copy link

pat-alt commented Aug 18, 2023

I'm trying to use Zygote on Julia v1.6.3, because unfortunately that's all that's currently available on the HPC I'm working on. It fails to precompile throwing the following error:

julia> using Zygote
@Info (Base): Precompiling Zygote [e88e6eb3-aa80-5325-afca-941959d7151f]                        
  │                                                                                             
  ╰──────────────────────────────────────────────── 
                       Fri, 18 Aug 2023 08:51:10 
 ERROR: LoadError: LoadError: MethodError: no method matching iterate(::Core.CodeInfo)
Closest candidates are:
  iterate(::Union{LinRange, StepRangeLen}) at range.jl:664
  iterate(::Union{LinRange, StepRangeLen}, ::Int64) at range.jl:664
  iterate(::T) where T<:Union{Base.KeySet{var"#s77", var"#s76"} where {var"#s77", var"#s76"<:Dict}, Base.ValueIterator{var"#s75"} where var"#s75"<:Dict} at dict.jl:693
  ...
Stacktrace:
  [1] indexed_iterate(I::Core.CodeInfo, i::Int64)
    @ Base ./tuple.jl:89
  [2] pullback(::Function, ::Zygote.Context{false}, ::Int64, ::Vararg{Int64, N} where N)
    @ Zygote ~/.julia/packages/Zygote/4rucm/src/compiler/interface.jl:44
  [3] pullback(::Function, ::Int64, ::Int64)
    @ Zygote ~/.julia/packages/Zygote/4rucm/src/compiler/interface.jl:42
  [4] gradient(::Function, ::Int64, ::Vararg{Int64, N} where N)
    @ Zygote ~/.julia/packages/Zygote/4rucm/src/compiler/interface.jl:96
  [5] top-level scope
    @ ~/.julia/packages/Zygote/4rucm/src/precompile.jl:17
  [6] include(mod::Module, _path::String)
    @ Base ./Base.jl:386
  [7] include
    @ ~/.julia/packages/Zygote/4rucm/src/Zygote.jl:1 [inlined]
  [8] macro expansion
    @ ~/.julia/packages/Requires/Z8rfN/src/Requires.jl:40 [inlined]
  [9] precompile()
    @ Zygote ~/.julia/packages/Zygote/4rucm/src/Zygote.jl:63
 [10] macro expansion
    @ ~/.julia/packages/PrecompileTools/0yi7r/src/workloads.jl:81 [inlined]
 [11] top-level scope
    @ ~/.julia/packages/Zygote/4rucm/src/Zygote.jl:84
 [12] include
    @ ./Base.jl:386 [inlined]
 [13] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
    @ Base ./loading.jl:1235
 [14] top-level scope
    @ none:1
 [15] eval
    @ ./boot.jl:360 [inlined]
 [16] eval(x::Expr)
    @ Base.MainInclude ./client.jl:446
 [17] top-level scope
    @ none:1
in expression starting at /Users/FA31DU/.julia/packages/Zygote/4rucm/src/precompile.jl:17
in expression starting at /Users/FA31DU/.julia/packages/Zygote/4rucm/src/Zygote.jl:1
ERROR: 
──────────────────────────────────────── ErrorException ────────────────────────────────────────
╭──── Error Stack ─────────────────────────────────────────────────────────────────────────────╮
│                                                                                              │
│  ──────────────────────────────────── In module Base ────────────────────────────────────    │
│                                                                                              │
│         ╭───────────────────────────────────────────────────────────────────────────╮        │
│     (1) │  require(into::Module, mod::Symbol)                                       │        │
│         │  ./loading.jl:923                                                         │        │
│         ╰───────────────────────────────────────────────────────────── TOP LEVEL ───╯        │
│                                                                                              │
│  ────────────────────────────────────────────────────────────────────────────────────────    │
│                                 Skipped 4 frames in Base                                     │
│  ────────────────────────────────────────────────────────────────────────────────────────    │
│                                                                                              │
│         ╭───────────────────────────────────────────────────────────────────────────╮        │
│     (6) │  error(s::String)                                                         │        │
│         │  ./error.jl:33                                                            │        │
│         ╰──────────────────────────────────────────────────────────── ERROR LINE ───╯        │
│                                                                                              │
╰──── Error Stack ─────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────────────── ErrorException ───────────────────────────────────────╮
│                                                                                              │
│  Failed to precompile Zygote [e88e6eb3-aa80-5325-afca-941959d7151f] to /Users/FA31DU/.jul    │
│  ia/compiled/v1.6/Zygote/jl_chkkNu.                                                          │
│                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────╯

Is there anything obvious going on here? Is this salvageable or should I just wait for a newer Julia version to be operational on the HPC?

Thanks!

@ToucheSir
Copy link
Member

Nothing obvious, I can't think if any scenario where we'd get back a chunk of IR instead of an actual function here. Can you paste the output of Zygote._pullback(Zygote.Context(), pow, 2, 3), where pow can be copied from https://github.com/FluxML/Zygote.jl/blob/master/src/precompile.jl?

@pat-alt
Copy link
Author

pat-alt commented Aug 21, 2023

I don't think I can properly test this when Zygote fails to precompile? Sorry if I'm missing something

julia> function pow(x, n)
         r = 1
         while n > 0
           n -= 1
           r *= x
         end
         return r
       end
pow (generic function with 1 method)

julia> Zygote._pullback(Zygote.Context(), pow, 2, 3)
ERROR: 
─────────────────────────────────────────────────────────────── UndefVarError ──────────────────────────────────────────────────────────────
╭──── Error Stack ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                                                                          │
│      ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮           │
│  (1) │  top-level scope                                                                                                      │           │
│      │  REPL[6]:1                                                                                                            │           │
│      ╰───────────────────────────────────────────────────────────────────────────────────────────────────────── TOP LEVEL ───╯           │
│                                                                                                                                          │
╰──── Error Stack ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭────────────────────────────────────────────────────────────── UndefVarError ─────────────────────────────────────────────────────────────╮
│                                                                                                                                          │
│  UndefVarError: Zygote not defined                                                                                                       │
│                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯


julia> 

@pat-alt
Copy link
Author

pat-alt commented Aug 21, 2023

I've just moved that into the precompile.jl. Here's the output (where the stack trace is the same as in the OP):

julia> using Zygote
@Info (Base): Precompiling Zygote [e88e6eb3-aa80-5325-afca-941959d7151f]                                                                                      
  │                                                                                                                                                           
  ╰──────────────────────────────────────────────── 
                       Mon, 21 Aug 2023 14:33:39 
 [ Info: Testing pullback method:
CodeInfo(
1$(Expr(:meta, :inline))
│   %2  = Base.getfield(args, 1)
│   %3  = Base.getfield(args, 2)
│   %4  = (Vector{Any})()
│   %5  = (Vector{Any})()
│   %6  = (Vector{Any})()
│   %7  = (Vector{Any})()
│         phi_2_1 = %3
│         phi_2_2 = 1
│         phi_2_3 = 0x01
└──       goto #2
    @ /Users/patrickaltmeyer/.julia/packages/Zygote/4rucm/src/precompile.jl:3 within `pow'
2 ┄ %12 = Zygote._pullback(ctx, Zygote.:>, phi_2_1, 0)
│   %13 = Base.getindex(%12, 1)
│   %14 = Base.getindex(%12, 2)
│         Zygote._push!(%7, phi_2_3)
│         Zygote._push!(%6, %14)
└──       goto #5 if not %13
3 ─       goto #4
    @ /Users/patrickaltmeyer/.julia/packages/Zygote/4rucm/src/precompile.jl:4 within `pow'
4 ─ %19 = Zygote._pullback(ctx, Zygote.:-, phi_2_1, 1)
│   %20 = Base.getindex(%19, 1)
│   %21 = Base.getindex(%19, 2)
│   @ /Users/patrickaltmeyer/.julia/packages/Zygote/4rucm/src/precompile.jl:5 within `pow'%22 = Zygote._pullback(ctx, Zygote.:*, phi_2_2, %2)
│   %23 = Base.getindex(%22, 1)
│   %24 = Base.getindex(%22, 2)
│         Zygote._push!(%5, %24)
│         Zygote._push!(%4, %21)
│         phi_2_1 = %20
│         phi_2_2 = %23
│         phi_2_3 = 0x02
└──       goto #2
5%31 = Base.tuple(%7, %6, %5, %4)
│   %32 = (Zygote.Pullback{Tuple{typeof(Zygote.pow), Int64, Int64}, Any})(%31)
│   %33 = Base.tuple(phi_2_2, %32)
└──       return %33
)
ERROR: LoadError: LoadError: MethodError: no method matching iterate(::Core.CodeInfo)
Closest candidates are:
  iterate(::Union{LinRange, StepRangeLen}) at range.jl:664
  iterate(::Union{LinRange, StepRangeLen}, ::Int64) at range.jl:664
  iterate(::T) where T<:Union{Base.KeySet{var"#s77", var"#s76"} where {var"#s77", var"#s76"<:Dict}, Base.ValueIterator{var"#s75"} where var"#s75"<:Dict} at dict.jl:693
  ...
Stacktrace:
[...]

@ToucheSir
Copy link
Member

Do you mind testing on a later 1.6 version? It seems to me that our CI should've caught this if LTS is failing, so perhaps some 1.6 patch release fixed internals so that Zygote works again.

@pat-alt
Copy link
Author

pat-alt commented Aug 23, 2023

I think the CI runs tests on v1.6.7, which works just fine for me locally:

julia> versioninfo()
Julia Version 1.6.7
Commit 3b76b25b64 (2022-07-19 15:11 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin21.4.0)
  CPU: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, skylake)
Environment:
  JULIA_EDITOR = code

julia> using Zygote

julia> 

@ToucheSir
Copy link
Member

That's good. I think it'd probably be easier and more robust to see if you can get a newer patch/minor release of Julia than for us to add a workaround for issues which appear to have been fixed in a patch release. I'll leave this open for a bit though in case anyone does discover the root cause and it happens to be a straightforward fix.

@pat-alt
Copy link
Author

pat-alt commented Aug 25, 2023

Sounds good, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants