<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.gacrc.uga.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Moses</id>
	<title>Research Computing Center Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gacrc.uga.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Moses"/>
	<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/wiki/Special:Contributions/Moses"/>
	<updated>2026-08-19T23:05:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Training&amp;diff=23137</id>
		<title>Training</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Training&amp;diff=23137"/>
		<updated>2026-08-11T15:31:56Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==GACRC Training==&lt;br /&gt;
&lt;br /&gt;
The GACRC regularly hosts training sessions on a number of subjects relevant to the use of our computational and storage resources. Scheduled trainings will be announced through the GACRC mailing list. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: New users are required to attend a Sapelo2 cluster introductory training session and information about that will be sent once an account is requested.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Regular Training Announcement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;September 2026&#039;&#039;&#039;, the GACRC is hosting 9 training sessions listed below. These training workshops will be offered remotely via Zoom Meeting. Detailed instructions for joining the Zoom meeting will be sent to your UGA email account before each training session you register for.&lt;br /&gt;
&lt;br /&gt;
We will offer:&lt;br /&gt;
&lt;br /&gt;
1. Linux training for Linux-inexperienced cluster new users (3 sessions)&lt;br /&gt;
&lt;br /&gt;
2. Sapelo2 cluster new user training (3 sessions)&lt;br /&gt;
&lt;br /&gt;
3. Using Sapelo2 Cluster at the GACRC, Part II (1 session)&lt;br /&gt;
&lt;br /&gt;
4. Installing Software Packages in Virtual Environments on Sapelo2 (1 session)&lt;br /&gt;
&lt;br /&gt;
5. Job Parallelization with GNU Parallel and Slurm Arrays (1 session)&lt;br /&gt;
&lt;br /&gt;
==Event Schedule==&lt;br /&gt;
&lt;br /&gt;
This section describes the training workshops that we offer, along with the sessions that are currently scheduled.&lt;br /&gt;
&lt;br /&gt;
===Sapelo2 Cluster New User Training===&lt;br /&gt;
&lt;br /&gt;
This mandatory training consists of an overview of the structure of Sapelo2 as well as hands-on practice submitting a job along with guidance and best practices when using the Sapelo2 cluster. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisites:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*Linux basics. A Linux-inexperienced user must complete a prerequisite Linux training for Linux-inexperienced cluster new users.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Workshop Training Goals:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*Understand the layout of Sapelo2&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 file systems&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 partitions&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 software environment&lt;br /&gt;
&lt;br /&gt;
*Understand how to request computing resources and submit a computational batch job following the Sapelo2 cluster general workflow&lt;br /&gt;
&lt;br /&gt;
*Understand how to initiate an interactive job&lt;br /&gt;
&lt;br /&gt;
*Understand how to transfer files to and from the cluster&lt;br /&gt;
&lt;br /&gt;
*Understand how to get support from GACRC support team when you have any issues on cluster&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time &lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|August 20th, Thursday, 2:00 PM - 4:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|September 11th, Friday, 2:00 PM - 4:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|September 16th, Wednesday, 2:00 PM - 4:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|September 24th, Thursday, 2:00 PM - 4:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linux Training for Linux-inexperienced Cluster New Users===&lt;br /&gt;
The Sapelo2 High Performance Computing (HPC) cluster runs a headless Linux distribution as the operating system on each of its constituent nodes. The term headless refers to the fact that these nodes do not have a desktop graphical user interface (GUI) installed by default. Graphical desktop environments consume resources that analyses could otherwise use, so users employ a command-line interface (CLI) instead. To interact with these resources, users connect to a remote terminal via SSH and execute commands.&lt;br /&gt;
&lt;br /&gt;
The Linux Training workshop provides hands-on practice of the fundamental Linux commands necessary to interact with HPC resources.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Please watch the introductory videos on Linux, basic Linux terms, and Linux Paths and Directories (total ~17 minutes) &#039;&#039;&#039;before attending the training workshop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_81u2kfi2/176125031 Linux]&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_ol51cuyn/176125031 basic Linux terms]&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_wdyxhgdg/176125031 Linux Paths and Directories]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamental concepts of Linux working environment (filesystem hierarchy, path, PATH, etc.)  &lt;br /&gt;
&lt;br /&gt;
2. Know how to use Linux common commands (ls, cd, pwd, cat, more, nano, mkdir, rm, cp, mv, etc.)&lt;br /&gt;
&lt;br /&gt;
3. Understand what is Linux bash shell and know how to make a simple Linux script and run it in Linux environment&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|August 18th, Tuesday, 1:00 PM - 3:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|September 9th, Wednesday, 1:00 PM - 3:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|September 14th, Monday, 1:00 PM - 3:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|September 22nd, Tuesday, 1:00 PM - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using Sapelo2 Cluster at the GACRC, Part II ===&lt;br /&gt;
This workshop will cover high-performance computing on Sapelo2, including job scheduling, resource requests (CPU, memory, GPU), and techniques for optimizing job performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisites:&#039;&#039;&#039;&lt;br /&gt;
*Linux basics. A Linux-inexperienced user must complete a prerequisite Linux training for Linux-inexperienced cluster new users.&lt;br /&gt;
*Sapelo2 cluster new user training.  Fundamental HPC and Sapelo2 knowledge is required for this advanced Sapelo2 workshop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Learn about high-performance computing framework&lt;br /&gt;
&lt;br /&gt;
2. Why is my job pending? How can I get my job to start sooner? How to find available computing resources on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
3. How to request computing resources such as nodes, CPU cores, memory, GPU device, etc. to run serial, threaded, MPI, and GPU jobs on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
4. How can I make my job run more efficiently (through the correct use of software and hardware)?&lt;br /&gt;
&lt;br /&gt;
5. A quick intro to MPI library and how to compile/run MPI jobs on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC, Part II&lt;br /&gt;
|September 18th, Friday, 1:00 PM - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Installing Software Packages in Virtual Environments on Sapelo2 ===&lt;br /&gt;
This workshop will cover the basics of virtual environments as well as provide practical guidance and best practices for using virtual environments on the Sapelo2 cluster. Participants will learn the basics of creating and configuring virtual environments, how to install software packages in both a Conda virtual environment and a Python virtual environment, and manage dependencies in their environments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Must already have strong understanding of the Linux environment and Sapelo2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Learn how to create a virtual environment on Sapelo2  &lt;br /&gt;
&lt;br /&gt;
2. Be able to install software packages into both Conda and Python virtual environments&lt;br /&gt;
&lt;br /&gt;
3. Understand how to manage dependencies of their virtual environments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Installing Software Packages in Virtual Environments on Sapelo2&lt;br /&gt;
|September 23rd, Wednesday, 2:00 PM - 2:45 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Job Parallelization with GNU Parallel and Slurm Arrays ===&lt;br /&gt;
Learn how to run multiple commands in parallel using GNU Parallel and Slurm Arrays. These tools greatly reduce the runtime of certain types of jobs by running multiple instances of the same command in parallel. The workshop focuses on problems that involve executing the same command on multiple different inputs. This workshop is intended for users comfortable writing job submission scripts and using a command line. Concurrent and parallel programming techniques are not covered in this workshop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Must already have strong understanding of the Linux environment and Sapelo2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand which jobs benefit from GNU Parallel and Slurm Arrays&lt;br /&gt;
&lt;br /&gt;
2. Use GNU Parallel and Slurm Arrays to parallelize jobs&lt;br /&gt;
&lt;br /&gt;
3. Understand the differences and similarities between GNU Parallel and Slurm Arrays &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Job Parallelization with GNU Parallel and Slurm Arrays&lt;br /&gt;
|September 25th, Friday, 1:00 PM - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Python Basics===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand Python scientific modules and distributions&lt;br /&gt;
&lt;br /&gt;
2. Understand Python general lexical conventions; Python built-in data types, like string, list, tuple, dictionary, etc.&lt;br /&gt;
&lt;br /&gt;
3. Understand Python programming structures and procedural programming using functions&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Python Basics I||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
| Python Basics II||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== R Basics===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamentals of R language, e.g. R general lexical conventions, data types, functions, and packages. Part 2 will introduce loops and functions.&lt;br /&gt;
&lt;br /&gt;
2. Be able to manipulate and create data frames using built in functions and the dplyr package.&lt;br /&gt;
&lt;br /&gt;
3. Interact with your file system and submit R code as a batch job to Sapelo 2.  &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time &lt;br /&gt;
|-&lt;br /&gt;
|R Basics I||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|R Basics II||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Conda===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamentals of conda environment&lt;br /&gt;
&lt;br /&gt;
2. Use conda to create and configure your own virtual environments&lt;br /&gt;
&lt;br /&gt;
3. Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Conda Basics ||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to Register==&lt;br /&gt;
&lt;br /&gt;
The training workshops &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC&#039;&#039;&#039; and &#039;&#039;&#039;Use Linux on Cluster&#039;&#039;&#039; are &#039;&#039;&#039;ONLY&#039;&#039;&#039; offered to &#039;&#039;&#039;new users&#039;&#039;&#039; who need user accounts on the GACRC Sapelo2 cluster or current Sapelo2 users seeking a refresher. If you would like to use the cluster, please ask your group PI/UGA faculty member to send us an account creation request for you, using the  [https://uga.teamdynamix.com/TDClient/Requests/ServiceDet?ID=25839  GACRC User Account Request Form].&lt;br /&gt;
 &lt;br /&gt;
If you would like to attend the &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC, Part II&#039;&#039;&#039;, the &#039;&#039;&#039;Installing Software Packages in Virtual Environments on Sapelo2&#039;&#039;&#039;, and/or the &#039;&#039;&#039;Job Parallelization with GNU Parallel and Slurm Arrays&#039;&#039;&#039; training workshops, please send us a request using the [https://uga.teamdynamix.com/TDClient/Requests/ServiceDet?ID=25852 GACRC Training Request Form]. In your request, please tell us which session(s) you would like to attend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Topic Introduction==&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Sap2test cluster migration training&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus:  Slurm queueing system, including Slurm job commands, job environment variables, and job submission headers, etc.&lt;br /&gt;
&lt;br /&gt;
The new software environment on Sap2test&lt;br /&gt;
&lt;br /&gt;
Other important topics related to Sap2test working environment&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Sapelo2 HPC cluster and computational batch job submission workflow&lt;br /&gt;
&lt;br /&gt;
Cluster&#039;s storage environment&lt;br /&gt;
&lt;br /&gt;
Computational queues on cluster&lt;br /&gt;
&lt;br /&gt;
Software environment&lt;br /&gt;
&lt;br /&gt;
How to submit computational batch jobs&lt;br /&gt;
&lt;br /&gt;
Other tips and guidelines for users&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC, Part II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: More topics on how to use Sapelo2 cluster&lt;br /&gt;
&lt;br /&gt;
Learn about high-performance computing framework&lt;br /&gt;
&lt;br /&gt;
Why is my job pending? How can I get my job to start sooner? How to find available computing resources on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
How to request computing resources such as nodes, CPU cores, memory, GPU device, etc. to run serial, threaded, MPI, and GPU jobs on Sapelo2? &lt;br /&gt;
&lt;br /&gt;
How can I make my job run more efficiently (through the correct use of software and hardware)?&lt;br /&gt;
&lt;br /&gt;
A quick intro to MPI library and how to compile/run MPI jobs on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Use Linux on Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Linux OS fundamentals&lt;br /&gt;
&lt;br /&gt;
Linux common commands, filesystem, and shell&lt;br /&gt;
&lt;br /&gt;
Linux shell scripting basics&lt;br /&gt;
&lt;br /&gt;
Common Linux utilities, e.g., grep, sed, find, sort, and awk, etc.&lt;br /&gt;
&lt;br /&gt;
Linux Hands-on practice&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Python Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: Python language overview, scientific modules and distributions&lt;br /&gt;
&lt;br /&gt;
Python general lexical conventions&lt;br /&gt;
&lt;br /&gt;
Basic built-in data types, like string, list, tuple, dictionary, etc.&lt;br /&gt;
&lt;br /&gt;
Focus of II: Programming structures: control flow and loop&lt;br /&gt;
&lt;br /&gt;
Function: procedural programming with examples, lambda expression, factory function and generator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;R Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: R language overview,general lexical conventions, data types, functions, and packages.&lt;br /&gt;
&lt;br /&gt;
Basic built-in data types, like string, numeric, list, dataframe etc. Using the dplyr package.&lt;br /&gt;
&lt;br /&gt;
Focus of II: Programming structures: control flow, loops and functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Python on GACRC Sapelo2 Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Install Python packages/modules in a user&#039;s home directory on Sapelo2 cluster&lt;br /&gt;
&lt;br /&gt;
Python versions installed on Sapelo2&lt;br /&gt;
&lt;br /&gt;
Python environment details on Sapelo2 &lt;br /&gt;
&lt;br /&gt;
How to know a Python package is installed or not on Sapelo2&lt;br /&gt;
&lt;br /&gt;
How to install a Python package in user&#039;s home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Do It Yourself: Using Conda to create and run python environments to suit your computing needs effortlessly!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Use conda to create and configure your own python virtual environments; Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
What is Conda and its environment&lt;br /&gt;
&lt;br /&gt;
Conda on Sapelo2&lt;br /&gt;
&lt;br /&gt;
Use conda to create and configure your own python virtual environments&lt;br /&gt;
&lt;br /&gt;
Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;How to submit and run jobs efficiently and correctly on Sapelo2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Sapelo2 cluster general workflow and correct computing resource requesting&lt;br /&gt;
&lt;br /&gt;
Overview of Sapelo2 cluster with reference tables and operational diagrams&lt;br /&gt;
&lt;br /&gt;
Sapelo2 batch job submission workflow taking global scratch as job working space&lt;br /&gt;
&lt;br /&gt;
How to request computing resources correctly &lt;br /&gt;
&lt;br /&gt;
How to run pipeline tasks and what are advantages/disadvantages of different options&lt;br /&gt;
&lt;br /&gt;
Sapelo2 cluster guideline and practical tips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;GACRC Storage Environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Overview of Linux common commands related to file and folder operations&lt;br /&gt;
&lt;br /&gt;
Overview of the storage environment of zcluster and Sapelo cluster at GACRC&lt;br /&gt;
&lt;br /&gt;
How to transfer data between local and GACRC storage&lt;br /&gt;
&lt;br /&gt;
New file transfer node xfer2 and how to use it to transfer data between zcluster and the new cluster&lt;br /&gt;
&lt;br /&gt;
GACRC suggestions on good practices on GACRC storage, etc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;NCBI Blast application on sapelo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Introduction to BLAST&lt;br /&gt;
&lt;br /&gt;
BLAST job submission to sapelo&lt;br /&gt;
&lt;br /&gt;
Advantages &amp;amp; Disadvantages: NCBI website vs run at sapelo.&lt;br /&gt;
&lt;br /&gt;
Understand BLAST output&lt;br /&gt;
&lt;br /&gt;
Troubleshooting the BLAST results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;NGS application overview at GACRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Overview of Bioinformatics software available on HPC clusters at GACRC&lt;br /&gt;
&lt;br /&gt;
It’s a brave new world – NGS and its Applications  &lt;br /&gt;
&lt;br /&gt;
Hardware, Software, Databases available at GACRC&lt;br /&gt;
&lt;br /&gt;
NGS project: Logistics and resource considerations&lt;br /&gt;
&lt;br /&gt;
Best practices, common mistakes, troubleshooting and getting help from GACRC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Perl Language Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: Overview of Perl language, &lt;br /&gt;
&lt;br /&gt;
Perl general scripting style&lt;br /&gt;
&lt;br /&gt;
Perl fundamental data types&lt;br /&gt;
&lt;br /&gt;
Focus of II: Program structure: control flow and loop&lt;br /&gt;
&lt;br /&gt;
Perl subroutine&lt;br /&gt;
&lt;br /&gt;
Perl I/O&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download==&lt;br /&gt;
&lt;br /&gt;
This section provides the slides that we use for our current workshops and material used for several of our past training events and presentations.&lt;br /&gt;
 &lt;br /&gt;
