Positron
Instructions for using Positron with NowWhat.
This page describes how to start a Positron Remote SSH session on NowWhat.
Positron Remote SSH runs the Positron user interface on your local machine while files, terminals, R sessions, and Python sessions run on the remote host reached through SSH.
On NowWhat, Positron must run on a compute node allocated by SLURM. Do not start Positron sessions, R sessions, Python sessions, or other interactive workloads on the login node.
Step 1: Add an SSH Host Alias
On your local machine, edit your SSH configuration file:
nano ~/.ssh/configAdd one alias for the login node and one alias for each compute node. The compute-node aliases must route the SSH connection through the login node. This is required because compute-node ports are not reachable directly from your local machine.
Host nowwhat-login
HostName nowwhat.stat.unipd.it
User your_username
Port 22
Host nowwhat-wn01
HostName wn01
User your_username
Port 22
ProxyCommand ssh nowwhat-login -W %h:%p
Host nowwhat-gn01
HostName gn01
User your_username
Port 22
ProxyCommand ssh nowwhat-login -W %h:%pReplace your_username with your NowWhat username.
If you use an SSH key, add the identity file to the login alias:
Host nowwhat-login
HostName nowwhat.stat.unipd.it
User your_username
Port 22
IdentityFile ~/.ssh/id_ed25519
Host nowwhat-wn01
HostName wn01
User your_username
Port 22
ProxyCommand ssh nowwhat-login -W %h:%p
Host nowwhat-gn01
HostName gn01
User your_username
Port 22
ProxyCommand ssh nowwhat-login -W %h:%pIf you use a ProxyJump (LISA):
Host lisa
HostName lisa.stat.unipd.it
User your_username
ControlMaster auto
ControlPersist 12h
ControlPath ~/.ssh/cm-%r@%h:%p
Host nowwhat
HostName nowwhat.stat.unipd.it
User your_username
Port 22
ProxyCommand ssh -W %h:%p lisa
Host gn01
HostName gn01
User your_username
Port 22
ProxyCommand ssh nowwhat -W %h:%p
Host wn01
HostName wn01
User your_username
Port 22
ProxyCommand ssh nowwhat -W %h:%pTest the login alias from your local terminal:
ssh nowwhat-loginDo not test nowwhat-wn01 or nowwhat-gn01 yet unless you already have an active SLURM allocation on that node.
ProxyCommand ssh nowwhat-login -W %h:%p means: connect to the login node first, then ask the login node to open the final SSH connection to wn01 or gn01.
Step 2: Configure Positron Remote SSH Settings
Before connecting to a compute node, configure Positron's Remote SSH behavior for the NowWhat topology. Compute-node ports are reachable only through the login node, so Positron must use a socket-based remote server and avoid its local-server connection mode.
These settings go in Positron's local User Settings on your computer. They do not go in Remote Settings and they do not go in ~/.ssh/config.
Optional: Create a NowWhat Profile
Before changing the settings, you can create a dedicated Positron profile for NowWhat. This is optional, but recommended if you also use Positron for other local or remote projects, because the Remote SSH settings below are specific to the NowWhat topology.
In Positron, open the profile menu and create a new profile named:
NowWhatThen switch to the NowWhat profile before continuing with the User Settings JSON below.
Open Positron locally, before starting a Remote SSH session, then open the Command Palette:
Ctrl + Shift + PSearch for:
Preferences: Open User Settings (JSON)Add:
{
"remoteSSH.remoteServerListenOnSocket": true,
"remoteSSH.useLocalServer": false
}If your User Settings JSON already contains other settings, add only these properties inside the existing JSON object.
The two required settings are:
remoteSSH.remoteServerListenOnSocket: makes the remote server listen on a Unix socket instead of exposing a TCP port on the compute noderemoteSSH.useLocalServer: disables Positron's local-server connection mode, which can fail when compute-node ports are reachable only through the login node
After changing this setting, close any open Remote SSH windows before reconnecting.
Step 3: Add NowWhat Environment Modules
In the Positron window connected to NowWhat, open:
Preferences: Open Remote Settings (JSON)Paste this setting:
{
"positron.environmentModules.environments": {
"Hugging Face": {
"languages": ["python"],
"modules": ["micromamba/huggingface"]
},
"PyTDC": {
"languages": ["python"],
"modules": ["micromamba/pyTDC"]
},
"RAPIDS": {
"languages": ["python"],
"modules": ["micromamba/rapids"]
},
"R/Python ML": {
"languages": ["r", "python"],
"modules": ["micromamba/rpy-ml"]
},
"R/Python Single Cell": {
"languages": ["r", "python"],
"modules": ["micromamba/rpy-sc"]
},
"scGPT": {
"languages": ["python"],
"modules": ["micromamba/scGPT"]
},
"Bioc3.22": {
"languages": ["r"],
"modules": ["micromamba/bioc-3.22"]
},
"Bioc3.23": {
"languages": ["r"],
"modules": ["micromamba/bioc-3.23"]
}
}
}Step 4: Start a SLURM Allocation for Positron
Before connecting Positron to a compute node, start a SLURM job that keeps the node allocated. This job is only used to reserve the node for your remote IDE session.
Connect to the login node:
ssh nowwhat-loginOption A: Interactive srun
For a CPU session on wn01:
srun --partition=cpu --nodelist=wn01 --time=02:00:00 --ntasks=1 --cpus-per-task=4 --mem=8G sleep 2hFor a GPU session on gn01:
srun --partition=gpu --nodelist=gn01 --time=02:00:00 --ntasks=1 --cpus-per-task=4 --mem=16G --gres=gpu:nvidia_h200_nvl_1g.35gb:1 sleep 2hKeep this terminal open. The allocation ends when you exit the shell, and Positron will lose the remote backend.
Option B: Batch sbatch
If you prefer a detached allocation, submit a batch job that sleeps for the duration of your Positron session.
For wn01, save a file named positron-wn01.sbatch on the login node:
#!/bin/bash
#SBATCH --job-name=positron-wn01
#SBATCH --partition=cpu
#SBATCH --nodelist=wn01
#SBATCH --time=02:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --output=positron-%j.out
#SBATCH --error=positron-%j.err
echo "Positron allocation running on $(hostname)"
sleep 2hSubmit it:
sbatch positron-wn01.sbatchFor gn01, use:
#!/bin/bash
#SBATCH --job-name=positron-gn01
#SBATCH --partition=gpu
#SBATCH --nodelist=gn01
#SBATCH --gres=gpu:nvidia_h200_nvl_1g.35gb:1
#SBATCH --time=02:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16G
#SBATCH --output=positron-%j.out
#SBATCH --error=positron-%j.err
echo "Positron allocation running on $(hostname)"
sleep 2hCheck that the job is running before connecting Positron:
squeue -u your_usernameThe job must be in the RUNNING state on the node you want to use.
Test SSH to the Allocated Compute Node
After the SLURM allocation is running, open a new terminal on your local machine and test the compute-node SSH alias.
For wn01:
ssh nowwhat-wn01For gn01:
ssh nowwhat-gn01Then check the hostname:
hostnameIt should print wn01 or gn01. If SSH fails, check that the SLURM allocation is still running on that node and that your SSH config uses ProxyCommand ssh nowwhat-login -W %h:%p.
Step 5: Connect from Positron
Open Positron on your local machine.
Open the Command Palette and run:
Remote SSH: Show Remote MenuThen choose:
Connect to HostSelect the compute-node host from your SSH configuration:
nowwhat-wn01or:
nowwhat-gn01Do not select nowwhat-login for a Positron working session. The login-node host is useful for basic SSH testing only.
During the first connection, Positron installs a matching Positron server in your remote home directory. Wait until the remote window opens. The bottom-left status indicator should show that Positron is connected to the remote SSH host.
The remote host shown by Positron should be wn01 or gn01, not the login node.
Step 6: Open a Remote Folder
Once connected, open a folder from the remote filesystem.
For example:
/home/your_usernameor a project directory:
/home/your_username/projects/my-projectThe Explorer, terminal, R sessions, and Python sessions now refer to the remote NowWhat environment, not to files on your laptop.
The Positron session remains valid only while the SLURM allocation is active. When the srun shell exits or the sbatch sleep job finishes, the compute allocation ends and the Positron remote backend should be considered invalid.