Instructor Notes

Workshop Overview


This workshop introduces researchers to GPU computing on the Sagehen HPC cluster at Pomona College. It covers GPU hardware, CUDA programming concepts, using GPU-accelerated Python frameworks (PyTorch, TensorFlow), and best practices for efficient GPU utilization.

Total time: Approximately 3.5–4 hours (including breaks) Target audience: Researchers with some HPC experience who want to leverage GPU acceleration Prerequisites: Workshops 0 (Intro to HPC) and 9 (SLURM Job Scheduling), or equivalent experience

Pre-Workshop Preparation


Technical Setup

  1. Verify GPU node availability: Check that at least 1–2 GPUs are free during the workshop with sinfo -p gpu --Node -o "%N %G %C %m %t"
  2. Test module loads: Confirm module load cuda and module load miniconda3 work correctly
  3. Prepare a shared conda environment with PyTorch and TensorFlow pre-installed (participants may not have time to install during the workshop)
  4. Pre-stage example datasets in a shared /bigdata/ location so participants do not need to download during class
  5. Test all code examples on each GPU type (A100, L40S, RTX PRO 6000) to verify compatibility

Logistics

  • Book a computer lab with SSH/browser access, or ensure all participants have laptops
  • Have a backup plan if GPU nodes are fully allocated (pre-recorded demos, screenshots)
  • Prepare printed or digital copies of the reference card

Episode-by-Episode Guide


Episode 1: Introduction to GPU Computing (30 min teaching, 15 min exercises)

Key concepts: CPU vs. GPU architecture, parallelism, when GPUs help vs. hinder

Teaching tips: - Start with a visual comparison of CPU (few powerful cores) vs. GPU (thousands of simple cores) - Use the analogy: CPU is like a sports car (fast for one trip), GPU is like a bus fleet (moves many people at once) - Show a live nvidia-smi demo on a GPU node to make it tangible - Emphasize that GPUs are NOT always faster – overhead matters for small problems

Common questions: - “Can I use GPUs for my R code?” – Generally no, unless using specific GPU-enabled packages like gpuR. Most R workloads benefit more from CPU parallelism - “How do I know if my code will benefit from GPUs?” – Look for operations on large matrices, deep learning training, or embarrassingly parallel computations

Episode 2: GPU Hardware on Sagehen HPC (20 min teaching, 10 min exercises)

Key concepts: A100/L40S/RTX PRO 6000 specs (10 GPUs total), VRAM, memory bandwidth, tensor cores

Teaching tips: - Show the physical layout: which nodes have which GPUs - Demonstrate nvidia-smi output and explain each field - Discuss VRAM as the primary constraint for model size - Explain why A100 80GB is preferred for large models

Demo: Run nvidia-smi on different GPU types and compare output

Episode 3: CUDA and GPU Programming Basics (35 min teaching, 20 min exercises)

Key concepts: CUDA toolkit, kernels, threads, blocks, grids

Teaching tips: - Focus on conceptual understanding, not deep CUDA C programming - Most researchers will use PyTorch/TensorFlow rather than raw CUDA - Show a simple CUDA program but emphasize that frameworks abstract this away - The nvcc --version command is important for debugging version mismatches

Episode 4: GPU Computing with Python (40 min teaching, 25 min exercises)

Key concepts: PyTorch .cuda(), TensorFlow GPU detection, data movement, mixed precision

Teaching tips: - This is the most hands-on episode – allocate extra time - Have participants run interactive GPU sessions: srun --partition=gpu --gres=gpu:1 --time=01:00:00 --pty bash - Walk through moving tensors to GPU and back - Demonstrate the speed difference with a matrix multiplication benchmark - Show how to check if code is actually using the GPU

Common pitfall: Participants forgetting to move BOTH the model AND data to GPU

Episode 5: Multi-GPU and Distributed Training (35 min teaching, 15 min exercises)

Key concepts: DataParallel, DistributedDataParallel, multi-GPU SLURM scripts

Teaching tips: - This is advanced – adjust depth based on audience - Focus on practical SLURM scripts for multi-GPU jobs - Remind participants of the 4 GPU per account limit - Show how to verify all GPUs are being used with nvidia-smi

Episode 6: Performance Optimization (30 min teaching, 15 min exercises)

Key concepts: Mixed precision, memory management, profiling, data loading

Teaching tips: - Mixed precision (FP16/BF16) is the single biggest easy optimization - Show torch.cuda.memory_summary() for debugging memory issues - Discuss data loading bottlenecks (CPU-bound preprocessing, I/O from /rhome vs. /scratch) - Recommend /scratch or /tmpfs for training data I/O

Episode 7: Best Practices and Troubleshooting (25 min teaching, 10 min exercises)

Key concepts: Resource etiquette, checkpointing, common errors

Teaching tips: - Emphasize responsible GPU use: release resources when done, use --time limits - Show how to set up model checkpointing to survive job timeouts - Walk through common error messages and their solutions - End with a Q&A session

Common Issues and Solutions


Issue Solution
“No GPU nodes available” Check sinfo -p gpu; consider off-peak hours or using L40S
“CUDA out of memory” Reduce batch size, enable gradient checkpointing, use mixed precision
Slow training despite GPU Check data loading (num_workers), ensure data is on /scratch
Module conflicts Use module purge then load modules in correct order
Conda environment issues Pre-build a shared environment; have a backup .yml file

Assessment Suggestions


  • Have participants submit a GPU batch job and show the output
  • Ask participants to compare CPU vs. GPU timing for a matrix multiplication
  • Quiz on when to use GPUs vs. CPUs for different workload types

Post-Workshop Resources


  • Point participants to the learner reference card
  • Encourage joining office hours for follow-up GPU questions
  • Share links to PyTorch and TensorFlow GPU tutorials
  • Contact: its-hpc@pomona.edu

Introduction to GPU Computing


Sagehen HPC GPU Hardware Configuration


Requesting and Allocating GPUs


GPU Software Setup and Modules


Training Models with PyTorch and TensorFlow


Monitoring and Optimization


GPU Etiquette and Best Practices