Skip to content

GPU Guide

NCShare comprises of 4 GPU nodes with 192 CPUs (96 physical cores, Intel Xeon Platinum 8568Y+) and 8 NVIDIA H200 GPUs w/141GB of VRAM, 2TB RAM each (32 GPUs in total). This page guides users on how to access and utilize the H200 GPUs using Slurm and Open OnDemand.

Requesting Access

GPU access on NCShare has two tiers. Both are requested through your institutional representative, and both require an NCShare account first.

Tier Partitions Who can get it How
General gpu, interactive-gpu Any NCShare user Ask your institutional representative
High-priority gpu-hp Users at NSF GaaS partner institutions only Submit a request (see below), case-by-case

General access

Contact your institutional representative, and ask to be added to your institution's general-access GPU allocation which provides access to the gpu and interactive-gpu partitions. If you are from a NSF GaaS partner institutions, usage on these partitions will help you build the efficiency record required for gpu-hp access.

High-priority access (gpu-hp)

gpu-hp access is granted at the discretion of your institutional representative, who draws on a fixed monthly pool of GPU-hours for the whole institution. The requirement and priorities below describe how requests are evaluated, and the next subsection lists what to send so the representative can evaluate yours.

How requests are evaluated

Requirement:

  • At least a week's worth of GPU usage on gpu or interactive-gpu (or an equivalent H200 partition elsewhere) with a time-weighted GPU efficiency of at least 70% and GPU memory efficiency of at least 30%. See Measuring GPU Efficiency.

Among eligible requests, priority goes to,

  • multi-institutional research collaborations across North Carolina,
  • users whose institutional GPU resources are insufficient for their research, and
  • time-critical needs such as a grant or publication deadline.

What to include in your request

  1. A short description of the project.
  2. The GPU-hours needed to complete it (number of GPUs \(\times\) total hours). If your institution tracks user-level quotas, this becomes your personal quota.
  3. Evidence of efficient GPU usage, e.g., the output of slurm-report covering your recent jobs on gpu or interactive-gpu, including the weighted-average row (see Measuring GPU Efficiency). For usage on another cluster, include equivalent metrics.
  4. If applicable, collaborating institutions and investigators.
  5. If applicable, why your institutional GPU resources are insufficient.
  6. If applicable, the deadline or emergency driving the request and the resources needed to meet it.

After access is granted

  • gpu-hp usage is monitored. Users who do not sustain efficient GPU usage will be removed from the partition.
  • If you run out of your personal GPU-hour quota (if tracked by institution) before the project is done, ask your representative for an extension or request a new allocation. See gpu-hp partition for commands to track usage.
  • You keep access to gpu and interactive-gpu regardless of your gpu-hp status.

Once access is granted, you can request GPUs through Slurm and Open OnDemand as described in the sections below.

GPU Partitions

There are three GPU partitions available on NCShare,

Partition Description
gpu General access to H200 GPU nodes. Jobs are pre-empted (cancel and requeue) for higher priority jobs.
interactive-gpu Short term GPU jobs with a max walltime of 1 hour. Higher priority than gpu.
gpu-hp High priority access to H200 GPU nodes. Restricted to NSF GaaS partner institutions. Each institution is allocated a monthly pool of GPU-hours.

gpu partition

  • General access, scavenger-like partition
  • Simultaneous GPU limit per user (MaxTRESPU) = 8
  • Max Walltime = 2 days
  • Pre-emption = cancel and requeue
  • QoS = normal (default)
  • Unlimited usage quota
Usage
#SBATCH -p gpu
#SBATCH --gres=gpu:h200:1 #Up to 8

Warning

Jobs on the gpu partition may be pre-empted (cancelled and requeued) to accommodate higher-priority jobs on the interactive-gpu or gpu-hp partition. Please ensure your workflows are checkpointed to avoid loss of progress.

interactive-gpu partition

  • General access partition for short-term GPU jobs
  • Simultaneous GPU limit per user (MaxTRESPU) = 8
  • Simultaneous job limit per user (MaxSubmitJobsPU, MaxJobsPU) = 1
  • Max Walltime = 1 hour
  • Pre-emption = No
  • QoS = N/A (the partition itself assigns jobs a partition-specific QoS)
  • Unlimited usage quota
