microsoft / vscode-jupyter

VS Code Jupyter extension
https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter
MIT License
1.25k stars 274 forks source link

Intellisense is TOO SLOW in jupyter notebooks #15711

Open ibobak opened 1 month ago

ibobak commented 1 month ago

Type: Bug

Behaviour

Intellisense is working too slowly in jupyter notebooks. Here is a video with my experience: https://youtu.be/Z4rWAvd0sbM

Note: I have a very strong PC and a plenty of free resources (44 cores, 256GB of RAM) - I believe this is not a problem.

Steps to reproduce:

  1. create a new python file, type in

    from collections import Co

    and then press Ctrl Space. The word Counter will appear in 2 seconds

  2. do the same in the notebook: it will work MUCH slower.

Diagnostic data

Output for Python in the Output panel (ViewOutput, change the drop-down the upper-right of the Output panel to Python)

``` XXX ```

Extension version: 2024.6.0 VS Code version: Code 1.89.1 (dc96b837cf6bb4af9cd736aa3af08cf8279f7685, 2024-05-07T05:16:23.416Z) OS version: Linux x64 6.4.6-060406-generic Modes:

User Settings

``` languageServer: "Pylance" ```

Installed Extensions |Extension Name|Extension Id|Version| |---|---|---| |.NET Install Tool|ms-dotnettools.vscode-dotnet-runtime|2.0.5| |autoDocstring - Python Docstring Generator|njpwerner.autodocstring|0.6.1| |Ayu Monokai|lakshits11.ayu-monokai|0.0.3| |Black Formatter|ms-python.black-formatter|2024.2.0| |C#|ms-dotnettools.csharp|2.30.28| |C# Dev Kit|ms-dotnettools.csdevkit|1.6.8| |Checkpoints|micnil.vscode-checkpoints|1.3.3| |Conventional Commits|vivaxy.vscode-conventional-commits|1.25.0| |Data Wrangler|ms-toolsai.datawrangler|1.0.2| |Dev Containers|ms-vscode-remote.remote-containers|0.362.0| |Django|batisteo.vscode-django|1.15.0| |Docker|ms-azuretools.vscode-docker|1.29.1| |Docs View|bierner.docs-view|0.1.0| |Edit csv|janisdd.vscode-edit-csv|0.9.1| |Git Extension Pack|donjayamanne.git-extension-pack|0.1.3| |Git Extension Pack (GPack)|SeyyedKhandon.gpack|2.0.0| |Git File History|pomber.git-file-history|1.0.1| |Git History|donjayamanne.githistory|0.6.20| |Github Light Theme|Hyzeta.vscode-theme-github-light|7.14.2| |GitHub Plus Theme|thenikso.github-plus-theme|1.4.3| |GitHub Theme|GitHub.github-vscode-theme|6.3.4| |gitignore|codezombiech.gitignore|0.9.0| |GitLens — Git supercharged|eamodio.gitlens|15.0.4| |Grey Light+ Pro|elanzalaco.grey-light-plus-pro|0.0.1| |IntelliCode for C# Dev Kit|ms-dotnettools.vscodeintellicode-csharp|2.1.11| |JavaScript Debugger|ms-vscode.js-debug|1.89.0| |JavaScript Debugger Companion Extension|ms-vscode.js-debug-companion|1.1.2| |Jinja|wholroyd.jinja|0.0.8| |julia light|JuliaLight.julia-light|0.4.0| |Jupyter|ms-toolsai.jupyter|2024.4.0| |Jupyter Cell Tags|ms-toolsai.vscode-jupyter-cell-tags|0.1.9| |Jupyter Keymap|ms-toolsai.jupyter-keymap|1.1.2| |Jupyter Notebook Renderers|ms-toolsai.jupyter-renderers|1.0.17| |Jupyter Slide Show|ms-toolsai.vscode-jupyter-slideshow|0.1.6| |Jupyter Theme|sam-the-programmer.jupyter-theme|0.1.3| |JupyterLab Light Theme|MiguelCorralJr.jupyterlab-light-theme|0.1.1| |Light Pink Theme|mgwg.light-pink-theme|0.6.0| |Markdown All in One|yzhang.markdown-all-in-one|3.6.2| |Markdown Preview Enhanced|shd101wyy.markdown-preview-enhanced|0.8.13| |MZ Light Grey Theme|Malaz-YI.mz-light-grey|2.1.1| |Night Owl|sdras.night-owl|2.0.1| |Notepad++ color themes|ShayanAhmedKhan.notepadpp-color-theme|0.2.0| |Numbered Bookmarks|alefragnani.numbered-bookmarks|8.4.0| |One Dark Pro|zhuangtongfa.material-theme|3.17.2| |One Dark Theme|mskelton.one-dark-theme|1.14.2| |Open in GitHub, Bitbucket, Gitlab, VisualStudio.com !|ziyasal.vscode-open-in-github|1.3.6| |Path Intellisense|christian-kohler.path-intellisense|2.8.5| |Project Manager|alefragnani.project-manager|12.8.0| |Pylance|ms-python.vscode-pylance|2024.5.1| |Pylint|ms-python.pylint|2023.10.1| |Python|ms-python.python|2024.6.0| |Python Debugger|ms-python.debugpy|2024.6.0| |Python Environment Manager|donjayamanne.python-environment-manager|1.2.4| |Python Extension Pack|donjayamanne.python-extension-pack|1.7.0| |Python Indent|KevinRose.vsc-python-indent|1.18.0| |Remote - SSH|ms-vscode-remote.remote-ssh|0.110.1| |Remote - SSH: Editing Configuration Files|ms-vscode-remote.remote-ssh-edit|0.86.0| |Remote - Tunnels|ms-vscode.remote-server|1.5.1| |Remote Development|ms-vscode-remote.vscode-remote-extensionpack|0.25.0| |Remote Explorer|ms-vscode.remote-explorer|0.4.3| |Studio Icons|jtlowe.vscode-icon-theme|1.6.6| |Table Visualizer for JavaScript Profiles|ms-vscode.vscode-js-profile-table|1.0.9| |Visual Studio Keymap|ms-vscode.vs-keybindings|0.2.1| |WSL|ms-vscode-remote.remote-wsl|0.88.2| |Zoomer|anthonyattard.zoomer|0.3.1|
System Info |Item|Value| |---|---| |CPUs|Intel(R) Xeon(R) CPU E5-2696 v4 @ 2.20GHz (88 x 1895)| |GPU Status|2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_graphite: disabled_off
video_decode: enabled
video_encode: disabled_software
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off| |Load (avg)|5, 5, 4| |Memory (System)|251.76GB (217.05GB free)| |Process Argv|--crash-reporter-id 27d42247-63fb-4d9e-9cb0-87d9974843dc| |Screen Reader|no| |VM|50%| |DESKTOP_SESSION|ubuntu-xorg| |XDG_CURRENT_DESKTOP|Unity| |XDG_SESSION_DESKTOP|ubuntu-xorg| |XDG_SESSION_TYPE|x11|
A/B Experiments ``` vsliv368:30146709 vspor879:30202332 vspor708:30202333 vspor363:30204092 vscoreces:30445986 vscod805:30301674 binariesv615:30325510 vsaa593:30376534 py29gd2263:31024239 c4g48928:30535728 azure-dev_surveyone:30548225 2i9eh265:30646982 962ge761:30959799 pythongtdpath:30769146 welcomedialog:30910333 pythonidxpt:30866567 pythonnoceb:30805159 asynctok:30898717 pythontestfixt:30902429 pythonregdiag2:30936856 pythonmypyd1:30879173 pythoncet0:30885854 h48ei257:31000450 pythontbext0:30879054 accentitlementst:30995554 dsvsc016:30899300 dsvsc017:30899301 dsvsc018:30899302 cppperfnew:31000557 dsvsc020:30976470 pythonait:31006305 chatpanelt:31048053 dsvsc021:30996838 9c06g630:31013171 pythoncenvpt:31049070 fchga941:31046352 pythonprt:31047983 dwnewjupyter:31046869 26j00206:31048877 ```
ibobak commented 1 month ago

