Prerequisites

Visual Studio Code is usually started on a localhost, which results in starting a local application to interact with the GUI.

On Ares and Athena, we cannot easily expose the GUI to the external world, as calculations are done internally on a computing node, not visible from the Internet.

Therefore, in ACC Cyfronet we have prepared start-vscode-web  a script that can be used easily with the VSCode module. In this guide, we will explore how to use it to start a VSCode web session. 

How to use on Ares?

Via SSH tunnel

The trick is to start the VSCode webserver via a job submitted to a computing node and create an SSH tunnel to access it on a local PC.

Submit a vscode-server job to a computing node

Create the following file:

vscode-server-node.slurm
#!/bin/bash
#SBATCH --partition plgrid
#SBATCH --nodes 1
#SBATCH --ntasks-per-node 6
#SBATCH --time 0:30:00
#SBATCH --job-name code-server
#SBATCH --output code-server-log-%J.txt

module load vscode/1.86.1

mkdir -p $SCRATCH/vscodedata

## start an rserver instance
start-vscode-web --server-data-dir $SCRATCH/vscodedata

Save it as  vscode-run.slurm.

Send job to queue using sbatch command on the login node of Ares

sbatch vscode-run.slurm

Wait until your job enters the running state.

To check the status of the submitted job using squeue command

squeue -j <JobID>

or all jobs of the user

squeue -u $USER

which lists all  current user jobs submitted to the queue ($USER - is an environment variable).

Common states of jobs:

  • PD - PENDING - Job is awaiting resource allocation.
  • R - RUNNING - Job currently has an allocation and is running.
  • CF - CONFIGURING  - Job has been allocated resources, but is waiting for them to become ready for use (e.g. booting). On Ares CF state could last for up to 8 minutes in case when nodes have been in power save mode.
  • CG - COMPLETING  - Job is in the process of completing. Some processes on some nodes may still be active.

Make a tunnel

When the job starts, it will create a file named code-server-log-<jobID>.txt  in the folder from which the sbatch command was called. Go to this directory and use cat  to see the contents of VSCode log file:

cat code-server-log-XXXXXXX.txt

where `XXXXXXX` is your sbatch job id. For example, for the job with ID 7123485, the file name will be  code-server-log-7123485.txt.

The output will look similar to this:

    Copy/Paste this in your local terminal to ssh tunnel with remote
    -----------------------------------------------------------------
    ssh -o ServerAliveInterval=300 -N -L 9633:172.22.17.186:9633 plguser@ares.cyfronet.pl
    -----------------------------------------------------------------
    Then use Web UI link located at the end of the log in your web browser:

*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
Web UI available at http://localhost:9633?tkn=ee8e3c6e34ad22ea267a9532635cabe8d1b5fbc59b8705e91737a6129a866b5b

At the top, we can see a command prepared for you to run in your local terminal.

Copy it and execute it in your local terminal:

ssh -o ServerAliveInterval=300 -N -L 9633:172.22.17.186:9633 plguser@ares.cyfronet.pl

Note that in your case, the ports in the tunnel command will be different. Also, instead of plguser  your username will be displayed.

Start the VSCode web GUI

Now, when the tunnel is running, you will need to open the link shown in the log file. Copy it and open it in your browser.

Web UI link from example log above: http://localhost:9633?tkn=ee8e3c6e34ad22ea267a9532635cabe8d1b5fbc59b8705e91737a6129a866b5b

Note that in your case, this URL will be different.

Preserve server data

To preserve the VSCode server data and VSCode environment, use the option --server-data-dir pointing at some directory of your choice. The location should be the same each time to save configuration. In this example, we have used  $SCRATCH/vscodedata path as the storage location.

Stop job

if you wish to end your sbatch, use scancel <JOBID> command, where JOBID is your tunnel JOBID you can look it up with hpc-jobs or squeue -u $USER commands.

scancel <JOBID>

Status of jobs and finished jobs data

To check submitted and running jobs use hpc-jobs or squeue -u $USER commands.

To check information about finished and historic jobs use hpc-jobs-history command. For example with the option "-d 30"  that command shows all user's jobs from the last 30 days. More info in hpc-jobs-history -h

hpc-jobs-history -d 30

How to use on Athena?

To use on Athena supercomputer, you need to change --partition  to plgrid-gpu-a100 and name of the module to load: VSCode/1.85.0.

The script with those modifications can be found below:

vscode-server-node-Athena.slurm
#!/bin/bash
#SBATCH --partition plgrid-gpu-a100
#SBATCH --nodes 1
#SBATCH --ntasks-per-node 6
#SBATCH --time 0:30:00
#SBATCH --job-name code-server
#SBATCH --output code-server-log-%J.txt

module load VSCode/1.85.0

mkdir -p $SCRATCH/vscodedata

## start an rserver instance
start-vscode-web --server-data-dir $SCRATCH/vscodedata
  • No labels