Usage
#SBATCH -p interactive-gpu
#SBATCH --gres=gpu:h200:1 #Up to 8

gpu-hp partition

  • High-priority partition for NSF GaaS partner institutions
  • Simultaneous GPU limit per user (MaxTRESPU) = 8
  • Max Walltime = 7 days
  • Pre-emption = No
  • Monthly GPU usage quota per institution

The institutional quota is reset on the first day of each month at 00:00 ET.

Usage
#SBATCH -p gpu-hp
#SBATCH --qos=<institution-qos>
#SBATCH --gres=gpu:h200:1 #Up to 8

The institution-specific QoS values are provided in the table below. Replace <institution-qos> with the QoS value corresponding to your institutional account.

Account QoS
duke duke_h200_hp
unc unc_h200_hp
ncsu ncsu_h200_hp
ncat ncat_h200_hp
uncc charlotte_h200_hp
wssu wssu_h200_hp
nccu nccu_h200_hp
davidson davidson_h200_hp
uncfsu fsu_h200_hp

E.g., if you are a user from Duke University, you would use the following flags to request 4 H200 GPUs on the gpu-hp partition,

#SBATCH -p gpu-hp
#SBATCH --qos=duke_h200_hp
#SBATCH --gres=gpu:h200:4

To check your institution's monthly GPU usage quota, run the following command from a NCShare login node,

get_gpu_quota_account.sh

This will show you the monthly quota for your institution, the amount of GPU-hours used, and the remaining GPU-hours.
E.g.,

$ get_gpu_quota_account.sh
Institutional Usage (GPU-hours)
QoS                  | Quota                | Used                 | Remaining            | Used %              
---------------------+----------------------+----------------------+----------------------+---------------------
duke_h200_hp         | 3600.00              | 1323.75              | 2276.25              | 36.77%          

If your institution enforces user-level GPU-hour quotas, you may check your personal quota usage by running the following command from a NCShare login node,

get_gpu_quota_user.sh

E.g.,

$ get_gpu_quota_user.sh 
gpu-hp Grant Usage (GPU-hours)
User                     | Account    | Start               | Quota      | Used       | Remaining  | Used %   | Access  
----------------------------------------------------------------------------------------------------------------------------
uherathmudiyanselage1    | duke       | 2026-10-19T22:52:24 | 0.3        | 0.12       | 0.18       | 40.00%   | active  

Once your personal quota is exhausted, your access to the gpu-hp partition will be suspended until you request a new quota allocation or an extension from your institutional representative.

Info

If your institution's monthly quota runs out before your personal quota does, you will have to wait until the institutional quota resets on the first of the following month to use gpu-hp again. Until then, you may continue to use the gpu and interactive-gpu partitions.

Using H200 GPUs on Open OnDemand

NCShare users can access H200 GPUs through Open OnDemand containers such as Jupyter Lab. A few of these Apptainer containers have been built with GPU support.

Once logged into Open OnDemand, you can select your desired container (e.g., Jupyter Lab, RStudio etc.).

ood_pinned_apps

If you select Jupyter Lab, you will be taken to the Jupyter Lab Apptainer page where you should select gpu, interactive-gpu or gpu-hp under Partition and specify the number of GPUs you wish to use under GPUs. If using the gpu-hp partition, select QoS to be <institution-qos> from the drop down menu. Otherwise, leave it as normal. Then click Launch. A similar process can be followed for RStudio.

jupyter_gpu

To verify if the notebook has connected to a GPU, you can run the following code that imports and runs a few PyTorch functions in a notebook cell:

import torch
print("torch:", torch.__version__)
print("torch.version.cuda:", torch.version.cuda)
print("torch.cuda.device_count():", torch.cuda.device_count())
print("torch.cuda.is_available():", torch.cuda.is_available())

If the cell execution shows an output similar to the following, Congratulations!, you have successfully connected to an H200 GPU!

torch: 2.8.0+cu128
torch.version.cuda: 12.8
torch.cuda.device_count(): 1
torch.cuda.is_available(): True

Using H200 GPUs with slurm

