PyTorch on ARC: Difference between revisions

From RCSWiki
Jump to navigation Jump to search
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Intro to Torch =
= General =
 
* PyTorch on GitHub: https://github.com/pytorch/pytorch
 
 
'''PyTorch''' is a Python package that provides two high-level features:
 
* Tensor computation (like NumPy) with strong GPU acceleration
* Deep neural networks built on a tape-based autograd system
 
You can reuse your favourite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.
 


* Compute Canada article is not directly applicable on ARC but contains a lot of good information:
* Compute Canada article is not directly applicable on ARC but contains a lot of good information:
Line 16: Line 27:


Once you have your own '''Conda''', activate it with  
Once you have your own '''Conda''', activate it with  
  $ ~/software/init-conda
  $ source ~/software/init-conda


We will install '''PyTorch''' into its own '''conda environment'''.
We will install '''PyTorch''' into its own '''conda environment'''.
Line 66: Line 77:
     print("CUDA is NOT available.")
     print("CUDA is NOT available.")


# -------------------------------------------------------
</syntaxhighlight>
=== Test script 2 ===
<code>torch-gpu-test2.py</code>:
<syntaxhighlight lang=python>
#! /usr/bin/env python
# -------------------------------------------------------
import os
import sys
import socket
import torch
# -------------------------------------------------------
dev = os.environ['CUDA_VISIBLE_DEVICES']
host = socket.gethostname()
tdev = torch.cuda.current_device()
tavail = torch.cuda.is_available()
tcount = torch.cuda.device_count()
tname = torch.cuda.get_device_name()
print("Host: %s\nENV Devices: %s\nCudaDev: %s\nCUDA is available: %s\nDevice count: %d\nDevice: %s" % \
        (host, dev, tdev, tavail, tcount, tname))
print(os.popen("/usr/bin/nvidia-smi -L").read().strip())
print(os.popen("env | grep CUDA").read().strip())
print("")
# -------------------------------------------------------
# -------------------------------------------------------
</syntaxhighlight>
</syntaxhighlight>
Line 73: Line 113:
== Requesting GPU Resources for PyTorch Jobs ==
== Requesting GPU Resources for PyTorch Jobs ==


== Interactive Job ==
For '''interactive''' use see this How-To: [[How to request an interactive GPU on ARC]].


1 GPU on the '''gpu-v100''' partition for 1 hour:
salloc -N1 -n1 -c4 --mem=16GB --gres=gpu:1 -p gpu-v100 -t 1:00:00


1 GPU on the '''bigmem''' partition for 1 hour:
An example of the job script <code>torch_job.slurm</code>:
$ salloc -N1 -n1 -c4 --mem=16gb --gres=gpu:1 -p bigmem -t 1:00:00
<syntaxhighlight lang=bash>
#! /bin/bash
# ====================================
#SBATCH --job-name=torch-test
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16GB
#SBATCH --time=0-04:00:00
#SBATCH --gres=gpu:1
#SBATCH --partition=gpu-v100
# ====================================


Use the '''nvidia-smi''' command to check the GPU:
source ~/software/init-conda
<pre>
conda activate pytorch
$ nvidia-smi
 
Fri Jun  3 11:35:14 2022     
python torch-gpu-test.py
+-----------------------------------------------------------------------------+
</syntaxhighlight>
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4    |
|-------------------------------+----------------------+----------------------+
| 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 A100-PCI...  Off  | 00000000:17:00.0 Off |                    0 |
| N/A  39C    P0    42W / 250W |      0MiB / 40536MiB |    32%      Default |
|                              |                      |            Disabled |
+-------------------------------+----------------------+----------------------+
                                                                             
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU  GI  CI        PID  Type  Process name                  GPU Memory |
|        ID  ID                                                  Usage      |
|=============================================================================|
|  No running processes found                                                |
+-----------------------------------------------------------------------------+
</pre>


[[Category:ARC]]
[[Category:ARC]]
[[Category:Software]]
[[Category:Software]]
[[Category:Stub]]
[[Category:Stub]]

Revision as of 20:18, 1 November 2022

General


PyTorch is a Python package that provides two high-level features:

  • Tensor computation (like NumPy) with strong GPU acceleration
  • Deep neural networks built on a tape-based autograd system

You can reuse your favourite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.


  • Compute Canada article is not directly applicable on ARC but contains a lot of good information:
https://docs.computecanada.ca/wiki/PyTorch

Checkpointing

Installing PyTorch

You will need a working local Conda install in your home directory first. If you do not have it yet, plaese follow these instructions to have it isntalled.


Once you have your own Conda, activate it with

$ source ~/software/init-conda

We will install PyTorch into its own conda environment.

It is very important to create the environment with python and pytorch in the same command. This way conda can select the best pytorch and python combination.

$ conda create -n pytorch python pytorch-gpu torchvision

Once it is done, activate your pytorch environment:

$ conda activate pytorch

You can test with the torch-gpu-test.py script shown below. Copy and paste the text into a file and run if from the command line:

$ python torch-gpu-test.py

If you try this on the login node, it should tell you that GPUs are not available. It is normal, as the login node does not have any. You will need a GPU node to test the GPUs.

Once you know that your pytorch environment is working properly, you can add more packages to the environment using conda.

To deactivate the environment use the

$ conda deactivate 

command.

Test script

torch-gpu-test.py:

#! /usr/bin/env python 
# -------------------------------------------------------
import torch
# -------------------------------------------------------
print("Defining torch tensors:")
x = torch.Tensor(5, 3)
print(x)
y = torch.rand(5, 3)
print(y)

# -------------------------------------------------------
# let us run the following only if CUDA is available
if torch.cuda.is_available():
    print("CUDA is available.")
    x = x.cuda()
    y = y.cuda()
    print(x + y)
else:
    print("CUDA is NOT available.")

# -------------------------------------------------------

Test script 2

torch-gpu-test2.py:

#! /usr/bin/env python 
# -------------------------------------------------------
import os
import sys
import socket
import torch
# -------------------------------------------------------

dev = os.environ['CUDA_VISIBLE_DEVICES']

host = socket.gethostname()
tdev = torch.cuda.current_device()
tavail = torch.cuda.is_available()
tcount = torch.cuda.device_count()
tname = torch.cuda.get_device_name()

print("Host: %s\nENV Devices: %s\nCudaDev: %s\nCUDA is available: %s\nDevice count: %d\nDevice: %s" % \
        (host, dev, tdev, tavail, tcount, tname))

print(os.popen("/usr/bin/nvidia-smi -L").read().strip())
print(os.popen("env | grep CUDA").read().strip())
print("")
# -------------------------------------------------------

Using PyTorch on ARC

Requesting GPU Resources for PyTorch Jobs

For interactive use see this How-To: How to request an interactive GPU on ARC.


An example of the job script torch_job.slurm:

#! /bin/bash
# ====================================
#SBATCH --job-name=torch-test
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16GB
#SBATCH --time=0-04:00:00
#SBATCH --gres=gpu:1
#SBATCH --partition=gpu-v100
# ====================================

source ~/software/init-conda
conda activate pytorch

python torch-gpu-test.py