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

Very sluggish autocomplete with PyCall #54131

Open
chrstphrbrns opened this issue Apr 18, 2024 · 10 comments
Open

Very sluggish autocomplete with PyCall #54131

chrstphrbrns opened this issue Apr 18, 2024 · 10 comments

Comments

@chrstphrbrns
Copy link
Contributor

julia> VERSION
v"1.12.0-DEV.357"

julia> using PyCall

julia> nn=pyimport("torch.nn")
PyObject <module 'torch.nn' from '/usr/local/lib/python3.10/dist-packages/torch/nn/__init__.py'>

julia> nn.Sequential(     # every character typed after this point causes the REPL to hang for ~30 seconds at 100% CPU
@PallHaraldsson
Copy link
Contributor

Thanks, it's good to know in case this is a regression, but are you just running out of (virtual) memory? Do you see OOM in syslog? I do not...

On my 1.12.0-DEV.361 on Linux (with 32 GB) I get no slugginess on the second try:

julia> nn.Sequential(
(::Any)( too many methods, use SHIFT-TAB to show )

but then later sluggy, and the first time around sluggy right away.

Had to kill julia in both cases and then (in first case) I got:

julia> nn.Sequential(

(::Any)( too many methods, use SHIFT-TAB to show )
julia> nn.Sequential(d
[2291625] signal 15: Terminated
in expression starting at REPL[2]:1
jl_is_concrete_type at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:1742 [inlined]
obviously_disjoint at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:469
obviously_disjoint at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:467 [inlined]
intersect_types at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:4164
ijl_has_empty_intersection at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:4188
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3483
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
ml_matches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3911
ml_matches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3687 [inlined]
ijl_matching_methods at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:2309
_methods_by_ftype at ./reflection.jl:1176
complete_methods! at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:856
complete_keyword_argument at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:1016
completions at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:1327
complete_line at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:655
jfptr_complete_line_9990 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
check_for_hint at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:383
#139 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2519
jl_apply at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:2185 [inlined]
jl_f__call_latest at /cache/build/builder-amdci5-4/julialang/julia-master/src/builtins.c:875
#invokelatest#2 at ./essentials.jl:1030 [inlined]
invokelatest at ./essentials.jl:1027 [inlined]
#27 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:1703
jfptr_YY.27_10591 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
prompt! at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2840
run_interface at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2742
jfptr_run_interface_11096 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
run_frontend at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:1446
#75 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:496
jfptr_YY.75_12468 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
jl_apply at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:2185 [inlined]
start_task at /cache/build/builder-amdci5-4/julialang/julia-master/src/task.c:1202
unknown function (ip: (nil))
Allocations: 14553441 (Pool: 14550738; Big: 2703); GC: 11
Terminated

then next:

julia> nn.Sequential(
(::Any)( too many methods, use SHIFT-TAB to show )
julia> nn.Sequential(
(::Any)( too many methods, use SHIFT-TAB to show )
julia> nn.Sequential(
(::Any)( too many methods, use SHIFT-TAB to show )
julia> nn.Sequential(
[2292138] signal 15: Terminated
in expression starting at REPL[5]:1
jl_vararg_kind at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia_internal.h:883 [inlined]
obvious_subtype at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:1962
ijl_subtype_env at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:2131
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3449
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
ml_matches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3911
ml_matches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3687 [inlined]
ijl_matching_methods at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:2309
_methods_by_ftype at ./reflection.jl:1176
complete_methods! at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:856
complete_methods at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:739 [inlined]
completions at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPLCompletions.jl:1317
complete_line at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:655
jfptr_complete_line_9990 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
complete_line at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:420
jfptr_complete_line_9975 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
complete_line at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:367
shift_tab_completion at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2420 [inlined]
#115 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2459
jl_apply at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:2185 [inlined]
jl_f__call_latest at /cache/build/builder-amdci5-4/julialang/julia-master/src/builtins.c:875
#invokelatest#2 at ./essentials.jl:1030 [inlined]
invokelatest at ./essentials.jl:1027 [inlined]
#27 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:1703
unknown function (ip: 0x7f7de2905fc9)
prompt! at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2840
run_interface at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2742
jfptr_run_interface_11096 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
run_frontend at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:1446
#75 at /cache/build/builder-amdci5-4/julialang/julia-master/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:496
jfptr_YY.75_12468 at /home/pharaldsson/.julia/juliaup/julia-nightly/share/julia/compiled/v1.12/REPL/u0gqU_nWBMK.so (unknown line)
jl_apply at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:2185 [inlined]
start_task at /cache/build/builder-amdci5-4/julialang/julia-master/src/task.c:1202
unknown function (ip: (nil))
Allocations: 3695619 (Pool: 3695490; Big: 129); GC: 4
Terminated

The third time it seemed to work though...

I also suggest you try PythonCall.jl both should though likely be as (non)sluggy.

I installed it, and strangly didn't get latest version:
⌃ [6099a3de] + PythonCall v0.9.16
[..]
⌃ [f8abcde7] + micromamba_jll v1.4.9+0

[I could update both to latest, noting was blocking needed deleteing, which is strange, then why not get latest right away...?]

Then I (predictably got):

julia> nn=pyimport("torch.nn")
ERROR: Python: ModuleNotFoundError: No module named 'torch'

julia> using CondaPkg; CondaPkg.add("torch")  # thought this part would fix, or with pytorch(?) but either way got:
error    libmamba Could not solve for environment specs
    The following package could not be installed
    └─ torch *  does not exist (perhaps a typo or a missing channel).
critical libmamba Could not solve for environment specs

@IanButterworth
Copy link
Sponsor Member

Is it also slow for tab completion on julia 1.10?

@chrstphrbrns
Copy link
Contributor Author

No problems with 1.10

@IanButterworth
Copy link
Sponsor Member

As in pressing tab on the same partial completion is fast on 1.10, but complete hinting at the same position is slow on 1.12?

@chrstphrbrns
Copy link
Contributor Author

Right--same conditions, different behavior

To be clear, this doesn't involve pressing tab; any alpha character typed after opening the paren results in the delay. If the first character after the paren is a left bracket--eg, nn.Sequential([--that seems to somehow reset the parser

julia> nn.Sequential(   # delay after the next alpha character

julia> nn.Sequential([nn.Linear(   # delay after the next alpha character

@IanButterworth
Copy link
Sponsor Member

To be clear, this doesn't involve pressing tab;

What I'm asking for should involve pressing tab in 1.10.

To be explicit.. find an alpha char that causes a single autocomplete such that tab complete returns a single result.

Let's say that's a and it completes to apple.

in 1.10

julia> nn.Sequential(a <tab>

in 1.12

julia> nn.Sequential(a

Do the times in which it takes for apple to appear compare on 1.10 and 1.12?

@chrstphrbrns
Copy link
Contributor Author

Do the times in which it takes for apple to appear compare on 1.10 and 1.12?

Yes

@IanButterworth
Copy link
Sponsor Member

Ok so completing in this case hasn't slowed down. It's just that it's painful on 1.11 because of the hints.

A profile would be helpful.

@KristofferC
Copy link
Sponsor Member

The stacktrace on abort

(::Any)( too many methods, use SHIFT-TAB to show )
julia> nn.Sequential(d
[2291625] signal 15: Terminated
in expression starting at REPL[2]:1
jl_is_concrete_type at /cache/build/builder-amdci5-4/julialang/julia-master/src/julia.h:1742 [inlined]
obviously_disjoint at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:469
obviously_disjoint at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:467 [inlined]
intersect_types at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:4164
ijl_has_empty_intersection at /cache/build/builder-amdci5-4/julialang/julia-master/src/subtype.c:4188
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3483
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/src/gf.c:3503
sort_mlmatches at /cache/build/builder-amdci5-4/julialang/julia-master/sr

suggests it is doing type intersection.

@vtjnash
Copy link
Sponsor Member

vtjnash commented Apr 19, 2024

There is supposed to be a limit in complete_methods! on how many methods to return to preserve performance here (even if a package adds too many methods to a function). Did that get changed or should it be even lower?

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

No branches or pull requests

5 participants