Visual Studio Code

Revision as of 19:42, 12 September 2024 by Pinto (talk | contribs)


Other languages:

Visual Studio Code is an integrated development environment (IDE) from Microsoft which can be used for remote development on our clusters over SSH. In this context, users can run the graphical interface of Visual Studio Code locally, on their personal computer, while connecting to a cluster where the source code is located and where the debugging and testing operations are being executed. While Visual Studio Code may be used for development in a variety of programming languages, in this page we will focus on its use with Python.

When using an IDE like Visual Studio Code, it's important to distinguish what sort of action you're performing, even if all of them take place within the context of the IDE. Editing a Python script or any other text file of reasonable size (up to a few thousand lines) is a very light-weight process which requires little processing power or memory but an IDE offers you numerous other possibilities, including the ability to debug your script, for example. In this case, the IDE is now executing your Python code on the remote server and until the script crashes because of a bug, it may well consume an entire CPU core or even several if the script or the libraries which it uses are multithreaded.

Note that if you are using Visual Studio Code with Python, you should avoid installing Conda and its variants as they are poorly adapted to our cluster environment. Alternatives to the use of Conda include Python virtual environments and Apptainer.

Configuring remote access

Configuration of your SSH keys

  1. If not done already, generate your SSH key. For example, we will name it ~/.ssh/ccdb.
  2. If not done already, install your public SSH key on CCDB.
  3. Copy the same public key to ~/.ssh/authorized_keys on the remote cluster (create this file if it does not exist). That is because compute nodes do not have access to the public keys that are installed on CCDB.

SSH configuration file

VS Code works well with your local SSH configuration file (~/.ssh/config). Here are the recommended options :

File : ~/.ssh/config

Host *
  ServerAliveInterval 300

Host beluga cedar graham narval
  HostName %h.alliancecan.ca
  IdentityFile ~/.ssh/ccdb
  User your_username

Host bc????? bg????? bl?????
  ProxyJump beluga
  IdentityFile ~/.ssh/ccdb
  User your_username

Host cdr*
  ProxyJump cedar
  IdentityFile ~/.ssh/ccdb
  User your_username

Host gra1* gra2* gra3* gra4* gra5* gra6* gra7* gra8* gra9*
  ProxyJump graham
  IdentityFile ~/.ssh/ccdb
  User your_username

Host nc????? ng????? nl?????
  ProxyJump narval
  IdentityFile ~/.ssh/ccdb
  User your_username


First connection with VS Code

Remote access and code editing

https://carleton.ca/scs/2023/vscode-remote-access-and-code-editing/

Because some clusters do not provide access to the internet from compute nodes, the installation of VS Code Server must be done prior to using a remote connection to any compute node. Therefore, in VS Code, a first connection to any frontal node is required - select either :

  • beluga
  • cedar
  • graham
  • narval
SSH Passphrase prompt

Note : you will be prompted many times for your SSH key passphrase. If not, make sure to copy your SSH public key as described above in point 3 under Configuration of your SSH keys.

That first connection will automatically install VS Code Server in ~/.vscode-server/. The installation can take up to 5 minutes. Once done, close the connection.

Connection with MFA enabled

When connecting, click on "details" to see the prompt for the 2nd factor in the Terminal

If the multifactor authentication is enabled, you will need to check the "details" of the connection, which will bring you to the VS Code Terminal in which you may be prompted for your 2nd factor of authentication.

Closing your connection

When closing the local VS Code window, the remote process of VS Code Server may keep running in the background, which tends to accumulate orphan processes on that login node. Not only that, but your next connection may connect to a different login node, which can cause issues and confusion. To cleanly close a connection, click on the bottom-left corner of VS Code and select Close Remote Connection at the top of the window.

Connection to a compute node

Connection procedure:

  1. Make sure VS Code Server is installed as described in the previous sections.
  2. In an external SSH client connected to the cluster, start a new interactive job (with salloc).
    1. Important: make sure to request enough memory (at least 2000M).
    2. Take note of the allocated compute node name.
    3. If you will need to work with SLURM_* environment variables in VS Code, save them all in a source file:
      Question.png
      [name@server ~]$ env | grep SLURM_ | sed -e 's/^\(.*\)=\(.*\)$/export \1="\2"/g' > slurm_var.sh
      
  3. In VS Code, start a new remote session with the name of the allocated compute node:
    1. Press F1 or Ctrl+Shift+P to start the command prompt > in the Command Palette.
    2. Start typing Remote and select Remote-SSH: Connect to Host... > Remote-SSH: Connect to Host...
    3. Enter the noted compute node name.
      1. If you get prompted for the type of operating system, select Linux
  4. If you need to work with SLURM_* environment variables, navigate to the working directory in a VS Code terminal and source the slurm_var.sh file:
    Question.png
    [name@server ~]$ source slurm_var.sh
    

Troubleshooting

The remote session does not work anymore

Connection problems

The newest versions of VS Code Server no longer support CentOS 7, which affects connections to Graham and Niagara. Users can update their version of VS Code to 1.86.1 or later in order to connect, but will see warnings about the unsupported operating system.



  • Note: an older version of VS Code still works through JupyterHub.

Because VS Code is intended for a different use case than developing on our clusters, having several instances of VS Code Server running on different login nodes can lead to issues. To fix them:

  • Connect to all login nodes and stop (with kill <PID>) all VS Code processes you see in the output of ps aux | grep $USER or top -u $USER.
  • If the above does not fix the problem, carefully delete the content of the ~/.vscode-server directory, and then reconnect for a fresh installation of VS Code Server.
  • We recently determined that in the last week of August/2024 a bug with the Remote-SSH extension for VSCode was introduced. As far as we could ascertain, scp is not working as expected. That is not our software, this is a Microsoft product, so we offer best effort support.
Here is some more info on the bug:
https://github.com/microsoft/vscode-remote-release/issues/10174#issuecomment-2316629187
One suggestion is to just downgraded VSCode to 1.92
Another suggestion of a workaround using wget:
https://github.com/microsoft/vscode-remote-release/issues/10174#issuecomment-2316093550
Add "remote.SSH.useCurlAndWgetConfigurationFiles: true" to Remote-SSH settings.
And here is another suggestion using the "Remote Tunnels" extension. 
You can run code tunnel (google vscode cli and download it) and use github or microsoft account (oauth) and connect to a remote vscode server, here a niagara login node. You can have all the "benefits" of not using mfa as long as your server is running:
https://code.visualstudio.com/docs/remote/tunnels

See also