Here is a quick memo on how to use the Discovery Cluster at Dartmouth.

How to log in


How to make an easier way to log in by setting an alias

Go into .bash_profile or .bashrc (using vim .bash_profile) and add the following line

# Alias for Discovery
alias discovery="ssh"

Restart your terminal or source .bash_profile and type discovery to quickly access the cluster

couple ways to check jobs

showq -u <username>
qstat -u <username>
myjobs -r

how to submit a job

You submit a job using the qsub command. Couple of options -N : name of job -M : my email address -m : bea (sends email when job starts and ends)

qsub <job script>
qsub -N <name of job> -M <my email> -m bea -l walltime=<hh:mm:ss> <job script>

how to make a job script

You can either upload a job script by using rsync or create a bash script on Discovery by vim.

rsync -azvPh origin/filepath/filename 

Sample bash script that calls a python script to do things

#!/bin/bash -l
#PBS -N <name of job>
#PBS -M <my mail address>
#PBS -m bea
#PBS -l nodes=1:ppn=1
#PBS -l walltime=72:00:00
cd <working directory>
module load python/2.7.11
python <python job script>

Sample python script that generates multiple bash scripts to distribute jobs onto separate cores (originally by Luke Chang). The module designates what version of python + packages you are using.

#!/usr/bin/env python
import os
import subprocess

base_dir = '/ihome/jcheong/FNL_bootstrap'

# set parameters
qp = dict()
qp['nodes'] = 1
qp['cores'] = 4
qp['walltime'] = '24:00:00'
qp['email'] = ''
qp['logs'] = os.path.join(base_dir,'logs')

for epn in [1,2,3,4]:
# This part generates the script for each epn
    with open(os.path.join(base_dir,'Execute_Bootstrap.pbs'),"w") as text_file:
        text_file.write("#!/bin/bash -l \n\
#PBS -N bootstrap" + str(epn) + " \n\
#PBS -q default \n\
#PBS -l nodes=" + str(qp['nodes']) + ":ppn=" + str(qp['cores']) + " \n\
#PBS -l walltime=" + qp['walltime'] + " \n\
#PBS -M " + qp['email'] + " \n\
#PBS -m bea \n\
cd " + os.path.join(base_dir) + " \n\
module load python/2.7.11 \n\
python " + str(epn) + " \n\
# This part executes the script for each epn'chmod +x ' + os.path.join(base_dir,'Execute_Bootstrap.pbs'),shell=True)
    qsub_call = 'qsub ' + os.path.join(base_dir,'Execute_Bootstrap.pbs'), shell=True)

How to kill all jobs

qselect -u jcheong | xargs qdel

How to start an interactive node

qsub -I -l walltime=04:00:00