Difference between revisions of "Nvidia CUDA Toolkit"

From UFRC
Jump to navigation Jump to search
(64 intermediate revisions by 7 users not shown)
Line 1: Line 1:
[[Category:Software]]
+
[[Category:Software]][[Category:Programming]][[Category:Library]][[Category:Graphics]][[Category:GPU]]
 
{|<!--CONFIGURATION: REQUIRED-->
 
{|<!--CONFIGURATION: REQUIRED-->
 
|{{#vardefine:app|cuda}}
 
|{{#vardefine:app|cuda}}
Line 6: Line 6:
 
|{{#vardefine:conf|}}          <!--CONFIGURATION-->
 
|{{#vardefine:conf|}}          <!--CONFIGURATION-->
 
|{{#vardefine:exe|1}}            <!--ADDITIONAL INFO-->
 
|{{#vardefine:exe|1}}            <!--ADDITIONAL INFO-->
|{{#vardefine:pbs|1}}            <!--PBS SCRIPTS-->
+
|{{#vardefine:pbs|1}}            <!--JOB SCRIPTS-->
 
|{{#vardefine:policy|1}}        <!--POLICY-->
 
|{{#vardefine:policy|1}}        <!--POLICY-->
 
|{{#vardefine:testing|}}        <!--PROFILING-->
 
|{{#vardefine:testing|}}        <!--PROFILING-->
Line 19: Line 19:
 
CUDA™ is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). With millions of CUDA-enabled GPUs sold to date, software developers, scientists and researchers are finding broad-ranging uses for GPU computing with CUDA.
 
CUDA™ is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). With millions of CUDA-enabled GPUs sold to date, software developers, scientists and researchers are finding broad-ranging uses for GPU computing with CUDA.
 
<!--Modules-->
 
<!--Modules-->
==Required Modules==
+
==Environment Modules==
cuda
+
Use the 'module avail' command after loading a cuda environment module to see the available module trees or see which compiler and openmpi modules require the cuda module to be loaded.
 +
 
 
==System Variables==
 
==System Variables==
* HPC_{{#uppercase:{{#var:app}}}}_DIR
+
* HPC_{{uc:{{#var:app}}}}_DIR
* HPC_{{#uppercase:{{#var:app}}}}_BIN
+
* HPC_{{uc:{{#var:app}}}}_BIN
* HPC_{{#uppercase:{{#var:app}}}}_INC
+
* HPC_{{uc:{{#var:app}}}}_INC
* HPC_{{#uppercase:{{#var:app}}}}_LIB
+
* HPC_{{uc:{{#var:app}}}}_LIB
 
<!--Configuration-->
 
<!--Configuration-->
 
{{#if: {{#var: conf}}|==Configuration==
 
{{#if: {{#var: conf}}|==Configuration==
Line 31: Line 32:
 
|}}
 
|}}
 
<!--Run-->
 
<!--Run-->
==Available GPUs==
+
==Program Development==
Research Computing has a significant investment in GPU-enabled servers. Each supports from two to eight Nvidia GPUs (see table below).
 
 
 
===Available GPUs under Torque/Moab on HPG1===
 
{| border=1
 
!GPU!!Quantity!!Host Quantity!!Host Architecture!!Host Memory!!Host Interconnect!!Host Attributes!!Notes
 
|-
 
|M2070||8||4||Intel E5675||24 GB||QDR IB||fermi,m2070 || cobra[1-4]
 
|-
 
|M2070||8||1||Intel E5620||24 GB||GigE||fermi,m2070 || vette
 
|-
 
|M2090||4||1||Intel E5-2643||64 GB||FDR IB||fermi,m2090 ||
 
|-
 
|M2090||14||7||AMD Opteron 6220||32 GB||QDR IB||fermi,m2090 ||
 
|-
 
|}
 
 
 
===Available GPUs under SLURM on HPG1===
 
{| border=1
 
!GPU!!Quantity!!Host Quantity!!Host Architecture!!Host Memory!!Host Interconnect!!Host Attributes!!Notes
 
|-
 
|M2090||26||13||AMD Opteron 6220||32 GB||QDR IB||fermi,m2090 ||
 
|-
 
|}
 
 
 
===Available GPUs under SLURM on HPG2===
 
{| border=1
 
!GPU!!Quantity!!Host Quantity!!Host Architecture!!Host Memory!!Host Interconnect!!Host Attributes!!Notes
 
|-
 
|Tesla K80||32||8||INTEL E5-2683||132 GB||QDR IB||fermi,m2090 ||
 
|-
 
|}
 
 
 
==Usage Policy==
 
===Interactive Use===
 
 
 
If you need interactive access to a gpu for development and testing you may do so by requesting an interactive session through the batch system. 
 
  
In order to gain interactive access to a GPU server you should run similar to the one that follows.
+
===Environment===
====Under SLURM====
+
For CUDA development please load the "cuda" module.  Doing so will ensure that your environment is set up correctly for the use of the CUDA compiler, header files, and libraries. Currently cuda/9.2.88 and cuda/10.0.130 are the only versions supported on hipergator.
  
To get the 1 GPU for default 10 minutes session:
 
 
<pre>
 
<pre>
srun -p hpg1-gpu --pty -u bash -i
+
$ module spider cuda
</pre>
+
-------------------------------------------------------------
 +
cuda:
 +
-------------------------------------------------------------
 +
    Description:
 +
      NVIDIA CUDA Toolkit
  
OR
+
    Versions:
<pre>
+
        cuda/9.2.88
srun -p hpg2-gpu --pty -u bash -i
+
        cuda/10.0.130
</pre>
+
       
  
To get 2 GPU on 1 node for
+
--------------------------------------------------------------------------------------------------------------------
 +
  For detailed information about a specific "cuda" module (including how to load the modules) use the module full name.
 +
  For example:
  
====Under Torque/Moab====
+
    $ module spider cuda/10.0.130
 +
--------------------------------------------------------------------------------------------------------------------
  
<pre>
+
$ module load cuda/10.0.130
qsub -I -l nodes=1:gpus=1:tesla,walltime=01:00:00 -q gpu
 
</pre>
 
  
To gain access to one of the Fermi-class GPUs, you can make a similar request but specify the "fermi" attribute in your resource request as below.
+
$ which nvcc
 +
/apps/compilers/cuda/10.0.130/bin/nvcc
  
<pre>
+
$ printenv | grep CUDA
qsub -I -l nodes=1:gpus=1:fermi,walltime=01:00:00 -q gpu
+
HPC_CUDA_LIB=/apps/compilers/cuda/10.0.130/lib64
 +
HPC_CUDA_DIR=/apps/compilers/cuda/10.0.130
 +
HPC_CUDA_BIN=/apps/compilers/cuda/10.0.130/bin
 +
HPC_CUDA_INC=/apps/compilers/cuda/10.0.130/include
 +
UFRC_FAMILY_CUDA_VERSION=10.0.130
 
</pre>
 
</pre>
  
If a gpu is available, you will get a prompt on a gpu-enabled host within a minute or two.  Otherwise, you will have to wait or try another time.  If you choose to wait, you will be connected when a gpu is available.    The default walltime limit for the gpu queue is 10 minutes.  You should request the amount of time you need but be sure to log out and end your session when you are finished so that the GPU will be available to others.
 
  
If you need two GPUs in a single host, you would run the following command instead.
+
===Selecting CUDA Arch Flags===
<pre>
+
When compiling with NVCC, you need to specify the Nvidia architecture that the CUDA files will be compiled for. Please refer to [https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list GPU Feature List] for CUDA naming scheme sm_xy where x denotes the GPU generation and y denotes the version. The table below lists the SM flags for the three types of GPUs on HiPerGator.
qsub -I -l nodes=1:gpus=2,walltime=01:00:00 -q gpu
 
</pre>
 
  
If you need two gpus in two separate hosts, you would request
+
{| class="wikitable"
<pre>
+
|-
qsub -I -l nodes=2:gpus=1,walltime=01:00:00 -q gpu
+
! SM !! Nvidia Cards
</pre>
+
|-
 
+
| SM_37 || Tesla K80 (No longer available)
===Batch Jobs===
+
|-
 
+
| SM_61 || GeForce GTX 1080Ti
The process is much the same for batch jobs.  To access a host with an M2090, you can add the following to your submission script.
+
|-
 
+
| SM_75|| GeForce RTX 2080Ti
<pre>
+
|-
#PBS -q gpu
+
| SM_80 || DGX A100
#PBS -l nodes=1:gpus=1:m2090
+
|}
#PBS -l walltime=1:00:00
 
</pre>
 
  
To access a server with an M2070 GPU, you can add the following to your submission script.
+
==Sample GPU Batch Job Scripts==
<pre>
 
#PBS -q gpu
 
#PBS -l nodes=1:gpus=1:m2070
 
#PBS -l walltime=1:00:00
 
</pre>
 
===Exclusive Mode===
 
The GPUs are configured to run in '''exclusive''' mode.  This means that the gpu driver will only allow one process at a time to access the GPU.  If GPU 0 is in use and your application tries to use it, it will simply block.  If your application does not call cudaSetDevice(), the CUDA runtime should assign it to a free GPU.  Since everyone will be accessing the GPUs through the batch system, there should be no over-subscription of the GPUs.
 
  
==Environment==
+
===SLURM Job Scripts===
For CUDA development please load the "cuda" module.  Doing so will ensure that your environment is set up correctly for the use of the CUDA compiler, header files, and libraries.
 
  
<source lang=bash>
+
See the [[Example_SLURM-GPU-Job-Scripts]] page for an example.
$ module spider cuda
 
Rebuilding cache, please wait ... (not written to file) done
 
  
    Description:
+
<!--|}}-->
      NVIDIA CUDA Toolkit
 
 
 
    Versions:
 
        cuda/4.2
 
        cuda/5.5
 
 
 
$ module load cuda/5.5
 
 
 
$ which nvcc
 
/opt/cuda/5.5/bin/nvcc
 
 
 
$ printenv | grep CUDA
 
HPC_CUDA_LIB=/opt/cuda/5.5/lib64
 
HPC_CUDA_DIR=/opt/cuda/5.5
 
HPC_CUDA_BIN=/opt/cuda/5.5/bin
 
HPC_CUDA_INC=/opt/cuda/5.5/include
 
</source>
 
 
 
 
 
<!--PBS scripts-->
 
{{#if: {{#var: pbs}}|==PBS Script Examples==
 
See the [[{{PAGENAME}}_PBS]] page for {{#var: app}} PBS script examples.
 
|}}
 
 
 
==CUDA Examples==
 
See the [[{{PAGENAME}}_Examples]] page for CUDA development examples.
 
 
 
|}}
 
  
 
<!--Faq-->
 
<!--Faq-->

Revision as of 21:37, 23 September 2022

Description

cuda website  
CUDA™ is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). With millions of CUDA-enabled GPUs sold to date, software developers, scientists and researchers are finding broad-ranging uses for GPU computing with CUDA.

Environment Modules

Use the 'module avail' command after loading a cuda environment module to see the available module trees or see which compiler and openmpi modules require the cuda module to be loaded.

System Variables

  • HPC_CUDA_DIR
  • HPC_CUDA_BIN
  • HPC_CUDA_INC
  • HPC_CUDA_LIB

Program Development

Environment

For CUDA development please load the "cuda" module. Doing so will ensure that your environment is set up correctly for the use of the CUDA compiler, header files, and libraries. Currently cuda/9.2.88 and cuda/10.0.130 are the only versions supported on hipergator.

$ module spider cuda
-------------------------------------------------------------
cuda:
-------------------------------------------------------------
    Description:
      NVIDIA CUDA Toolkit

     Versions:
        cuda/9.2.88
        cuda/10.0.130
        

--------------------------------------------------------------------------------------------------------------------
  For detailed information about a specific "cuda" module (including how to load the modules) use the module full name.
  For example:

     $ module spider cuda/10.0.130
--------------------------------------------------------------------------------------------------------------------

$ module load cuda/10.0.130

$ which nvcc
/apps/compilers/cuda/10.0.130/bin/nvcc

$ printenv | grep CUDA
HPC_CUDA_LIB=/apps/compilers/cuda/10.0.130/lib64
HPC_CUDA_DIR=/apps/compilers/cuda/10.0.130
HPC_CUDA_BIN=/apps/compilers/cuda/10.0.130/bin
HPC_CUDA_INC=/apps/compilers/cuda/10.0.130/include
UFRC_FAMILY_CUDA_VERSION=10.0.130


Selecting CUDA Arch Flags

When compiling with NVCC, you need to specify the Nvidia architecture that the CUDA files will be compiled for. Please refer to GPU Feature List for CUDA naming scheme sm_xy where x denotes the GPU generation and y denotes the version. The table below lists the SM flags for the three types of GPUs on HiPerGator.

SM Nvidia Cards
SM_37 Tesla K80 (No longer available)
SM_61 GeForce GTX 1080Ti
SM_75 GeForce RTX 2080Ti
SM_80 DGX A100

Sample GPU Batch Job Scripts

SLURM Job Scripts

See the Example_SLURM-GPU-Job-Scripts page for an example.