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.
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.
Create the following file:
#!/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
ln -s $TMPDIR /tmp/${SLURM_JOB_ID}
export TMPDIR=/tmp/${SLURM_JOB_ID}
## 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.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.
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.
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.
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>
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
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:
#!/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
ln -s $TMPDIR /tmp/${SLURM_JOB_ID}
export TMPDIR=/tmp/${SLURM_JOB_ID}
## start an rserver instance
start-vscode-web --server-data-dir $SCRATCH/vscodedata