Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 186 additions & 0 deletions _data/learning-materials.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
# Learning materials shown on /learning-materials.html
#
# text: Title of the material (required)
# url: Link to the repository or guide (required)
# icon: Either a Bootstrap Icons class ("bi bi-github") or a path/URL to
# an image to use as the icon ("/images/logos/rstudio.png")
# description: Short summary, rendered as markdown
# tags: List of tags; these populate the sidebar tag selector
# last updated: YYYY-MM-DD, used by the default "Recently updated" sort
# featured: true to highlight the material and pin it to the top of the
# default listing (the pin is dropped once a visitor sorts)

- text: Build a Conda-based Container for Bioinformatics
url: https://github.com/CHTC/biocafe-containers
icon: "bi bi-github"
description: |
This tutorial covers the basics of how to use containers to deploy software.
While this example is bioinformatics-flavored, the concepts can be applied
to any software stack.
tags:
- conda
- HTC
- bioinformatics
- CHTC-created
- container
last updated: 2026-05-11

- text: Learn How to Deploy R Calculations
url: https://github.com/chtc/tutorial-rstudio-to-chtc
icon: "bi bi-github"
description: |
A step-by-step example of transitioning from running R calculations
on your computer using RStudio, to running many such calculations
on a HTC system.
tags:
- R
- CHTC-created
- beginner-friendly
- HTC
last updated: 2026-04-02

- text: Predict Protein Structures with Alphafold3
url: https://github.com/CHTC/tutorial-CHTC-AF3
icon: "bi bi-github"
description: |
AlphaFold3 (AF3) predicts atomic-resolution biomolecular structures
for proteins, nucleic acids, and complexes.
tags:
- bioinformatics
- CHTC-created
- HTC
- GPU
last updated: 2026-06-24

- text: Machine Learning on GPUs with PyTorch
url: https://github.com/CHTC/tutorial-pytorch-gpu
icon: "bi bi-github"
description: |
Train and evaluate a PyTorch model on GPU capacity, including how to
request GPUs, check for CUDA availability, and checkpoint long-running
training jobs.
tags:
- machine-learning
- GPU
- python
- CHTC-created
- HTC
last updated: 2026-07-15

- text: Package Python Environments for Distributed Jobs
url: https://github.com/CHTC/tutorial-python-environments
icon: "bi bi-github"
description: |
Compare the ways of bringing a Python environment along with your jobs,
from `conda-pack` tarballs to purpose-built Apptainer containers.
tags:
- python
- conda
- container
- beginner-friendly
- CHTC-created
- HTC
last updated: 2026-08-19

- text: Run MPI Simulations on the HPC Cluster
url: https://github.com/CHTC/tutorial-hpc-mpi
icon: "bi bi-github"
description: |
An introduction to compiling and running multi-node MPI codes with SLURM,
including how to scale up gradually and measure parallel efficiency.
tags:
- HPC
- MPI
- CHTC-created
last updated: 2026-03-08

- text: Introduction to High Throughput Computing
url: https://github.com/OSGConsortium/osg-school-materials
icon: "bi bi-github"
description: |
Lessons and exercises from OSG School covering the ideas behind
high throughput computing and the mechanics of submitting your first
workloads.
featured: true
tags:
- HTC
- beginner-friendly
- workshop
last updated: 2026-02-20

- text: Manage Multi-Step Workflows with DAGMan
url: https://github.com/CHTC/tutorial-dagman
icon: "bi bi-github"
description: |
Chain jobs together into a workflow so that pre-processing, analysis, and
aggregation steps run in the right order and recover from failures.
featured: true
tags:
- workflows
- HTC
- CHTC-created
last updated: 2026-01-27

- text: Analyze Large Datasets with Dask
url: https://github.com/CHTC/tutorial-dask
icon: "bi bi-github"
description: |
Scale pandas-style analysis beyond a single machine, and learn when a
Dask cluster is the right tool versus many independent HTC jobs.
tags:
- python
- data-analysis
- HTC
last updated: 2025-11-06

- text: Get Started with HTC in Ten Jobs
url: https://github.com/CHTC/tutorial-first-jobs
icon: "bi bi-github"
featured: true
description: |
The place to start if you have never submitted a job before: ten small
exercises that build up from a single "hello world" job to a batch of
hundreds.
tags:
- HTC
- beginner-friendly
- CHTC-created
- workshop
last updated: 2025-12-15

- text: Run MATLAB Jobs Without a License Server
url: https://github.com/CHTC/tutorial-matlab-compiler
icon: "/images/Matlab_Logo.png"
description: |
Compile MATLAB code into a standalone executable so that your jobs can run
anywhere in the pool, without needing to check out a license.
tags:
- MATLAB
- HTC
- CHTC-created
last updated: 2026-07-02

- text: Checkpoint Long-Running Jobs
url: https://github.com/CHTC/tutorial-self-checkpointing
icon: "bi bi-github"
description: |
Break a multi-day computation into restartable pieces so it survives
interruptions and makes steady progress on opportunistic capacity.
tags:
- HTC
- workflows
- CHTC-created
last updated: 2026-06-05

- text: Move Large Datasets In and Out of CHTC
url: https://github.com/CHTC/tutorial-data-transfer
icon: "bi bi-github"
description: |
Choose between HTCondor file transfer, staging space, and Globus for the
inputs and outputs your jobs produce, with examples of each.
tags:
- data-transfer
- HTC
- beginner-friendly
- CHTC-created
last updated: 2026-05-28
154 changes: 154 additions & 0 deletions _uw-research-computing/learning-materials.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
---
layout: default
title: Learning Materials
description: A collection of tutorials, workshops, and example repositories for learning high throughput and high performance computing.
js_extension:
- src: "/assets/js/pages/learning-materials.js"
loading: defer
type: module
---