First, ensure that you are able to ssh into a NCShare login node from a terminal following the instructions given in the Register an ssh key guide.

Once you have access to a login node, you will use the following slurm flags to request H200 GPUs for your job.

Slurm flags for gpu partition
#SBATCH -p gpu
#SBATCH --gres=gpu:h200:1 #Up to 8
Slurm flags for interactive-gpu partition
#SBATCH -p interactive-gpu
#SBATCH --gres=gpu:h200:1 #Up to 8
Slurm flags for gpu-hp partition
#SBATCH -p gpu-hp
#SBATCH --qos=<institution-qos>
#SBATCH --gres=gpu:h200:1 #Up to 8

where, <institution-qos> is the QoS value corresponding to your institutional account (see the table in gpu-hp partition).

Info

If you are using an Apptainer container to run your slurm job, you will need to include the --nv flag to mount the Nvidia CUDA libraries from the host environment into the container to enable GPU support.

shell apptainer exec --nv my_container.sif my_gpu_script.sh

Interactive GPU Session

To obtain an interactive GPU session, you can use a command like the following from a login node,

srun -p gpu --gres=gpu:h200:1 -t 1:00:00 --pty bash -i
# OR
srun -p interactive-gpu --gres=gpu:h200:1 -t 1:00:00 --pty bash -i

This requests 1 H200 GPU for 1 hour on the gpu or interactive-gpu partition. Similarly, to run an interactive session on the gpu-hp partition, you can use the following command,

srun -p gpu-hp --gres=gpu:h200:4 --qos=<institution-qos> -t 1:00:00 --pty bash -i

To obtain information about your allocated GPU, you can run the nvidia-smi command once inside the interactive session.

(base) uherathmudiyanselage1 at compute-gpu-02 in /work/uherathmudiyanselage1
$ nvidia-smi
Mon Nov  3 07:48:27 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.172.08             Driver Version: 570.172.08     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA H200                    On  |   00000000:4B:00.0 Off |                    0 |
| N/A   31C    P0             74W /  700W |       0MiB / 143771MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

You can run your GPU tasks inside this interactive session. Once done, you can exit the session by typing exit or pressing Ctrl+D.

Slurm Batch Job Submission

For computationally intensive tasks, it is recommended to submit a batch job using a slurm job script. Below is an example slurm job script that requests 1 H200 GPU for 1 hour.

jobscript.sh
#!/bin/bash
#SBATCH -J name_of_job
#SBATCH -p gpu #or gpu-hp for high-priority partition
#SBATCH --gres=gpu:h200:1
#SBATCH -t 1:00:00
##SBATCH --qos=<institution-qos> #Uncomment for gpu-hp partition

# Initialization
source ~/.bashrc

cd $SLURM_SUBMIT_DIR

cat << EOF > compute-gpu-01.py
#!/usr/bin/env python

import torch
print("torch:", torch.__version__)
print("torch.version.cuda:", torch.version.cuda)
print("torch.cuda.device_count():", torch.cuda.device_count())
print("torch.cuda.is_available():", torch.cuda.is_available())
EOF

chmod +x compute-gpu-01.py
./compute-gpu-01.py > compute-gpu-01.log

For advanced users who are running computationally intensive jobs, the following additional optional flags might be useful,

jobscript.sh
#SBATCH -N 1                 # Total no. of nodes
#SBATCH --ntasks-per-node 12 # Tasks per node
#SBATCH -c 2                 # CPUs per task
#SBATCH --mem=240G           # Memory per node

Remember that the higher the number of resources requested (e.g., number of nodes, GPUs etc.), the longer the job may wait in the queue before starting.

To submit the job script, use the following command from a login node:

sbatch jobscript.sh

You can monitor the status of your job using the squeue command:

squeue -u $USER

Measuring efficiency

As the H200 GPUs are a limited shared resource, we encourage users to be mindful of their GPU usage and to use the resources efficiently. We will be sharing weekly usage reports with the goal of helping users better understand their GPU usage patterns and to support more efficient and effective use of the partition.

See Measuring Efficiency to learn about the tools available for measuring the CPU, memory, and GPU efficiency of your jobs, and for guidance on right-sizing your resource requests.