Feel free to ask me to run any diagnostic tool - whatever. I can run collection of stacktraces - whatever you ask to, just specify the way how to collect them.

ibobak commented 1 month ago

Besides, tab completion is also working slowly (reporting this here, because I believe this is the same problem): image image

rchiodo commented 1 month ago

Thanks for the issue. My guess is jupyter is causing a slowdown here when trying to get completions from the kernel.

The easiest way to tell that is try the same thing in your notebook without running any cells first. Completions should still work and be the same speed as they are in a regular python file.

If the notebook is still slower, we have commands that allow us to profile Pylance on your machine (and then you send us the profile), but we should try it without a kernel first.

ibobak commented 1 month ago

After I read your last message, I did this:

without re-starting of anything and without stopping the kernel, I looked at what is going with the CPU. And I see this: image image

Then I stopped the notebook kernel - it did not help, CPU usage was still there.

Then I closed the VS Code, launched it again, opened the same notebook, and without running any cells I typed

from col

and just IMMEDIATELY after that I saw "collections" in dropdown. Pressing "tab" worked fine: it autocompleted it. Then a hint for "Coun" allowed to select "Counter" from dropdown, and that was the speed which I want.

The primary question is this: what the hell happened that is "stuck" in doing something in background, consuming a whole CPU?

I believe that having a profiler at hand would help me a lot. If you can send me instructions how to run it - please, send. Next time it will stuck with usage a whole core, I will immediately run the profiler and we will see what it was doing.

rchiodo commented 1 month ago

Our profiler can be run using the Pylance : Start Profiling and Pylance : Stop Profiling commands. Those should generate text files in your temp folder that you can send to us.

Unfortunately, the profiler we have only profiles the Pylance code. From your response it sounds like the slowdown here is in the Jupyter kernel.

I'm going to transfer this to the jupyter team.

ibobak commented 1 month ago

Next time I will profile it and will send you the logs which I will find in the temp folder (I suppose it will be /tmp in Linux)

As to jupyter: I did not find a similar command there, so if you could ask that team of how to profile it - I'd be grateful.