{% assign by_date = site.data.learning-materials | sort: "last updated" | reverse %}
{% assign featured_materials = by_date | where: "featured", true %}
{% assign other_materials = by_date | where_exp: "material", "material.featured != true" %}
{% comment %} Featured materials lead the default listing; JS drops the pin once a visitor sorts. {% endcomment %}
{% assign materials = featured_materials | concat: other_materials %}
{% assign all_tags = materials | map: "tags" | join: "," | split: "," | uniq | sort_natural %}

<div class="container-xxl pt-3" id="learning-materials">
{% include page-title.html title=page.title %}

<p class="lm-intro">
Tutorials, workshop materials, and example repositories for learning how to run
your research computing work at scale. Filter by topic using the tags, or search
for a keyword.
</p>

<div class="row">

<!-- Sidebar: tag selector -->
<div class="col-12 col-lg-3">
<button class="btn btn-outline-primary w-100 mb-3 d-lg-none" type="button"
data-bs-toggle="collapse" data-bs-target="#lm-tag-panel"
aria-expanded="false" aria-controls="lm-tag-panel">
Browse by tag
</button>

<div class="collapse d-lg-block" id="lm-tag-panel">
<div class="lm-sidebar mb-4">
<div class="lm-sidebar-header">
<h2 class="h6 mb-0">Tags</h2>
<button type="button" class="btn btn-link btn-sm p-0 lm-clear-tags" id="lm-clear-tags" hidden>
Clear
</button>
</div>

<ul class="lm-tag-list list-unstyled mb-0">
{% for tag in all_tags %}
{% assign tagged = materials | where_exp: "material", "material.tags contains tag" %}
<li>
<label class="lm-tag-option" for="lm-tag-{{ tag | slugify }}">
<input class="form-check-input" type="checkbox"
id="lm-tag-{{ tag | slugify }}"
value="{{ tag }}"
data-lm-tag="{{ tag }}">
<span class="lm-tag-name">{{ tag }}</span>
<span class="lm-tag-count" aria-label="{{ tagged.size }} {% if tagged.size == 1 %}guide{% else %}guides{% endif %}">{{ tagged.size }}</span>
</label>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>

<!-- Cards, with filter + sort controls -->
<div class="col-12 col-lg-9">

<div class="lm-toolbar">
<div class="lm-search">
<label class="visually-hidden" for="lm-search-input">Search learning materials</label>
<i class="bi bi-search lm-search-icon" aria-hidden="true"></i>
<input type="search" class="form-control" id="lm-search-input"
placeholder="Search titles, descriptions, and tags" autocomplete="off">
</div>

<div class="lm-sort">
<label class="form-label mb-0" for="lm-sort-select">Sort by</label>
<select class="form-select" id="lm-sort-select">
<option value="updated-desc" selected>Recently updated</option>
<option value="updated-asc">Least recently updated</option>
<option value="title-asc">Title (A&ndash;Z)</option>
<option value="title-desc">Title (Z&ndash;A)</option>
</select>
</div>
</div>

<div class="lm-status">
<p class="mb-0 text-muted" id="lm-count" aria-live="polite">
Showing {{ materials.size }} of {{ materials.size }} guides
</p>
<div id="lm-active-tags" class="lm-active-tags"></div>
</div>

<div class="row" id="lm-grid">
{% for material in materials %}

{% assign updated = material.last_updated | default: material["last updated"] %}
{% assign icon = material.icon | default: "bi bi-github" %}
{% assign tag_string = material.tags | join: " " %}

<div class="col-12 col-md-6 col-xl-4 mb-4 lm-card-col"
data-tags="{{ material.tags | join: '|' }}"
data-featured="{% if material.featured %}true{% else %}false{% endif %}"
data-updated="{% if updated %}{{ updated | date: '%Y-%m-%d' }}{% endif %}"
data-title="{{ material.text | escape }}"
data-search="{{ material.text | append: ' ' | append: material.description | append: ' ' | append: tag_string | normalize_whitespace | escape }}">
<div class="lm-card{% if material.featured %} lm-card-featured{% endif %}">
<div class="lm-card-head">
{% if icon contains "bi " %}
<i class="{{ icon }} lm-card-icon" aria-hidden="true"></i>
{% elsif icon contains "//" %}
<img class="lm-card-icon-img" src="{{ icon }}" alt="">
{% else %}
<img class="lm-card-icon-img" src="{{ icon | relative_url }}" alt="">
{% endif %}
<h3 class="lm-card-title">
{% if material.featured %}
<span class="lm-featured-label">
<i class="bi bi-star-fill" aria-hidden="true"></i>Featured
</span>
{% endif %}
<a href="{{ material.url }}">{{ material.text }}</a>
</h3>
</div>

<div class="lm-card-description">
{{ material.description | markdownify }}
</div>

<div class="lm-card-tags">
{% for tag in material.tags %}
<button type="button" class="lm-tag-badge" data-lm-tag-toggle="{{ tag }}">{{ tag }}</button>
{% endfor %}
</div>

<div class="lm-card-footer">
<span class="lm-card-host">{{ material.url | remove: "https://" | remove: "http://" | remove_first: "www." }}</span>
{% if updated %}
<span class="lm-card-updated">Updated {{ updated | date: "%b %-d, %Y" }}</span>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>

<div id="lm-no-results" class="lm-no-results" hidden>
<p class="mb-2"><strong>No learning materials match your filters.</strong></p>
<button type="button" class="btn btn-outline-primary btn-sm" id="lm-reset-all">Clear all filters</button>
</div>

</div>
</div>
</div>
Loading
Loading