===Sapelo2 Cluster Training===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Media:GACRC_Sapelo2_cluster_new_user_training_workshop_v10.8.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teaching Cluster Training===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GACRC-Teaching-cluster-new-user-training-workshop-Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Linux Training for New Cluster Users===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Linux_Training_For_New_Users_Of_Cluster_Suchi_04252019.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Installing Software Packages in Virtual Environments on Sapelo2===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GACRC_virtual_environments_training_v1.2.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Job Parallelization with GNU Parallel and Slurm Arrays===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GNU_Parallel_and_SLURM_Arrays_v1.1.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Python Basics===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Language_Basics_I_v5.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Language_Basics_II_v5.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Basics_v6.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===R Basics===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R Language Basics PowerPoint v2.0.1.pdf|Media:R_Language_Basics_PowerPoint_v2.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_Document_v2.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_part_2_Powerpoint_v1.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_part_2_Document_v1.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Perl Basics===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Media:Perl_Language_Basics_I_Workshop_v1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Sap2test Migration Training===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Migrating_to_Slurm_and_new_software_environment.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; To help users familiarize with Slurm and the test cluster environment, we have prepared some training videos that are available from the &#039;&#039;&#039;GACRC&#039;s Kaltura channel&#039;&#039;&#039; at&lt;br /&gt;
https://kaltura.uga.edu/channel/GACRC/176125031 (login with MyID and password is required).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Topical Sessions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:AI_Resources_on_the_GACRC_Sapelo2_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Using_Sapelo2_Cluster_at_the_GACRC_Part_II_Rocky8.pdf]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Using_Conda_on_the_GACRC_Sap2test_cluster_v1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Blast_Workshop_GACRC_02012017.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Next-Generation_Sequencing_Applications_at_GACRC_10282016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Out-Reach/In-Class Talk===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Dept./Center/Institute&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Type&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Workshop PDF&lt;br /&gt;
|-&lt;br /&gt;
|Fall 2026&lt;br /&gt;
|&lt;br /&gt;
|[[Media:GACRC_Teaching_Cluster_Training-Python.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Fall 2026&lt;br /&gt;
|&lt;br /&gt;
|[[Media:GACRC_Teaching_Cluster_Training-Amber.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|GEOG - Spring2026 || In-Class || [[Media:GACRC-Teaching-cluster-new-user-training-workshop-python-Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2026 || In-Class || [[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330_Spring2026.pdf]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2026 || In-Class || [[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601-Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Anthropology Department || Out-Reach || [[Media:GACRC_overview_20251117_Anthropology.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2025|| Out-Reach || [[Media:GACRC_overview_20250819-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2025||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330-Spring2025.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2025||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602-Spring2025.pdf]] ; [[Media:Gacrc_handout2025_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Engineering FYOS - Fall 2024|| In-Class||[[Media:GACRC_overview_20240920-FYOS.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2024||Out-Reach||[[Media:GACRC_overview_20240820-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2024||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330_Spring2024.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2024|| In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601-Spring2024.pdf]] ; [[Media:Gacrc_handout2024_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2024||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601-Spring2024.pdf]] ; [[Media:Gacrc_handout2024_phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2023||Out-Reach||[[Media:GACRC_overview_20230822-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2023||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2023||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] ; [[Media:Gacrc_handout2023_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2023|| In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602.pdf]] ; [[Media:Gacrc_handout2023_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|ILS GradFIRST course - Fall 2022||Out-Reach||[[Media:GACRC_overview_20220901-ILS.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|FYOS1001 - Fall 2022||Out-Reach||[[Media:High_Performance_Computing_(HPC)_on_GACRC_Sapelo2_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2022||Out-Reach||[[Media:GACRC_overview_20220830-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2022||Out-Reach||[[Media:Compile_and_Run_HPC_code_on_Sapelo2.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Terry College IT - Spring2022||Out-Reach ||[[Media:GACRC_overview_20220506-Terry.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2022||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2022||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] ; [[Media:Gacrc_handout2021_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2021 ||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602-2021.pdf]] ; [[Media:Gacrc_handout2021_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|GENE4220 - Fall2020||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop_GENE4220_Fall2020.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|College of Veterinary Medicine - Spring2020||Out-Reach (jlslab)||[[Media:Using_GACRC_Sapelo2_Cluster-Advanced_Topics(1).pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Byod Data Center - Fall2019||In-Class (FYOS1001)||[[Media:High_Performance_Computing_(HPC)_on_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Department of Linguistics - Fall2019||In-class (LING6570)|| [[Media:GACRC_Teaching_cluster_new_user_training_workshop_LING6570_Part2.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics - Fall2019||Out-Reach (Seminar Talk 20190820)||[[Media:Introduction_to_GACRC_Computing_Facility_-_Sapelo2_Cluster_CSP-Fall2019.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||In-Class (PHYS4601/6601)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] [[Media:Gacrc_handout2019_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
| The Center for Simulational Physics||In-Class (PHYS8601)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601.pdf]] [[Media:Gacrc_handout2020_phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||In-Class (PHYS8602)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602.pdf]] [[Media:Gacrc_handout2019_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Food Science - Fall2018||In-Class (FYOS1001)||[[Media:High_Performance_Computing_(HPC)_on_Sapelo2_Cluster_at_GACRC.pdf]]&lt;br /&gt;
|- &lt;br /&gt;
|The Center for Simulational Physics - Summer2018||Out-Reach (Seminar Talk 20180821)||[[Media:Introduction_to_GACRC_Sapelo2_cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Miller plant science - Summer2018||Out-Reach (jlmlab)||[[Media:Introduction_to_GACRC_Sapelo2_cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Biochemistry and Molecular Biology - Spring2018||In-Class (BCMB8330)||[[Media:GACRC_zcluster_Class_Training_BCMB8330_Spring_2018.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics - Summer2017||Out-Reach (Seminar Talk 20170831)||[[Media:Introduction_on_HPC_Resources_at_the_GACRC.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computational Physics - Spring2017 ||In-class (PHYS4601/6601)||[[Media:Phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computational Physics - Spring2017||In-class (PHYS8602)||[[Media:Phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Institute of Bioinformatics and the Quantitative Biology Consulting Group||Out-Reach||[[Media:Introduction_to_HPC_Resources_at_GACRC_BBB_Talk_20151014.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||Out-Reach (Seminar Talk 20160906)||[[Media:Introduction_to_Sapelo_Computing_Resources_at_GACRC_Workshop20160906.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Microbiology||In-Class (MIBO8150)||[[Media:Introduction_to_HPC_Resources_at_GACRC_MIBO8150_20160926.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Statistics||In-Class (STAT8060)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_Workshop_STAT8060_20150826.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Biochemistry and Molecular Biology||In-Class (BCMB8211)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_BCMB8211_20160114.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Plant Biology||In-Class (PBIO/BINF8350)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_PBIO-BINF8350_20160115.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Plant Biology - Bioinformatics Applications Fall2016||In-Class (PBIO4550)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_PBIO_4550_08182016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Bioinformatics - Essential Computing Skills for Biologists Fall2016||In-Class (BINF4005)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_BINF_4005_08312016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computers in Experimental Genetics Fall2016||In-Class (GENE4220)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_GENE_4220_10192016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Statistics - Advanced Applications and Computing in R Fall2016||In-Class (STAT8330)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_STAT8330_11022016.pdf]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slides may become outdated and you should always check GACRC Wiki for up to date information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Past Sessions==&lt;br /&gt;
&lt;br /&gt;
[[Pass Sessions in 2021]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2020]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2019]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2018]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2017]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2016]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2015]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23123</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23123"/>
		<updated>2026-08-05T16:25:51Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly.&lt;br /&gt;
&amp;lt;!-- SSH tunneling remains available as an alternative if needed. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Method 2: SSH Tunnel === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Linux or macOS, run the following command in a terminal: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected !and indicates that the tunnel has been established successfully. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- With the SSH tunnel active, open your web browser and navigate to: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- http://localhost:39000 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The CryoSPARC login page should appear. --&amp;gt;&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23122</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23122"/>
		<updated>2026-08-05T16:25:10Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly.&lt;br /&gt;
&amp;lt;!-- SSH tunneling remains available as an alternative if needed. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Method 2: SSH Tunnel === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Linux or macOS, run the following command in a terminal: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected !and indicates that the tunnel has been established successfully. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- With the SSH tunnel active, open your web browser and navigate to: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- http://localhost:39000 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The CryoSPARC login page should appear. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23121</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23121"/>
		<updated>2026-08-05T16:24:12Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Method 2: SSH Tunnel === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Linux or macOS, run the following command in a terminal: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected !and indicates that the tunnel has been established successfully. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- With the SSH tunnel active, open your web browser and navigate to: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- http://localhost:39000 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The CryoSPARC login page should appear. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23120</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23120"/>
		<updated>2026-08-05T16:23:43Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Method 2: SSH Tunnel === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Linux or macOS, run the following command in a terminal: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected !and indicates that the tunnel has been established successfully. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- With the SSH tunnel active, open your web browser and navigate to: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- http://localhost:39000 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The CryoSPARC login page should appear. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23119</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23119"/>
		<updated>2026-08-05T16:19:00Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
!=== Method 2: SSH Tunnel ===&lt;br /&gt;
!Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
!&lt;br /&gt;
!If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
!&lt;br /&gt;
!&amp;lt;pre&amp;gt;&lt;br /&gt;
!ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
!&amp;lt;/pre&amp;gt;&lt;br /&gt;
!&lt;br /&gt;
!If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
!&lt;br /&gt;
!&amp;lt;pre&amp;gt;&lt;br /&gt;
!plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
!Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
!Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected !and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
!With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
!&amp;lt;pre&amp;gt;&lt;br /&gt;
!http://localhost:39000&lt;br /&gt;
!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
!The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Software&amp;diff=23078</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Software&amp;diff=23078"/>
		<updated>2026-07-22T12:23:09Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;On Sapelo2 and on the Teaching cluster users have the option to install their own software or use software installed centrally by the GACRC staff. Detailed information on how to find and access software packages installed on Sapelo2 are available at the [[Software on Sapelo2]] page and on the teaching cluster at the [[Software on Teaching Cluster]] page.&lt;br /&gt;
&lt;br /&gt;
Below is a very limited list of software packages installed on Sapelo2 and on the Teaching cluster. We only intend to make an application page for software packages that requires extra documentation not covered in [[Software on Sapelo2]] or [[Software on Teaching Cluster]].&lt;br /&gt;
&lt;br /&gt;
To view a list of all modules installed on Sapelo2/Teaching, along with a short description of each module, please run the following command on Sapelo2/Teaching:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;gcommand&amp;quot;&amp;gt;&lt;br /&gt;
module spider&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use the command above to search for a specific application. For more information, please see [[Lmod]].&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;file transfer&#039;&#039;&#039; nodes (&#039;&#039;&#039;xfer&#039;&#039;&#039; nodes) do not have environment modules installed. File transfer utilities are installed centrally on the xfer nodes and available on the users&#039; default PATH. Such utilities include bs (basespace-cli), fpsync, rclone, rsync, etc.&lt;br /&gt;
https://wiki.gacrc.uga.edu/wiki/Main_Page&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Although we have not made individual software pages for the applications installed on Sapelo2, there are currently over 1300 software packages installed there. For more information, please see [[Software on Sapelo2]].&lt;br /&gt;
&lt;br /&gt;
==Partial List of Installed Software==&lt;br /&gt;
Last updated &#039;&#039;&#039;{{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}&#039;&#039;&#039;. This is a partial list of installed software so there may be software or versions of software available on Sapelo2 which are not included in this table. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Click on the icons to the right of the column headings to sort the table.&lt;br /&gt;
[[#0|0-9]] [[#A|A]] [[#B|B]] [[#C|C]] [[#D|D]] [[#E|E]] [[#F|F]] [[#G|G]] [[#H|H]] [[#I|I]] [[#J|J]] [[#K|K]] [[#L|L]] [[#M|M]] [[#N|N]] [[#O|O]] [[#P|P]] [[#Q|Q]] [[#R|R]] [[#S|S]] [[#T|T]] [[#U|U]] [[#V|V]] [[#W|W]] [[#X|X]] [[#Y|Y]] [[#Z|Z]]&lt;br /&gt;
{|  width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;  cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200px&amp;quot;| Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; width=&amp;quot;240px&amp;quot;| Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;160px&amp;quot;| Category&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;60px&amp;quot;| Cluster&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;20px&amp;quot;| Top &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--LIST BEGIN--&amp;gt;&lt;br /&gt;
&amp;lt;!--| &amp;lt;span id =&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[3D-DNA-sapelo2 |3D-DNA]] || 180922 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--| &amp;lt;span id =&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[00Template-sapelo2 |00Template]] || 180922 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[3SEQ-Sapelo2 |3SEQ]] || 1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[4p-Sapelo2 |4p]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[ABySS-Sapelo2|ABySS]] || 1.9.0, 2.0.2, 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ADMIXTURE-Sapelo2|ADMIXTURE]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[aeneas-Sapelo2|aeneas]] || 1.7.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AFNI-Sapelo2|AFNI]] || 17.3.05 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AGAT-Sapelo2|AGAT]] || 0.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AGEnt-Sapelo2|AGEnt]] || 0.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AIM-HII-Sapelo2|AIM-HII]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[albacore-Sapelo2|Albacore]] || 2.3.4-cp35 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[AlphaFold-Sapelo2|AlphaFold 2]] || 2.3.1, 2.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[AlphaFold3-Sapelo2|AlphaFold 3]] || 3.0.0, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[AlignGraph-Sapelo2|AlignGraph]] || 20180709 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AlleleSeq_pipeline-Sapelo2|AlleleSeq_pipeline]] || 1.2a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ALLHiC-Sapelo2|ALLHiC]] || 0.8.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Allim-Sapelo2|Allim]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ALLMAPS-Sapelo2|ALLMAPS]] || 20190208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[AMBER-Sapelo2|AMBER]] || 22.4, 24.3 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AMBER-Teaching|AMBER]] || 22.4, 24.3 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AMOS-Sapelo2|AMOS]] || 3.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Anaconda2-Sapelo2|Anaconda2]] || 5.0.1, 2018.12, 2019.03 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Anaconda3-Sapelo2|Anaconda3]] || 5.0.1, 2018.12, 2019.03 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ANGEL-Sapelo2|ANGEL]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[annovar-Sapelo2|annovar]] || 2017Jul16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ANSYS-Sapelo2|ANSYS]] || 18.2, 19.2 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[antiSMASH-Sapelo2|antiSMASH]] || 4.2.0, 5.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[anvi&#039;o-Sapelo2|anvi&#039;o]] || 4, 5.1, 5.3, 5.4, 6.1, 7, 7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Apollo-Sapelo2|Apollo]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Aragorn-Sapelo2|Aragorn]] || 1.2.38 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Arlequin-Sapelo2|Arlequin]] || 3.5.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ART-Sapelo2|ART]] || 20160605 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ARCS-Sapelo2|ARCS]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Artemis-Sapelo2|Artemis]] || 17.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Artemis-Teaching|Artemis]] || 17.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ASTRAL-Sapelo2|ASTRAL]] || 5.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ATK-Sapelo2|ATk]] || 2.22.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ATLAS-Sapelo2|ATLAS]] || 3.10.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AUGUSTUS-Sapelo2|AUGUSTUS]] || 3.2.3, 3.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AUGUSTUS-Teaching|AUGUSTUS]] || 3.2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AutoVOT-Sapelo2|AutoVOT]] || 0.93 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;B&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[bam2fastx-Sapelo2|bam2fastx]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
| | &amp;lt;span id =&amp;quot;B&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Bactopia-Sapelo2|Bactopia]] || 3.2.0, 4.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BamTools-Sapelo2|BamTools]] || 2.4.1, 2.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Barrnap-Sapelo2|Barrnap]] || 0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[basespace-cli-Sapelo2|basespace-cli]] || 1.2.1, 1.7.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Basset-Sapelo2|Basset]] || 20200107 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BayesAss-Sapelo2|BayesAss]] || 3.0.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BayeScan-Sapelo2|BayeScan]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bax2bam-Sapelo2|bax2bam]] || 0.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bazel-Sapelo2|Bazel]] || 0.8.1, 0.11.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BBMap-Sapelo2 |BBMap]] || 37.67, 38.73 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BCFtools-Sapelo2|BCFtools]] || 1.1, 1.3.1, 1.6, 1.8, 1.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BCFtools-Teaching|BCFtools]] || 1.3.1, 1.6, 1.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bcgTree-Sapelo2|bcgTree]] || 1.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bcl2fastq-Sapelo2|bcl2fastq]] || 2.20.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[Beast-Sapelo2|Beast]] || 1.10.4, 2.6.7, 2.7.3, 2.7.7, 10.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDOPS-Sapelo2|BEDOPS]] || 2.4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDTools-Sapelo2|BEDTools]] || 2.17.0, 2.26.0, 2.28.0, 2.29.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDTools-Teaching|BEDTools]] || 2.26.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BerkeleyGW-Sapelo2|BerkeleyGW]] || 2.1 || [[:Category:Physics|Physics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bioawk-Sapelo2|bioawk]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioKanga-Sapelo2|BioKanga]] || 21.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Biom-format-Sapelo2|Biom-format]] || 2.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BionanoSolve-Sapelo2|BionanoSolve]] || 3.6.1-11162020 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioPerl-Sapelo2|BioPerl]] || 1.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioPerl-Teaching|BioPerl]] || 1.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
| [[BioPython-Sapelo2|BioPython]] || 1.76, 1.79, 1.80, 1.83, 1.84, 1.85 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[Biopython-Teaching|Biopython]] || 1.76, 1.79, 1.80, 1.83, 1.84, 1.85 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Bismark-Sapelo2|Bismark]] || 0.20.0, 0.22.1, 0.22.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bismark-Teaching|Bismark]] || 0.22.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bison-Sapelo2|Bison]] || 2.7, 3.0.2, 3.0.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLASR-Sapelo2|BLASR]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BLAST+-Sapelo2|BLAST+]] || 2.13.0, 2.14.1, 2.16.0, 2.17.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] ||[[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BLAST+-Teaching|BLAST+]] || 2.13.0, 2.14.1, 2.16.0, 2.17.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[BLAST-Sapelo2|BLAST]] || 2.2.26 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLAST-Teaching|BLAST]] || 2.2.26 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLAT-Sapelo2|BLAT]] || 3.4, 3.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BlobTools-Sapelo2|BlobTools]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Blosc-Sapelo2|Blosc]] || 1.12.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BOLT-LMM-Sapelo2|BOLT-LMM]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Boost-Sapelo2|Boost]] || 1.54.0, 1.61.0, 1.63.0, 1.65.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Boto3-Sapelo2|Boto3]] || 1.9.14 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bowtie2-Sapelo2|Bowtie2]] || 2.4.4, 2.4.5, 2.5.1, 2.5.2, 2.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bowtie2-Teaching|Bowtie2]] || 2.4.4, 2.4.5, 2.5.1, 2.5.2, 2.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Bowtie-Sapelo2|Bowtie]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bracken-Sapelo2|Bracken]] || 3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BRAKER-Sapelo2|BRAKER]] || 3.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[BreakDancer-Sapelo2|BreakDancer]] || 1.4.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[breseq-Sapelo2|breseq]] || 0.34.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BS-Seeker2-Sapelo2|BS-Seeker2]] || 2.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BUSCO-Sapelo2|BUSCO]] || 5.8.3, 6.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[BUSCO-Teaching|BUSCO]] || 3.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BWA-Sapelo2|BWA]] || 0.7.15, 0.7.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BWA-Teaching|BWA]] || 0.7.17, 0.7.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;C&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Caffe-Sapelo2|Caffe]] || 04082018 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;C&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[Cactus-Sapelo2|Cactus]] || 1.2.3, 2.0.3, 2.4.3, 2.4.4, 2.5.0, 2.6.0, 2.6.7, 2.6.9, 2.7.0, 2.9.0, 2.9.3, 2.9.9, 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[cairo-Sapelo2|cairo]] || 1.14.6, 1.14.10, 1.14.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Canu-Sapelo2|Canu]] || 2.3||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[canu-Teaching|Canu]] || 1.4, 1.5, 1.6, 1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CAP-miRSeq-Sapelo2|CAP-miRSeq]] || 05/20184 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CAP3-Sapelo2|CAP3]] || 03092015 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cBar-Sapelo2|cBar]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CD-HIT-Sapelo2|CD-HIT]] || 4.6.1-2012-08-27, 4.6.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cDNA_Cupcake-Sapelo2|CDNA_Cupcake]] || 5.9, 7.2, 8.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CDO-Sapelo2|CDO]] || 1.9.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CellProfiler-Sapelo2|CellProfiler]] || 3.1.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cellrange-Sapelo2|Cellrange]] || 3.0.1, 3.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[CellRanger-ATAC-Sapelo2|CellRanger-ATAC]] || 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CENSOR-Sapelo2|CENSOR]] || 4.2.29 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CFITSIO-Sapelo2|CFITSIO]] || 3.38 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CFOUR-Sapelo2|CFOUR]] || 1.2, 2.00-beta, 2.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CGAL-Sapelo2|CGAL]] || 4.11 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cgmaptools-Sapelo2|Cgmaptools]] || 0.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cgview_comparison_tool-Sapelo2|Cgview_comparison_tool]] || 2017.09.19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CheckM-Sapelo2|CheckM]] || 1.0.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Chimera-Sapelo2|Chimera]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Chimera-Teaching|Chimera]] || 1.16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Chromosomer-Sapelo2|Chromosomer]] || 0.1.3, 0.1.4a0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Chromosomer-Teaching|Chromosomer]] || 0.1.4a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[circlator-Sapelo2|circlator]] || 1.5.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Circos-Sapelo2|Circos]] || 0.69-6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cleaveland4-Sapelo2|Cleaveland4]] || 4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Click-Sapelo2|Click]] || 7.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClonalFrameML-Sapelo2|ClonalFrameML]] || 1.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClonalOrigin-Sapelo2|ClonalOrigin]] || 0.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Clust-Sapelo2|Clust]] || 1.9.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClustAGE-Sapelo2|ClustAGE]] || 0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Clustal-Omega-Sapelo2|Clustal-Omega]] || 1.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClustalW2-Sapelo2|ClustalW2]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CMake-Sapelo2|CMake]] || 3.0.0, 3.4.3, 3.5.2, 3.6.1, 3.6.2, 3.7.2, 3.8.0, 3.9.1, 3.9.5, 3.10.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CNIT-Sapelo2|CNIT]] || 2020-05-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CNVnator-Sapelo2|CNVnator]] || 0.3.3, 0.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cogent-Sapelo2|Cogent]] || 3.5, 3.9, 6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Coinfinder-Sapelo2|Coinfinder]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CONCOCT-Sapelo2|CONCOCT]] || 1.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Consed-Sapelo2|Consed]] || 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cooler-Sapelo2|cooler]] || 0.8.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CPLEX-Sapelo2|CPLEX]] || 12.6.3 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[crest-Sapelo2|crest]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CRISPResso-Sapelo2|CRISPResso]] || 1.0.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[cryoSPARC-Sapelo2|CryoSPARC]] || 3.3.1 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Cromwell-Sapelo2|Cromwell]] || 56 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
|[[CUDA-Sapelo2|CUDA]] || 11.7.0, 11.8.0, 12.1.1, 12.4.0, 12.6.0, 12.8.0, 13.1.0 ||[[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[cuDNN-Sapelo2|cuDNN]] || 7.0.4, 7.2.1.38, 7.4.2.24 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cufflinks-Sapelo2|Cufflinks]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cufflinks-Teaching|Cufflinks]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cURL-Sapelo2|cURL]] || 7.49.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cutadapt-Sapelo2|cutadapt]] || 1.9.1, 1.14, 1.16, 2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cython-Sapelo2|Cython]] || 0.27.3, 0.28.5 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CythonGSL-Sapelo2|CythonGSL]] || 0.2.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Cytoscape-Sapelo2|Cytoscape]] || 3.9.1, 3.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Cytoscape-Teaching|Cytoscape]] || 3.9.1, 3.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-  &lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;D&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Dadi-Sapelo2|Dadi]] || 1.7.0, 2.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Danpos2-Sapelo2|Danpos2]] || 2.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Darknet-Sapelo2|Darknet]] || 3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DAS_Tool-Sapelo2|DAS_Tool]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[datamash-Sapelo2|datamash]] || 1.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DBG2OLC-Sapelo2|DBG2OLC]] || 20170208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;!-- | [[DBG2OLC-Teaching|DBG2OLC]] || 20170208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DDocent-Sapelo2|DDocent]] || 2.7.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DDSCAT-Sapelo2|DDSCAT]] || 7.3.2 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[decontaMiner-Sapelo2|decontaMiner]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[deepTools-Sapelo2|deepTools]] || 3.0.2, 3.2.1, 3.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DeepVariant-Sapelo2|DeepVariant]] || 0.7.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Delft3d-Sapelo2|Delft3d]] || 20190610 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[delineate-Sapelo2|delineate]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DendroPy-Sapelo2|DendroPy]] || 4.3.0, 4.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[detectMITE-Sapelo2|detectMITE]] || 20170425 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[detonate-Sapelo2|detonate]] || 1.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIAMOND-Sapelo2|DIAMOND]] || 0.8.31, 0.9.19, 0.9.22, 0.9.24, 0.9.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIAMOND-Teaching|DIAMOND]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DISCOVARdenovo-Sapelo2|DISCOVARdenovo]] || 52488 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIYABC-Sapelo2|DIYABC]] || 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DiscoVista-Sapelo2|DiscoVista]] || 20190429 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Distruct-Sapelo2|Distruct]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DLCpar-Sapelo2|DLCpar]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Domainoid-Sapelo2|Domainoid]] || 20200127 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Doxygen-Sapelo2|Doxygen]] || 1.8.7, 1.8.11, 1.8.13 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |  [[DRAM-bio-Sapelo2|DRAM-bio]] || 1.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|--&amp;gt;&lt;br /&gt;
| [[dMRIharmonization-Sapelo2|dMRIharmonization]] || 20240227 || [[:Category:Engineering|Engineering]]|| [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|--&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[dRep-Sapelo2|dRep]] || 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DSSP-Sapelo2|DSSP]] || 3.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DyNet-Sapelo2|DyNet]] || 2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DyNet-Teaching|DyNet]] || 2.0.3 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;E&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[EDGE-pro-Sapelo2|EDGE-pro]] || 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[EGAPx-Sapelo2|EGAPx]] || N/A || [[:Category:Bioinformatics|Bioinformatics]] || N/A || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[eggNOG-Mapper-Sapelo2|EggNOG-Mapper]] || 1.0.3, 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Eigen-Sapelo2|Eigen]] || 3.2.3, 3.3.5 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[EIGENSOFT-Sapelo2|EIGENSOFT]] || 7.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;E&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[EIGENSOFT-Teaching|EIGENSOFT]] || 7.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[Flankophile-Sapelo2|Flankophile]] || N/A || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[EMBOSS-Sapelo2|EMBOSS]] || 6.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EMBOSS-Teaching|EMBOSS]] || 6.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EMMAX-Sapelo2|EMMAX beta]] || beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ensembl-VEP-Sapelo2|Ensembl-VEP]] || 20180914 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EnTAP-Sapelo2|EnTAP]] || 0.8.4 beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[epic2-Sapelo2|epic2]] || 0.0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EricScript-Sapelo2|EricScript]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ESMF-Sapelo2|ESMF]] || 7.0.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[eSpeak-Sapelo2|eSpeak]] || 1.48.04 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ete-Sapelo2|Ete]] || 3.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EVcouplings-Sapelo2|EVcouplings]] || 0.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EVidenceModeler-Sapelo2|EVidenceModeler]] || 0.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Exonerate-Sapelo2 |Exonerate]] || 2.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Exonerate-Teaching|Exonerate]] || 2.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;F&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;!-- [[FALCON-Sapelo2|FALCON]] || 02282018_unzip || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Fast-Plast-Sapelo2|Fast-Plast]] || 1.2.6, 1.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] |&amp;lt;!-- | [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FASTA-Sapelo2|FASTA]] || 36.3.5e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fast-GeP-Sapelo2|fast-GeP]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastME-Sapelo2|FastME]] || 2.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQC-Sapelo2|FastQC]] || 0.11.5,0.11.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQValidator-Sapelo2|FastQValidator]] || 0.1.1a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQ_Screen-Sapelo2|FastQ_Screen]] || 0.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fastSTRUCTURE-Sapelo2|FastSTRUCTURE]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastTree-Sapelo2 |FastTree]] || 2.1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastViromeExplorer-Sapelo2|FastViromeExplorer]] || 20180918 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FASTX-Toolkit-Sapelo2|FASTX-Toolkit]] || 0.0.14 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FFmpeg-Sapelo2|FFmpeg]] || 3.1.3, 3.4.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FFTW-Sapelo2|FFTW]] || 3.3.4, 3.3.6, 3.3.7 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FIAT-Sapelo2|FIAT]] || 1.6.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fineSTRUCTURE-Sapelo2|fineSTRUCTURE]] || 2.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FLASH-Sapelo2|FLASH]] || 1.2.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FLTK-Sapelo2|FLTK]] || 1.3.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Flye-Sapelo2|Flye]] || 2.3.6, 2.6, 2.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FoX-Sapelo2|FoX]] || 4.1.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freebayes-Sapelo2|Freebayes]] || 1.2.0, 1.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freebayes-Teaching|Freebayes]] || 1.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freesasa-Sapelo2|freesasa]] || 2.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FriBidi-Sapelo2|FriBidi]] || 1.0.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Funannotate-Sapelo2|Funannotate]] || 1.8.15, 1.8.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FuzzyWuzzy-Sapelo2|FuzzyWuzzy]] || 0.17.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fxtract-Sapelo2|fxtract]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;G&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[G2gtools-Sapelo2|g2gtools]] || 0.2.9 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAG-Sapelo2|GAG]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAG-Teaching|GAG]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAMESS-Sapelo2|GAMESS]] || 14Feb2018 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GapFiller-Sapelo2|GapFiller]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GapFiller-Teaching|GapFiller]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAPIT-Sapelo2|GAPIT]] || 20180524 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAPPadder-Sapelo2|GAPPadder]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GARLI-Sapelo2|GARLI]] || 2.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GATK-Sapelo2|GATK]] || 3.4-0, 3.8-0, 3.8-1, 4.0.3.0, 4.0.11.0, 4.1.0.0, 4.1.2.0, 4.1.5.0, 4.1.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GATK-Teaching|GATK]] || 3.8-0, 3.4-0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;G&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[GAUSSIAN-Sapelo2|GAUSSIAN]] || 09, 16 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[GAUSSIAN-Teaching|GAUSSIAN]] || 09, 16 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[GaussView-Sapelo2|GaussView]] || 5, 6.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GaussView-Teaching|GaussView]] || 6.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[GBlocks-Sapelo2|GBlocks]] || 0.91b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GCTA-Sapelo2 |GCTA]] || 1.26.0, 1.93.0-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GD-Sapelo2|GD]] || 2.66 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GDAL-Sapelo2|GDAL]] || 2.1.0, 2.2.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gdc-client-Sapelo2 |gdc-client]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Gdk-pixbuf-Sapelo2|Gdk-pixbuf]] || 2.36.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEAN-Sapelo2|GEAN]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GEM-Sapelo2|GEM]] || 1.5.1 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEM-library-Sapelo2 |GEM-library]] || 20130406-045632 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMark.hmm.eukaryotic-Sapelo2|GeneMark.hmm.eukaryotic]] || 4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GeneMarkES-Sapelo2|GeneMark-ET]] || 4.71 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--| [[GeneMarkES-Teaching|GeneMarkES]] || 4.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMarkS-T-Sapelo2|GeneMarkS-T]] || 4.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMarkS-Sapelo2|GeneMarkS]] || 4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenericRepeatFinder-Sapelo2|GenericRepeatFinder]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenMap-Sapelo2|GenMap]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genocore-Sapelo2|Genocore]] || 2020-05-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genome-Sapelo2|Genome]] || Phred version: 0.071220.c, Phrap version: 0.990329, Consed version: 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenomeTools-Sapelo2|GenomeTools]] || 1.5.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genrich-Sapelo2|Genrich]] || 0.5, 0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEOS-Sapelo2|GEOS]] || 3.6.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_HOMOLOGUES-Sapelo2|GET_HOMOLOGUES]] || 1.7.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_HOMOLOGUES-Teaching|GET_HOMOLOGUES]] || 1.7.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_PHYLOMARKERS-Sapelo2|GET_PHYLOMARKERS]] || 1.2.11, 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gfaviz-Sapelo2|gfaviz]] || 1.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Gffcompare-Sapelo2|Gffcompare]] || 0.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gffread-Sapelo2|gffread]] || 0.9.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GFlow-Sapelo2|GFlow]] || 0.1.7 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ghostscript-Sapelo2|Ghostscript]] || 9.20, 9.22 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GISTIC-Sapelo2|GISTIC]] || 2.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gkin-Sapelo2|Gkin]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GL2PS-Sapelo2|GL2PS]] || 1.4.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLib-Sapelo2|GLib]] || 2.49.5, 2.53.5, 2.54.3 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLIMMER-Sapelo2|GLIMMER]] || 3.02b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLIMMER-Teaching|GLIMMER]] || 3.02b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLPK-Sapelo2|GLPK]] || 4.63, 4.65 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GMAP-GSNAP-Sapelo2|GMAP-GSNAP]] || 2016-11-07, 2018-07-04 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GMP-Sapelo2|GMP]] || 4.3.2, 6.1.1, 6.1.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gnuplot-Sapelo2|gnuplot]] || 5.0.5 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GObject-Introspection-Sapelo2|GObject-Introspection]] || 1.49.1, 1.54.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[gocryptfs-Sapelo2|gocryptfs]] || 2.2.1, 2.5.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[grace-Sapelo2|grace]] || 5.1.25 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GraftM-Sapelo2|GraftM]] || 0.11.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GraphicsMagicK-Sapelo2|GraphicsMagicK]] || 1.3.28 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Graphviz-Sapelo2|Graphviz]] || 2.40.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GROCSVs-Sapelo2|GROCSVs]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[GROMACS-Sapelo2 |GROMACS]] ||  2023.4, 2024.4 ||[[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GSL-Sapelo2|GSL]] || 1.16, 2.1, 2.3. 2.4, 2.5 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GStreamer-Sapelo2|GStreamer]] || 1.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTDBTk-Sapelo2|GTDBTk]] || 0.2.2, 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gtftogenepred-Sapelo2|gtftogenepred]] || 377-3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTK+-Sapelo2|GTK+]] || 2.24.31 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTS-Sapelo2|GTS]] || 0.7.6 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Guile-Sapelo2|Guile]] || 1.8.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;H&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[h5py-Sapelo2|h5py]] || 2.7.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HapCUT-Sapelo2|HapCUT]] || 0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HapCUT2-Sapelo2|HapCUT2]] || 20190606 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HarfBuzz-Sapelo2|HarfBuzz]] || 1.3.1, 1.7.5 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HARP-Sapelo2|HARP]] || 140925_103521 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Harvest-Teaching|Harvest]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HarvestTools-Sapelo2|HarvestTools]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HH-suite-Sapelo2|HH-suite]] || 3.0-beta.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HiC-Pro-Sapelo2|HiC-Pro]] || 2.11.0-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Hinge-Sapelo2|Hinge]] || 0.5.0-4-deb_cv1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[hindex-Sapelo2|hindex]] || 1.42 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[HISAT2-Sapelo2|HISAT2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;H&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[HISAT2-Teaching|HISAT2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[HMMER-Sapelo2|HMMER]] || 2.3, 3.1b2, 3.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Homer-Sapelo2|Homer]] || 4.9.1, 4.10, 4.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Homer-Teaching|Homer]] || 4.9.1, 4.10, 4.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[HpcGridRunner-Sapelo2|HPCGridRunner]] || 1.0.2 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[htop-Sapelo2|htop]] || 2.0.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSeq-Sapelo2|HTSeq]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSeq-Teaching|HTSeq]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSlib-Sapelo2|HTSlib]] || 1.3.2, 1.6, 1.8 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTStream-Sapelo2|HTStream]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HUMAnN2-Sapelo2|HUMAnN2]] || 0.11.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HybPiper-Sapelo2|HybPiper]] || 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HyPhy-Sapelo2|HyPhy]] || 2.5.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Hypre-Sapelo2|Hypre]] || 2.11.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[ICORN2-Sapelo2|ICORN2]] || 0.95 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[iCommands-Sapelo2|iCommands]] || 4.2.8 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[IDBA-UD-Sapelo2|IDBA-UD]] || 1.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IDR-Sapelo2|IDR]] || 2.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IgBlast-Sapelo2 | IgBlast]] || 1.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGV-Sapelo2 |IGV]] || 2.4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGV-Teaching |IGV]] || 2.4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGVTools-Sapelo2 |IGVTools]] || 2.3.98 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[illumiprocessor-Sapelo2 |illumiprocessor]] || 2.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ImageMagick-Sapelo2|ImageMagick]] || 7.0.5, 7.0.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Infernal-Sapelo2|Infernal]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IonCom-Sapelo2|IonCom]] || 20190521  || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[InterProScan-Sapelo2|InterProScan]] || 5.55-88.0, 5.64-96.0, 5.73-104.0, 5.75-106.0, 5.76-107.0 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ipyrad-Sapelo2|ipyrad]] || 0.7.24, 0.7.28, 0.7.30, 0.9.19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ipyrad-Teaching|Ipyrad]] || 0.7.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IPython-Sapelo2|IPython]] || 5.3.0, 6.2.1, 7.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[IQ-Tree-Sapelo2|IQ-Tree]] ||  2.2.2.7, 2.3.5, 2.3.6, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[IQ-Tree-Teaching|IQ-Tree]] || 2.2.2.7, 2.3.5, 2.3.6, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[IRMA-Sapelo2|IRMA]] || 0.6.7, 0.9.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ISGPipeline-Sapelo2|ISGPipeline]] || 0.16.10-3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IsONclust-Sapelo2 |IsONclust]] || 0.0.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IsoSeq3-Sapelo2|IsoSeq3]] || 3.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ITSTool-Sapelo2|ITSTool]] || 2.0.4 || [[:Category:Utility|Utility]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;J&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[JAGS-Sapelo2|JAGS]] || 4.3.0 || [[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JasPer-Sapelo2|JasPer]] || 1.900.1, 2.0.12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Java-Sapelo2|Java]] || 1.8.0_92, 1.8.0_112, 1.8.0_121, 1.8.0_141, 1.8.0_144, 1.8.0_202 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;J&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Java-Teaching|Java]] || 1.8.0_241, 1.8.0_311, 8.402, 11.0.20, 17.0.6, 21.0.2, 21.0.5, 25.36 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[jcvi-Sapelo2|jcvi]] || 0.8.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Jellyfish-Sapelo2|Jellyfish]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JModelTest-Sapelo2|JModelTest]] || 2.1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Juicer-Sapelo2|Juicer]] || 1.5.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Julia-Sapelo2|Julia]] || 1.3.1|| [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JUnit-Sapelo2|JUnit]] || 4.12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Jupyter-Sapelo2|Jupyter]] || 6.5.6, 7.0.2, 7.2.0, 7.2.3, 7.4.4, 7.4.5, 7.4.7 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Jupyter-Teaching|Jupyter]] || 6.4.12 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;K&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Kaiju-Sapelo2|Kaiju]] || 1.6.2, 1.7.3 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[kallisto-Sapelo2|kallisto]] || 0.43.1, 0.46.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[kallisto-Teaching|kallisto]] || 0.43.1, 0.46.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KAT-Sapelo2|KAT]] || 2.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Kent_tools-Sapelo2|Kent_tools]] || 20190208, 20200512 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[keras-Sapelo2|keras]] || 2.0.6, 2.2.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KinFin-Sapelo2|KinFin]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KmerGenie-Sapelo2|KmerGenie]] || 1.7044 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KmerGenie-Teaching|KmerGenie]] || 1.7044 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Kraken2-Sapelo2|Kraken2]] || 2.0.7-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KronaTools-Sapelo2|KronaTools]] || 2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;L&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[LADR-Teaching|LADR]] || 2009-11A || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LAME-Sapelo2|LAME]] || 3.100 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;L&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[LAMMPS-Sapelo2|LAMMPS]] || 22Jul2025, 29Aug2024 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[LAPACK-Sapelo2|LAPACK]] || 3.6.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LAST-Sapelo2|LAST]] || 956, 959, 1047 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LASTZ-Sapelo2|LASTZ]] || 1.04.00 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LDhat-Sapelo2|LDhat]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LDhelmet-Sapelo2|LDhelmet]] || 1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Leafcutter-Sapelo2|Leafcutter]] || 0.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Lep-MAP3-Sapelo2|Lep-MAP3]] || 0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[libssh2-Sapelo2|libssh2]] || 1.9.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LibStatGen-Sapelo2|LibStatGen]] || 1.0.14 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LibTIFF-Sapelo2|LibTIFF]] || 4.0.6, 4.0.8, 4.0.9 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LINKS-Sapelo2|LINKS]] || 1.8.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LittleCMS-Sapelo2|LittleCMS]] || 2.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LLVM-Sapelo2|LLVM]] || 3.8.1, 4.0.0, 5.0.1, 6.0.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LMDB-Sapelo2|LMDB]] || 0.9.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoFreq-Sapelo2|LoFreq]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Log-Log4perl-Sapelo2|Log-Log4perl]] || 1.49 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LongRanger-Sapelo2|LongRanger]] || 2.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoRDEC-Sapelo2|LoRDEC]] || 0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoRMA-Sapelo2|LoRMA]] || 0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LRCstats-Sapelo2|LRCstats]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[lrslib-Sapelo2|lrslib]] || 6.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LS-DYNA-Sapelo2|LS-DYNA]] || 10.123355 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LS-PrePost-Sapelo2|LS-PrePost]] || 4.5 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LtrDetector-Sapelo2|LtrDetector]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LTR_Finder-Sapelo2|LTR_Finder]] || 1.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LTR_retriever-Sapelo2|LTR_retriever]] || 1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LUMPY-Sapelo2|LUMPY]] || 0.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LZO-Sapelo2|LZO]] || 2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;M&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[M4-Sapelo2|M4]] || 1.4.16, 1.4.17, 1.4.17 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MacSyFinder-Sapelo2|MacSyFinder]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Macs2-Sapelo2|MACS2]] || 2.1.1, 2.1.2, 2.2.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAFFT-Sapelo2|MAFFT]] || 7.273, 7.313, 7.397, 7.407, 7.453, 7.470 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAFFT-Teaching|MAFFT]] || 7.130, 7.273, 7.313 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Magic-BLAST-Sapelo2|Magic-BLAST]] || 1.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Magma-GPU-Sapelo2|Magma-GPU]] || 2.3.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;M&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Magma-Sapelo2|Magma]] || 2.27-1, 2.28-27 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[mahotas-Sapelo2|mahotas]] || 1.4.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAJIQ-Sapelo2|MAJIQ]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Maker-Sapelo2|Maker]] || 3.01.04 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[Maker-Teaching|Maker]] || 2.31.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mako-Sapelo2|Mako]] || 1.0.4, 1.0.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAnorm-Sapelo2|MAnorm]] || 1.1.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MARVEL-Sapelo2|MARVEL]] || 20180918 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mash-Sapelo2|Mash]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MashMap-Sapelo2|MashMap]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaSIF-Sapelo2|MaSIF]] || 20200722 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaSuRCA-Sapelo2|MaSuRCA]] || 3.2.2, 3.2.9, 3.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mathematica-Sapelo2|Mathematica]] || 12.1 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[MATLAB-Sapelo2|MATLAB]] || R2023b || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[MatLab-Teaching|Matlab]] || R2018b || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Matplotlib-Sapelo2|Matplotlib]] || 1.5.3, 2.0.2, 2.1.0, 2.1.2, 2.2.3, 3.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mauve-Sapelo2|Mauve]] || 2015-02-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Maven-Sapelo2|Maven]] || 3.5.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mawk-Sapelo2|Mawk]] || 1.3.4|| [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaxBin-Sapelo2|MaxBin]] || 2.2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MCL-Sapelo2|MCL]] || 14.137 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MCScanX-Sapelo2 |MCScanX]] || 0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Medaka-Sapelo2 |Medaka]] || 0.9.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Medusa-Sapelo2 |Medusa]] || 1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MEGA-Sapelo2 |MEGA]] || 7.0.26-1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MEGAHIT-Sapelo2 |MEGAHIT]] || 1.1.1, 1.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Megalodon-Sapelo2|Megalodon]] || 0.1.0, 1.0.0, 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Megam-Teaching|Megam]] || 0.92 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MeGAMerge-Sapelo2|MeGAMerge]] || 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MEME-Sapelo2|MEME]] || 4.11.0, 5.0.0_1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Meraculous-Sapelo2|Meraculous]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mercurial-Sapelo2 |Mercurial]] || 4.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mesa-Sapelo2 |Mesa]] || 12.0.2, 17.3.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MET-Sapelo2 |MET]] || 7.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MetaBAT-Sapelo2|MetaBAT]] || 2.12.1, 2.15-4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[METABOLIC-Sapelo2|METABOLIC]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MetaCLADE-Sapelo2|MetaCLADE]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[MetaPhlAn4-Sapelo2|MetaPhlAn4]] || 4.0.3.1, 4.0.6, 4.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MetaPhlAn2-Sapelo2|MetaPhlAn2]] || 2.7.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[methylpy-Sapelo2|methylpy]] || 1.2.9, 1.3.2, 1.4.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[METIS-Sapelo2|METIS]] || 5.1.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MG-RAST-Tools-Sapelo2 |MG-RAST-Tools]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minced-Sapelo2|minced]] || 0.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Minia-Sapelo2|Minia]] || 3.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miniasm-Sapelo2|miniasm]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miniasm-Teaching|miniasm]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Miniconda3-Sapelo2|Miniconda3]] || 4.4.10 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minimap2-Sapelo2|minimap2]] || 2.10, 2.13, 2.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minimap2-Teaching|minimap2]] || 2.10, 2.13, 2.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MinPath-Sapelo2|MinPath]] || 1.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MIonSite-Sapelo2|MIonSite]] || 20190528 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mip-Sapelo2|mip]] || 1.7.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mirdeep-p-Sapelo2|mirdeep-p]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MiRDeep2-Sapelo2|miRDeep2]] || 0.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miRDP2-Sapelo2|MiRDP2]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MISO-Sapelo2|MISO]] || 0.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITE-Hunter-Sapelo2|MITE-Hunter]] || 11-2011 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITE-Tracker-Sapelo2|MITE-Tracker]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITObim-Sapelo2|MITObim]] || 1.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MitoZ-Sapelo2|MitoZ]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[mmquant-Sapelo2|mmquant]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Montreal Forced Aligner-Sapelo2|Montreal Forced Aligner]] || 1.0.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
| [[MOTECC_qmdcp-Teaching|MOTECC_qmdcp]] || 90 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Mothur-Sapelo2|Mothur]] || 1.45.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[motif-Sapelo2|motif]] || 2.3.5, 2.3.8 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MPJ-Express-Sapelo2|MPJ-Express]] || 0.44 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MrBayes-Sapelo2|MrBayes]] || 3.2.6, 3.2.7a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MREPS-Sapelo2|MREPS]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ms-Teaching|ms]] || 20140304 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSG-Sapelo2|MSG]] || 0.4.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSG-Teaching|MSG]] || 0.4.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSTmap-Sapelo2|MSTmap]] || 20181130 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MultiQC-Sapelo2|MultiQC]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUMmer-Sapelo2|MUMmer]] || 3.23, 4.0.0beta2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUMmer-Teaching|MUMmer]] || 3.23 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUSCLE-Sapelo2|MUSCLE]] || 3.8.1551, 3.8.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MuTect-Sapelo2|MuTect]] || 1.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MuTect-Teaching|MuTect]] || 1.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[muver-Sapelo2|muver]] || 0.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[mvqtlcim-Sapelo2|mvqtlcim]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MZmine2-Sapelo2|MZmine2]] || 2.40.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;N&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Nsight-Compute-CLI-Sapelo2|Nsight Compute CLI]] || 2024.3.0.0, 2025.1.0.0, 2025.4.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;N&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[NAL_RNA_seq_annotation-Sapelo2|NAL_RNA_seq_annotation]] ||20200728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NAMD-Sapelo2|NAMD]] || 2.13 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nanocorr-Sapelo2|Nanocorr]] || 5.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NanoFilt-Sapelo2|NanoFilt]] || 2.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NanoPlot-Sapelo2|NanoPlot]] || 1.26.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nanopolish-Sapelo2|Nanopolish]] || 0.10.2, 0.11.1, 0.12.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NASM-Sapelo2|NASM]] || 2.11, 2.12, 2.13 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NBO-Sapelo2|NBO]] || 7.0 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCCL-Sapelo2|NCCL]] || 2.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCL-Sapelo2|NCL]] || 6.4.0, 6.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCL-Teaching|NCL]] || 6.4.0, 6.5.0  || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ncview-Sapelo2|ncview]] || 2.1.7 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCO-Sapelo2|NCO]] || 4.7.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCO-Teaching|NCO]] || 4.7.4 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Necklace-Sapelo2|Necklace]] || 1.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NeEstimator-Sapelo2|NeEstimator]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Neptune-Sapelo2|Neptune]] || 1.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NetSurfP-Sapelo2|NetSurfP]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Newbler-Sapelo2|Newbler]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nextflow-Sapelo2|Nextflow]] || 18.10.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NextGenMap-Sapelo2|NextGenMap]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ngmlr-Sapelo2|ngmlr]] || 0.2.6-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGmerge-Sapelo2|NGmerge]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGS-Sapelo2|NGS]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGSEPcore-Sapelo2|NGSEPcore]] || 3.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ngsplot-Sapelo2|ngsplot]] || 2.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGSQCToolkit-Sapelo2|NGSQCToolkit]] || 2.3.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[nhPhyML-Sapelo2|nhPhyML]] || 20180515 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NiBabel-Sapelo2|NiBabel]] || 2.2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[nistats-Sapelo2|nistats]] || 0.0.1a0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NLopt-Sapelo2|NLopt]] || 2.4.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nseg-Sapelo2|Nseg]] || 20180530 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NucleoATAC-Sapelo2|NucleoATAC]] || 0.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NWChem-Sapelo2|NWChem]] || 6.8 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;O&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Oases-Sapelo2|Oases]] || 0.2.08, 0.2.09 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OCaml-Sapelo2|OCaml]] || 4.01.0, 4.02.3 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;O&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Ont-Guppy-Sapelo2|Ont-Guppy]] || 6.5.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[OpenBUGS-Sapelo2|OpenBUGS]] || 3.2.3 || [[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenCV-Sapelo2|OpenCV]] || 3.4.1, 3.4.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenJPEG-Sapelo2|OpenJPEG]] || 2.3.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenSlide-Sapelo2|OpenSlide]] || 3.4.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenSlide-Python-Sapelo2|OpenSlide-Python]] || 1.1.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[ORCA-Sapelo2 |ORCA]] || 4.2.1, 5.0.4 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[OrfM-Sapelo2|OrfM]] || 0.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OrganelleRef_PBA-Sapelo2|OrganelleRef_PBA]] || 1.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ORGanelle_ASeMbler-Sapelo2|ORGanelle_ASeMbler]] || 0.2.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ORGanelle_ASeMbler-Sapelo2|ORGASM]] || 0.2.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[ORP-Sapelo2|ORP]] || 2.2.6, 2.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[OrthoFinder-Sapelo2|OrthoFinder]] || 2.5.4, 2.5.5 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OrthoFinder-Teaching|OrthoFinder]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OrthoMCL-Sapelo2|OrthoMCL]] || 2.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;P&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[p7zip-Sapelo2|p7zip]] || 16.02 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAGIT-Sapelo2|PAGIT]] || 1.64 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pairix-Sapelo2|Pairix]] || 0.3.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pairtools-Sapelo2|pairtools]] || 0.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pal_finder-Sapelo2|Pal_finder]] || 0.02.04 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAML-Sapelo2|PAML]] || 4.9h || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;P&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[PAML-Teaching|PAML]] || 4.9j, 4.10.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[PANDAseq-Sapelo2 |PANDAseq]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pangloss-Sapelo2 |Pangloss]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pango-Sapelo2 |Pango]] || 1.40.3, 1.41.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Panoply-Sapelo2|Panoply]] || 4.11.6 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Parliament2-Sapelo2|Parliament2]] || 0.1.8, 0.1.11, hgsc || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Parsnp-Sapelo2|Parsnp]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PartitionFinder-Sapelo2|PartitionFinder]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PartitionFinder-Teaching|PartitionFinder]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PanOCT-Sapelo2|PanOCT]] || 3.23 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[PASA-Sapelo2|PASA]] || 2.5.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PASTA-Sapelo2|PASTA]] || 1.8.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PASTA-Teaching|PASTA]] || 1.8.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAUP-Sapelo2|PAUP]] || 4a165_centos64, 4a166_centos64 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pb-assembly-Sapelo2|Pb-assembly]] || 0.0.2, 0.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pbh5tools-Sapelo2 |pbh5tools]] || 0.8.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PBLAT-Sapelo2|PBLAT]] || 2.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pbmm2-Sapelo2|pbmm2]] || 1.0.0, 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pcawg-dkfz-workflow-Sapelo2|pcawg-dkfz-workflow]] || 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PBSuite-Sapelo2 |PBSuite]] || 15.8.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PCRE-Sapelo2 |PCRE]] || 8.38, 8.39, 8.41 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PeakRanger-Sapelo2|PeakRanger]] || 1.18 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PEAR-Sapelo2|PEAR]] || 0.9.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Perl-Sapelo2|Perl]] || 5.34.0, 5.34.1, 5.36.0, 5.36.1, 5.38.0, 5.38.2, 5.40.0, 5.40.2 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Perl-Teaching|Perl]] || 5.34.0, 5.34.1, 5.36.0, 5.36.1, 5.38.0, 5.38.2, 5.40.0, 5.40.2 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PETSc-Sapelo2|PETSc]] || 3.8.4 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PGDBG-Sapelo2|PGDBG]] || 18.10 || [[:Category:Debugger|Debugger]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PGDSpider-Sapelo2|PGDSpider]] || 2.1.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhaseGenomics-Sapelo2|PhaseGenomics]] || 20181220 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[phaser-Sapelo2 |phaser]] || 1.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhaseTank-Sapelo2|PhaseTank]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PHASIS-Sapelo2 |PHASIS]] || 3.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Phenix-Sapelo2|Phenix]] || 1.21.2-5419 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[Pong-Sapelo2|Pong]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
&amp;lt;!-- | [[Phobius-Sapelo2|Phobius]] || 1.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Phred/Phrap/Conced-Sapelo2|Phred/Phrap/Conced]] || Phred version: 0.071220.c, Phrap version: 0.990329, Consed version: 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Phycas-Sapelo2|Phycas]] || 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PHYLIP-Sapelo2|PHYLIP]] || 3.697 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloBayes-MPI-Sapelo2 |PhyloBayes-MPI]] || 20161021 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloCSF-Sapelo2 |PhyloCSF]] || 20180919 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloSift-Sapelo2 |PhyloSift]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloSkeleton-Sapelo2 |PhyloSkeleton]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[phyluce-Sapelo2|Phyluce]] || 1.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyML-Sapelo2|PhyML]] || 3.3.20170530 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyParts-Sapelo2|PhyParts]] || 0.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[picard-Sapelo2 |picard]] || 2.16.0, 2.21.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[picard-Teaching|Picard]] || 2.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PICRUSt-Sapelo2 |PICRUSt]] || 1.1.3, 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pigz-Sapelo2|pigz]] || 2.3.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PIL-Sapelo2|PIL]] || 1.1.7 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PILER-Sapelo2|PILER]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pilon-Sapelo2|Pilon]] || 1.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pilon-Teaching|Pilon]] || 1.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PlantCV-Sapelo2|PlantCV]] || 3.8.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Platypus-Sapelo2|Platypus]] || 0.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PLEK-Sapelo2|PLEK]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PLINK-Sapelo2|PLINK]] || 1.07, 1.9b, 2.0-alpha1, 2.0-alpha2, 2.0-alpha2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[plmc-Sapelo2|Plmc]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Porechop-Sapelo2|Porechop]] || 0.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PoSSuMsearch-Sapelo2|PoSSuMsearch]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pplacer-Sapelo2|Pplacer]] || 1.1.alpha19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Praat-Sapelo2|Praat]] || 6048-Linux64-nogui || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRANK-Sapelo2|PRANK]] || 170427 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRAPI-Sapelo2|PRAPI]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Primer3-Sapelo2|Primer3]] || 2.3.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRINSEQ-Sapelo2|PRINSEQ]] || 0.20.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ProbABEL-Sapelo2|ProbABEL]] || 0.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[prodigal-Sapelo2|Prodigal]] || 2.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[progressiveCactus-Sapelo2|progressiveCactus]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ProphET-Sapelo2 |ProphET]] || 20200323 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PROJ-Sapelo2|PROJ]] || 4.9.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Prokka-Sapelo2|Prokka]] || 1.13, 1.14.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Prokka-Teaching|Prokka]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[proovread-Sapelo2|proovread]] || 2.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[proovread-Teaching|Proovread]] || 2.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[protobuf-Sapelo2|protobuf]] || 3.3.0, 3.4.0, 3.6.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LADR-Teaching|prover9]] || 2009-11A || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PSI4-Sapelo2|PSI4]] || 1.3.2 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[psmc-Sapelo2|psmc]] || 0.6.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pVACtools-Sapelo2|pVACtools]] || 1.5.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyani-Sapelo2|pyani]] || 0.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pybedtools-Sapelo2|pybedtools]] || 0.7.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyCUDA-Sapelo2|PyCUDA]] || 2019.1.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyDNA-Sapelo2|pyDNA]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pydub-Sapelo2|pydub]] || 0.22.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyfasta-Sapelo2|pyfasta]] || 0.5.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyMOL-Sapelo2|PyMOL]] || 2.3.0a0 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyNBS-Sapelo2 |pyNBS]] || 0.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pynini-Teaching|Pynini]] || 2.0.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyPy-Sapelo2 |PyPy]] || 6.0.0 (2.7.14) || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pysam-Sapelo2 |Pysam]] || 0.10.0, 0.13.0, 0.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Python-Sapelo2 |Python]] || 2.7.18, 3.9.6, 3.10.4, 3.10.8, 3.11.3, 3.11.5, 3.12.3, 3.13.1, 3.13.5 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Python-Teaching|Python]] || 2.7.18, 3.9.6, 3.10.4, 3.10.8, 3.11.3, 3.11.5, 3.12.3, 3.13.1, 3.13.5  || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyTorch-Sapelo2|PyTorch]] || 0.3.1, 1.0.0, 1.2.0, 1.3.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyvcf-Sapelo2 |pyvcf]] || 0.6.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pweave-Teaching|Pweave]] || 0.30.3 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;Q&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[q2-brocc-Sapelo2|q2-brocc]] || 2018.6.0.dev0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QCTOOL-Sapelo2|QCTOOL]] || 2.0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[qiaseq-16S-Sapelo2|qiaseq-16S]] || 20190306 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[QIIME2-Sapelo2|QIIME2]] || 2020.6, 2023.2, 2023.5.1, 2023.7, 2023.9, 2024.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QIIME2-Teaching|QIIME2]] || 2018.4, 2018.6, 2018.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QIIME-Sapelo2|QIIME]] || 1.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QTLcartographer-Sapelo2|QTLcartographer]] || 1.17j || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Qualimap2-Sapelo2|Qualimap2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Quantum Espresso-Sapelo2|Quantum Espresso]] || 6.2.0, 6.3.0-QMCPACK-3.6.0-patch, 6.4.1, 6.5 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QUAST-Sapelo2|QUAST]] || 4.2, 4.6.1, 4.6.3, 5.0.0, 5.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QMCPACK-Sapelo2|QMCPACK]] || 3.6.0 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;R&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[R-Sapelo2 |R]] || 4.2.1, 4.3.1, 4.3.2, 4.4.1, 4.4.2, 4.5.1 ||[[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[R-Teaching|R]] || 4.2.1, 4.3.1, 4.3.2, 4.4.1, 4.4.2, 4.5.1  || [[:Category:Statistics|Statistics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[racon-Sapelo2 |Racon]] || 1.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[racon-Teaching |racon]] || 1.4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RaGOO-Sapelo2|RaGOO]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[randfold-Sapelo2|randfold]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RATT-Sapelo2|RATT]] || 20180710 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-NG-Sapelo2 |RAxML-NG]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-Sapelo2 |RAxML]] || 8.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-Teaching|RAxML]] || 8.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ray-Sapelo2 |Ray]] || 2.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Rcorrector-Sapelo2|Rcorrector]] || 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Realphy-Sapelo2|Realphy]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Reapr-Sapelo2|REAPR]] || 1.0.18 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RECON-Sapelo2|RECON]] || 1.08 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RedDog-Sapelo2|RedDog]] || 1beta.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Redundans-Sapelo2|Redundans]] || 0.14a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatExplorer-TAREAN-Sapelo2|RepeatExplorer-TAREAN]] || 11/09/2018 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatMasker-Sapelo2|RepeatMasker]] || 4.0.5, 4.0.7, 4.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatMasker-Teaching|RepeatMasker]] || 4.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Repeatmodeler-Sapelo2|Repeatmodeler]] || 1.0.11, 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatModeler-Teaching|RepeatModeler]] || 1.0.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatScout-Sapelo2|RepeatScout]] || 1.05 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatScout-Teaching|RepeatScout]] || 1.05 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[REPET-Sapelo2|REPET]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RESCRIPt-Sapelo2|RESCRIPt]] || 20200805 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RevBayes-Sapelo2|RevBayes]] || 1.0.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RevBayes-Teaching|RevBayes]] || 1.1.0, 1.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[RGAugury-Sapelo2|RGAugury]] || 20191115 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[rjags-Sapelo2|rjags]] || 4.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RMBlast-Sapelo2|RMBlast]] || 2.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Rmpi-Sapelo2|Rmpi]] || 0.6-6 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RNAmmer-Sapelo2|RNAmmer]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RNAz-Sapelo2|RNAz]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Roary-Sapelo2 |Roary]] || 3.12.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Rosetta-Sapelo2 |Rosetta]] || 2021.16.61629, 2022.46.334 ||[[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RSEM-Sapelo2 |RSEM]] || 1.3.0, 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RSeQC-Sapelo2 |RSeQC]] || 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Rstudio-Sapelo2|Rstudio]] || 2023.06.1-524 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Ruby-Sapelo2|Ruby]] || 2.5.0 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[runBNG-Sapelo2|runBNG]] || 1.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sailfish-Sapelo2|Sailfish]] || 0.10.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;S&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Sage-Sapelo2|Sage]] || 8.0, 9.0, 9.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Salmon-Sapelo2|Salmon]] || 0.8.2, 0.10.2, 0.13.1, 0.14.1, 1.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SalmonTools-Sapelo2|SalmonTools]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SALSA-Sapelo2|SALSA]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sambamba-Sapelo2|sambamba]] || 0.6.6, 0.6.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[samblaster-Sapelo2|samblaster]] || 0.1.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SAMtools-Sapelo2|SAMtools]] || 0.1.19, 1.1, 1.3.1, 1.6, 1.9, 1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;S&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[SAMtools-Teaching|SAMtools]] || 0.1.20, 1.6, 1.13, 1.14, 1.16.1, 1.18, 1.21 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SANN-Sapelo2|SANN]] || 20190528 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[SequenceTubeMap-Sapelo2|sequenceTubeMap]] || 20230906 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sbt-Sapelo2|sbt]] || 1.1.1 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scala-Sapelo2|scala]] || 2.12.4 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scikit-image-Sapelo2|scikit-image]] || 0.13.1, 0.14.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Scoary-Sapelo2|Scoary]] || 1.6.16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SCons-Sapelo2|SCons]] || 2.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SCOTCH-Sapelo2|SCOTCH]] || 6.0.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scram-Sapelo2|scram]] || 0.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[screen_assembly-Sapelo2|screen_assembly]] || 1.2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeaDAS-Sapelo2|SeaDAS]] || 7.5.3 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seaview-Sapelo2|seaview]] || 4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[selscan-Sapelo2|selscan]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Seq-Gen-Sapelo2|Seq-Gen]] || 1.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeqKit-Sapelo2|SeqKit]] || 0.10.1, 0.10.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeqKit-Teaching|SeqKit]] || 0.10.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seqqs-Sapelo2|seqqs]] || 20140225 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seqtk-Sapelo2|seqtk]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SGA-Sapelo2|SGA]] || 0.10.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Shannon-Sapelo2|Shannon]] || 20190826 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[shapeit-Sapelo2|shapeit]] || v2.r904 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Shasta-Sapelo2|Shasta]] || 0.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ShortStack-Sapelo2|ShortStack]] || 3.8.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sibelia-Sapelo2|Sibelia]] || 3.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SICER-Sapelo2|SICER]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SICERpy-Sapelo2|SICERpy]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sickle-Sapelo2|Sickle]] || 1.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SignalP-Sapelo2|SignalP]] || 4.1f || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Silix-Sapelo2|Silix]] || 1.2.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SimLoRD-Sapelo2|SimLoRD]] || 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SINE_Scan-Sapelo2|SINE_Scan]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[slda-Sapelo2|slda]] || 0.1.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[smoke-Sapelo2|smoke]] || 4.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Smoove-Sapelo2|Smoove]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SMRTLINK-Sapelo2|SMRTLINK]] || 5.1.0.26412, 6.0.0.47841, 7.0.1.66975, 8.0.0.79519 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SMRTLINK-Teaching|SMRTLINK]] || 5.0.1.9585, 5.1.0.26412 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Smudgeplot-Sapelo2|Smudgeplot]] || 0.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Snakemake-Sapelo2|Snakemake]] || 5.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNAP-Zoe-Sapelo2|SNAP-Zoe]] || 20060728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNAP-Zoe-Teaching|SNAP-Zoe]] || 20060728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sniffles-Sapelo2|Sniffles]] || 1.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SnoReport-Sapelo2|SnoReport]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Snippy-Sapelo2|Snippy]] || 4.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNP-ML-Sapelo2|SNP-ML]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[snpEff-Sapelo2|snpEff]] || 5.0e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[snpEff-Teaching|SnpEff]] || 4.3t || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNPhylo-Sapelo2|SNPhylo]] || 20160204 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[snp-sites-Sapelo2|snp-sites]] || 2.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPaligner-Sapelo2 |SOAPaligner]] || 2.21 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPdenovo2-Sapelo2|SOAPdenovo2]] || r240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPdenovo2-Teaching|SOAPdenovo2]] || r240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[somaticseq-Sapelo2|somaticseq]] || 3.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOP-GPU-Sapelo2|SOP-GPU]] || 20180404 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SortMeRNA-Sapelo2|SortMeRNA]] || 2.1, 3.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SoX-Sapelo2|SoX]] || 14.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPAdes-Sapelo2|SPAdes]] || 3.11.1, 3.12.0, 3.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPAdes-Teaching|SPAdes]] || 3.11.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[spams-Sapelo2|spams]] || 2.6.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spanki-Sapelo2|Spanki]] || 0.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spark-Sapelo2|Spark]] || 2.2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Speciesprimer-Sapelo2|Speciesprimer]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SpeedSeq-Sapelo2|SpeedSeq]] || 0.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spine-Sapelo2|Spine]] || 0.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SpliceGrapher-Sapelo2|SpliceGrapher]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Splitstree4-Sapelo2|Splitstree4]] || 4.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPM-Sapelo2|SPM]] || 12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[SRAToolKit-Sapelo2 |SRAToolKit]] || 3.0.1, 3.0.3 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sRNAWorkbench-Sapelo2|sRNAWorkbench]] || 4.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSAHA2-Sapelo2 |SSAHA2]] || 2.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSPACE-longread-Teaching|SSPACE-longread]] || 1-1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[SSPACE-STANDARD-Teaching|SSPACE-STANDARD]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSPACE-Sapelo2|SSPACE]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stacks-Sapelo2|Stacks]] || 1.48, 2.2, 2.3, 2.3b, 2.3d, 2.3e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stacks-Teaching|Stacks]] || 2.0, 1.48 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stampy-Sapelo2|Stampy]] || 1.0.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Fusion-Sapelo2|STAR-Fusion]] || 1.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Sapelo2|STAR]] || 2.5.3a, 2.6.0c, 2.6.1c, 2.7.1a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Teaching|STAR]] || 2.5.3a, 2.6.0c || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[StrAuto-Sapelo2|StrAuto]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[StringTie-Sapelo2|StringTie]] || 1.3.3, 1.3.4d, 2.0.3, 2.0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[StringTie-Teaching|StringTie]] || 2.2.3, 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[Structure-Sapelo2|Structure]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Structure-Teaching|Structure]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]]  || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Subread-Sapelo2|Subread]] || 1.6.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SUNTANS-Sapelo2|SUNTANS]] || 20180305 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Supernova-Sapelo2|Supernova]] || 2.0.1, 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SUPPA-Sapelo2|SUPPA]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SVDetect-Sapelo2|SVDetect]] || 0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[svtools-Sapelo2|svtools]] || 0.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SWIG-Sapelo2|SWIG]] || 3.0.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Synima-Sapelo2|Synima]] || 20181205 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Tabix-Sapelo2|Tabix]] || 0.2.6 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TASSEL-Sapelo2|TASSEL]] || 5.2.44 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tbl2asn-Sapelo2|Tbl2asn]] || 04172018, 03282019, 05012020 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TCSF_IMRA-Sapelo2|TCSF_IMRA]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TensorFlow-models-Sapelo2|TensorFlow-models]] || 20180620 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TensorFlow-Sapelo2|TensorFlow]] || 1.8.0, 1.10.1, 1.12.0, 1.14 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Theano-Sapelo2|Theano]] || 0.9.0, 1.0.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TigMint-Sapelo2|TigMint]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TMHMM-Sapelo2|TMHMM]] || 2.0c || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tmux-Sapelo2|tmux]] || 2.9 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tombo-Sapelo2|Tombo]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tophat-Sapelo2|Tophat]] || 2.1.0, 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TopHat-Teaching|TopHat]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[torchvision-Sapelo2|torchvision]] || 0.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TPP-Sapelo2|TPP]] || 5.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tqdm-Sapelo2|tqdm]] || 4.43.0, 4.44.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TransDecoder-Sapelo2|TransDecoder]] || 2.1.0, 5.3.0, 5.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transposome-Sapelo2|Transposome]] || 0.12.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transrate-Sapelo2|Transrate]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transrate-Sapelo2|Transrate]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TreeMix-Sapelo2|TreeMix]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TreeTime-Sapelo2|TreeTime]] || 0.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[trimAl-Sapelo2|TrimAl]] || 1.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trimmomatic-Sapelo2|Trimmomatic]] || 0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trimmomatic-Teaching|Trimmomatic]] || 0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trim_Galore-Sapelo2|Trim_Galore]] || 0.4.5, 0.6.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Trinity-Sapelo2|Trinity]] || 2.5.1, 2.8.4, 2.8.5, 2.15.1, 2.15.2  || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trinity-Teaching|Trinity]] || 2.6.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trinotate-Sapelo2|Trinotate]] || 3.1.1, 3.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tRNAscan-SE-Sapelo2|TRNAscan-SE]] || 2.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;U&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[UBCG-Sapelo2|UBCG]] || 3.0 &lt;br /&gt;
|[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[UCLUST-Sapelo2|UCLUST]] || 1.2.22q || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ucsc-Sapelo2|ucsc]] || 359 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[UMI-tools-Sapelo2|UMI-tools]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[UPP-Sapelo2|UPP]] || 3.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[USEARCH-Sapelo2|USEARCH]] || 10.0.240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Unicycler-Sapelo2|Unicycler]] || 0.4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;V&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[VarScan-Sapelo2|VarScan]] || 2.4.2 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCF-kit-Sapelo2|VCF-kit]] || 0.1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2diploid-Sapelo2|vcf2diploid]] || 0.2.6a || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2maf-Sapelo2|vcf2maf]] || 20200520 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2phylip-Sapelo2|vcf2phylip]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcflib-Sapelo2|vcflib]] || 20180410 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCFtools-Sapelo2|VCFtools]] || 0.1.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCFtools-Teaching|VCFtools]] || 0.1.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Velvet-Sapelo2|Velvet]] || 1.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Velvet-Teaching|Velvet]] || 1.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VelvetOptimiser-Sapelo2|VelvetOptimiser]] || 2.2.5, 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ViennaRNA-Sapelo2|ViennaRNA]] || 2.4.3, 2.4.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ViewBS-Sapelo2|ViewBS]] || 0.1.7, 0.1.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Vmatch-Sapelo2|Vmatch]] || 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VSEARCH-Sapelo2|VSEARCH]] || 2.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;W&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[WGS-Sapelo2|WGS]] || 8.3rc2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WASP-Sapelo2|WASP]] || 0.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WebLogo-Sapelo2|WebLogo]] || 3.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WEKA-Sapelo2|WEKA]] || 3.8.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WPS-Sapelo2|WPS]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WPS-Teaching|WPS]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Chem-Sapelo2|WRF-Chem]] || 3.6.1, 3.8.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Fire-Sapelo2|WRF-Fire]] || 20170221 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Sapelo2|WRF]] || 3.6.1, 3.8.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Teaching|WRF]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRFDA-Teaching|WRFDA]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WU Blast-Sapelo2|WU Blast]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;X&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[xdot-Teaching|xdot]] || 1.1 || [[:Category:Graphics|Graphics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |[[xforms-Sapelo2|xforms]] || 1.2.4 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;Y&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[YASRA-Sapelo2|YASRA]] || 2.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--LIST END--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
[[#top|Back To Top]] [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sapelo2]][[Category:Teaching]][[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Software&amp;diff=23077</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Software&amp;diff=23077"/>
		<updated>2026-07-21T19:28:09Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;On Sapelo2 and on the Teaching cluster users have the option to install their own software or use software installed centrally by the GACRC staff. Detailed information on how to find and access software packages installed on Sapelo2 are available at the [[Software on Sapelo2]] page and on the teaching cluster at the [[Software on Teaching Cluster]] page.&lt;br /&gt;
&lt;br /&gt;
Below is a very limited list of software packages installed on Sapelo2 and on the Teaching cluster. We only intend to make an application page for software packages that requires extra documentation not covered in [[Software on Sapelo2]] or [[Software on Teaching Cluster]].&lt;br /&gt;
&lt;br /&gt;
To view a list of all modules installed on Sapelo2/Teaching, along with a short description of each module, please run the following command on Sapelo2/Teaching:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;gcommand&amp;quot;&amp;gt;&lt;br /&gt;
module spider&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use the command above to search for a specific application. For more information, please see [[Lmod]].&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;file transfer&#039;&#039;&#039; nodes (&#039;&#039;&#039;xfer&#039;&#039;&#039; nodes) do not have environment modules installed. File transfer utilities are installed centrally on the xfer nodes and available on the users&#039; default PATH. Such utilities include bs (basespace-cli), fpsync, rclone, rsync, etc.&lt;br /&gt;
https://wiki.gacrc.uga.edu/wiki/Main_Page&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Although we have not made individual software pages for the applications installed on Sapelo2, there are currently over 1300 software packages installed there. For more information, please see [[Software on Sapelo2]].&lt;br /&gt;
&lt;br /&gt;
==Partial List of Installed Software==&lt;br /&gt;
Last updated &#039;&#039;&#039;{{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}&#039;&#039;&#039;. This is a partial list of installed software so there may be software or versions of software available on Sapelo2 which are not included in this table. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Click on the icons to the right of the column headings to sort the table.&lt;br /&gt;
[[#0|0-9]] [[#A|A]] [[#B|B]] [[#C|C]] [[#D|D]] [[#E|E]] [[#F|F]] [[#G|G]] [[#H|H]] [[#I|I]] [[#J|J]] [[#K|K]] [[#L|L]] [[#M|M]] [[#N|N]] [[#O|O]] [[#P|P]] [[#Q|Q]] [[#R|R]] [[#S|S]] [[#T|T]] [[#U|U]] [[#V|V]] [[#W|W]] [[#X|X]] [[#Y|Y]] [[#Z|Z]]&lt;br /&gt;
{|  width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;  cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200px&amp;quot;| Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; width=&amp;quot;240px&amp;quot;| Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;160px&amp;quot;| Category&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;60px&amp;quot;| Cluster&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;20px&amp;quot;| Top &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--LIST BEGIN--&amp;gt;&lt;br /&gt;
&amp;lt;!--| &amp;lt;span id =&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[3D-DNA-sapelo2 |3D-DNA]] || 180922 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--| &amp;lt;span id =&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[00Template-sapelo2 |00Template]] || 180922 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[3SEQ-Sapelo2 |3SEQ]] || 1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[4p-Sapelo2 |4p]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[ABySS-Sapelo2|ABySS]] || 1.9.0, 2.0.2, 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ADMIXTURE-Sapelo2|ADMIXTURE]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[aeneas-Sapelo2|aeneas]] || 1.7.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AFNI-Sapelo2|AFNI]] || 17.3.05 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AGAT-Sapelo2|AGAT]] || 0.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AGEnt-Sapelo2|AGEnt]] || 0.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AIM-HII-Sapelo2|AIM-HII]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[albacore-Sapelo2|Albacore]] || 2.3.4-cp35 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[AlphaFold-Sapelo2|AlphaFold 2]] || 2.3.1, 2.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;A&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[AlphaFold3-Sapelo2|AlphaFold 3]] || 3.0.0, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[AlignGraph-Sapelo2|AlignGraph]] || 20180709 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AlleleSeq_pipeline-Sapelo2|AlleleSeq_pipeline]] || 1.2a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ALLHiC-Sapelo2|ALLHiC]] || 0.8.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Allim-Sapelo2|Allim]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ALLMAPS-Sapelo2|ALLMAPS]] || 20190208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[AMBER-Sapelo2|AMBER]] || 22.4, 24.3 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AMBER-Teaching|AMBER]] || 22.4, 24.3 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AMOS-Sapelo2|AMOS]] || 3.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Anaconda2-Sapelo2|Anaconda2]] || 5.0.1, 2018.12, 2019.03 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Anaconda3-Sapelo2|Anaconda3]] || 5.0.1, 2018.12, 2019.03 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ANGEL-Sapelo2|ANGEL]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[annovar-Sapelo2|annovar]] || 2017Jul16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ANSYS-Sapelo2|ANSYS]] || 18.2, 19.2 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[antiSMASH-Sapelo2|antiSMASH]] || 4.2.0, 5.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[anvi&#039;o-Sapelo2|anvi&#039;o]] || 4, 5.1, 5.3, 5.4, 6.1, 7, 7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Apollo-Sapelo2|Apollo]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Aragorn-Sapelo2|Aragorn]] || 1.2.38 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Arlequin-Sapelo2|Arlequin]] || 3.5.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ART-Sapelo2|ART]] || 20160605 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ARCS-Sapelo2|ARCS]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Artemis-Sapelo2|Artemis]] || 17.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Artemis-Teaching|Artemis]] || 17.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ASTRAL-Sapelo2|ASTRAL]] || 5.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ATK-Sapelo2|ATk]] || 2.22.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ATLAS-Sapelo2|ATLAS]] || 3.10.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AUGUSTUS-Sapelo2|AUGUSTUS]] || 3.2.3, 3.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AUGUSTUS-Teaching|AUGUSTUS]] || 3.2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[AutoVOT-Sapelo2|AutoVOT]] || 0.93 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;B&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[bam2fastx-Sapelo2|bam2fastx]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
| | &amp;lt;span id =&amp;quot;B&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Bactopia-Sapelo2|Bactopia]] || 3.2.0, 4.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BamTools-Sapelo2|BamTools]] || 2.4.1, 2.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Barrnap-Sapelo2|Barrnap]] || 0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[basespace-cli-Sapelo2|basespace-cli]] || 1.2.1, 1.7.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Basset-Sapelo2|Basset]] || 20200107 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BayesAss-Sapelo2|BayesAss]] || 3.0.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BayeScan-Sapelo2|BayeScan]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bax2bam-Sapelo2|bax2bam]] || 0.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bazel-Sapelo2|Bazel]] || 0.8.1, 0.11.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BBMap-Sapelo2 |BBMap]] || 37.67, 38.73 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BCFtools-Sapelo2|BCFtools]] || 1.1, 1.3.1, 1.6, 1.8, 1.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BCFtools-Teaching|BCFtools]] || 1.3.1, 1.6, 1.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bcgTree-Sapelo2|bcgTree]] || 1.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[bcl2fastq-Sapelo2|bcl2fastq]] || 2.20.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[Beast-Sapelo2|Beast]] || 1.10.4, 2.6.7, 2.7.3, 2.7.7, 10.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDOPS-Sapelo2|BEDOPS]] || 2.4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDTools-Sapelo2|BEDTools]] || 2.17.0, 2.26.0, 2.28.0, 2.29.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BEDTools-Teaching|BEDTools]] || 2.26.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BerkeleyGW-Sapelo2|BerkeleyGW]] || 2.1 || [[:Category:Physics|Physics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bioawk-Sapelo2|bioawk]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioKanga-Sapelo2|BioKanga]] || 21.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Biom-format-Sapelo2|Biom-format]] || 2.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BionanoSolve-Sapelo2|BionanoSolve]] || 3.6.1-11162020 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioPerl-Sapelo2|BioPerl]] || 1.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BioPerl-Teaching|BioPerl]] || 1.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
| [[BioPython-Sapelo2|BioPython]] || 1.76, 1.79, 1.80, 1.83, 1.84, 1.85 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[Biopython-Teaching|Biopython]] || 1.76, 1.79, 1.80, 1.83, 1.84, 1.85 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Bismark-Sapelo2|Bismark]] || 0.20.0, 0.22.1, 0.22.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bismark-Teaching|Bismark]] || 0.22.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Bison-Sapelo2|Bison]] || 2.7, 3.0.2, 3.0.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLASR-Sapelo2|BLASR]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BLAST+-Sapelo2|BLAST+]] || 2.13.0, 2.14.1, 2.16.0, 2.17.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] ||[[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BLAST+-Teaching|BLAST+]] || 2.13.0, 2.14.1, 2.16.0, 2.17.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[BLAST-Sapelo2|BLAST]] || 2.2.26 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLAST-Teaching|BLAST]] || 2.2.26 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BLAT-Sapelo2|BLAT]] || 3.4, 3.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BlobTools-Sapelo2|BlobTools]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Blosc-Sapelo2|Blosc]] || 1.12.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BOLT-LMM-Sapelo2|BOLT-LMM]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Boost-Sapelo2|Boost]] || 1.54.0, 1.61.0, 1.63.0, 1.65.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Boto3-Sapelo2|Boto3]] || 1.9.14 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bowtie2-Sapelo2|Bowtie2]] || 2.4.4, 2.4.5, 2.5.1, 2.5.2, 2.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bowtie2-Teaching|Bowtie2]] || 2.4.4, 2.4.5, 2.5.1, 2.5.2, 2.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Bowtie-Sapelo2|Bowtie]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Bracken-Sapelo2|Bracken]] || 3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BRAKER-Sapelo2|BRAKER]] || 3.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[BreakDancer-Sapelo2|BreakDancer]] || 1.4.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[breseq-Sapelo2|breseq]] || 0.34.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BS-Seeker2-Sapelo2|BS-Seeker2]] || 2.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[BUSCO-Sapelo2|BUSCO]] || 5.8.3, 6.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[BUSCO-Teaching|BUSCO]] || 3.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BWA-Sapelo2|BWA]] || 0.7.15, 0.7.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[BWA-Teaching|BWA]] || 0.7.17, 0.7.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;C&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Caffe-Sapelo2|Caffe]] || 04082018 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;C&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[Cactus-Sapelo2|Cactus]] || 1.2.3, 2.0.3, 2.4.3, 2.4.4, 2.5.0, 2.6.0, 2.6.7, 2.6.9, 2.7.0, 2.9.0, 2.9.3, 2.9.9, 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[cairo-Sapelo2|cairo]] || 1.14.6, 1.14.10, 1.14.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Canu-Sapelo2|Canu]] || 2.3||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[canu-Teaching|Canu]] || 1.4, 1.5, 1.6, 1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CAP-miRSeq-Sapelo2|CAP-miRSeq]] || 05/20184 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CAP3-Sapelo2|CAP3]] || 03092015 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cBar-Sapelo2|cBar]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CD-HIT-Sapelo2|CD-HIT]] || 4.6.1-2012-08-27, 4.6.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cDNA_Cupcake-Sapelo2|CDNA_Cupcake]] || 5.9, 7.2, 8.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CDO-Sapelo2|CDO]] || 1.9.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CellProfiler-Sapelo2|CellProfiler]] || 3.1.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cellrange-Sapelo2|Cellrange]] || 3.0.1, 3.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[CellRanger-ATAC-Sapelo2|CellRanger-ATAC]] || 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CENSOR-Sapelo2|CENSOR]] || 4.2.29 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CFITSIO-Sapelo2|CFITSIO]] || 3.38 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CFOUR-Sapelo2|CFOUR]] || 1.2, 2.00-beta, 2.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CGAL-Sapelo2|CGAL]] || 4.11 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cgmaptools-Sapelo2|Cgmaptools]] || 0.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cgview_comparison_tool-Sapelo2|Cgview_comparison_tool]] || 2017.09.19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CheckM-Sapelo2|CheckM]] || 1.0.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Chimera-Sapelo2|Chimera]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Chimera-Teaching|Chimera]] || 1.16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Chromosomer-Sapelo2|Chromosomer]] || 0.1.3, 0.1.4a0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Chromosomer-Teaching|Chromosomer]] || 0.1.4a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[circlator-Sapelo2|circlator]] || 1.5.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Circos-Sapelo2|Circos]] || 0.69-6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cleaveland4-Sapelo2|Cleaveland4]] || 4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Click-Sapelo2|Click]] || 7.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClonalFrameML-Sapelo2|ClonalFrameML]] || 1.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClonalOrigin-Sapelo2|ClonalOrigin]] || 0.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Clust-Sapelo2|Clust]] || 1.9.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClustAGE-Sapelo2|ClustAGE]] || 0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Clustal-Omega-Sapelo2|Clustal-Omega]] || 1.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ClustalW2-Sapelo2|ClustalW2]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CMake-Sapelo2|CMake]] || 3.0.0, 3.4.3, 3.5.2, 3.6.1, 3.6.2, 3.7.2, 3.8.0, 3.9.1, 3.9.5, 3.10.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CNIT-Sapelo2|CNIT]] || 2020-05-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CNVnator-Sapelo2|CNVnator]] || 0.3.3, 0.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cogent-Sapelo2|Cogent]] || 3.5, 3.9, 6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Coinfinder-Sapelo2|Coinfinder]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CONCOCT-Sapelo2|CONCOCT]] || 1.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Consed-Sapelo2|Consed]] || 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cooler-Sapelo2|cooler]] || 0.8.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CPLEX-Sapelo2|CPLEX]] || 12.6.3 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[crest-Sapelo2|crest]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CRISPResso-Sapelo2|CRISPResso]] || 1.0.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[cryoSPARC-Sapelo2|CryoSPARC]] || 3.3.1 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Cromwell-Sapelo2|Cromwell]] || 56 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
|[[CUDA-Sapelo2|CUDA]] || 11.7.0, 11.8.0, 12.1.1, 12.4.0, 12.6.0, 12.8.0, 13.1.0 ||[[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[cuDNN-Sapelo2|cuDNN]] || 7.0.4, 7.2.1.38, 7.4.2.24 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cufflinks-Sapelo2|Cufflinks]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cufflinks-Teaching|Cufflinks]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cURL-Sapelo2|cURL]] || 7.49.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[cutadapt-Sapelo2|cutadapt]] || 1.9.1, 1.14, 1.16, 2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Cython-Sapelo2|Cython]] || 0.27.3, 0.28.5 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[CythonGSL-Sapelo2|CythonGSL]] || 0.2.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Cytoscape-Sapelo2|Cytoscape]] || 3.9.1, 3.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Cytoscape-Teaching|Cytoscape]] || 3.9.1, 3.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-  &lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;D&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Dadi-Sapelo2|Dadi]] || 1.7.0, 2.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Danpos2-Sapelo2|Danpos2]] || 2.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Darknet-Sapelo2|Darknet]] || 3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DAS_Tool-Sapelo2|DAS_Tool]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[datamash-Sapelo2|datamash]] || 1.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DBG2OLC-Sapelo2|DBG2OLC]] || 20170208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;!-- | [[DBG2OLC-Teaching|DBG2OLC]] || 20170208 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DDocent-Sapelo2|DDocent]] || 2.7.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DDSCAT-Sapelo2|DDSCAT]] || 7.3.2 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[decontaMiner-Sapelo2|decontaMiner]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[deepTools-Sapelo2|deepTools]] || 3.0.2, 3.2.1, 3.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DeepVariant-Sapelo2|DeepVariant]] || 0.7.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Delft3d-Sapelo2|Delft3d]] || 20190610 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[delineate-Sapelo2|delineate]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DendroPy-Sapelo2|DendroPy]] || 4.3.0, 4.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[detectMITE-Sapelo2|detectMITE]] || 20170425 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[detonate-Sapelo2|detonate]] || 1.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIAMOND-Sapelo2|DIAMOND]] || 0.8.31, 0.9.19, 0.9.22, 0.9.24, 0.9.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIAMOND-Teaching|DIAMOND]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DISCOVARdenovo-Sapelo2|DISCOVARdenovo]] || 52488 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DIYABC-Sapelo2|DIYABC]] || 2.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DiscoVista-Sapelo2|DiscoVista]] || 20190429 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Distruct-Sapelo2|Distruct]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DLCpar-Sapelo2|DLCpar]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Domainoid-Sapelo2|Domainoid]] || 20200127 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Doxygen-Sapelo2|Doxygen]] || 1.8.7, 1.8.11, 1.8.13 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |  [[DRAM-bio-Sapelo2|DRAM-bio]] || 1.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|--&amp;gt;&lt;br /&gt;
| [[dMRIharmonization-Sapelo2|dMRIharmonization]] || 20240227 || [[:Category:Engineering|Engineering]]|| [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|--&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[dRep-Sapelo2|dRep]] || 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DSSP-Sapelo2|DSSP]] || 3.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DyNet-Sapelo2|DyNet]] || 2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[DyNet-Teaching|DyNet]] || 2.0.3 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;E&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[EDGE-pro-Sapelo2|EDGE-pro]] || 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[EGAPx-Sapelo2|EGAPx]] || N/A || [[:Category:Bioinformatics|Bioinformatics]] || N/A || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[eggNOG-Mapper-Sapelo2|EggNOG-Mapper]] || 1.0.3, 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Eigen-Sapelo2|Eigen]] || 3.2.3, 3.3.5 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[EIGENSOFT-Sapelo2|EIGENSOFT]] || 7.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;E&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[EIGENSOFT-Teaching|EIGENSOFT]] || 7.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[Flankophile-Sapelo2|Flankophile]] || N/A || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[EMBOSS-Sapelo2|EMBOSS]] || 6.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EMBOSS-Teaching|EMBOSS]] || 6.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EMMAX-Sapelo2|EMMAX beta]] || beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ensembl-VEP-Sapelo2|Ensembl-VEP]] || 20180914 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EnTAP-Sapelo2|EnTAP]] || 0.8.4 beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[epic2-Sapelo2|epic2]] || 0.0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EricScript-Sapelo2|EricScript]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ESMF-Sapelo2|ESMF]] || 7.0.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[eSpeak-Sapelo2|eSpeak]] || 1.48.04 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ete-Sapelo2|Ete]] || 3.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EVcouplings-Sapelo2|EVcouplings]] || 0.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[EVidenceModeler-Sapelo2|EVidenceModeler]] || 0.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Exonerate-Sapelo2 |Exonerate]] || 2.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Exonerate-Teaching|Exonerate]] || 2.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;F&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;!-- [[FALCON-Sapelo2|FALCON]] || 02282018_unzip || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Fast-Plast-Sapelo2|Fast-Plast]] || 1.2.6, 1.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] |&amp;lt;!-- | [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FASTA-Sapelo2|FASTA]] || 36.3.5e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fast-GeP-Sapelo2|fast-GeP]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastME-Sapelo2|FastME]] || 2.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQC-Sapelo2|FastQC]] || 0.11.5,0.11.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQValidator-Sapelo2|FastQValidator]] || 0.1.1a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastQ_Screen-Sapelo2|FastQ_Screen]] || 0.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fastSTRUCTURE-Sapelo2|FastSTRUCTURE]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastTree-Sapelo2 |FastTree]] || 2.1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FastViromeExplorer-Sapelo2|FastViromeExplorer]] || 20180918 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FASTX-Toolkit-Sapelo2|FASTX-Toolkit]] || 0.0.14 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FFmpeg-Sapelo2|FFmpeg]] || 3.1.3, 3.4.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FFTW-Sapelo2|FFTW]] || 3.3.4, 3.3.6, 3.3.7 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FIAT-Sapelo2|FIAT]] || 1.6.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fineSTRUCTURE-Sapelo2|fineSTRUCTURE]] || 2.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FLASH-Sapelo2|FLASH]] || 1.2.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FLTK-Sapelo2|FLTK]] || 1.3.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Flye-Sapelo2|Flye]] || 2.3.6, 2.6, 2.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FoX-Sapelo2|FoX]] || 4.1.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freebayes-Sapelo2|Freebayes]] || 1.2.0, 1.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freebayes-Teaching|Freebayes]] || 1.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[freesasa-Sapelo2|freesasa]] || 2.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FriBidi-Sapelo2|FriBidi]] || 1.0.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Funannotate-Sapelo2|Funannotate]] || 1.8.15, 1.8.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[FuzzyWuzzy-Sapelo2|FuzzyWuzzy]] || 0.17.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[fxtract-Sapelo2|fxtract]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;G&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[G2gtools-Sapelo2|g2gtools]] || 0.2.9 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAG-Sapelo2|GAG]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAG-Teaching|GAG]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAMESS-Sapelo2|GAMESS]] || 14Feb2018 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GapFiller-Sapelo2|GapFiller]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GapFiller-Teaching|GapFiller]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAPIT-Sapelo2|GAPIT]] || 20180524 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GAPPadder-Sapelo2|GAPPadder]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GARLI-Sapelo2|GARLI]] || 2.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GATK-Sapelo2|GATK]] || 3.4-0, 3.8-0, 3.8-1, 4.0.3.0, 4.0.11.0, 4.1.0.0, 4.1.2.0, 4.1.5.0, 4.1.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GATK-Teaching|GATK]] || 3.8-0, 3.4-0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;G&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[GAUSSIAN-Sapelo2|GAUSSIAN]] || 09, 16 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[GAUSSIAN-Teaching|GAUSSIAN]] || 09, 16 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[GaussView-Sapelo2|GaussView]] || 5, 6.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GaussView-Teaching|GaussView]] || 6.1 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[GBlocks-Sapelo2|GBlocks]] || 0.91b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GCTA-Sapelo2 |GCTA]] || 1.26.0, 1.93.0-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GD-Sapelo2|GD]] || 2.66 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GDAL-Sapelo2|GDAL]] || 2.1.0, 2.2.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gdc-client-Sapelo2 |gdc-client]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Gdk-pixbuf-Sapelo2|Gdk-pixbuf]] || 2.36.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEAN-Sapelo2|GEAN]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GEM-Sapelo2|GEM]] || 1.5.1 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEM-library-Sapelo2 |GEM-library]] || 20130406-045632 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMark.hmm.eukaryotic-Sapelo2|GeneMark.hmm.eukaryotic]] || 4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[GeneMarkES-Sapelo2|GeneMark-ET]] || 4.71 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--| [[GeneMarkES-Teaching|GeneMarkES]] || 4.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMarkS-T-Sapelo2|GeneMarkS-T]] || 4.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GeneMarkS-Sapelo2|GeneMarkS]] || 4.30 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenericRepeatFinder-Sapelo2|GenericRepeatFinder]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenMap-Sapelo2|GenMap]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genocore-Sapelo2|Genocore]] || 2020-05-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genome-Sapelo2|Genome]] || Phred version: 0.071220.c, Phrap version: 0.990329, Consed version: 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GenomeTools-Sapelo2|GenomeTools]] || 1.5.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Genrich-Sapelo2|Genrich]] || 0.5, 0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GEOS-Sapelo2|GEOS]] || 3.6.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_HOMOLOGUES-Sapelo2|GET_HOMOLOGUES]] || 1.7.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_HOMOLOGUES-Teaching|GET_HOMOLOGUES]] || 1.7.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GET_PHYLOMARKERS-Sapelo2|GET_PHYLOMARKERS]] || 1.2.11, 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gfaviz-Sapelo2|gfaviz]] || 1.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Gffcompare-Sapelo2|Gffcompare]] || 0.10.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gffread-Sapelo2|gffread]] || 0.9.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GFlow-Sapelo2|GFlow]] || 0.1.7 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ghostscript-Sapelo2|Ghostscript]] || 9.20, 9.22 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GISTIC-Sapelo2|GISTIC]] || 2.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gkin-Sapelo2|Gkin]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GL2PS-Sapelo2|GL2PS]] || 1.4.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLib-Sapelo2|GLib]] || 2.49.5, 2.53.5, 2.54.3 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLIMMER-Sapelo2|GLIMMER]] || 3.02b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLIMMER-Teaching|GLIMMER]] || 3.02b || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GLPK-Sapelo2|GLPK]] || 4.63, 4.65 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GMAP-GSNAP-Sapelo2|GMAP-GSNAP]] || 2016-11-07, 2018-07-04 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GMP-Sapelo2|GMP]] || 4.3.2, 6.1.1, 6.1.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gnuplot-Sapelo2|gnuplot]] || 5.0.5 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GObject-Introspection-Sapelo2|GObject-Introspection]] || 1.49.1, 1.54.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[gocryptfs-Sapelo2|gocryptfs]] || 2.2.1, 2.5.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[grace-Sapelo2|grace]] || 5.1.25 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GraftM-Sapelo2|GraftM]] || 0.11.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GraphicsMagicK-Sapelo2|GraphicsMagicK]] || 1.3.28 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Graphviz-Sapelo2|Graphviz]] || 2.40.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GROCSVs-Sapelo2|GROCSVs]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  [[GROMACS-Sapelo2 |GROMACS]] ||  2023.4, 2024.4 ||[[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GSL-Sapelo2|GSL]] || 1.16, 2.1, 2.3. 2.4, 2.5 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GStreamer-Sapelo2|GStreamer]] || 1.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTDBTk-Sapelo2|GTDBTk]] || 0.2.2, 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[gtftogenepred-Sapelo2|gtftogenepred]] || 377-3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTK+-Sapelo2|GTK+]] || 2.24.31 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[GTS-Sapelo2|GTS]] || 0.7.6 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Guile-Sapelo2|Guile]] || 1.8.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;H&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[h5py-Sapelo2|h5py]] || 2.7.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HapCUT-Sapelo2|HapCUT]] || 0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HapCUT2-Sapelo2|HapCUT2]] || 20190606 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HarfBuzz-Sapelo2|HarfBuzz]] || 1.3.1, 1.7.5 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HARP-Sapelo2|HARP]] || 140925_103521 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Harvest-Teaching|Harvest]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HarvestTools-Sapelo2|HarvestTools]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HH-suite-Sapelo2|HH-suite]] || 3.0-beta.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HiC-Pro-Sapelo2|HiC-Pro]] || 2.11.0-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Hinge-Sapelo2|Hinge]] || 0.5.0-4-deb_cv1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[hindex-Sapelo2|hindex]] || 1.42 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[HISAT2-Sapelo2|HISAT2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;H&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[HISAT2-Teaching|HISAT2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[HMMER-Sapelo2|HMMER]] || 2.3, 3.1b2, 3.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Homer-Sapelo2|Homer]] || 4.9.1, 4.10, 4.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Homer-Teaching|Homer]] || 4.9.1, 4.10, 4.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[HpcGridRunner-Sapelo2|HPCGridRunner]] || 1.0.2 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[htop-Sapelo2|htop]] || 2.0.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSeq-Sapelo2|HTSeq]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSeq-Teaching|HTSeq]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTSlib-Sapelo2|HTSlib]] || 1.3.2, 1.6, 1.8 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HTStream-Sapelo2|HTStream]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HUMAnN2-Sapelo2|HUMAnN2]] || 0.11.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HybPiper-Sapelo2|HybPiper]] || 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[HyPhy-Sapelo2|HyPhy]] || 2.5.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Hypre-Sapelo2|Hypre]] || 2.11.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[ICORN2-Sapelo2|ICORN2]] || 0.95 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span id =&amp;quot;I&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[iCommands-Sapelo2|iCommands]] || 4.2.8 || [[:Category:Tools|Tools]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[IDBA-UD-Sapelo2|IDBA-UD]] || 1.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IDR-Sapelo2|IDR]] || 2.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IgBlast-Sapelo2 | IgBlast]] || 1.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGV-Sapelo2 |IGV]] || 2.4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGV-Teaching |IGV]] || 2.4.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IGVTools-Sapelo2 |IGVTools]] || 2.3.98 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[illumiprocessor-Sapelo2 |illumiprocessor]] || 2.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ImageMagick-Sapelo2|ImageMagick]] || 7.0.5, 7.0.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Infernal-Sapelo2|Infernal]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IonCom-Sapelo2|IonCom]] || 20190521  || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[InterProScan-Sapelo2|InterProScan]] || 5.55-88.0, 5.64-96.0, 5.73-104.0, 5.75-106.0, 5.76-107.0 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ipyrad-Sapelo2|ipyrad]] || 0.7.24, 0.7.28, 0.7.30, 0.9.19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ipyrad-Teaching|Ipyrad]] || 0.7.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IPython-Sapelo2|IPython]] || 5.3.0, 6.2.1, 7.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[IQ-Tree-Sapelo2|IQ-Tree]] ||  2.2.2.7, 2.3.5, 2.3.6, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[IQ-Tree-Teaching|IQ-Tree]] || 2.2.2.7, 2.3.5, 2.3.6, 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[IRMA-Sapelo2|IRMA]] || 0.6.7, 0.9.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ISGPipeline-Sapelo2|ISGPipeline]] || 0.16.10-3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IsONclust-Sapelo2 |IsONclust]] || 0.0.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[IsoSeq3-Sapelo2|IsoSeq3]] || 3.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ITSTool-Sapelo2|ITSTool]] || 2.0.4 || [[:Category:Utility|Utility]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;J&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[JAGS-Sapelo2|JAGS]] || 4.3.0 || [[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JasPer-Sapelo2|JasPer]] || 1.900.1, 2.0.12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Java-Sapelo2|Java]] || 1.8.0_92, 1.8.0_112, 1.8.0_121, 1.8.0_141, 1.8.0_144, 1.8.0_202 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;J&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Java-Teaching|Java]] || 1.8.0_241, 1.8.0_311, 8.402, 11.0.20, 17.0.6, 21.0.2, 21.0.5, 25.36 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[jcvi-Sapelo2|jcvi]] || 0.8.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Jellyfish-Sapelo2|Jellyfish]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JModelTest-Sapelo2|JModelTest]] || 2.1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Juicer-Sapelo2|Juicer]] || 1.5.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Julia-Sapelo2|Julia]] || 1.3.1|| [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[JUnit-Sapelo2|JUnit]] || 4.12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Jupyter-Sapelo2|Jupyter]] || 6.5.6, 7.0.2, 7.2.0, 7.2.3, 7.4.4, 7.4.5, 7.4.7 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Jupyter-Teaching|Jupyter]] || 6.4.12 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;K&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Kaiju-Sapelo2|Kaiju]] || 1.6.2, 1.7.3 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[kallisto-Sapelo2|kallisto]] || 0.43.1, 0.46.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[kallisto-Teaching|kallisto]] || 0.43.1, 0.46.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KAT-Sapelo2|KAT]] || 2.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Kent_tools-Sapelo2|Kent_tools]] || 20190208, 20200512 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[keras-Sapelo2|keras]] || 2.0.6, 2.2.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KinFin-Sapelo2|KinFin]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KmerGenie-Sapelo2|KmerGenie]] || 1.7044 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KmerGenie-Teaching|KmerGenie]] || 1.7044 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Kraken2-Sapelo2|Kraken2]] || 2.0.7-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[KronaTools-Sapelo2|KronaTools]] || 2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;L&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[LADR-Teaching|LADR]] || 2009-11A || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LAME-Sapelo2|LAME]] || 3.100 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;L&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[LAMMPS-Sapelo2|LAMMPS]] || 22Jul2025, 29Aug2024 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[LAPACK-Sapelo2|LAPACK]] || 3.6.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LAST-Sapelo2|LAST]] || 956, 959, 1047 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LASTZ-Sapelo2|LASTZ]] || 1.04.00 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LDhat-Sapelo2|LDhat]] || 2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LDhelmet-Sapelo2|LDhelmet]] || 1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Leafcutter-Sapelo2|Leafcutter]] || 0.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Lep-MAP3-Sapelo2|Lep-MAP3]] || 0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[libssh2-Sapelo2|libssh2]] || 1.9.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LibStatGen-Sapelo2|LibStatGen]] || 1.0.14 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LibTIFF-Sapelo2|LibTIFF]] || 4.0.6, 4.0.8, 4.0.9 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LINKS-Sapelo2|LINKS]] || 1.8.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LittleCMS-Sapelo2|LittleCMS]] || 2.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LLVM-Sapelo2|LLVM]] || 3.8.1, 4.0.0, 5.0.1, 6.0.0 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LMDB-Sapelo2|LMDB]] || 0.9.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoFreq-Sapelo2|LoFreq]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Log-Log4perl-Sapelo2|Log-Log4perl]] || 1.49 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LongRanger-Sapelo2|LongRanger]] || 2.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoRDEC-Sapelo2|LoRDEC]] || 0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LoRMA-Sapelo2|LoRMA]] || 0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LRCstats-Sapelo2|LRCstats]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[lrslib-Sapelo2|lrslib]] || 6.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LS-DYNA-Sapelo2|LS-DYNA]] || 10.123355 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LS-PrePost-Sapelo2|LS-PrePost]] || 4.5 || [[:Category:Engineering|Engineering]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LtrDetector-Sapelo2|LtrDetector]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LTR_Finder-Sapelo2|LTR_Finder]] || 1.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LTR_retriever-Sapelo2|LTR_retriever]] || 1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LUMPY-Sapelo2|LUMPY]] || 0.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LZO-Sapelo2|LZO]] || 2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;M&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[M4-Sapelo2|M4]] || 1.4.16, 1.4.17, 1.4.17 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MacSyFinder-Sapelo2|MacSyFinder]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Macs2-Sapelo2|MACS2]] || 2.1.1, 2.1.2, 2.2.7.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAFFT-Sapelo2|MAFFT]] || 7.273, 7.313, 7.397, 7.407, 7.453, 7.470 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAFFT-Teaching|MAFFT]] || 7.130, 7.273, 7.313 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Magic-BLAST-Sapelo2|Magic-BLAST]] || 1.4.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Magma-GPU-Sapelo2|Magma-GPU]] || 2.3.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;M&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Magma-Sapelo2|Magma]] || 2.27-1, 2.28-27 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[mahotas-Sapelo2|mahotas]] || 1.4.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAJIQ-Sapelo2|MAJIQ]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Maker-Sapelo2|Maker]] || 3.01.04 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[Maker-Teaching|Maker]] || 2.31.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mako-Sapelo2|Mako]] || 1.0.4, 1.0.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MAnorm-Sapelo2|MAnorm]] || 1.1.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MARVEL-Sapelo2|MARVEL]] || 20180918 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mash-Sapelo2|Mash]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MashMap-Sapelo2|MashMap]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaSIF-Sapelo2|MaSIF]] || 20200722 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaSuRCA-Sapelo2|MaSuRCA]] || 3.2.2, 3.2.9, 3.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mathematica-Sapelo2|Mathematica]] || 12.1 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[MATLAB-Sapelo2|MATLAB]] || R2023b || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[MatLab-Teaching|Matlab]] || R2018b || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Matplotlib-Sapelo2|Matplotlib]] || 1.5.3, 2.0.2, 2.1.0, 2.1.2, 2.2.3, 3.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mauve-Sapelo2|Mauve]] || 2015-02-13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Maven-Sapelo2|Maven]] || 3.5.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mawk-Sapelo2|Mawk]] || 1.3.4|| [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MaxBin-Sapelo2|MaxBin]] || 2.2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MCL-Sapelo2|MCL]] || 14.137 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MCScanX-Sapelo2 |MCScanX]] || 0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Medaka-Sapelo2 |Medaka]] || 0.9.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Medusa-Sapelo2 |Medusa]] || 1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MEGA-Sapelo2 |MEGA]] || 7.0.26-1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MEGAHIT-Sapelo2 |MEGAHIT]] || 1.1.1, 1.1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Megalodon-Sapelo2|Megalodon]] || 0.1.0, 1.0.0, 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Megam-Teaching|Megam]] || 0.92 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MeGAMerge-Sapelo2|MeGAMerge]] || 3.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MEME-Sapelo2|MEME]] || 4.11.0, 5.0.0_1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Meraculous-Sapelo2|Meraculous]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mercurial-Sapelo2 |Mercurial]] || 4.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mesa-Sapelo2 |Mesa]] || 12.0.2, 17.3.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MET-Sapelo2 |MET]] || 7.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MetaBAT-Sapelo2|MetaBAT]] || 2.12.1, 2.15-4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[METABOLIC-Sapelo2|METABOLIC]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MetaCLADE-Sapelo2|MetaCLADE]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[MetaPhlAn4-Sapelo2|MetaPhlAn4]] || 4.0.3.1, 4.0.6, 4.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MetaPhlAn2-Sapelo2|MetaPhlAn2]] || 2.7.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[methylpy-Sapelo2|methylpy]] || 1.2.9, 1.3.2, 1.4.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[METIS-Sapelo2|METIS]] || 5.1.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MG-RAST-Tools-Sapelo2 |MG-RAST-Tools]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minced-Sapelo2|minced]] || 0.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Minia-Sapelo2|Minia]] || 3.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miniasm-Sapelo2|miniasm]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miniasm-Teaching|miniasm]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Miniconda3-Sapelo2|Miniconda3]] || 4.4.10 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minimap2-Sapelo2|minimap2]] || 2.10, 2.13, 2.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[minimap2-Teaching|minimap2]] || 2.10, 2.13, 2.17 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MinPath-Sapelo2|MinPath]] || 1.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MIonSite-Sapelo2|MIonSite]] || 20190528 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mip-Sapelo2|mip]] || 1.7.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Mirdeep-p-Sapelo2|mirdeep-p]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MiRDeep2-Sapelo2|miRDeep2]] || 0.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[miRDP2-Sapelo2|MiRDP2]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MISO-Sapelo2|MISO]] || 0.5.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITE-Hunter-Sapelo2|MITE-Hunter]] || 11-2011 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITE-Tracker-Sapelo2|MITE-Tracker]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MITObim-Sapelo2|MITObim]] || 1.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MitoZ-Sapelo2|MitoZ]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[mmquant-Sapelo2|mmquant]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Montreal Forced Aligner-Sapelo2|Montreal Forced Aligner]] || 1.0.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
| [[MOTECC_qmdcp-Teaching|MOTECC_qmdcp]] || 90 || [[:Category:Chemistry|Chemistry]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Mothur-Sapelo2|Mothur]] || 1.45.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[motif-Sapelo2|motif]] || 2.3.5, 2.3.8 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MPJ-Express-Sapelo2|MPJ-Express]] || 0.44 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MrBayes-Sapelo2|MrBayes]] || 3.2.6, 3.2.7a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[MREPS-Sapelo2|MREPS]] || 1.0.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ms-Teaching|ms]] || 20140304 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSG-Sapelo2|MSG]] || 0.4.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSG-Teaching|MSG]] || 0.4.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MSTmap-Sapelo2|MSTmap]] || 20181130 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MultiQC-Sapelo2|MultiQC]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUMmer-Sapelo2|MUMmer]] || 3.23, 4.0.0beta2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUMmer-Teaching|MUMmer]] || 3.23 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MUSCLE-Sapelo2|MUSCLE]] || 3.8.1551, 3.8.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MuTect-Sapelo2|MuTect]] || 1.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MuTect-Teaching|MuTect]] || 1.1.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[muver-Sapelo2|muver]] || 0.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[mvqtlcim-Sapelo2|mvqtlcim]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[MZmine2-Sapelo2|MZmine2]] || 2.40.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;N&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Nsight-Compute-CLI-Sapelo2|Nsight Compute CLI]] || 2024.3.0.0, 2025.1.0.0, 2025.4.0.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;N&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[NAL_RNA_seq_annotation-Sapelo2|NAL_RNA_seq_annotation]] ||20200728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NAMD-Sapelo2|NAMD]] || 2.13 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nanocorr-Sapelo2|Nanocorr]] || 5.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NanoFilt-Sapelo2|NanoFilt]] || 2.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NanoPlot-Sapelo2|NanoPlot]] || 1.26.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nanopolish-Sapelo2|Nanopolish]] || 0.10.2, 0.11.1, 0.12.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NASM-Sapelo2|NASM]] || 2.11, 2.12, 2.13 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NBO-Sapelo2|NBO]] || 7.0 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCCL-Sapelo2|NCCL]] || 2.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCL-Sapelo2|NCL]] || 6.4.0, 6.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCL-Teaching|NCL]] || 6.4.0, 6.5.0  || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ncview-Sapelo2|ncview]] || 2.1.7 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCO-Sapelo2|NCO]] || 4.7.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NCO-Teaching|NCO]] || 4.7.4 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Necklace-Sapelo2|Necklace]] || 1.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NeEstimator-Sapelo2|NeEstimator]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Neptune-Sapelo2|Neptune]] || 1.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NetSurfP-Sapelo2|NetSurfP]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Newbler-Sapelo2|Newbler]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nextflow-Sapelo2|Nextflow]] || 18.10.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NextGenMap-Sapelo2|NextGenMap]] || 0.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ngmlr-Sapelo2|ngmlr]] || 0.2.6-beta || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGmerge-Sapelo2|NGmerge]] || 0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGS-Sapelo2|NGS]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGSEPcore-Sapelo2|NGSEPcore]] || 3.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ngsplot-Sapelo2|ngsplot]] || 2.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NGSQCToolkit-Sapelo2|NGSQCToolkit]] || 2.3.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[nhPhyML-Sapelo2|nhPhyML]] || 20180515 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NiBabel-Sapelo2|NiBabel]] || 2.2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[nistats-Sapelo2|nistats]] || 0.0.1a0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NLopt-Sapelo2|NLopt]] || 2.4.2 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Nseg-Sapelo2|Nseg]] || 20180530 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NucleoATAC-Sapelo2|NucleoATAC]] || 0.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[NWChem-Sapelo2|NWChem]] || 6.8 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;O&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Oases-Sapelo2|Oases]] || 0.2.08, 0.2.09 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OCaml-Sapelo2|OCaml]] || 4.01.0, 4.02.3 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;O&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Ont-Guppy-Sapelo2|Ont-Guppy]] || 6.5.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[OpenBUGS-Sapelo2|OpenBUGS]] || 3.2.3 || [[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenCV-Sapelo2|OpenCV]] || 3.4.1, 3.4.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenJPEG-Sapelo2|OpenJPEG]] || 2.3.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenSlide-Sapelo2|OpenSlide]] || 3.4.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OpenSlide-Python-Sapelo2|OpenSlide-Python]] || 1.1.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[ORCA-Sapelo2 |ORCA]] || 4.2.1, 5.0.4 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[OrfM-Sapelo2|OrfM]] || 0.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OrganelleRef_PBA-Sapelo2|OrganelleRef_PBA]] || 1.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ORGanelle_ASeMbler-Sapelo2|ORGanelle_ASeMbler]] || 0.2.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ORGanelle_ASeMbler-Sapelo2|ORGASM]] || 0.2.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|[[ORP-Sapelo2|ORP]] || 2.2.6, 2.2.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[OrthoFinder-Sapelo2|OrthoFinder]] || 2.5.4, 2.5.5 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[OrthoFinder-Teaching|OrthoFinder]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt; [[OrthoMCL-Sapelo2|OrthoMCL]] || 2.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;P&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[p7zip-Sapelo2|p7zip]] || 16.02 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAGIT-Sapelo2|PAGIT]] || 1.64 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pairix-Sapelo2|Pairix]] || 0.3.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pairtools-Sapelo2|pairtools]] || 0.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pal_finder-Sapelo2|Pal_finder]] || 0.02.04 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAML-Sapelo2|PAML]] || 4.9h || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;P&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[PAML-Teaching|PAML]] || 4.9j, 4.10.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[PANDAseq-Sapelo2 |PANDAseq]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pangloss-Sapelo2 |Pangloss]] || 0.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pango-Sapelo2 |Pango]] || 1.40.3, 1.41.1 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Panoply-Sapelo2|Panoply]] || 4.11.6 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Parliament2-Sapelo2|Parliament2]] || 0.1.8, 0.1.11, hgsc || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Parsnp-Sapelo2|Parsnp]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PartitionFinder-Sapelo2|PartitionFinder]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PartitionFinder-Teaching|PartitionFinder]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PanOCT-Sapelo2|PanOCT]] || 3.23 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[PASA-Sapelo2|PASA]] || 2.5.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PASTA-Sapelo2|PASTA]] || 1.8.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PASTA-Teaching|PASTA]] || 1.8.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PAUP-Sapelo2|PAUP]] || 4a165_centos64, 4a166_centos64 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pb-assembly-Sapelo2|Pb-assembly]] || 0.0.2, 0.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pbh5tools-Sapelo2 |pbh5tools]] || 0.8.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PBLAT-Sapelo2|PBLAT]] || 2.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pbmm2-Sapelo2|pbmm2]] || 1.0.0, 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pcawg-dkfz-workflow-Sapelo2|pcawg-dkfz-workflow]] || 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PBSuite-Sapelo2 |PBSuite]] || 15.8.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PCRE-Sapelo2 |PCRE]] || 8.38, 8.39, 8.41 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PeakRanger-Sapelo2|PeakRanger]] || 1.18 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PEAR-Sapelo2|PEAR]] || 0.9.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Perl-Sapelo2|Perl]] || 5.34.0, 5.34.1, 5.36.0, 5.36.1, 5.38.0, 5.38.2, 5.40.0, 5.40.2 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Perl-Teaching|Perl]] || 5.34.0, 5.34.1, 5.36.0, 5.36.1, 5.38.0, 5.38.2, 5.40.0, 5.40.2 || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PETSc-Sapelo2|PETSc]] || 3.8.4 || [[:Category:Math Library|Math Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PGDBG-Sapelo2|PGDBG]] || 18.10 || [[:Category:Debugger|Debugger]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PGDSpider-Sapelo2|PGDSpider]] || 2.1.1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhaseGenomics-Sapelo2|PhaseGenomics]] || 20181220 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[phaser-Sapelo2 |phaser]] || 1.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhaseTank-Sapelo2|PhaseTank]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PHASIS-Sapelo2 |PHASIS]] || 3.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Phenix-Sapelo2|Phenix]] || 1.21.2-5419 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[Pong-Sapelo2|Pong]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
&amp;lt;!-- | [[Phobius-Sapelo2|Phobius]] || 1.01 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Phred/Phrap/Conced-Sapelo2|Phred/Phrap/Conced]] || Phred version: 0.071220.c, Phrap version: 0.990329, Consed version: 29.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Phycas-Sapelo2|Phycas]] || 2.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PHYLIP-Sapelo2|PHYLIP]] || 3.697 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloBayes-MPI-Sapelo2 |PhyloBayes-MPI]] || 20161021 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloCSF-Sapelo2 |PhyloCSF]] || 20180919 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloSift-Sapelo2 |PhyloSift]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyloSkeleton-Sapelo2 |PhyloSkeleton]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[phyluce-Sapelo2|Phyluce]] || 1.6.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyML-Sapelo2|PhyML]] || 3.3.20170530 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PhyParts-Sapelo2|PhyParts]] || 0.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[picard-Sapelo2 |picard]] || 2.16.0, 2.21.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[picard-Teaching|Picard]] || 2.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PICRUSt-Sapelo2 |PICRUSt]] || 1.1.3, 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pigz-Sapelo2|pigz]] || 2.3.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PIL-Sapelo2|PIL]] || 1.1.7 || [[:Category:Library|Library]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PILER-Sapelo2|PILER]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pilon-Sapelo2|Pilon]] || 1.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pilon-Teaching|Pilon]] || 1.22 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PlantCV-Sapelo2|PlantCV]] || 3.8.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Platypus-Sapelo2|Platypus]] || 0.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PLEK-Sapelo2|PLEK]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PLINK-Sapelo2|PLINK]] || 1.07, 1.9b, 2.0-alpha1, 2.0-alpha2, 2.0-alpha2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[plmc-Sapelo2|Plmc]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Porechop-Sapelo2|Porechop]] || 0.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PoSSuMsearch-Sapelo2|PoSSuMsearch]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pplacer-Sapelo2|Pplacer]] || 1.1.alpha19 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Praat-Sapelo2|Praat]] || 6048-Linux64-nogui || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRANK-Sapelo2|PRANK]] || 170427 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRAPI-Sapelo2|PRAPI]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Primer3-Sapelo2|Primer3]] || 2.3.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PRINSEQ-Sapelo2|PRINSEQ]] || 0.20.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ProbABEL-Sapelo2|ProbABEL]] || 0.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[prodigal-Sapelo2|Prodigal]] || 2.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[progressiveCactus-Sapelo2|progressiveCactus]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ProphET-Sapelo2 |ProphET]] || 20200323 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PROJ-Sapelo2|PROJ]] || 4.9.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Prokka-Sapelo2|Prokka]] || 1.13, 1.14.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Prokka-Teaching|Prokka]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[proovread-Sapelo2|proovread]] || 2.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[proovread-Teaching|Proovread]] || 2.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[protobuf-Sapelo2|protobuf]] || 3.3.0, 3.4.0, 3.6.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[LADR-Teaching|prover9]] || 2009-11A || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PSI4-Sapelo2|PSI4]] || 1.3.2 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[psmc-Sapelo2|psmc]] || 0.6.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pVACtools-Sapelo2|pVACtools]] || 1.5.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyani-Sapelo2|pyani]] || 0.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pybedtools-Sapelo2|pybedtools]] || 0.7.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyCUDA-Sapelo2|PyCUDA]] || 2019.1.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyDNA-Sapelo2|pyDNA]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pydub-Sapelo2|pydub]] || 0.22.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyfasta-Sapelo2|pyfasta]] || 0.5.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyMOL-Sapelo2|PyMOL]] || 2.3.0a0 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyNBS-Sapelo2 |pyNBS]] || 0.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pynini-Teaching|Pynini]] || 2.0.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyPy-Sapelo2 |PyPy]] || 6.0.0 (2.7.14) || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pysam-Sapelo2 |Pysam]] || 0.10.0, 0.13.0, 0.14.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Python-Sapelo2 |Python]] || 2.7.18, 3.9.6, 3.10.4, 3.10.8, 3.11.3, 3.11.5, 3.12.3, 3.13.1, 3.13.5 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Python-Teaching|Python]] || 2.7.18, 3.9.6, 3.10.4, 3.10.8, 3.11.3, 3.11.5, 3.12.3, 3.13.1, 3.13.5  || [[:Category:Programming|Programming]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[PyTorch-Sapelo2|PyTorch]] || 0.3.1, 1.0.0, 1.2.0, 1.3.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[pyvcf-Sapelo2 |pyvcf]] || 0.6.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Pweave-Teaching|Pweave]] || 0.30.3 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;Q&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[q2-brocc-Sapelo2|q2-brocc]] || 2018.6.0.dev0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QCTOOL-Sapelo2|QCTOOL]] || 2.0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[qiaseq-16S-Sapelo2|qiaseq-16S]] || 20190306 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[QIIME2-Sapelo2|QIIME2]] || 2020.6, 2023.2, 2023.5.1, 2023.7, 2023.9, 2024.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QIIME2-Teaching|QIIME2]] || 2018.4, 2018.6, 2018.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QIIME-Sapelo2|QIIME]] || 1.9.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QTLcartographer-Sapelo2|QTLcartographer]] || 1.17j || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Qualimap2-Sapelo2|Qualimap2]] || 2.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Quantum Espresso-Sapelo2|Quantum Espresso]] || 6.2.0, 6.3.0-QMCPACK-3.6.0-patch, 6.4.1, 6.5 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QUAST-Sapelo2|QUAST]] || 4.2, 4.6.1, 4.6.3, 5.0.0, 5.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[QMCPACK-Sapelo2|QMCPACK]] || 3.6.0 || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;R&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[R-Sapelo2 |R]] || 4.2.1, 4.3.1, 4.3.2, 4.4.1, 4.4.2, 4.5.1 ||[[:Category:Statistics|Statistics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
| [[R-Teaching|R]] || 4.2.1, 4.3.1, 4.3.2, 4.4.1, 4.4.2, 4.5.1  || [[:Category:Statistics|Statistics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[racon-Sapelo2 |Racon]] || 1.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[racon-Teaching |racon]] || 1.4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RaGOO-Sapelo2|RaGOO]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[randfold-Sapelo2|randfold]] || 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RATT-Sapelo2|RATT]] || 20180710 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-NG-Sapelo2 |RAxML-NG]] || 1.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-Sapelo2 |RAxML]] || 8.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RAxML-Teaching|RAxML]] || 8.2.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Ray-Sapelo2 |Ray]] || 2.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Rcorrector-Sapelo2|Rcorrector]] || 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Realphy-Sapelo2|Realphy]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Reapr-Sapelo2|REAPR]] || 1.0.18 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RECON-Sapelo2|RECON]] || 1.08 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RedDog-Sapelo2|RedDog]] || 1beta.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Redundans-Sapelo2|Redundans]] || 0.14a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatExplorer-TAREAN-Sapelo2|RepeatExplorer-TAREAN]] || 11/09/2018 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatMasker-Sapelo2|RepeatMasker]] || 4.0.5, 4.0.7, 4.0.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatMasker-Teaching|RepeatMasker]] || 4.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Repeatmodeler-Sapelo2|Repeatmodeler]] || 1.0.11, 2.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatModeler-Teaching|RepeatModeler]] || 1.0.11 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatScout-Sapelo2|RepeatScout]] || 1.05 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RepeatScout-Teaching|RepeatScout]] || 1.05 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[REPET-Sapelo2|REPET]] || 2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RESCRIPt-Sapelo2|RESCRIPt]] || 20200805 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RevBayes-Sapelo2|RevBayes]] || 1.0.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[RevBayes-Teaching|RevBayes]] || 1.1.0, 1.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
&amp;lt;!-- | [[RGAugury-Sapelo2|RGAugury]] || 20191115 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[rjags-Sapelo2|rjags]] || 4.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RMBlast-Sapelo2|RMBlast]] || 2.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Rmpi-Sapelo2|Rmpi]] || 0.6-6 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RNAmmer-Sapelo2|RNAmmer]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RNAz-Sapelo2|RNAz]] || 2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Roary-Sapelo2 |Roary]] || 3.12.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Rosetta-Sapelo2 |Rosetta]] || 2021.16.61629, 2022.46.334 ||[[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RSEM-Sapelo2 |RSEM]] || 1.3.0, 1.3.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[RSeQC-Sapelo2 |RSeQC]] || 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Rstudio-Sapelo2|Rstudio]] || 2023.06.1-524 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Ruby-Sapelo2|Ruby]] || 2.5.0 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[runBNG-Sapelo2|runBNG]] || 1.03 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sailfish-Sapelo2|Sailfish]] || 0.10.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;S&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Sage-Sapelo2|Sage]] || 8.0, 9.0, 9.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Salmon-Sapelo2|Salmon]] || 0.8.2, 0.10.2, 0.13.1, 0.14.1, 1.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SalmonTools-Sapelo2|SalmonTools]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SALSA-Sapelo2|SALSA]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sambamba-Sapelo2|sambamba]] || 0.6.6, 0.6.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[samblaster-Sapelo2|samblaster]] || 0.1.24 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SAMtools-Sapelo2|SAMtools]] || 0.1.19, 1.1, 1.3.1, 1.6, 1.9, 1.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;S&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[SAMtools-Teaching|SAMtools]] || 0.1.20, 1.6, 1.13, 1.14, 1.16.1, 1.18, 1.21 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SANN-Sapelo2|SANN]] || 20190528 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[SequenceTubeMap-Sapelo2|sequenceTubeMap]] || 20230906 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:sapelo2|sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sbt-Sapelo2|sbt]] || 1.1.1 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scala-Sapelo2|scala]] || 2.12.4 || [[:Category:Programming|Programming]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scikit-image-Sapelo2|scikit-image]] || 0.13.1, 0.14.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Scoary-Sapelo2|Scoary]] || 1.6.16 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SCons-Sapelo2|SCons]] || 2.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SCOTCH-Sapelo2|SCOTCH]] || 6.0.4 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[scram-Sapelo2|scram]] || 0.2.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[screen_assembly-Sapelo2|screen_assembly]] || 1.2.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeaDAS-Sapelo2|SeaDAS]] || 7.5.3 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seaview-Sapelo2|seaview]] || 4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[selscan-Sapelo2|selscan]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Seq-Gen-Sapelo2|Seq-Gen]] || 1.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeqKit-Sapelo2|SeqKit]] || 0.10.1, 0.10.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SeqKit-Teaching|SeqKit]] || 0.10.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seqqs-Sapelo2|seqqs]] || 20140225 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[seqtk-Sapelo2|seqtk]] || 1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SGA-Sapelo2|SGA]] || 0.10.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Shannon-Sapelo2|Shannon]] || 20190826 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[shapeit-Sapelo2|shapeit]] || v2.r904 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Shasta-Sapelo2|Shasta]] || 0.2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ShortStack-Sapelo2|ShortStack]] || 3.8.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sibelia-Sapelo2|Sibelia]] || 3.0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SICER-Sapelo2|SICER]] || 1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SICERpy-Sapelo2|SICERpy]] || 0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sickle-Sapelo2|Sickle]] || 1.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SignalP-Sapelo2|SignalP]] || 4.1f || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Silix-Sapelo2|Silix]] || 1.2.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SimLoRD-Sapelo2|SimLoRD]] || 1.0.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SINE_Scan-Sapelo2|SINE_Scan]] || 1.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[slda-Sapelo2|slda]] || 0.1.6 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[smoke-Sapelo2|smoke]] || 4.7 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Smoove-Sapelo2|Smoove]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SMRTLINK-Sapelo2|SMRTLINK]] || 5.1.0.26412, 6.0.0.47841, 7.0.1.66975, 8.0.0.79519 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SMRTLINK-Teaching|SMRTLINK]] || 5.0.1.9585, 5.1.0.26412 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Smudgeplot-Sapelo2|Smudgeplot]] || 0.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Snakemake-Sapelo2|Snakemake]] || 5.2.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNAP-Zoe-Sapelo2|SNAP-Zoe]] || 20060728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNAP-Zoe-Teaching|SNAP-Zoe]] || 20060728 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Sniffles-Sapelo2|Sniffles]] || 1.0.8 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SnoReport-Sapelo2|SnoReport]] || 2.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Snippy-Sapelo2|Snippy]] || 4.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNP-ML-Sapelo2|SNP-ML]] || 1.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[snpEff-Sapelo2|snpEff]] || 5.0e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[snpEff-Teaching|SnpEff]] || 4.3t || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SNPhylo-Sapelo2|SNPhylo]] || 20160204 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[snp-sites-Sapelo2|snp-sites]] || 2.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPaligner-Sapelo2 |SOAPaligner]] || 2.21 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPdenovo2-Sapelo2|SOAPdenovo2]] || r240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOAPdenovo2-Teaching|SOAPdenovo2]] || r240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[somaticseq-Sapelo2|somaticseq]] || 3.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SOP-GPU-Sapelo2|SOP-GPU]] || 20180404 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SortMeRNA-Sapelo2|SortMeRNA]] || 2.1, 3.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SoX-Sapelo2|SoX]] || 14.4.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPAdes-Sapelo2|SPAdes]] || 3.11.1, 3.12.0, 3.14.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPAdes-Teaching|SPAdes]] || 3.11.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[spams-Sapelo2|spams]] || 2.6.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spanki-Sapelo2|Spanki]] || 0.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spark-Sapelo2|Spark]] || 2.2.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Speciesprimer-Sapelo2|Speciesprimer]] || 2.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SpeedSeq-Sapelo2|SpeedSeq]] || 0.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Spine-Sapelo2|Spine]] || 0.3.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SpliceGrapher-Sapelo2|SpliceGrapher]] || 0.2.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Splitstree4-Sapelo2|Splitstree4]] || 4.16.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SPM-Sapelo2|SPM]] || 12 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[SRAToolKit-Sapelo2 |SRAToolKit]] || 3.0.1, 3.0.3 ||[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[sRNAWorkbench-Sapelo2|sRNAWorkbench]] || 4.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSAHA2-Sapelo2 |SSAHA2]] || 2.5.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSPACE-longread-Teaching|SSPACE-longread]] || 1-1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt; &lt;br /&gt;
&amp;lt;!-- | [[SSPACE-STANDARD-Teaching|SSPACE-STANDARD]] || 3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SSPACE-Sapelo2|SSPACE]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stacks-Sapelo2|Stacks]] || 1.48, 2.2, 2.3, 2.3b, 2.3d, 2.3e || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stacks-Teaching|Stacks]] || 2.0, 1.48 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Stampy-Sapelo2|Stampy]] || 1.0.31 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Fusion-Sapelo2|STAR-Fusion]] || 1.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Sapelo2|STAR]] || 2.5.3a, 2.6.0c, 2.6.1c, 2.7.1a || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[STAR-Teaching|STAR]] || 2.5.3a, 2.6.0c || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[StrAuto-Sapelo2|StrAuto]] || 1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[StringTie-Sapelo2|StringTie]] || 1.3.3, 1.3.4d, 2.0.3, 2.0.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[StringTie-Teaching|StringTie]] || 2.2.3, 3.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- &lt;br /&gt;
| [[Structure-Sapelo2|Structure]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Structure-Teaching|Structure]] || 2.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]]  || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[Subread-Sapelo2|Subread]] || 1.6.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SUNTANS-Sapelo2|SUNTANS]] || 20180305 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Supernova-Sapelo2|Supernova]] || 2.0.1, 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SUPPA-Sapelo2|SUPPA]] || 2.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SVDetect-Sapelo2|SVDetect]] || 0.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[svtools-Sapelo2|svtools]] || 0.5.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[SWIG-Sapelo2|SWIG]] || 3.0.12 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Synima-Sapelo2|Synima]] || 20181205 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Tabix-Sapelo2|Tabix]] || 0.2.6 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TASSEL-Sapelo2|TASSEL]] || 5.2.44 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tbl2asn-Sapelo2|Tbl2asn]] || 04172018, 03282019, 05012020 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TCSF_IMRA-Sapelo2|TCSF_IMRA]] || 1.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TensorFlow-models-Sapelo2|TensorFlow-models]] || 20180620 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TensorFlow-Sapelo2|TensorFlow]] || 1.8.0, 1.10.1, 1.12.0, 1.14 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Theano-Sapelo2|Theano]] || 0.9.0, 1.0.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TigMint-Sapelo2|TigMint]] || 1.1.2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TMHMM-Sapelo2|TMHMM]] || 2.0c || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tmux-Sapelo2|tmux]] || 2.9 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tombo-Sapelo2|Tombo]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Tophat-Sapelo2|Tophat]] || 2.1.0, 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TopHat-Teaching|TopHat]] || 2.1.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[torchvision-Sapelo2|torchvision]] || 0.5.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TPP-Sapelo2|TPP]] || 5.1.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tqdm-Sapelo2|tqdm]] || 4.43.0, 4.44.1 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TransDecoder-Sapelo2|TransDecoder]] || 2.1.0, 5.3.0, 5.5.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transposome-Sapelo2|Transposome]] || 0.12.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transrate-Sapelo2|Transrate]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Transrate-Sapelo2|Transrate]] || 1.0.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TreeMix-Sapelo2|TreeMix]] || 1.13 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[TreeTime-Sapelo2|TreeTime]] || 0.6.3 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[trimAl-Sapelo2|TrimAl]] || 1.4.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trimmomatic-Sapelo2|Trimmomatic]] || 0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trimmomatic-Teaching|Trimmomatic]] || 0.36 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trim_Galore-Sapelo2|Trim_Galore]] || 0.4.5, 0.6.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
|&amp;lt;span id =&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[Trinity-Sapelo2|Trinity]] || 2.5.1, 2.8.4, 2.8.5, 2.15.1, 2.15.2  || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trinity-Teaching|Trinity]] || 2.6.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Trinotate-Sapelo2|Trinotate]] || 3.1.1, 3.2.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[tRNAscan-SE-Sapelo2|TRNAscan-SE]] || 2.0.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| &amp;lt;span id =&amp;quot;U&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[UBCG-Sapelo2|UBCG]] || 3.0 &lt;br /&gt;
|[[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- | [[UCLUST-Sapelo2|UCLUST]] || 1.2.22q || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ucsc-Sapelo2|ucsc]] || 359 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[UMI-tools-Sapelo2|UMI-tools]] || 1.0.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[UPP-Sapelo2|UPP]] || 3.2 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[USEARCH-Sapelo2|USEARCH]] || 10.0.240 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Unicycler-Sapelo2|Unicycler]] || 0.4.7 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;V&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[VarScan-Sapelo2|VarScan]] || 2.4.2 |&amp;lt;!-- | [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCF-kit-Sapelo2|VCF-kit]] || 0.1.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2diploid-Sapelo2|vcf2diploid]] || 0.2.6a || [[:Category:Chemistry|Chemistry]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2maf-Sapelo2|vcf2maf]] || 20200520 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcf2phylip-Sapelo2|vcf2phylip]] || 1.5 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[vcflib-Sapelo2|vcflib]] || 20180410 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCFtools-Sapelo2|VCFtools]] || 0.1.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VCFtools-Teaching|VCFtools]] || 0.1.15 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
| [[Velvet-Sapelo2|Velvet]] || 1.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Velvet-Teaching|Velvet]] || 1.2.10 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VelvetOptimiser-Sapelo2|VelvetOptimiser]] || 2.2.5, 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ViennaRNA-Sapelo2|ViennaRNA]] || 2.4.3, 2.4.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[ViewBS-Sapelo2|ViewBS]] || 0.1.7, 0.1.9 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[Vmatch-Sapelo2|Vmatch]] || 2.3.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[VSEARCH-Sapelo2|VSEARCH]] || 2.8.1 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;W&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[WGS-Sapelo2|WGS]] || 8.3rc2 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WASP-Sapelo2|WASP]] || 0.3.4 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WebLogo-Sapelo2|WebLogo]] || 3.6.0 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WEKA-Sapelo2|WEKA]] || 3.8.3 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WPS-Sapelo2|WPS]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WPS-Teaching|WPS]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Chem-Sapelo2|WRF-Chem]] || 3.6.1, 3.8.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Fire-Sapelo2|WRF-Fire]] || 20170221 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Sapelo2|WRF]] || 3.6.1, 3.8.0 || [[:Category:Other|Other]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRF-Teaching|WRF]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WRFDA-Teaching|WRFDA]] || 3.8 || [[:Category:Other|Other]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | [[WU Blast-Sapelo2|WU Blast]] || 2.2.6 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;X&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [[xdot-Teaching|xdot]] || 1.1 || [[:Category:Graphics|Graphics]] || [[:Category:Teaching|Teaching]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |[[xforms-Sapelo2|xforms]] || 1.2.4 || [[:Category:Graphics|Graphics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!-- | &amp;lt;span id =&amp;quot;Y&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[YASRA-Sapelo2|YASRA]] || 2.33 || [[:Category:Bioinformatics|Bioinformatics]] || [[:Category:Sapelo2|Sapelo2]] || [[File:Up20.png|20px|link=#top]] &lt;br /&gt;
|- --&amp;gt;&lt;br /&gt;
&amp;lt;!--LIST END--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
[[#top|Back To Top]] [[File:Up20.png|20px|link=#top]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Sapelo2]][[Category:Teaching]][[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23069</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23069"/>
		<updated>2026-07-10T15:29:16Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* How to run cryoSPARC from Sapelo2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
== Run cryoSPARC workflow jobs ==&lt;br /&gt;
&lt;br /&gt;
=== Project space selection ===&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
=== Run job on the master node ===&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
=== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ===&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23068</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23068"/>
		<updated>2026-07-10T15:27:29Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User Login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User Login ===&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
==== Method 1 (Recommended): VPN + Direct Web Access ====&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
==== Method 2: SSH Tunnel ====&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23067</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23067"/>
		<updated>2026-07-10T15:26:45Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User Login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User Login ===&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
==== Method 1 (Recommended): VPN + Direct Web Access ====&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
==== Method 2: SSH Tunnel ====&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
===== Troubleshooting =====&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23066</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23066"/>
		<updated>2026-07-10T15:26:07Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* How to run cryoSPARC from Sapelo2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User Login ===&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23065</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23065"/>
		<updated>2026-07-10T15:22:30Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and CryoSPARC password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN if you are using the recommended VPN + Direct Web Access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered UGA email address and CryoSPARC password. Your registered UGA email address may be an email alias rather than your official MyID@uga.edu address.&lt;br /&gt;
* If you are using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your UGA MyID and your registered UGA email address.&lt;br /&gt;
** A screenshot of the error message or the login/password reset screen, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23064</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23064"/>
		<updated>2026-07-10T15:09:51Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Method 1 (Recommended): VPN + Direct Web Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client (Cisco AnyConnect) and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Even if you are working on campus, you must still connect to the UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email address may be an email alias rather than your official &#039;&#039;&#039;MyID@uga.edu&#039;&#039;&#039; address. Please use the email address that was registered with your CryoSPARC account.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN when using the recommended access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered CryoSPARC username (your UGA email address, not your MyID).&lt;br /&gt;
* If using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your CryoSPARC username.&lt;br /&gt;
** A screenshot of the error message or TOKEN prompt, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23063</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23063"/>
		<updated>2026-07-10T15:04:46Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User Login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;. &lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; If you are working on campus, you still need to connect to UGA VPN before accessing the CryoSPARC web server.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your registered UGA email address and password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your registered UGA email may be an alias to your official UGA email, i.e. &amp;lt;code&amp;gt;MyID@uga.edu&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN when using the recommended access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered CryoSPARC username (your UGA email address, not your MyID).&lt;br /&gt;
* If using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your CryoSPARC username.&lt;br /&gt;
** A screenshot of the error message or TOKEN prompt, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23062</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23062"/>
		<updated>2026-07-10T14:49:12Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User Login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc-cp2lab.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your CryoSPARC username and password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your CryoSPARC username is your registered UGA email address (for example, &amp;lt;code&amp;gt;firstname.lastname@uga.edu&amp;lt;/code&amp;gt;), which may differ from your UGA MyID.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN when using the recommended access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered CryoSPARC username (your UGA email address, not your MyID).&lt;br /&gt;
* If using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your CryoSPARC username.&lt;br /&gt;
** A screenshot of the error message or TOKEN prompt, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23061</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23061"/>
		<updated>2026-07-10T14:47:07Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
== User Login ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to access the CryoSPARC web interface. The recommended method is to connect through the UGA VPN and access the CryoSPARC web server directly. SSH tunneling remains available as an alternative if needed.&lt;br /&gt;
&lt;br /&gt;
=== Method 1 (Recommended): VPN + Direct Web Access ===&lt;br /&gt;
&lt;br /&gt;
# Connect to the UGA VPN using the Cisco Secure Client and select &#039;&#039;&#039;remote.uga.edu&#039;&#039;&#039;.&lt;br /&gt;
# Open the URL for your assigned CryoSPARC instance in your web browser. For example:&lt;br /&gt;
#:&lt;br /&gt;
#: &amp;lt;code&amp;gt;http://cryosparc-cp2lab.gacrc.uga.edu:39000&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log in using your CryoSPARC username and password.&lt;br /&gt;
#:&lt;br /&gt;
#: &#039;&#039;&#039;Note:&#039;&#039;&#039; Your CryoSPARC username is your registered UGA email address (for example, &amp;lt;code&amp;gt;firstname.lastname@uga.edu&amp;lt;/code&amp;gt;), which may differ from your UGA MyID.&lt;br /&gt;
&lt;br /&gt;
=== Method 2: SSH Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Users may also access CryoSPARC by establishing an SSH tunnel to expose port 39000 from the CryoSPARC master node to their local computer.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux or macOS, run the following command in a terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, download &#039;&#039;&#039;plink.exe&#039;&#039;&#039; and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place &amp;lt;code&amp;gt;plink.exe&amp;lt;/code&amp;gt; in your current working directory, or specify its full path when running the command.&lt;br /&gt;
&lt;br /&gt;
Unless you have configured SSH public key authentication, you will be prompted for your UGA MyID password and Duo authentication. After authentication succeeds, the SSH session will remain open. This is expected and indicates that the tunnel has been established successfully.&lt;br /&gt;
&lt;br /&gt;
With the SSH tunnel active, open your web browser and navigate to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:39000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CryoSPARC login page should appear.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to access the CryoSPARC web interface:&lt;br /&gt;
&lt;br /&gt;
* Verify that you are connected to the UGA VPN when using the recommended access method.&lt;br /&gt;
* Confirm that you are using the correct URL for your assigned CryoSPARC instance.&lt;br /&gt;
* Make sure you are logging in with your registered CryoSPARC username (your UGA email address, not your MyID).&lt;br /&gt;
* If using the SSH tunnel method, ensure that the SSH session remains active while accessing the web interface.&lt;br /&gt;
* If you have forgotten your CryoSPARC password, contact GACRC Support to request a password reset token.&lt;br /&gt;
* If the problem persists, please contact GACRC Support and include:&lt;br /&gt;
** The URL you are using to access CryoSPARC.&lt;br /&gt;
** Your CryoSPARC username.&lt;br /&gt;
** A screenshot of the error message or TOKEN prompt, if applicable.&lt;br /&gt;
&lt;br /&gt;
==== Method 2: SSH Tunnel ====&lt;br /&gt;
User needs to establish a SSH tunnel to expose the port 39000 from the master node to a local computer.  &lt;br /&gt;
&lt;br /&gt;
If you are using a Linux or Apple desktop or laptop, you can use the following command in Terminal to establish the ssh tunnel: &amp;lt;blockquote&amp;gt;&#039;&#039;&#039;ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;If you are using a Windows desktop or laptop, please download the &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; to use in place of the ssh client:&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Please put the plink.exe in the current directory where you have a command window open.&lt;br /&gt;
&lt;br /&gt;
Unless you have SSH public key configured, you will be prompted for your MyID password and for Archpass Duo authentication. Once authentication is established, this session prompt will hang and you are ready to go to access the cryoSPARC User Interface. &lt;br /&gt;
&lt;br /&gt;
Once you established the ssh tunnel by running the above command, you can open a browser (Chrome) on the local machine and navigate to&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:39000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The cryoSPARC User Interface should be presented with the cryoSPARC login page.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23060</id>
		<title>CryoSPARC-Sapelo2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=CryoSPARC-Sapelo2&amp;diff=23060"/>
		<updated>2026-07-10T14:46:29Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* User login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sapelo2]][[Category:Software]][[Category:Engineering]]&lt;br /&gt;
&lt;br /&gt;
== Category ==&lt;br /&gt;
&lt;br /&gt;
Engineering&lt;br /&gt;
&lt;br /&gt;
== Program On ==&lt;br /&gt;
&lt;br /&gt;
Sapelo2&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
 &lt;br /&gt;
4.3.1&lt;br /&gt;
&lt;br /&gt;
== Author / Distributor ==&lt;br /&gt;
 &lt;br /&gt;
See https://guide.cryosparc.com/&lt;br /&gt;
 &lt;br /&gt;
== Description ==&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;CryoSPARC (Cryo-EM Single Particle Ab-Initio Reconstruction and Classification) is a state of the art HPC software solution for complete processing of single-particle cryo-electron microscopy (cryo-EM) data. CryoSPARC is useful for solving cryo-EM structures of membrane proteins, viruses, complexes, flexible molecules, small particles, phase plate data and negative stain data.&amp;quot; For more information, please see https://guide.cryosparc.com/.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Users are required to be added into GACRC &#039;&#039;&#039;cryosparc&#039;&#039;&#039; group before they can run this software from Sapelo2. Please fill out the [https://uga.teamdynamix.com/TDClient/2060/Portal/Requests/ServiceDet?ID=25844 GACRC General Support form] to request. We will reach out to you after we received your request.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&#039;&#039;&#039;Master node VM:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Host name: &#039;&#039;&#039;cryosparc.gacrc.uga.edu&#039;&#039;&#039;&lt;br /&gt;
* Intel Xeon processors (16 cores) and 64GB of RAM&lt;br /&gt;
* mongodb is installed and run on the master node&lt;br /&gt;
&#039;&#039;&#039;Worker nodes:&#039;&#039;&#039;&lt;br /&gt;
* One NVIDIA Tesla A100 node: Intel Xeon processors (64 cores), 1TB host RAM memory, 4 NVIDIA Tesla A100 GPU cards (80GiB device memory per card), and NVMe SSD 3570GB local drive.&lt;br /&gt;
* cryoSPARC recommends using SSD for caching particle data. /lscratch/gacrc-cryo is set up on the worker node for this purpose.&lt;br /&gt;
* The amount of space that cryoSPARC can use in /lscratch/gacrc-cryo is capped at 100GB.&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC group:&#039;&#039;&#039; &#039;&#039;&#039;cryosparc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC service account:&#039;&#039;&#039; &#039;&#039;&#039;gacrc-cryo&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* gacrc-cryo is the &#039;&#039;&#039;service account&#039;&#039;&#039; that will run cryoSPARC workflow jobs for all cryoSPARC users.&lt;br /&gt;
* Some tasks can only be handled by gacrc-cryo, like make a new lane of worker node(s), user management, and connect or update worker node(s) to master, etc..&lt;br /&gt;
* Regular CryoSPARC users can run cryosparcm on the master node to check cryoSPARC status, using cryosparcm status or cryosparcm checkdb.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cryoSPARC project space:&#039;&#039;&#039; &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039;&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== How to run cryoSPARC from Sapelo2 ==&lt;br /&gt;
&lt;br /&gt;
=== User login ===&lt;br /&gt;
&lt;br /&gt;
==== Method 2: SSH Tunnel ====&lt;br /&gt;
User needs to establish a SSH tunnel to expose the port 39000 from the master node to a local computer.  &lt;br /&gt;
&lt;br /&gt;
If you are using a Linux or Apple desktop or laptop, you can use the following command in Terminal to establish the ssh tunnel: &amp;lt;blockquote&amp;gt;&#039;&#039;&#039;ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;If you are using a Windows desktop or laptop, please download the &#039;&#039;&#039;[https://the.earth.li/~sgtatham/putty/latest/x86/plink.exe plink program]&#039;&#039;&#039; to use in place of the ssh client:&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;plink -ssh -N -L 39000:10.2.0.60:39000 username@cryosparc.gacrc.uga.edu&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Please put the plink.exe in the current directory where you have a command window open.&lt;br /&gt;
&lt;br /&gt;
Unless you have SSH public key configured, you will be prompted for your MyID password and for Archpass Duo authentication. Once authentication is established, this session prompt will hang and you are ready to go to access the cryoSPARC User Interface. &lt;br /&gt;
&lt;br /&gt;
Once you established the ssh tunnel by running the above command, you can open a browser (Chrome) on the local machine and navigate to&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:39000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The cryoSPARC User Interface should be presented with the cryoSPARC login page.&lt;br /&gt;
&lt;br /&gt;
=== Run cryoSPARC workflow jobs ===&lt;br /&gt;
&lt;br /&gt;
==== Project space selection ====&lt;br /&gt;
A project in cryoSPARC is a high level container corresponding with a project directory on the file system, which stores all associated Jobs of a project. Each project in cryoSPARC is entirely contained within a file system directory. All the jobs and their respective intermediate and output data created within a project will be stored within the project directory.&lt;br /&gt;
&lt;br /&gt;
* When you start a new project in cryoSPARC GUI, please select and use &#039;&#039;&#039;/scratch/gacrc-cryo&#039;&#039;&#039; as the cryoSPARC project space.&lt;br /&gt;
* This folder is owned by gacrc-cryo. Regular cryoSPARC users have access and read permissions which allow them to browse files in this folder and copy files from this folder to their own storage spaces on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
==== Run job on the master node ====&lt;br /&gt;
cryoSPARC will use the master node to run some types of workflow jobs, for example, &amp;quot;Import Movies&amp;quot;, &amp;quot;Inspect Picks&amp;quot;, and the interactive job &amp;quot;Select 2D Classes&amp;quot;. When a job is created, if cryoSPARC will use the master node to run the job, you will be notified about this in cryoSPARC GUI. &lt;br /&gt;
&lt;br /&gt;
==== Run job using &amp;quot;Lane Sapelo2 Default (cluster)&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* In cryoSPARC, queue a job to &amp;quot;&#039;&#039;&#039;Lane Sapelo2 Default (cluster)&#039;&#039;&#039;&amp;quot;; The job will be dispatched to the worker node via Slurm. Please note, gacrc-cryo, instead of your own Sapelo2 user account, is the user account owning and running the job. We highly recommend you to use this method to run cryoSPARC workflow jobs on Sapelo2.&lt;br /&gt;
* cryoSPARC will decide on how many CPU cores and how much memory it will use to run a workflow job, depend on the type of the job and your data size. Currently, we configured that from each worker node cryoSPARC can use up to &#039;&#039;&#039;20GB&#039;&#039;&#039; memory and &#039;&#039;&#039;4&#039;&#039;&#039; CPU cores.&lt;br /&gt;
* If the job needs to run on GPU devices, cryoSPARC will queue the job with a default number of GPU devices , for example 1. You can change this number by yourself in cryoSPARC GUI when you create the job. Please note that the maximum number of GPU devices installed on the worker node is &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Documentation (v4.0+)==&lt;br /&gt;
 &lt;br /&gt;
About cryoSPARC: https://guide.cryosparc.com/&lt;br /&gt;
&lt;br /&gt;
Get Started with CryoSPARC: Introductory Tutorial: https://guide.cryosparc.com/processing-data/get-started-with-cryosparc-introductory-tutorial&lt;br /&gt;
&lt;br /&gt;
A Tour of the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/a-tour-of-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Using the CryoSPARC Interface: https://guide.cryosparc.com/application-guide-v4.0+/using-the-cryosparc-interface&lt;br /&gt;
&lt;br /&gt;
Creating and Running Jobs: https://guide.cryosparc.com/application-guide-v4.0+/creating-and-running-jobs&lt;br /&gt;
&lt;br /&gt;
Tutorial videos: https://guide.cryosparc.com/processing-data/tutorial-videos&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
 &lt;br /&gt;
*Version 4.3.1 master is installed on the master node (cryosparc.gacrc.uga.edu). &lt;br /&gt;
*Version 4.3.1 workers are installed on one worker GPU node (NVIDIA Tesla A100 GPU node).&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
64-bit Linux&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Training&amp;diff=22971</id>
		<title>Training</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Training&amp;diff=22971"/>
		<updated>2026-05-04T12:52:57Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==GACRC Training==&lt;br /&gt;
&lt;br /&gt;
The GACRC regularly hosts training sessions on a number of subjects relevant to the use of our computational and storage resources. Scheduled trainings will be announced through the GACRC mailing list. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: New users are required to attend a Sapelo2 cluster introductory training session and information about that will be sent once an account is requested.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Regular Training Announcement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;April 2026&#039;&#039;&#039;, the GACRC is hosting 9 training sessions listed below. These training workshops will be offered remotely via Zoom Meeting. Detailed instructions for joining the Zoom meeting will be sent to your UGA email account before each training session you register for.&lt;br /&gt;
&lt;br /&gt;
We will offer:&lt;br /&gt;
&lt;br /&gt;
1. Linux training for Linux-inexperienced cluster new users (3 sessions)&lt;br /&gt;
&lt;br /&gt;
2. Sapelo2 cluster new user training (3 sessions)&lt;br /&gt;
&lt;br /&gt;
3. Sapelo2 Part II (1 session)&lt;br /&gt;
&lt;br /&gt;
4. Job Parallelization with GNU Parallel and Slurm Arrays (1 session)&lt;br /&gt;
&lt;br /&gt;
5. Installing Software Packages in Virtual Environments on Sapelo2 (1 session)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;May 2026&#039;&#039;&#039;, the GACRC is hosting 9 training sessions listed below. These training workshops will be offered remotely via Zoom Meeting. Detailed instructions for joining the Zoom meeting will be sent to your UGA email account before each training session you register for.&lt;br /&gt;
&lt;br /&gt;
We will offer:&lt;br /&gt;
&lt;br /&gt;
1. Linux training for Linux-inexperienced cluster new users (3 sessions)&lt;br /&gt;
&lt;br /&gt;
2. Sapelo2 cluster new user training (3 sessions)&lt;br /&gt;
&lt;br /&gt;
==Event Schedule==&lt;br /&gt;
&lt;br /&gt;
This section describes the training workshops that we offer, along with the sessions that are currently scheduled.&lt;br /&gt;
&lt;br /&gt;
===Sapelo2 Cluster New User Training===&lt;br /&gt;
&lt;br /&gt;
This mandatory training consists of an overview of the structure of Sapelo2 as well as hands-on practice submitting a job along with guidance and best practices when using the Sapelo2 cluster. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisites:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*Linux basics. A Linux-inexperienced user must complete a prerequisite Linux training for Linux-inexperienced cluster new users.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Workshop Training Goals:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*Understand the layout of Sapelo2&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 file systems&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 partitions&lt;br /&gt;
&lt;br /&gt;
*Understand the Sapelo2 software environment&lt;br /&gt;
&lt;br /&gt;
*Understand how to request computing resources and submit a computational batch job following the Sapelo2 cluster general workflow&lt;br /&gt;
&lt;br /&gt;
*Understand how to initiate an interactive job&lt;br /&gt;
&lt;br /&gt;
*Understand how to transfer files to and from the cluster&lt;br /&gt;
&lt;br /&gt;
*Understand how to get support from GACRC support team when you have any issues on cluster&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time &lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|May 8th, Friday, 2:00 PM - 4:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|May 14th, Thursday, 2:00 PM - 4:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC&lt;br /&gt;
|May 20th, Wednesday, 2:00 PM - 4:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linux Training for Linux-inexperienced Cluster New Users===&lt;br /&gt;
The Sapelo2 High Performance Computing (HPC) cluster runs a headless Linux distribution as the operating system on each of its constituent nodes. The term headless refers to the fact that these nodes do not have a desktop graphical user interface (GUI) installed by default. Graphical desktop environments consume resources that analyses could otherwise use, so users employ a command-line interface (CLI) instead. To interact with these resources, users connect to a remote terminal via SSH and execute commands.&lt;br /&gt;
&lt;br /&gt;
The Linux Training workshop provides hands-on practice of the fundamental Linux commands necessary to interact with HPC resources.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Please watch the introductory videos on Linux, basic Linux terms, and Linux Paths and Directories (total ~17 minutes) &#039;&#039;&#039;before attending the training workshop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_81u2kfi2/176125031 Linux]&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_ol51cuyn/176125031 basic Linux terms]&lt;br /&gt;
*[https://kaltura.uga.edu/media/t/1_wdyxhgdg/176125031 Linux Paths and Directories]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamental concepts of Linux working environment (filesystem hierarchy, path, PATH, etc.)  &lt;br /&gt;
&lt;br /&gt;
2. Know how to use Linux common commands (ls, cd, pwd, cat, more, nano, mkdir, rm, cp, mv, etc.)&lt;br /&gt;
&lt;br /&gt;
3. Understand what is Linux bash shell and know how to make a simple Linux script and run it in Linux environment&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|May 6th, Wednesday, 1:00 PM - 3:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|May 12th, Tuesday, 1:00 PM - 3:00 PM&lt;br /&gt;
|-&lt;br /&gt;
|Use Linux on Cluster&lt;br /&gt;
|May 18th, Monday, 1:00 PM - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using Sapelo2 Cluster at the GACRC, Part II ===&lt;br /&gt;
This workshop will cover high-performance computing on Sapelo2, including job scheduling, resource requests (CPU, memory, GPU), and techniques for optimizing job performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisites:&#039;&#039;&#039;&lt;br /&gt;
*Linux basics. A Linux-inexperienced user must complete a prerequisite Linux training for Linux-inexperienced cluster new users.&lt;br /&gt;
*Sapelo2 cluster new user training.  Fundamental HPC and Sapelo2 knowledge is required for this advanced Sapelo2 workshop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Learn about high-performance computing framework&lt;br /&gt;
&lt;br /&gt;
2. Why is my job pending? How can I get my job to start sooner? How to find available computing resources on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
3. How to request computing resources such as nodes, CPU cores, memory, GPU device, etc. to run serial, threaded, MPI, and GPU jobs on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
4. How can I make my job run more efficiently (through the correct use of software and hardware)?&lt;br /&gt;
&lt;br /&gt;
5. A quick intro to MPI library and how to compile/run MPI jobs on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Using Sapelo2 Cluster at the GACRC, Part II&lt;br /&gt;
|April 17th, Friday, 1:00 - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Installing Software Packages in Virtual Environments on Sapelo2 ===&lt;br /&gt;
This workshop will cover the basics of virtual environments as well as provide practical guidance and best practices for using virtual environments on the Sapelo2 cluster. Participants will learn the basics of creating and configuring virtual environments, how to install software packages in both a Conda virtual environment and a Python virtual environment, and manage dependencies in their environments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Must already have strong understanding of the Linux environment and Sapelo2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Learn how to create a virtual environment on Sapelo2  &lt;br /&gt;
&lt;br /&gt;
2. Be able to install software packages into both Conda and Python virtual environments&lt;br /&gt;
&lt;br /&gt;
3. Understand how to manage dependencies of their virtual environments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Installing Software Packages in Virtual Environments on Sapelo2&lt;br /&gt;
|April 23rd, Thursday, 2:00 - 3:00 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Job Parallelization with GNU Parallel and Slurm Arrays ===&lt;br /&gt;
Learn how to run multiple commands in parallel using GNU Parallel and Slurm Arrays. These tools greatly reduce the runtime of certain types of jobs by running multiple instances of the same command in parallel. The workshop focuses on problems that involve executing the same command on multiple different inputs. This workshop is intended for users comfortable writing job submission scripts and using a command line. Concurrent and parallel programming techniques are not covered in this workshop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Must already have strong understanding of the Linux environment and Sapelo2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand which jobs benefit from GNU Parallel and Slurm Arrays&lt;br /&gt;
&lt;br /&gt;
2. Use GNU Parallel and Slurm Arrays to parallelize jobs&lt;br /&gt;
&lt;br /&gt;
3. Understand the differences and similarities between GNU Parallel and Slurm Arrays &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scheduled Sessions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Job Parallelization with GNU Parallel and Slurm Arrays&lt;br /&gt;
|April 30th, Thursday, 1:00 - 2:30 PM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Python Basics===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand Python scientific modules and distributions&lt;br /&gt;
&lt;br /&gt;
2. Understand Python general lexical conventions; Python built-in data types, like string, list, tuple, dictionary, etc.&lt;br /&gt;
&lt;br /&gt;
3. Understand Python programming structures and procedural programming using functions&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Python Basics I||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
| Python Basics II||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== R Basics===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamentals of R language, e.g. R general lexical conventions, data types, functions, and packages. Part 2 will introduce loops and functions.&lt;br /&gt;
&lt;br /&gt;
2. Be able to manipulate and create data frames using built in functions and the dplyr package.&lt;br /&gt;
&lt;br /&gt;
3. Interact with your file system and submit R code as a batch job to Sapelo 2.  &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time &lt;br /&gt;
|-&lt;br /&gt;
|R Basics I||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|R Basics II||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Conda===&lt;br /&gt;
&#039;&#039;&#039;Prerequisite:&#039;&#039;&#039; No prerequisites&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Training Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Understand fundamentals of conda environment&lt;br /&gt;
&lt;br /&gt;
2. Use conda to create and configure your own virtual environments&lt;br /&gt;
&lt;br /&gt;
3. Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Title&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Date/Time&lt;br /&gt;
|-&lt;br /&gt;
|Conda Basics ||Not scheduled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to Register==&lt;br /&gt;
&lt;br /&gt;
The training workshops &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC&#039;&#039;&#039; and &#039;&#039;&#039;Use Linux on Cluster&#039;&#039;&#039; are &#039;&#039;&#039;ONLY&#039;&#039;&#039; offered to &#039;&#039;&#039;new users&#039;&#039;&#039; who need user accounts on the GACRC Sapelo2 cluster or current Sapelo2 users seeking a refresher. If you would like to use the cluster, please ask your group PI/UGA faculty member to send us an account creation request for you, using the  [https://uga.teamdynamix.com/TDClient/Requests/ServiceDet?ID=25839  GACRC User Account Request Form].&lt;br /&gt;
 &lt;br /&gt;
If you would like to attend the &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC, Part II&#039;&#039;&#039;, the &#039;&#039;&#039;Installing Software Packages in Virtual Environments on Sapelo2&#039;&#039;&#039;, and/or the &#039;&#039;&#039;Job Parallelization with GNU Parallel and Slurm Arrays&#039;&#039;&#039; training workshops, please send us a request using the [https://uga.teamdynamix.com/TDClient/Requests/ServiceDet?ID=25852 GACRC Training Request Form]. In your request, please tell us which session(s) you would like to attend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Topic Introduction==&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Sap2test cluster migration training&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus:  Slurm queueing system, including Slurm job commands, job environment variables, and job submission headers, etc.&lt;br /&gt;
&lt;br /&gt;
The new software environment on Sap2test&lt;br /&gt;
&lt;br /&gt;
Other important topics related to Sap2test working environment&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Sapelo2 HPC cluster and computational batch job submission workflow&lt;br /&gt;
&lt;br /&gt;
Cluster&#039;s storage environment&lt;br /&gt;
&lt;br /&gt;
Computational queues on cluster&lt;br /&gt;
&lt;br /&gt;
Software environment&lt;br /&gt;
&lt;br /&gt;
How to submit computational batch jobs&lt;br /&gt;
&lt;br /&gt;
Other tips and guidelines for users&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Using Sapelo2 Cluster at the GACRC, Part II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: More topics on how to use Sapelo2 cluster&lt;br /&gt;
&lt;br /&gt;
Learn about high-performance computing framework&lt;br /&gt;
&lt;br /&gt;
Why is my job pending? How can I get my job to start sooner? How to find available computing resources on Sapelo2?&lt;br /&gt;
&lt;br /&gt;
How to request computing resources such as nodes, CPU cores, memory, GPU device, etc. to run serial, threaded, MPI, and GPU jobs on Sapelo2? &lt;br /&gt;
&lt;br /&gt;
How can I make my job run more efficiently (through the correct use of software and hardware)?&lt;br /&gt;
&lt;br /&gt;
A quick intro to MPI library and how to compile/run MPI jobs on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Use Linux on Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Linux OS fundamentals&lt;br /&gt;
&lt;br /&gt;
Linux common commands, filesystem, and shell&lt;br /&gt;
&lt;br /&gt;
Linux shell scripting basics&lt;br /&gt;
&lt;br /&gt;
Common Linux utilities, e.g., grep, sed, find, sort, and awk, etc.&lt;br /&gt;
&lt;br /&gt;
Linux Hands-on practice&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Python Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: Python language overview, scientific modules and distributions&lt;br /&gt;
&lt;br /&gt;
Python general lexical conventions&lt;br /&gt;
&lt;br /&gt;
Basic built-in data types, like string, list, tuple, dictionary, etc.&lt;br /&gt;
&lt;br /&gt;
Focus of II: Programming structures: control flow and loop&lt;br /&gt;
&lt;br /&gt;
Function: procedural programming with examples, lambda expression, factory function and generator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;R Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: R language overview,general lexical conventions, data types, functions, and packages.&lt;br /&gt;
&lt;br /&gt;
Basic built-in data types, like string, numeric, list, dataframe etc. Using the dplyr package.&lt;br /&gt;
&lt;br /&gt;
Focus of II: Programming structures: control flow, loops and functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Python on GACRC Sapelo2 Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Install Python packages/modules in a user&#039;s home directory on Sapelo2 cluster&lt;br /&gt;
&lt;br /&gt;
Python versions installed on Sapelo2&lt;br /&gt;
&lt;br /&gt;
Python environment details on Sapelo2 &lt;br /&gt;
&lt;br /&gt;
How to know a Python package is installed or not on Sapelo2&lt;br /&gt;
&lt;br /&gt;
How to install a Python package in user&#039;s home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Do It Yourself: Using Conda to create and run python environments to suit your computing needs effortlessly!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Use conda to create and configure your own python virtual environments; Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
What is Conda and its environment&lt;br /&gt;
&lt;br /&gt;
Conda on Sapelo2&lt;br /&gt;
&lt;br /&gt;
Use conda to create and configure your own python virtual environments&lt;br /&gt;
&lt;br /&gt;
Activate your environments to run python apps from your home directory on Sapelo2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;How to submit and run jobs efficiently and correctly on Sapelo2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Sapelo2 cluster general workflow and correct computing resource requesting&lt;br /&gt;
&lt;br /&gt;
Overview of Sapelo2 cluster with reference tables and operational diagrams&lt;br /&gt;
&lt;br /&gt;
Sapelo2 batch job submission workflow taking global scratch as job working space&lt;br /&gt;
&lt;br /&gt;
How to request computing resources correctly &lt;br /&gt;
&lt;br /&gt;
How to run pipeline tasks and what are advantages/disadvantages of different options&lt;br /&gt;
&lt;br /&gt;
Sapelo2 cluster guideline and practical tips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;GACRC Storage Environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Overview of Linux common commands related to file and folder operations&lt;br /&gt;
&lt;br /&gt;
Overview of the storage environment of zcluster and Sapelo cluster at GACRC&lt;br /&gt;
&lt;br /&gt;
How to transfer data between local and GACRC storage&lt;br /&gt;
&lt;br /&gt;
New file transfer node xfer2 and how to use it to transfer data between zcluster and the new cluster&lt;br /&gt;
&lt;br /&gt;
GACRC suggestions on good practices on GACRC storage, etc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;NCBI Blast application on sapelo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Introduction to BLAST&lt;br /&gt;
&lt;br /&gt;
BLAST job submission to sapelo&lt;br /&gt;
&lt;br /&gt;
Advantages &amp;amp; Disadvantages: NCBI website vs run at sapelo.&lt;br /&gt;
&lt;br /&gt;
Understand BLAST output&lt;br /&gt;
&lt;br /&gt;
Troubleshooting the BLAST results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;NGS application overview at GACRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus: Overview of Bioinformatics software available on HPC clusters at GACRC&lt;br /&gt;
&lt;br /&gt;
It’s a brave new world – NGS and its Applications  &lt;br /&gt;
&lt;br /&gt;
Hardware, Software, Databases available at GACRC&lt;br /&gt;
&lt;br /&gt;
NGS project: Logistics and resource considerations&lt;br /&gt;
&lt;br /&gt;
Best practices, common mistakes, troubleshooting and getting help from GACRC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Title: &#039;&#039;&#039;Perl Language Basics I, II&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Focus of I: Overview of Perl language, &lt;br /&gt;
&lt;br /&gt;
Perl general scripting style&lt;br /&gt;
&lt;br /&gt;
Perl fundamental data types&lt;br /&gt;
&lt;br /&gt;
Focus of II: Program structure: control flow and loop&lt;br /&gt;
&lt;br /&gt;
Perl subroutine&lt;br /&gt;
&lt;br /&gt;
Perl I/O&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download==&lt;br /&gt;
&lt;br /&gt;
This section provides the slides that we use for our current workshops and material used for several of our past training events and presentations.&lt;br /&gt;
 &lt;br /&gt;
====Sapelo2 Cluster Training====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Media:GACRC_Sapelo2_cluster_new_user_training_workshop_v10.8.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Teaching Cluster Training====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GACRC-Teaching-cluster-new-user-training-workshop-Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Linux Training for New Cluster Users====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Linux_Training_For_New_Users_Of_Cluster_Suchi_04252019.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Installing Software Packages in Virtual Environments on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GACRC_virtual_environments_training_v1.2.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Job Parallelization with GNU Parallel and Slurm Arrays====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:GNU_Parallel_and_SLURM_Arrays_v1.1.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Python Basics====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Language_Basics_I_v5.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Language_Basics_II_v5.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Python_Basics_v6.1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====R Basics====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R Language Basics PowerPoint v2.0.1.pdf|Media:R_Language_Basics_PowerPoint_v2.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_Document_v2.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_part_2_Powerpoint_v1.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:R_Language_Basics_part_2_Document_v1.0.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Perl Basics====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Media:Perl_Language_Basics_I_Workshop_v1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====Sap2test Migration Training====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Migrating_to_Slurm_and_new_software_environment.pdf]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; To help users familiarize with Slurm and the test cluster environment, we have prepared some training videos that are available from the &#039;&#039;&#039;GACRC&#039;s Kaltura channel&#039;&#039;&#039; at&lt;br /&gt;
https://kaltura.uga.edu/channel/GACRC/176125031 (login with MyID and password is required).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Topical Sessions====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:AI_Resources_on_the_GACRC_Sapelo2_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Using_Sapelo2_Cluster_at_the_GACRC_Part_II_Rocky8.pdf]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Using_Conda_on_the_GACRC_Sap2test_cluster_v1.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Blast_Workshop_GACRC_02012017.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Media:Next-Generation_Sequencing_Applications_at_GACRC_10282016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Out-Reach/In-Class Talk====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable unsortable&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Dept./Center/Institute&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Type&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Workshop PDF&lt;br /&gt;
|-&lt;br /&gt;
|GEOG - Spring2026 || In-Class || [[Media:GACRC-Teaching-cluster-new-user-training-workshop-python-Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2026 || In-Class || [[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330_Spring2026.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2026 || In-Class || [[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601-Spring2026.pdf]] ; [[Media:Gacrc_handout2026_phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Anthropology Department || Out-Reach || [[Media:GACRC_overview_20251117_Anthropology.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2025|| Out-Reach || [[Media:GACRC_overview_20250819-CSP.pdf]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2025||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330-Spring2025.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2025||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602-Spring2025.pdf]] ; [[Media:Gacrc_handout2025_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Engineering FYOS - Fall 2024|| In-Class||[[Media:GACRC_overview_20240920-FYOS.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2024||Out-Reach||[[Media:GACRC_overview_20240820-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2024||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330_Spring2024.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2024|| In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601-Spring2024.pdf]] ; [[Media:Gacrc_handout2024_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2024||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601-Spring2024.pdf]] ; [[Media:Gacrc_handout2024_phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2023||Out-Reach||[[Media:GACRC_overview_20230822-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|BCMB8330 - Spring2023||In-Class||[[Media:GACRC-Teaching-cluster-new-user-training-workshop_bcmb8330.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2023||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] ; [[Media:Gacrc_handout2023_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2023|| In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602.pdf]] ; [[Media:Gacrc_handout2023_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|ILS GradFIRST course - Fall 2022||Out-Reach||[[Media:GACRC_overview_20220901-ILS.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|FYOS1001 - Fall 2022||Out-Reach||[[Media:High_Performance_Computing_(HPC)_on_GACRC_Sapelo2_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2022||Out-Reach||[[Media:GACRC_overview_20220830-CSP.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|CSP seminar - Fall 2022||Out-Reach||[[Media:Compile_and_Run_HPC_code_on_Sapelo2.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Terry College IT - Spring2022||Out-Reach ||[[Media:GACRC_overview_20220506-Terry.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8601 - Spring2022||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS4601/6601 - Spring2022||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] ; [[Media:Gacrc_handout2021_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|PHYS8602 - Spring2021 ||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602-2021.pdf]] ; [[Media:Gacrc_handout2021_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|GENE4220 - Fall2020||In-Class||[[Media:GACRC_Teaching_cluster_new_user_training_workshop_GENE4220_Fall2020.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|College of Veterinary Medicine - Spring2020||Out-Reach (jlslab)||[[Media:Using_GACRC_Sapelo2_Cluster-Advanced_Topics(1).pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Byod Data Center - Fall2019||In-Class (FYOS1001)||[[Media:High_Performance_Computing_(HPC)_on_Cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Department of Linguistics - Fall2019||In-class (LING6570)|| [[Media:GACRC_Teaching_cluster_new_user_training_workshop_LING6570_Part2.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics - Fall2019||Out-Reach (Seminar Talk 20190820)||[[Media:Introduction_to_GACRC_Computing_Facility_-_Sapelo2_Cluster_CSP-Fall2019.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||In-Class (PHYS4601/6601)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys4601.pdf]] [[Media:Gacrc_handout2019_phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
| The Center for Simulational Physics||In-Class (PHYS8601)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8601.pdf]] [[Media:Gacrc_handout2020_phys8601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||In-Class (PHYS8602)||[[Media:GACRC_Teaching_cluster_new_user_training_workshop-phys8602.pdf]] [[Media:Gacrc_handout2019_phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Food Science - Fall2018||In-Class (FYOS1001)||[[Media:High_Performance_Computing_(HPC)_on_Sapelo2_Cluster_at_GACRC.pdf]]&lt;br /&gt;
|- &lt;br /&gt;
|The Center for Simulational Physics - Summer2018||Out-Reach (Seminar Talk 20180821)||[[Media:Introduction_to_GACRC_Sapelo2_cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Miller plant science - Summer2018||Out-Reach (jlmlab)||[[Media:Introduction_to_GACRC_Sapelo2_cluster.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Biochemistry and Molecular Biology - Spring2018||In-Class (BCMB8330)||[[Media:GACRC_zcluster_Class_Training_BCMB8330_Spring_2018.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics - Summer2017||Out-Reach (Seminar Talk 20170831)||[[Media:Introduction_on_HPC_Resources_at_the_GACRC.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computational Physics - Spring2017 ||In-class (PHYS4601/6601)||[[Media:Phys4601.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computational Physics - Spring2017||In-class (PHYS8602)||[[Media:Phys8602.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Institute of Bioinformatics and the Quantitative Biology Consulting Group||Out-Reach||[[Media:Introduction_to_HPC_Resources_at_GACRC_BBB_Talk_20151014.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|The Center for Simulational Physics||Out-Reach (Seminar Talk 20160906)||[[Media:Introduction_to_Sapelo_Computing_Resources_at_GACRC_Workshop20160906.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Microbiology||In-Class (MIBO8150)||[[Media:Introduction_to_HPC_Resources_at_GACRC_MIBO8150_20160926.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Statistics||In-Class (STAT8060)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_Workshop_STAT8060_20150826.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Biochemistry and Molecular Biology||In-Class (BCMB8211)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_BCMB8211_20160114.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Plant Biology||In-Class (PBIO/BINF8350)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_PBIO-BINF8350_20160115.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Plant Biology - Bioinformatics Applications Fall2016||In-Class (PBIO4550)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_PBIO_4550_08182016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Bioinformatics - Essential Computing Skills for Biologists Fall2016||In-Class (BINF4005)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_BINF_4005_08312016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Computers in Experimental Genetics Fall2016||In-Class (GENE4220)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_GENE_4220_10192016.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Statistics - Advanced Applications and Computing in R Fall2016||In-Class (STAT8330)||[[Media:Introduction_to_HPC_Using_zcluster_at_GACRC_STAT8330_11022016.pdf]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slides may become outdated and you should always check GACRC Wiki for up to date information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Past Sessions==&lt;br /&gt;
&lt;br /&gt;
[[Pass Sessions in 2021]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2020]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2019]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2018]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2017]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2016]]&lt;br /&gt;
&lt;br /&gt;
[[Past Sessions in 2015]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22948</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22948"/>
		<updated>2026-04-20T18:47:40Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 1. Prepare a batch job submission script for VSCode tunnel session */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Computing resources (CPU, memory, GPU) allocated here will be available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Computing resources (CPU, memory, GPU) allocated for your batch job will be available within your VSCode tunnel working environment.&lt;br /&gt;
# You can load additional compatible central modules in your batch job submission script. Any modules loaded for your batch job will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel (interactive or batch job) is running on a compute node, you can check the related VS Code processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To compare, run the same command on the login node where you started the interactive job or submitted the batch job:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pgrep -u $USER -af &amp;quot;code|vscode|node&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
3064679 code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir /home/zhuofei/.code_tunnel --accept-server-license-terms&lt;br /&gt;
3064696 sh /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/bin/code-server --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064700 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/server-main.js --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064724 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=fileWatcher&lt;br /&gt;
3064815 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node --dns-result-order=ipv4first /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false&lt;br /&gt;
3064832 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=ptyHost --logsPath /home/zhuofei/.vscode-server/data/logs/20260420T110646&lt;br /&gt;
3064843 /bin/bash --init-file /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pgrep -u $USER -af &#039;code|vscode|node&#039;&lt;br /&gt;
# (no output)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Observed Behavior ====&lt;br /&gt;
&#039;&#039;&#039;On compute node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* VS Code Server process (&amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Node runtime processes (shown as &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Extension host (&amp;lt;code&amp;gt;node ... --type=extensionHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
* File watcher (&amp;lt;code&amp;gt;node ... --type=fileWatcher&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Terminal backend (&amp;lt;code&amp;gt;node ... --type=ptyHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On login node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* No VSCode-related processes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
* VSCode backend processes run only on the compute node&lt;br /&gt;
* No VSCode services remain on the login node&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
&lt;br /&gt;
* The VSCode workload is fully isolated to the compute node&lt;br /&gt;
* Login nodes remain clean and responsive&lt;br /&gt;
* This behavior aligns with HPC best practices&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
&lt;br /&gt;
* Always run VSCode (server/tunnel) inside a Slurm interactive or batch job on a compute node.&lt;br /&gt;
* Never run VSCode directly on login nodes.&lt;br /&gt;
* Request appropriate CPU, memory, and GPU resources for your workload.&lt;br /&gt;
* Install only the extensions you need.&lt;br /&gt;
* Periodically remove unused extensions to reduce resource usage.&lt;br /&gt;
* Avoid leaving idle VSCode sessions running; terminate jobs when not in use.&lt;br /&gt;
* VS Code and its extensions are installed under ${HOME}/.vscode-server/, which counts toward your home directory quota.&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22947</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22947"/>
		<updated>2026-04-20T18:46:17Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 1. Prepare a batch job submission script for VSCode tunnel session */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Computing resources (CPU, memory, GPU) allocated here will be available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Computing resources (CPU, memory, GPU) allocated for your batch job will be available within your VSCode tunnel working environment.&lt;br /&gt;
# You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel (interactive or batch job) is running on a compute node, you can check the related VS Code processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To compare, run the same command on the login node where you started the interactive job or submitted the batch job:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pgrep -u $USER -af &amp;quot;code|vscode|node&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
3064679 code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir /home/zhuofei/.code_tunnel --accept-server-license-terms&lt;br /&gt;
3064696 sh /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/bin/code-server --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064700 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/server-main.js --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064724 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=fileWatcher&lt;br /&gt;
3064815 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node --dns-result-order=ipv4first /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false&lt;br /&gt;
3064832 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=ptyHost --logsPath /home/zhuofei/.vscode-server/data/logs/20260420T110646&lt;br /&gt;
3064843 /bin/bash --init-file /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pgrep -u $USER -af &#039;code|vscode|node&#039;&lt;br /&gt;
# (no output)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Observed Behavior ====&lt;br /&gt;
&#039;&#039;&#039;On compute node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* VS Code Server process (&amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Node runtime processes (shown as &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Extension host (&amp;lt;code&amp;gt;node ... --type=extensionHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
* File watcher (&amp;lt;code&amp;gt;node ... --type=fileWatcher&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Terminal backend (&amp;lt;code&amp;gt;node ... --type=ptyHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On login node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* No VSCode-related processes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
* VSCode backend processes run only on the compute node&lt;br /&gt;
* No VSCode services remain on the login node&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
&lt;br /&gt;
* The VSCode workload is fully isolated to the compute node&lt;br /&gt;
* Login nodes remain clean and responsive&lt;br /&gt;
* This behavior aligns with HPC best practices&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
&lt;br /&gt;
* Always run VSCode (server/tunnel) inside a Slurm interactive or batch job on a compute node.&lt;br /&gt;
* Never run VSCode directly on login nodes.&lt;br /&gt;
* Request appropriate CPU, memory, and GPU resources for your workload.&lt;br /&gt;
* Install only the extensions you need.&lt;br /&gt;
* Periodically remove unused extensions to reduce resource usage.&lt;br /&gt;
* Avoid leaving idle VSCode sessions running; terminate jobs when not in use.&lt;br /&gt;
* VS Code and its extensions are installed under ${HOME}/.vscode-server/, which counts toward your home directory quota.&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22946</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22946"/>
		<updated>2026-04-20T18:44:43Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Computing resources (CPU, memory, GPU) allocated here will be available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel (interactive or batch job) is running on a compute node, you can check the related VS Code processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To compare, run the same command on the login node where you started the interactive job or submitted the batch job:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pgrep -u $USER -af &amp;quot;code|vscode|node&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
3064679 code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir /home/zhuofei/.code_tunnel --accept-server-license-terms&lt;br /&gt;
3064696 sh /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/bin/code-server --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064700 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/server-main.js --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064724 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=fileWatcher&lt;br /&gt;
3064815 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node --dns-result-order=ipv4first /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false&lt;br /&gt;
3064832 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=ptyHost --logsPath /home/zhuofei/.vscode-server/data/logs/20260420T110646&lt;br /&gt;
3064843 /bin/bash --init-file /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pgrep -u $USER -af &#039;code|vscode|node&#039;&lt;br /&gt;
# (no output)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Observed Behavior ====&lt;br /&gt;
&#039;&#039;&#039;On compute node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* VS Code Server process (&amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Node runtime processes (shown as &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Extension host (&amp;lt;code&amp;gt;node ... --type=extensionHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
* File watcher (&amp;lt;code&amp;gt;node ... --type=fileWatcher&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Terminal backend (&amp;lt;code&amp;gt;node ... --type=ptyHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On login node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* No VSCode-related processes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
* VSCode backend processes run only on the compute node&lt;br /&gt;
* No VSCode services remain on the login node&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
&lt;br /&gt;
* The VSCode workload is fully isolated to the compute node&lt;br /&gt;
* Login nodes remain clean and responsive&lt;br /&gt;
* This behavior aligns with HPC best practices&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
&lt;br /&gt;
* Always run VSCode (server/tunnel) inside a Slurm interactive or batch job on a compute node.&lt;br /&gt;
* Never run VSCode directly on login nodes.&lt;br /&gt;
* Request appropriate CPU, memory, and GPU resources for your workload.&lt;br /&gt;
* Install only the extensions you need.&lt;br /&gt;
* Periodically remove unused extensions to reduce resource usage.&lt;br /&gt;
* Avoid leaving idle VSCode sessions running; terminate jobs when not in use.&lt;br /&gt;
* VS Code and its extensions are installed under ${HOME}/.vscode-server/, which counts toward your home directory quota.&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22945</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22945"/>
		<updated>2026-04-20T18:34:59Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Interpretation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel (interactive or batch job) is running on a compute node, you can check the related VS Code processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To compare, run the same command on the login node where you started the interactive job or submitted the batch job:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pgrep -u $USER -af &amp;quot;code|vscode|node&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
3064679 code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir /home/zhuofei/.code_tunnel --accept-server-license-terms&lt;br /&gt;
3064696 sh /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/bin/code-server --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064700 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/server-main.js --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064724 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=fileWatcher&lt;br /&gt;
3064815 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node --dns-result-order=ipv4first /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false&lt;br /&gt;
3064832 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=ptyHost --logsPath /home/zhuofei/.vscode-server/data/logs/20260420T110646&lt;br /&gt;
3064843 /bin/bash --init-file /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pgrep -u $USER -af &#039;code|vscode|node&#039;&lt;br /&gt;
# (no output)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Observed Behavior ====&lt;br /&gt;
&#039;&#039;&#039;On compute node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* VS Code Server process (&amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Node runtime processes (shown as &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Extension host (&amp;lt;code&amp;gt;node ... --type=extensionHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
* File watcher (&amp;lt;code&amp;gt;node ... --type=fileWatcher&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Terminal backend (&amp;lt;code&amp;gt;node ... --type=ptyHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On login node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* No VSCode-related processes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
* VSCode backend processes run only on the compute node&lt;br /&gt;
* No VSCode services remain on the login node&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
&lt;br /&gt;
* The VSCode workload is fully isolated to the compute node&lt;br /&gt;
* Login nodes remain clean and responsive&lt;br /&gt;
* This behavior aligns with HPC best practices&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
&lt;br /&gt;
* Always run VSCode (server/tunnel) inside a Slurm interactive or batch job on a compute node.&lt;br /&gt;
* Never run VSCode directly on login nodes.&lt;br /&gt;
* Request appropriate CPU, memory, and GPU resources for your workload.&lt;br /&gt;
* Install only the extensions you need.&lt;br /&gt;
* Periodically remove unused extensions to reduce resource usage.&lt;br /&gt;
* Avoid leaving idle VSCode sessions running; terminate jobs when not in use.&lt;br /&gt;
* VS Code and its extensions are installed under ${HOME}/.vscode-server/, which counts toward your home directory quota.&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22944</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22944"/>
		<updated>2026-04-20T18:22:40Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel (interactive or batch job) is running on a compute node, you can check the related VS Code processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To compare, run the same command on the login node where you started the interactive job or submitted the batch job:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pgrep -u $USER -af &amp;quot;code|vscode|node&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node&#039;&amp;quot;&lt;br /&gt;
3064679 code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir /home/zhuofei/.code_tunnel --accept-server-license-terms&lt;br /&gt;
3064696 sh /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/bin/code-server --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064700 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/server-main.js --connection-token=j2x9Z0dD03TwZ5WpnxGpodje1UFflxwsjGy0uDjVIOA --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-6ca97adf-e1a0-4b74-a319-bd3dff74b07c&lt;br /&gt;
3064724 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=fileWatcher&lt;br /&gt;
3064815 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node --dns-result-order=ipv4first /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false&lt;br /&gt;
3064832 /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/node /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/bootstrap-fork --type=ptyHost --logsPath /home/zhuofei/.vscode-server/data/logs/20260420T110646&lt;br /&gt;
3064843 /bin/bash --init-file /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/server/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pgrep -u $USER -af &#039;code|vscode|node&#039;&lt;br /&gt;
# (no output)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Observed Behavior ====&lt;br /&gt;
&#039;&#039;&#039;On compute node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* VS Code Server process (&amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Node runtime processes (shown as &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Extension host (&amp;lt;code&amp;gt;node ... --type=extensionHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
* File watcher (&amp;lt;code&amp;gt;node ... --type=fileWatcher&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Terminal backend (&amp;lt;code&amp;gt;node ... --type=ptyHost&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On login node:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* No VSCode-related processes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
* VSCode backend processes run only on the compute node&lt;br /&gt;
* No VSCode services remain on the login node&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
&lt;br /&gt;
* The VSCode workload is fully isolated to the compute node&lt;br /&gt;
* Login nodes remain clean and responsive&lt;br /&gt;
* This behavior aligns with HPC best practices&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22943</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22943"/>
		<updated>2026-04-20T16:25:32Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) ===&lt;br /&gt;
When your VSCode tunnel interactive or batch job is running on a compute node, you can check relevant VSCode processes with:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;node&amp;gt; &amp;quot;pgrep -u $USER -af &#039;code|vscode|node|python&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh ra5-6 &amp;quot;pgrep -u $USER -af &#039;code|vscode|node|python&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For comparing, you can also run the same pgrep on the login node where you started the interactive job or submitted compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system. It must be treated like a compute workload—not a simple SSH tool or text editor.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22942</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22942"/>
		<updated>2026-04-20T16:04:02Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login in Step 5 was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code provided (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22941</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22941"/>
		<updated>2026-04-20T16:00:29Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&#039;&#039;&#039;Important Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* If another authorization prompt appears, it means the previous login was not fully completed.&lt;br /&gt;
* Complete authorization using the latest code shown in the log (for example: &amp;lt;code&amp;gt;E1F9-D7E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Once authorization is successful, the VSCode link will appear in the log and can be used directly.&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22940</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22940"/>
		<updated>2026-04-20T15:41:57Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 5. Example of steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&lt;br /&gt;
# --- Next Steps ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown in a browser ---&lt;br /&gt;
# --- 3. Return and run `cat log` again to see new instructions at the bottom of the log ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VS Code tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open a browser and complete authorization using the code shown below ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If this authorization message appears again and you have NOT completed login, complete it in a browser using the latest code shown ---&lt;br /&gt;
# --- If you have already completed authorization, ignore this message and continue ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link in your browser ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear ---&lt;br /&gt;
# --- No action needed if authorization is already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure your browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in your browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22939</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22939"/>
		<updated>2026-04-20T15:26:57Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 5. Example of steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44594144&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44594144      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra5-6               &lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
log.44594144.out  sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# --- IMPORTANT WORKFLOW ---&lt;br /&gt;
# --- 1. Run `cat log` ---&lt;br /&gt;
# --- 2. Follow the instructions shown (usually in browser) ---&lt;br /&gt;
# --- 3. Return and run `cat log` again ---&lt;br /&gt;
# --- 4. Repeat until tunnel is fully ready ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel requests GitHub device authentication ---&lt;br /&gt;
# --- ACTION: Open browser and complete authorization ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- After completing the step above, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Previous step has been completed ---&lt;br /&gt;
# --- Continue following instructions from the log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
# --- ACTION ---&lt;br /&gt;
# --- If prompted again, complete authorization in browser before continuing ---&lt;br /&gt;
# --- If already authorized, proceed to next step ---&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel provides browser access link ---&lt;br /&gt;
# --- ACTION: Open this link on your local machine ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After opening the link, return and continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still appear (normal behavior) ---&lt;br /&gt;
# --- No action needed if already completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel link remains active ---&lt;br /&gt;
# --- ACTION: Ensure browser is connected using the link above ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- After confirming connection, continue ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44594144.out &lt;br /&gt;
&lt;br /&gt;
# --- Final stage: client connects to tunnel ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code D9D8-6303&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-20 11:06:45] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] wrote id&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is active ---&lt;br /&gt;
[2026-04-20 11:06:45] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/log.txt and /home/zhuofei/.code_tunnel/servers/Stable-560a9dba96f961efea7b1612916f89e5d5d4d679/pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- Starts new server if none exists ---&lt;br /&gt;
[2026-04-20 11:06:45] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-20 11:06:46] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- DONE: Tunnel is fully ready ---&lt;br /&gt;
# --- You can now use VS Code in browser ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22938</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22938"/>
		<updated>2026-04-20T14:11:40Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8           &lt;br /&gt;
    &lt;br /&gt;
zhuofei@ss-sub1 VSCode_tunnel$ ls&lt;br /&gt;
log.44588780.out  sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out&lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
cat log.44572045.out&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
[2026-04-20 09:50:11] info Using GitHub for authentication, run `code tunnel user login --provider &amp;lt;provider&amp;gt;` option to change this.&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code 2DDE-E787&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file fourth time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22937</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22937"/>
		<updated>2026-04-20T14:02:52Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 3. How to  complete Steps 5–7 from the interactive workflow described above. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., log.44588780.out). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8           &lt;br /&gt;
    &lt;br /&gt;
zhuofei@ss-sub1 VSCode_tunnel$ ls&lt;br /&gt;
log.44588780.out  sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out&lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cat log.44572045.out&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
[2026-04-20 09:50:11] info Using GitHub for authentication, run `code tunnel user login --provider &amp;lt;provider&amp;gt;` option to change this.&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code 2DDE-E787&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22936</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22936"/>
		<updated>2026-04-17T20:55:08Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260417 4:53PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22935</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22935"/>
		<updated>2026-04-17T20:52:26Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 4. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the batch job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the batch job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22934</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22934"/>
		<updated>2026-04-17T20:50:29Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* 4, Example of steps: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
&lt;br /&gt;
==== 5. Example of steps ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22933</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22933"/>
		<updated>2026-04-17T20:48:56Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Prepare a batch job submission script for VSCode tunnel session ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
==== 2. Submit a batch job ====&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. How to  complete Steps 5–7 from the interactive workflow described above. ====&lt;br /&gt;
Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above.    &lt;br /&gt;
&lt;br /&gt;
==== 4, Example of steps: ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22932</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22932"/>
		<updated>2026-04-17T20:36:32Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* What Happens Under the Hood When Using VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What Happens Under the Hood When Using VSCode ===&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extension Behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Advantages of This Workflow ===&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Best Practices ===&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode directly on login nodes&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
=== Key Takeaway ===&lt;br /&gt;
VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&lt;br /&gt;
&lt;br /&gt;
=== Final Note ===&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22931</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22931"/>
		<updated>2026-04-17T20:29:14Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22930</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22930"/>
		<updated>2026-04-17T20:28:25Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== 9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster? ====&lt;br /&gt;
&lt;br /&gt;
==== If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session. ====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in a batch GPU Job ===&lt;br /&gt;
&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22929</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22929"/>
		<updated>2026-04-17T20:26:15Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster?&#039;&#039;&#039; ====&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22928</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22928"/>
		<updated>2026-04-17T20:24:57Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster?&#039;&#039;&#039; ===&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22927</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22927"/>
		<updated>2026-04-17T20:23:56Z</updated>

		<summary type="html">&lt;p&gt;Moses: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&#039;&#039;&#039;9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example of steps described above:   &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ pwd&lt;br /&gt;
/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ ls&lt;br /&gt;
sub.sh&lt;br /&gt;
 &lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat sub.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:1&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sbatch sub.sh &lt;br /&gt;
Submitted batch job 44572045&lt;br /&gt;
&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ sq --me&lt;br /&gt;
JOBID         NAME            PARTITION        USER       NODES  CPUS   MIN_MEMORY   PRIORITY   TIME            TIME_LIMIT      STATE      NODELIST(REASON)    &lt;br /&gt;
44572045      code_tunnel     gpu_p            zhuofei    1      4      32G          996        0:02            4:00:00         RUNNING    ra8-8               &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file first time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- VSCode tunnel is requesting GitHub device authentication ---&lt;br /&gt;
# --- User must open the URL and enter the code to authorize ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file second time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication prompt may still appear until completed ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server initialization message ---&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* By using the software, you agree to&lt;br /&gt;
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and&lt;br /&gt;
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel is ready and provides a browser access link ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# Open the log file third time&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$ cat log.44572045.out &lt;br /&gt;
&lt;br /&gt;
# --- Authentication message may still be shown in log ---&lt;br /&gt;
To grant access to the server, please log into https://github.com/login/device and use code B578-CB62&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* Visual Studio Code Server&lt;br /&gt;
*&lt;br /&gt;
* License and privacy information&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
# --- Browser access link (use this on local machine) ---&lt;br /&gt;
Open this link in your browser https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&lt;br /&gt;
&lt;br /&gt;
# --- A client (your browser) connected to the tunnel ---&lt;br /&gt;
[2026-04-17 16:13:13] info [tunnels::connections::relay_tunnel_host] Opened new client on channel 2&lt;br /&gt;
&lt;br /&gt;
# --- Internal SSH handshake between tunnel components ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] wrote id&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] read other id&lt;br /&gt;
&lt;br /&gt;
# --- Tunnel session is now active ---&lt;br /&gt;
[2026-04-17 16:13:13] info [russh::server] session is running&lt;br /&gt;
&lt;br /&gt;
# --- VS Code checks for existing server instance ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Checking /home/zhuofei/.code_tunnel/servers/.../log.txt and pid.txt for a running server...&lt;br /&gt;
&lt;br /&gt;
# --- No running server found, starting a new one ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Starting server...&lt;br /&gt;
&lt;br /&gt;
# --- VS Code Server successfully started ---&lt;br /&gt;
[2026-04-17 16:13:15] info [rpc.0] Server started&lt;br /&gt;
&lt;br /&gt;
# --- Job script finished, tunnel continues running in background ---&lt;br /&gt;
zhuofei@ss-sub4 VSCode_tunnel$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22926</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22926"/>
		<updated>2026-04-17T18:38:30Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&#039;&#039;&#039;9. What happens if you cancel the interactive job or the job reaches its time limit on the cluster?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you cancel the interactive job, or if the job is terminated after reaching its time limit, the VSCode tunnel session will stop, and all allocated resources (CPU, memory, and GPU) will be released. You will also lose the active VSCode connection and need to start a new session.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example:   &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22925</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22925"/>
		<updated>2026-04-17T18:31:50Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once the job starts running, monitor the job’s standard output log file (e.g., &amp;lt;code&amp;gt;log.44568857.out&amp;lt;/code&amp;gt;). You can use commands such as &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;to view the log contents from time to time and follow the on-screen instructions to complete Steps 5–7 from the interactive workflow described above. &lt;br /&gt;
&lt;br /&gt;
Below is an example:   &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22924</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22924"/>
		<updated>2026-04-17T13:47:53Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
You can then submit the job to the cluster using:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once job started running, keep monitoring the &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22923</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22923"/>
		<updated>2026-04-17T13:45:45Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
Within the working directory of the interactive job described above, you can use a batch job submission script (&amp;lt;code&amp;gt;sub.sh&amp;lt;/code&amp;gt;) as shown below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
Then submit it to clusters by:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once job started running, keep monitoring the &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22922</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22922"/>
		<updated>2026-04-17T13:44:05Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
In the working folder in the above interactive job, you can use a batch job submission script (sub.sh) as below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in your batch job submission script. Any modules loaded there will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
Then submit it to clusters by:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once job started running, keep monitoring the &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22921</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22921"/>
		<updated>2026-04-17T13:42:20Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
In the working folder in the above interactive job, you can use a batch job script (sub.sh) as below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules in sub.sh. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
&lt;br /&gt;
Then submit it to clusters by:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once job started running, keep monitoring the &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22920</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22920"/>
		<updated>2026-04-17T13:41:26Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Step-by-Step Workflow in a batch GPU Job */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; You can load additional compatible central modules at this step. Any modules loaded here will be configured and available within your VSCode tunnel working environment.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
In the working folder in the above interactive job, you can use a batch job script as below:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=code_tunnel&lt;br /&gt;
#SBATCH --partition=gpu_p&lt;br /&gt;
#SBATCH --gres=gpu:L4:2&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=4&lt;br /&gt;
#SBATCH --mem=32G&lt;br /&gt;
#SBATCH --time=4:00:00&lt;br /&gt;
#SBATCH --output=log.%j.out&lt;br /&gt;
&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&lt;br /&gt;
code-tunnel  tunnel user login --provider github&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then submit it to clusters by:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sbatch sub.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once job started running, keep monitoring the &lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22919</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22919"/>
		<updated>2026-04-17T13:36:20Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* Interpretation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
111&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
	<entry>
		<id>https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22918</id>
		<title>Visual Studio Code SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.gacrc.uga.edu/index.php?title=Visual_Studio_Code_SSH&amp;diff=22918"/>
		<updated>2026-04-17T13:35:54Z</updated>

		<summary type="html">&lt;p&gt;Moses: /* What Happens Under the Hood When Using VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code, or &amp;quot;VS Code&amp;quot;, is a popular code editor.  It is very customizable and allows the user to install many extensions.  &lt;br /&gt;
&lt;br /&gt;
==Correct Usage of VS Code and other IDEs on the Sapelo2 Cluster==&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that if you log in to the Sapelo2 Cluster via VS Code, you will be placed on a &#039;&#039;&#039;login node&#039;&#039;&#039;. This is acceptable only to edit code/files and other low-level tasks, but please do not run code there. It will likely overload our login nodes and cause disruptions to the performance of the login nodes. If you want to run tests in VS Code, please do one of the following first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running Code/Tests in VS Code on the Cluster&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Start an interactive job within VS Code after logging in to the Sapelo2 Cluster&lt;br /&gt;
# Use VS Code through On Demand ([[OnDemand|https://wiki.gacrc.uga.edu/wiki/OnDemand]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Some VS Code extensions run in the background even if you are only editing code when you log in via your own VS Code installation on your computer (not through OnDemand). This can still overload our login nodes and cause significant slowness for users logged in to the same login nodes. To remedy this, you can disable these extensions for remote hosts using the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Disabling Heavy-Hitting Extensions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disabling extensions using &amp;quot;Disable (remote)&amp;quot; is simple and re-enabling them is also very quick and easy and does not require re-installation. &amp;quot;&#039;&#039;&#039;Disable (remote)&amp;quot; disables your VS Code extensions when on a remote host (like the Sapelo2 Cluster), but still allows you to use them locally.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you log in to the Sapelo2 Cluster via VS Code (not through OnDemand), your enabled extensions may run in the background even if you are only editing code, which will still contribute to the load on the login node. High load on login nodes causes major disruptions in the performance of those nodes for all users logged in to those nodes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following VS Code extensions are some that commonly run in the background even when you are not running code. Please consider disabling them for remote hosts with &amp;quot;Disable (remote)&amp;quot; if you plan to log in to the Sapelo2 Cluster via the VS Code IDE. You can easily and quickly enable the extension when you are ready to run your code on the Sapelo2 Cluster within an interactive job in your VS Code session. &lt;br /&gt;
&lt;br /&gt;
Extensions:&lt;br /&gt;
*C/C++ (ms-vscode.cpptools)&lt;br /&gt;
*Python (ms-python.python)&lt;br /&gt;
*Pylance (ms-python.vscode-pylance)&lt;br /&gt;
*Jupyter (ms-toolsai.jupyter)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot (github.copilot)&lt;br /&gt;
&lt;br /&gt;
* GitHub Copilot Chat (github.copilot-chat)&lt;br /&gt;
* Codeium (codeium.codeium)&lt;br /&gt;
* Claude-related extensions&lt;br /&gt;
* Docker (ms-azuretools.vscode-docker)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps to disable extensions for remote hosts using &amp;quot;Disable (remote)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
#In VS Code, click on the extension panel to view your extensions&lt;br /&gt;
#Click on the gear icon next to the extension that you want to disable&lt;br /&gt;
#Click on &#039;Disable (remote)&#039;&lt;br /&gt;
&lt;br /&gt;
* You can then re-enable your extensions if you need to run tests on the Sapelo2 Cluster by starting an interactive job in your VS Code session and clicking &amp;quot;Enable&amp;quot; on your desired extension&lt;br /&gt;
&lt;br /&gt;
==Downloading VS Code==&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t already, you can download VS Code [https://code.visualstudio.com/download here].  If you&#039;re using Windows, you&#039;ll almost certainly want to download the 64 bit User Installer.&lt;br /&gt;
&lt;br /&gt;
===Installing the SSH extension===&lt;br /&gt;
Here we will go over how to set up its SSH extension.  This will allow you to have VS Code connect to Sapelo2 so that you can edit files on the cluster with your local instance of VS Code.&lt;br /&gt;
&lt;br /&gt;
====Open the Extensions Interface====&lt;br /&gt;
&lt;br /&gt;
When you open VS Code, you&#039;ll see on the left the Activity Bar, with several buttons displayed vertically.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_activity_bar.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Search for the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Clicking the button with the four squares opens up the extensions interface in the sidebar.  Below you can see some of extensions I already have installed.  Some of these are just simply color theme packages, to change syntax highlighting colors.  Others provide features relevant to a particular programming language, such as the Python extension providing [https://code.visualstudio.com/docs/editor/intellisense#:~:text=IntelliSense%20is%20a%20general%20term,%2C%20and%20%22code%20hinting.%22 IntelliSense] for Python.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_extensions.png | 400px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At the top of the extensions interface is a search bar, where you can search for official or community-provided extensions.  This is where you could search for the SSH extension, for example.  Typically you&#039;ll want to install extensions provided by a known source, such as Microsoft in this case (the first option), and/or an extension that has many downloads and a high rating, as shown in this search output.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_ssh_extension.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Install the SSH Extension====&lt;br /&gt;
&lt;br /&gt;
Once you find the extension you want, all you have to do is click the small &amp;quot;Install&amp;quot; button in the search output, and a tab will open in your editor with more information and instructions on how to use the extension that you have installed.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_installed.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Using the SSH Extension==&lt;br /&gt;
&lt;br /&gt;
===Click the SSH Button===&lt;br /&gt;
&lt;br /&gt;
You can hide the sidebar if you wish with cmd + b on Mac and ctrl + b on Windows.  Once the SSH extension is installed you will see this small greater than &amp;amp; less than button in the bottom left corner of VS Code.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshbutton.png | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Add a new SSH Host Connection====&lt;br /&gt;
&lt;br /&gt;
Upon clicking that small SSH button in the bottom left, a prompt window will appear in the top middle of VS Code, asking how you want to connect to whatever it is you&#039;re going to SSH.  Select the first option, &amp;quot;Connect Current Window to Host...&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_connection_options.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next, click the &amp;quot;Add New SSH Host...&amp;quot; option, and type your MyID@sapelo2.gacrc.uga.edu in the prompt, and then press enter.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_new_ssh_host.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_connection.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If it asks you what SSH config file to update, you can just choose the first option.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_sshconfig.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Connect to Sapelo2====&lt;br /&gt;
&lt;br /&gt;
The prompt will then disappear, but now you can click the small SSH button in the bottom left of VS Code and see that your connection has been saved, you don&#039;t have to type it every time.  Click the Sapelo2 connection to then be presented with a password prompt.  This just wants your MyID password, as if you were normally connecting to Sapelo2 via PuTTY or your terminal.  Then you will get an ArchPass DUO prompt.  You can respond to this with a 1 for a push notification to your phone, or however you normally authenticate with ArchPass DUO.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_chooseconnection.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_password.png | 600px | frameless]]&lt;br /&gt;
[[File:Vscode_duo.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open Directories on Sapelo2====&lt;br /&gt;
&lt;br /&gt;
Once you approve the connection request via DUO, you&#039;re connected to Sapelo2!  To open up a particular directory on Sapelo2, click the button on the side part that looks like two pieces of paper, which will open the explorer interface within the sidebar.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_explorer.png | 600px | frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Open Folder&amp;quot; button to then be presented with a prompt where you can enter any path on Sapelo2 to which you have permission to access.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_opendir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In this example, I&#039;ve opened my home directory in the side bar.  It presents it as a file tree that I can navigate graphically.  Directories can be expanded by clicking them.  Files can be opened in VS Code by double clicking them, as you can see here, with this file.txt in my home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_homedir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
You can open multiple directories on Sapelo2 in the sidebar of VS Code by clicking the &amp;quot;Add Folder to Workspace&amp;quot; option in the File menu.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_add_dir.png |700x700px| frameless]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Open the Terminal in VS Code====&lt;br /&gt;
&lt;br /&gt;
I highly recommend toggling the Terminal in VS Code, which will allow you to interact with Sapelo2 as you normally would from within VS Code.  To do this, click &amp;quot;Terminal&amp;quot; under the View menu.  This will open up a terminal in the bottom half of the editor.  You can enter any command as you normally would on Sapelo2.&lt;br /&gt;
&lt;br /&gt;
[[File:Vscode_terminal.png |714x714px| frameless ]]&lt;br /&gt;
&lt;br /&gt;
== VSCode Tunnel Workflow on Sapelo2 (GPU Nodes) ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This guide describes how to run VSCode on Sapelo2 compute nodes using a tunnel-based workflow.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Using VSCode Remote SSH directly from a local machine often:&lt;br /&gt;
&lt;br /&gt;
* Launches backend services on &#039;&#039;&#039;login nodes&#039;&#039;&#039;&lt;br /&gt;
* Causes &#039;&#039;&#039;CPU and memory contention&#039;&#039;&#039; on login nodes&lt;br /&gt;
* Leads to degraded performance for all users&lt;br /&gt;
&lt;br /&gt;
This workflow ensures:&lt;br /&gt;
&lt;br /&gt;
* All VSCode processes run inside a &#039;&#039;&#039;Slurm interactive or batch job&#039;&#039;&#039;&lt;br /&gt;
* Proper resource allocation (CPU / memory / GPU)&lt;br /&gt;
* No persistent processes on login nodes&lt;br /&gt;
&lt;br /&gt;
=== Workflow architecture ===&lt;br /&gt;
Local Browser (vscode.dev)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Tunnel (cloud relay)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
Compute Node (Slurm job on gpu_p)&lt;br /&gt;
&lt;br /&gt;
                ↓&lt;br /&gt;
&lt;br /&gt;
VSCode Server + Extensions + User Workload&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Step-by-Step Workflow in an Interactive GPU Job ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Allocate a GPU Interactive Job ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
interact -c 20 --mem 80gb -p gpu_p --gres gpu:L4:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 2. Clean Previous VSCode State (Recommended. Note that all VSCode extensions you downloaded will be removed) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf ~/.vscode&lt;br /&gt;
rm -rf ~/.vscode-server&lt;br /&gt;
rm -rf ~/.code_tunnel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 3. Prepare Working Directory ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /scratch/$USER/VSCode_tunnel/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 4. Load VSCode Module ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ml VSCode/1.88.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 5. Authenticate VSCode Tunnel (You need a GitHub personal account to complete this step) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel user login --provider github&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Follow the instructions in your local browser:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code, for example, 15C1-6D7C&lt;br /&gt;
* Authorize access[[File:Vscode-tunnel-1.png|thumb|Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt;|none|600x600px]][[File:Vscode-tunnel-2.png|none|thumb|600x600px|Enter the code]][[File:Vscode-tunnel-3.png|none|thumb|Authorize access|513x513px]][[File:Vscode-tunnel-4.png|none|thumb|600x600px|Authorization successful]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 6. Start the Tunnel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name &amp;lt;your vscode tunnel name&amp;gt; --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For example:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
code-tunnel tunnel --name vscode-tunnel-0416 --cli-data-dir ~/.code_tunnel --accept-server-license-terms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be asked how would you like to log in to VSCode (cloud relay). Choose GitHub Account.&lt;br /&gt;
[[File:Vscode-tunnel-5.png|none|thumb|1189x1189px|How would you like to log in to claud VSCode]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 7. Open VSCode in your Local Browser ====&lt;br /&gt;
To grant access to the server, following instructions, you will repeat what you did in Step 5:&lt;br /&gt;
&lt;br /&gt;
*Open &amp;lt;nowiki&amp;gt;https://github.com/login/device&amp;lt;/nowiki&amp;gt; , choose to use your personal GitHub account.&lt;br /&gt;
* Enter the code generated at this step, for example,  E1F9-D7E8&lt;br /&gt;
* Authorize access&lt;br /&gt;
&lt;br /&gt;
The VSCode tunnel is now active. Open the provided link in your browser to connect &amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/&amp;lt;/nowiki&amp;gt;&amp;lt;tunnel-name&amp;gt;/&amp;lt;full&amp;gt;/&amp;lt;path&amp;gt;/&amp;lt;to&amp;gt;/&amp;lt;your&amp;gt;/&amp;lt;working folder where you started tunnel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://vscode.dev/tunnel/vscode-tunnel-0416/scratch/zhuofei/VSCode_tunnel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 8. Trust Workspace ====&lt;br /&gt;
VSCode is now connected through the tunnel (cloud relay).&lt;br /&gt;
[[File:Vscode-tunnel-6.png|none|thumb|910x910px|VSCode is now active]]&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Initial connection may take several minutes due to VSCode server download and setup.&lt;br /&gt;
&lt;br /&gt;
* The first time VSCode connects, it will automatically download the VSCode server (&amp;lt;code&amp;gt;vscode-server-linux-x64.tar.gz&amp;lt;/code&amp;gt;) and temporarily store it in &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After the server is downloaded and started, VSCode will establish the connection. This process may take several minutes to complete—please be patient.&lt;br /&gt;
&lt;br /&gt;
You will also need to click to trust workspace that VSCode will use:&lt;br /&gt;
[[File:Vscode-tunnel-7.png|none|thumb|908x908px|Trust workspace]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step-by-Step Workflow in a batch GPU Job ==&lt;br /&gt;
111&lt;br /&gt;
&lt;br /&gt;
== What Happens Under the Hood When Using VSCode ==&lt;br /&gt;
We would like VSCode users to understand what happens behind the scenes.&lt;br /&gt;
When VSCode starts (via tunnel or SSH remote connection), it launches multiple backend processes, including:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;code-server&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;node (server-main.js)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;extensionHost&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fileWatcher&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ptyHost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These components work together to provide remote editing, extension support, terminal access, and file system monitoring.&lt;br /&gt;
&lt;br /&gt;
As a result, VSCode behaves much like a &#039;&#039;&#039;multi-process application server&#039;&#039;&#039;, rather than a simple lightweight editor or a simple SSH tool as many users might expect.&lt;br /&gt;
&lt;br /&gt;
Because of this architecture:&lt;br /&gt;
&lt;br /&gt;
* Multiple background processes are always running&lt;br /&gt;
* CPU and memory are continuously consumed&lt;br /&gt;
* Resource usage persists even when idle&lt;br /&gt;
&lt;br /&gt;
For this reason, VSCode &#039;&#039;&#039;must be run on compute nodes&#039;&#039;&#039;, not login nodes. &#039;&#039;&#039;&#039;&#039;Running VSCode directly on login nodes can result in increased CPU load and memory usage, leading to degraded responsiveness for all users.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please keep the following in mind:&lt;br /&gt;
&lt;br /&gt;
* Always treat VSCode as a &#039;&#039;&#039;compute workload&#039;&#039;&#039;&lt;br /&gt;
* Always run it inside a Slurm allocation, either via an interactive job (as shown above), a batch job, or an [[OnDemand|Open OnDemand]] (OOD) VSCode session&lt;br /&gt;
* Avoid launching it directly on login nodes, especially when using the SSH Remote extension.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Compute Node and Login Node Behavior (Observed) (To be completed ZH.20260416 4:49PM) ===&lt;br /&gt;
Example on compute node:&lt;br /&gt;
&lt;br /&gt;
Processes include:&lt;br /&gt;
&lt;br /&gt;
* VSCode server&lt;br /&gt;
* Node.js services&lt;br /&gt;
* Extension hosts&lt;br /&gt;
* Terminal backend&lt;br /&gt;
&lt;br /&gt;
Resource usage example:&lt;br /&gt;
&lt;br /&gt;
* CPU: low but persistent&lt;br /&gt;
* Memory: non-trivial&lt;br /&gt;
* GPU: allocated but may be idle&lt;br /&gt;
* Processes: &amp;lt;code&amp;gt;code-tunnel&amp;lt;/code&amp;gt;, multiple &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Across all login nodes (&amp;lt;code&amp;gt;ss-sub1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;ss-sub4&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
* No VSCode backend processes present&lt;br /&gt;
* Only Slurm launcher processes visible&lt;br /&gt;
* No persistent services running&lt;br /&gt;
&lt;br /&gt;
==== Interpretation ====&lt;br /&gt;
✔ VSCode workload is fully isolated to compute node&lt;br /&gt;
&lt;br /&gt;
✔ Login nodes remain clean and responsive&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Extension Behavior ==&lt;br /&gt;
&lt;br /&gt;
==== Before Python Extension ====&lt;br /&gt;
User extensions:&lt;br /&gt;
&lt;br /&gt;
* Minimal (e.g., Copilot)&lt;br /&gt;
&lt;br /&gt;
Server extensions:&lt;br /&gt;
&lt;br /&gt;
* Built-in only&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== After Python Extension Installation ====&lt;br /&gt;
New extension appears:&lt;br /&gt;
&lt;br /&gt;
==== Key Points ====&lt;br /&gt;
* User extensions → &amp;lt;code&amp;gt;~/.vscode-server/extensions/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Built-in extensions → server directory&lt;br /&gt;
* Server directory remains unchanged&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== HPC Implications ===&lt;br /&gt;
&lt;br /&gt;
==== Storage ====&lt;br /&gt;
* Extensions stored in home directory&lt;br /&gt;
* Can grow over time&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
Installing extensions (e.g., Python) adds:&lt;br /&gt;
&lt;br /&gt;
* Language servers&lt;br /&gt;
* Background indexing&lt;br /&gt;
* Additional CPU/memory usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
* Always run inside a Slurm allocation&lt;br /&gt;
* Never run VSCode on login nodes&lt;br /&gt;
* Use &amp;lt;code&amp;gt;/scratch&amp;lt;/code&amp;gt; for active work&lt;br /&gt;
* Install only necessary extensions&lt;br /&gt;
* Clean unused extensions periodically&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advantages of This Workflow ==&lt;br /&gt;
* Prevents login node overload&lt;br /&gt;
* Enables GPU-based development&lt;br /&gt;
* Supports AI/LLM workflows&lt;br /&gt;
* Works entirely in browser&lt;br /&gt;
* Scales cleanly across users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Takeaway ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;VSCode is a distributed, multi-process system.&lt;br /&gt;
&lt;br /&gt;
It must be treated like a compute workload—not a simple SSH tool.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
This workflow is strongly recommended for:&lt;br /&gt;
&lt;br /&gt;
* AI / LLM workloads&lt;br /&gt;
* GPU-based development&lt;br /&gt;
* Heavy interactive coding sessions&lt;/div&gt;</summary>
		<author><name>Moses</name></author>
	</entry>
</feed>