diff --git a/.gitignore b/.gitignore index 259d9fe..5c07472 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ *.Rproj .Rhistory .RData +*__pycache__/ *.snakemake diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..931bcc2 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,49 @@ +repos: +- repo: https://gitlab.com/vojko.pribudic.foss/pre-commit-update + rev: v0.6.0post1 # Insert the latest tag here + hooks: + - id: pre-commit-update + args: [--exclude, black, --keep, isort] + # Formats import order +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + name: isort (python) + args: ["--profile", "black", "--filter-files"] + + #Code formatter for both python files and jupyter notebooks +- repo: https://github.com/psf/black + rev: 22.10.0 + hooks: + - id: black-jupyter + - id: black + language_version: python3.10 + +- repo: https://github.com/nbQA-dev/nbQA + rev: 1.9.0 + hooks: + - id: nbqa-isort + additional_dependencies: [isort==5.6.4] + args: [--profile=black] + + + # remove unused imports +- repo: https://github.com/hadialqattan/pycln.git + rev: v2.4.0 + hooks: + - id: pycln + + # additional hooks found with in the pre-commit lib +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace # removes trailing white spaces + - id: mixed-line-ending # removes mixed end of line + args: + - --fix=lf + - id: pretty-format-json # JSON Formatter + args: + - --autofix + - --indent=4 + - --no-sort-keys diff --git a/lectures/10.hpc_and_parallel_compute/README.md b/lectures/10.hpc_and_parallel_compute/README.md new file mode 100644 index 0000000..65eb3ca --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/README.md @@ -0,0 +1,26 @@ +# Lecture 10: High performance computing and parallel computing + +This lecture will cover parallel computing and high performance computing. +We have the following learning objectives: +1. Familiarize with the concept of parallel computing +2. Understand how to leverage parallel computing +3. Learn about high performance computing +4. Understand how to leverage high performance computing +5. Learn how to use HPC resources and best practices + +We will be using some pre-written scripts to explore parallel computing and high performance computing. +The following scripts are available in the [scripts](./scripts) directory: +* [analyze_sequences](scripts/analyze_sequences.py) + * This script contains the core sequence analysis function that we use to analyze sequences. + Note this script is can be run for a single sequence and in a serial fashion but we will also call to be parallelized. +* [multiprocessing_run](scripts/multiprocessing_run.sh) + * This script runs itself in parallel using the `multiprocessing` module in Python. + This shell script calls the `multiprocessing_sequence_analysis.py` script below +* [multiprocessing_sequence_analysis](scripts/multiprocessing_sequence_analysis.py) + * The script is called by the `multiprocessing_run.sh` script. +* [plot_parallel_compute_analysis](scripts/plot_parallel_compute_analysis.py) + * This script plots the results of the parallel computing analysis. +* [serial_run](scripts/serial_run.sh) + * This script runs the `analyze_sequences.py` script in serial. +* [submit_jobs_HPC](scripts/submit_jobs_HPC.sh) + * This script submits jobs to the HPC cluster in an array job. diff --git a/lectures/10.hpc_and_parallel_compute/SLURM_cheatsheet.md b/lectures/10.hpc_and_parallel_compute/SLURM_cheatsheet.md new file mode 100644 index 0000000..e21c554 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/SLURM_cheatsheet.md @@ -0,0 +1,79 @@ +# Slurm Guide + +For bash scripts, this line should be the first line of code in every script +``` +#!/bin/bash # Shebang slash bin slash bash +``` + +Next are the SBATCH directives that tell slurm scheduler how to handle your job. +These directives should be at the top of your script, but under the shebang line. + +### Frequent SLURM directives +``` +#SBATCH --job-name=parallel_job # job name +#SBATCH -t 1-23:59:59 # D-HH-MM-SS +#SBATCH -t 59 # MM +#SBATCH -t 59:59 # MM:SS +#SBATCH -t 59:59:59 # HH:MM:SS +#SBATCH -t 1-23 # D-HH +#SBATCH -t 1-23:59 # D-HH-MM +#SBATCH --mem=16G # 16 Gigabytes +#SBATCH --output=out_%j.log +#SBATCH --ntasks # number of tasks +#SBATCH --mail-type=NONE, BEGIN, END, FAIL, ALL # email events +#SBATCH --mail-user=email@ufl.edu +``` +### Slurm Commands +#### Environment modules +``` +module purge # removes all modules +module avail # lists all modules availble for loading +module list # list all currently loaded modules +module load # loads module (hint: us the tab key to autocomplete) +``` +#### Submitting a job +``` +sbatch script.sh # submit script.sh +``` +#### Checking job status +``` +squeue -u {User} # check submitted jobs in queue +``` +#### Canceling a job or all jobs +``` +scancel {jobid} # Cancel job +scancel -u {User} # Cancel all jobs for user +``` +#### Check job details +``` +jobstats $USER {days} # Check job stats for user for the last {days} +``` +#### Check job efficiency +``` +seff {jobid} +``` +#### Check fairshare +``` +module load slurmtools +levelfs $USER +``` +#### Check user and institution account billings +``` +suuser $USER +suacct amc-general +``` + +#### Example SBATCH +``` +#!/bin/bash +#SBATCH --job-name=Slurm_job # job name "slurm_job" +#SBATCH -t 1-23 # Time 1 day, 23 hours +#SBATCH --mem=16G # 16 Gigabytes of RAM +#SBATCH --output=out_%j.log # std output/error file + +#SBATCH --mail-type=END,FAIL # send email on job end/fail +#SBATCH --mail-user=email@ufl.edu # send email to this address + +module load python/3.9.6 +module list +``` diff --git a/lectures/10.hpc_and_parallel_compute/data/parallel_compute_analysis.csv b/lectures/10.hpc_and_parallel_compute/data/parallel_compute_analysis.csv new file mode 100644 index 0000000..087e6ad --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/data/parallel_compute_analysis.csv @@ -0,0 +1,111 @@ +sequences,time_per_sequence(s),core_count +10,0.5,1 +100,0.5,1 +1000,0.5,1 +10000,0.5,1 +100000,0.5,1 +1000000,0.5,1 +10000000,0.5,1 +100000000,0.5,1 +1000000000,0.5,1 +10000000000,0.5,1 +10,0.5,2 +100,0.5,2 +1000,0.5,2 +10000,0.5,2 +100000,0.5,2 +1000000,0.5,2 +10000000,0.5,2 +100000000,0.5,2 +1000000000,0.5,2 +10000000000,0.5,2 +10,0.5,4 +100,0.5,4 +1000,0.5,4 +10000,0.5,4 +100000,0.5,4 +1000000,0.5,4 +10000000,0.5,4 +100000000,0.5,4 +1000000000,0.5,4 +10000000000,0.5,4 +10,0.5,8 +100,0.5,8 +1000,0.5,8 +10000,0.5,8 +100000,0.5,8 +1000000,0.5,8 +10000000,0.5,8 +100000000,0.5,8 +1000000000,0.5,8 +10000000000,0.5,8 +10,0.5,16 +100,0.5,16 +1000,0.5,16 +10000,0.5,16 +100000,0.5,16 +1000000,0.5,16 +10000000,0.5,16 +100000000,0.5,16 +1000000000,0.5,16 +10000000000,0.5,16 +10,0.5,32 +100,0.5,32 +1000,0.5,32 +10000,0.5,32 +100000,0.5,32 +1000000,0.5,32 +10000000,0.5,32 +100000000,0.5,32 +1000000000,0.5,32 +10000000000,0.5,32 +10,0.5,64 +100,0.5,64 +1000,0.5,64 +10000,0.5,64 +100000,0.5,64 +1000000,0.5,64 +10000000,0.5,64 +100000000,0.5,64 +1000000000,0.5,64 +10000000000,0.5,64 +10,0.5,128 +100,0.5,128 +1000,0.5,128 +10000,0.5,128 +100000,0.5,128 +1000000,0.5,128 +10000000,0.5,128 +100000000,0.5,128 +1000000000,0.5,128 +10000000000,0.5,128 +10,0.5,256 +100,0.5,256 +1000,0.5,256 +10000,0.5,256 +100000,0.5,256 +1000000,0.5,256 +10000000,0.5,256 +100000000,0.5,256 +1000000000,0.5,256 +10000000000,0.5,256 +10,0.5,512 +100,0.5,512 +1000,0.5,512 +10000,0.5,512 +100000,0.5,512 +1000000,0.5,512 +10000000,0.5,512 +100000000,0.5,512 +1000000000,0.5,512 +10000000000,0.5,512 +10,0.5,1024 +100,0.5,1024 +1000,0.5,1024 +10000,0.5,1024 +100000,0.5,1024 +1000000,0.5,1024 +10000000,0.5,1024 +100000000,0.5,1024 +1000000000,0.5,1024 +10000000000,0.5,1024 diff --git a/lectures/10.hpc_and_parallel_compute/data/sequences_to_analyze.txt b/lectures/10.hpc_and_parallel_compute/data/sequences_to_analyze.txt new file mode 100644 index 0000000..3953de6 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/data/sequences_to_analyze.txt @@ -0,0 +1,10 @@ +GCXCCXAGGGTTGCAGTCAAATGTCCA +CGGCCAATGAGGGXCGCXTAGGTCAT +TAGGTGGATACCXCTXATATATGATT +CCXATATTAAGACATATAATTGGAGG +TATTACACGCCCAAATAATTTGGCXA +TCAGCXGCXGGGAAGCGGGCGCXATACT +CGGATGATCATCXGGGATGATGTCTA +GCGCCXGGAAGACGAATCTTAATTA +TTAGGAACXTXXCAATATGTTTCGGT +ACTTCTATGTCTXTGGATTACAAACA diff --git a/lectures/10.hpc_and_parallel_compute/environments/README.md b/lectures/10.hpc_and_parallel_compute/environments/README.md new file mode 100644 index 0000000..88b509d --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/environments/README.md @@ -0,0 +1,10 @@ +# Environment creation +We need to create the environment needed for this lecture and hands on activity. +To do so run the following command from this directory: +```bash +conda env create -f parallel_and_hpc_compute_env.yaml +``` +OR +```bash +mamba env create -f parallel_and_hpc_compute_env.yaml +``` diff --git a/lectures/10.hpc_and_parallel_compute/environments/parallel_and_hpc_compute_env.yaml b/lectures/10.hpc_and_parallel_compute/environments/parallel_and_hpc_compute_env.yaml new file mode 100644 index 0000000..a97fa31 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/environments/parallel_and_hpc_compute_env.yaml @@ -0,0 +1,16 @@ +name: parallel_and_hpc_compute_env +channels: + - conda-forge + - defaults +dependencies: + - python=3.11 + - conda-forge::pandas + - conda-forge::jupyter + - conda-forge::ipykernel + - conda-forge::nbconvert + - conda-forge::pip + - conda-forge::matplotlib + - conda-forge::seaborn + - pip: + - argparse + diff --git a/lectures/10.hpc_and_parallel_compute/hands_on_activity/5mc_sequence_analysis_activity.md b/lectures/10.hpc_and_parallel_compute/hands_on_activity/5mc_sequence_analysis_activity.md new file mode 100644 index 0000000..b71d9b5 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/hands_on_activity/5mc_sequence_analysis_activity.md @@ -0,0 +1,24 @@ +# Hand on: 5mC sequence analysis activity + +You want to identify the 5mC content in each of 10 sequences. +Where X is 5mC and C is cytosine. +The goal is to identify the number of 5mC in each sequence byt using mutliple compute approaches. +For the sequences below, identify the number of 5mC in each sequence by using the following approaches: +* Serial approach +* Parallel approach + * Python multiprocessing approach + * GNU parallel approach +* HPC approach + +Sequences: +0. GCXCCXAGGGTTGCAGTCAAATGTCC +1. ACTTCTATGTCTXTGGATTACAAACA +2. CGGCCAATGAGGGXCGCXTAGGTCAT +3. TAGGTGGATACCXCTXATATATGATT +4. CCXATATTAAGACATATAATTGGAGG +5. TATTACACGCCCAAATAATTTGGCXA +6. TCAGCXGCXGGGAAGCGGGCGCXATA +7. CGGATGATCATCXGGGATGATGTCTA +8. GCGCCXGGAAGACGAATCTTAATTAX +9. TTAGGAACXTXXCAATATGTTTCGGT + diff --git a/lectures/10.hpc_and_parallel_compute/notebooks/plot_parallel_compute_analysis.ipynb b/lectures/10.hpc_and_parallel_compute/notebooks/plot_parallel_compute_analysis.ipynb new file mode 100644 index 0000000..050ed8d --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/notebooks/plot_parallel_compute_analysis.ipynb @@ -0,0 +1,205 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook generates a hypothetical situation calculating parallel computing time for a given number of tasks and processors. \n", + "The goal is to show how the time to complete a task decreases as the number of processors increases." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pathlib\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sequencestime_per_sequence(s)core_count
0100.51
11000.51
210000.51
3100000.51
41000000.51
\n", + "
" + ], + "text/plain": [ + " sequences time_per_sequence(s) core_count\n", + "0 10 0.5 1\n", + "1 100 0.5 1\n", + "2 1000 0.5 1\n", + "3 10000 0.5 1\n", + "4 100000 0.5 1" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_path = pathlib.Path(\"../data/parallel_compute_analysis.csv\").resolve()\n", + "df = pd.read_csv(data_path)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df[\"time(s)\"] = df[\"sequences\"] / df[\"core_count\"] * df[\"time_per_sequence(s)\"]\n", + "# log 10 transform the data\n", + "df[\"sequences\"] = df[\"sequences\"].apply(np.log10)\n", + "\n", + "# convert to hours\n", + "df[\"time(h)\"] = df[\"time(s)\"] / 3600\n", + "df[\"time(d)\"] = df[\"time(h)\"] / 24" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "df[\"core_count\"].unique()\n", + "# make each core count a different color\n", + "colors = sns.color_palette(\"husl\", len(df[\"core_count\"].unique()))\n", + "color_dict = dict(zip(df[\"core_count\"].unique(), colors))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKAAAAJICAYAAABWnpxpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUZdcG8Ht200kPJUAgQCDUJCQEiHSDvKiACuhnC1JDF2mhqoACilKk11CUjiACgr6AFOFFmiAoJaGEFkggpJK6u8/3R9yFNQFSNjtb7t91cZnMzM6cZzaQ49nnOSMJIQSIiIiIiIiIiIjKiELuAIiIiIiIiIiIyLKxAEVERERERERERGWKBSgiIiIiIiIiIipTLEAREREREREREVGZYgGKiIiIiIiIiIjKFAtQRERERERERERUpliAIiIiIiIiIiKiMsUCFBERERERERERlSkWoIiIqMSEEHKHUGYseWxERERkGJacL1jy2EgeLECRRTl//jyioqLQrl07BAYGon379vj4449x69YtuUMzmG3btqFu3bq4ffu23KEUWUxMDLp27YpGjRrh1VdflTucp/r3vR03bhzCw8OLdY6SvMZcLV68GNHR0brv58+fj7p168oYkWGkpaVh7NixOHXqlG5bjx490KNHjzK7Zlmfn4isB3Mh08RcyDIxFzIc5kLWgQUoshjr1q3DO++8g6SkJIwaNQrLly/HwIEDcfLkSXTv3h1///233CEaRLt27bBp0yZUrFhR7lCKbMGCBbhz5w4WLFiAGTNmyB0OGcg333yDrKws3fdvvfUWNm3aJGNEhnHx4kVs374dGo1G7lCIiIqFuZDpYi5kmZgLERWPjdwBEBnC6dOnMW3aNLz//vuYOHGibnvz5s3Rvn17dOvWDePHj8eOHTtkjNIwPD094enpKXcYxZKcnAx/f3+0a9dO7lCoDHl7e8Pb21vuMIiIrBJzIdPGXMg6MBciejbOgCKLEB0dDRcXF4wcObLAPk9PT4wbNw7/+c9/kJGRodu+e/dudOvWDcHBwWjZsiU+/fRTpKam6vbPnz8fL7/8Mvbt24fOnTsjICAAr7/+Os6cOYOzZ8/irbfeQmBgIDp37oxjx47pvS48PBwHDhzAyy+/jKCgILz11lt6xwDApUuXMHToUISFhaFhw4Zo3bo1pk6diuzsbN0xdevWxYIFC9C9e3c0adIEixYtKjA1+uHDhxg9ejRatmypi3H79u1614qLi8OwYcPQsmVLNG7cGD169MDp06d1+2/fvo26detiz549GDZsGIKDg9G0aVNMnDgRjx49eua9T0xMxPjx49G2bVsEBgbizTffxP79+/XGcOLECZw8eRJ169bFtm3bCj1Pjx49MG7cOCxduhQtW7ZESEgIBg0aVGDJwL59+/Dee+8hODgYjRo1wssvv4y1a9fq9h8/fhx169bFxo0b8eKLL6JFixY4cuQIAGDLli3o1q0bGjdujMDAQLz++uvYvXv3M8f3b1u2bEGnTp3QqFEjtGvXDvPnz4dKpSrWOZKSkjBhwgS0aNECwcHBeP/99/Xej5ycHCxcuBAvv/wyAgIC8J///AfLli3T+xSqR48e+PTTT7F48WK0bt0aQUFBiIyMxIMHD7B161Z06NABwcHB6NWrl94ShaLc56dNH69bty7mz5+v+xrI/0RX+/W/X9ejRw9MnDgRy5YtQ7t27RAQEIB33nkHf/75p955Dx48iG7duiEwMBAdO3bErl270KFDB921CjNu3Dj07dsXmzdvxksvvYTAwEC88847uH79Og4cOIAuXbro/u5dvHhR77WnTp1CREQEgoKC0KxZM4wdOxYPHz4EkP/z88EHHwAAPvjgA72p4EIILF++XLes5e2338b58+f1zn3+/Hn07dsXzZs3R0hICAYOHIjY2Fi9Y+Lj4zF06FA0adIELVu2xKpVqwqM7++//0bPnj3RpEkT3fv47/tGRPQk5kLMhbSYCzEXYi5EJksQmTmNRiMCAgLERx99VOTXLFy4UPj7+4vJkyeLw4cPi3Xr1olmzZqJLl26iKysLCGEEPPmzRNBQUEiPDxc7Ny5U+zbt0+0bdtWtGrVSrz44oti8+bNYu/eveKVV14RzZs3L/C6pk2bijVr1ogDBw6IHj16iIYNG4rz588LIYRISEgQISEhok+fPuLAgQPi6NGjYtq0acLf318sXrxYF6e/v79o0KCBWLp0qTh48KC4dOmS2Lp1q/D39xe3bt0SQgjRp08f8frrr4u9e/eK//3vf2LcuHHC399f/P7770IIIWJjY0VwcLB44403xO7du8XevXt18Rw/flwIIcStW7eEv7+/aNq0qfjyyy/F//73P7FkyRJRt25dMXPmzKfex/v374vWrVuL8PBw8cMPP4iDBw+KYcOGibp164off/xRCCHEmTNnxBtvvCHeeOMNcebMGZGUlFTouSIiIkRoaKjo0KGD+Omnn8TOnTtFu3btRLt27cSjR4+EEEIcOHBA+Pv7i6lTp4r//e9/4tdffxV9+vQR/v7+4vTp00IIIX7//Xfh7+8vmjVrJvbs2SO2b98u0tPTxdq1a0W9evXEggULxO+//y5+/vln0b17d9GgQQNx584dIYQocG/Hjh0rXnzxRV2M2nvy+eefi99++00sW7ZMBAQEiPHjx+uO+fdr/u3Ro0fipZdeEm3bthXff/+9OHLkiIiMjBSNGzcWV65cERqNRvTq1Us0btxYLF++XBw5ckTMmjVL1K9fX3z88cd69yskJERERESIQ4cOiQ0bNogGDRqIjh076n4etmzZIho3biwiIyOLdZ/nzZsn/P39C8Tu7+8v5s2bp3tf/f39xYQJE8SZM2cKfV1ERIRo0qSJ+L//+z+xd+9e8d///le0b99etGnTRqhUKiGEEMeOHRP169cXgwcPFgcPHhRr1qwRISEhomHDhrprFWbs2LEiJCREdO7cWezdu1fs3LlTNGnSRLz00kuiQ4cOYufOneKnn34SLVu2FK+++qrudSdOnBANGzYUffv2Fb/++qv44YcfRLt27USnTp1EVlaW7mfF399frF27VsTGxurGUq9ePfHWW2+Jffv2id27d4u2bduKFi1aiLy8PN1YGjZsKHr16iX27t0rfvrpJ/Haa6+JkJAQceXKFd37/+KLL4r27duLXbt2iZ9//lm88soromHDhiIiIkIIIUR6eroICwsTH330kThy5Ig4cOCA+L//+z/RpEkTkZaW9tR7QkTWi7kQcyHmQsyFmAuROWABisxeUlKS8Pf3F19//XWRjk9JSRGNGjUSEydO1Nt+8uRJ4e/vL9atWyeEePwL5NChQ7pjli5dKvz9/cWWLVt0237++Wfh7+8vLly4oPe6H374QXdMVlaWaNmypfjwww+FEEL89ttv4v333xfp6el6MXTu3Fn06dNH972/v79455139I75d2LQqFEjsWjRIt1+tVotvvzyS3Hy5EkhhBAfffSRaNasmd4/1nl5eaJjx47izTffFEI8TrpGjx6td60ePXqIzp07P/VefvXVV6Jhw4bi5s2bett79uwpWrZsKdRqtRAi/xeW9hfK00RERIgG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sLBcCCh5PjRz5kzdscyHiEhumtg4AIDCv4asccgh4+wPUKXcgaKcF1yavi93OGan2OXKGTNmwMvLC9999x2cnJx0a9RnzZqFnJwcLFmyBO3atTN0nFZFkiTYjW5odkvwnsXb2xuJiYl627TfV6pUSbdt7dq1mDZtGjp06ICZM2fqPtn7888/ERsbiwULFmDhwoUAgLy8PKhUKgQHB2PKlCl47bXXDBozEREZn+Zhfp8bYz4BL/vGCQACthVqQ+lcAcBdo12bCid7LgSYVD6kVCqRnZ2Nc+fOMR8iIlkJtRqaK7cAAAp/62pArsnNROqR5QAAt5b9oLBzlDki81PsAtSxY8cwffp0uLq6Qq1W6+17++23MXz4cEPFZtUkSQLsLedJN02bNsXGjRuhVqt1T/A5duwYatasCS8vLwDA+vXr8fnnn6NHjx6YMGECFIrHn3wHBgbi/9m77/C4zirx4997p6sXS3KVZcsq7nZsyWmOHUgv7GYTSpYEEggtjaWE/QHZXVhaWGCzCYlhIYE0QkISYEmPA+kJltybmiVLcpEsWV2afu/7+2OkcbdVZjSj0fk8jx/bd+6877kTxbo69z3nfe21144Z8/HHH+e1117j8ccfD48hhBBiYlOHuwHp/yQS714IRn8/NHTPvXjxYrkfEkLElGpqAZ8fkl1o0/PO/IYE0lfxO0x3J9aMmaQsuybW4UxIoyrYPNUWwH6/P+JPikRiuPbaa3nooYf49re/zS233ML27dt59NFH+e53vwvA3r17+eEPf8jFF1/MF77wBTo6OsLvdTqdpKamMnv2sRn29PR0rFbrCceFEEJMXKpjsARvnFZAKaWOSkCdPS5zno702Uxso70fGkpA5eTkyP2QECKmjNpGAPSifDR98vzsb7i76N3wOADpa26N2Y65E92IE1ArV67kV7/6Feeee264aaKmaZimye9//3vOOuusiAcpJr7s7GweeughfvCDH3DNNdeQk5PDN77xDa65JpQ5fvXVVwkEAqxfv57169cf895rrrmGe+65JxZhCyGEGGfhFVDjlIAKdjZi9B4Cix3HrOXjMuep7Nu3j+uvvx6fz8eKFSuorq4O99lct24d69atkzYHE9xY7oeuvvpqfvzjH8cibCGECDNrm4DJ1/+p9/3foPwD2PJKSJp/cazDmbBGnID62te+xvXXX88ll1zC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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the results\n", + "sns.set(style=\"whitegrid\")\n", + "plt.figure(figsize=(12, 6))\n", + "# custom palette\n", + "custom_palette = color_dict\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "sns.lineplot(\n", + " x=\"sequences\", y=\"time(d)\", hue=\"core_count\", data=df, palette=custom_palette\n", + ")\n", + "plt.xlabel(\"Number of Sequences (log10)\")\n", + "plt.ylabel(\"Time (Days)\")\n", + "plt.title(\"Comparison of parallel computing methods\")\n", + "plt.xlim(1, max(df[\"sequences\"]))\n", + "\n", + "plt.subplot(1, 2, 2)\n", + "sns.lineplot(\n", + " x=\"sequences\", y=\"time(h)\", hue=\"core_count\", data=df, palette=custom_palette\n", + ")\n", + "plt.xlabel(\"Number of Sequences (log10)\")\n", + "plt.ylabel(\"Time (Hours)\")\n", + "plt.title(\"Comparison of parallel computing methods\")\n", + "plt.xlim(1, 4)\n", + "plt.ylim(0, 1)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "lecture10_env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/10.hpc_and_parallel_compute/results/5mc_HPC.csv b/lectures/10.hpc_and_parallel_compute/results/5mc_HPC.csv new file mode 100644 index 0000000..41c38a1 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/results/5mc_HPC.csv @@ -0,0 +1,11 @@ +raw_count,c_count,count_5mc,sequence +26,1,0,CGGATGATCATCXGGGATGATGTCTA +25,1,0,GCGCCXGGAAGACGAATCTTAATTA +26,3,0,TTAGGAACXTXXCAATATGTTTCGGT +26,1,0,ACTTCTATGTCTXTGGATTACAAACA +26,2,0,CGGCCAATGAGGGXCGCXTAGGTCAT +26,1,0,TATTACACGCCCAAATAATTTGGCXA +28,3,0,TCAGCXGCXGGGAAGCGGGCGCXATACT +26,2,0,TAGGTGGATACCXCTXATATATGATT +26,1,0,CCXATATTAAGACATATAATTGGAGG +27,2,0,GCXCCXAGGGTTGCAGTCAAATGTCCA diff --git a/lectures/10.hpc_and_parallel_compute/results/5mc_multiprocessing.csv b/lectures/10.hpc_and_parallel_compute/results/5mc_multiprocessing.csv new file mode 100644 index 0000000..cbe9981 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/results/5mc_multiprocessing.csv @@ -0,0 +1,11 @@ +raw_count,c_count,count_5mc,sequence +2,27,0,GCXCCXAGGGTTGCAGTCAAATGTCCA +2,26,0,CGGCCAATGAGGGXCGCXTAGGTCAT +2,26,0,TAGGTGGATACCXCTXATATATGATT +1,26,0,CCXATATTAAGACATATAATTGGAGG +1,26,0,TATTACACGCCCAAATAATTTGGCXA +3,28,0,TCAGCXGCXGGGAAGCGGGCGCXATACT +1,26,0,CGGATGATCATCXGGGATGATGTCTA +1,25,0,GCGCCXGGAAGACGAATCTTAATTA +3,26,0,TTAGGAACXTXXCAATATGTTTCGGT +1,26,0,ACTTCTATGTCTXTGGATTACAAACA diff --git a/lectures/10.hpc_and_parallel_compute/results/5mc_parallel.csv b/lectures/10.hpc_and_parallel_compute/results/5mc_parallel.csv new file mode 100644 index 0000000..5dc179b --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/results/5mc_parallel.csv @@ -0,0 +1,11 @@ +raw_count,c_count,count_5mc,sequence +26,2,0,CGGCCAATGAGGGXCGCXTAGGTCAT +28,3,0,TCAGCXGCXGGGAAGCGGGCGCXATACT +26,1,0,CCXATATTAAGACATATAATTGGAGG +26,1,0,CGGATGATCATCXGGGATGATGTCTA +25,1,0,GCGCCXGGAAGACGAATCTTAATTA +26,2,0,TAGGTGGATACCXCTXATATATGATT +26,1,0,TATTACACGCCCAAATAATTTGGCXA +26,1,0,ACTTCTATGTCTXTGGATTACAAACA +26,3,0,TTAGGAACXTXXCAATATGTTTCGGT +27,2,0,GCXCCXAGGGTTGCAGTCAAATGTCCA diff --git a/lectures/10.hpc_and_parallel_compute/results/5mc_serial.csv b/lectures/10.hpc_and_parallel_compute/results/5mc_serial.csv new file mode 100644 index 0000000..f47a484 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/results/5mc_serial.csv @@ -0,0 +1,11 @@ +raw_count,c_count,count_5mc,sequence +27,2,0,GCXCCXAGGGTTGCAGTCAAATGTCCA +26,2,0,CGGCCAATGAGGGXCGCXTAGGTCAT +26,2,0,TAGGTGGATACCXCTXATATATGATT +26,1,0,CCXATATTAAGACATATAATTGGAGG +26,1,0,TATTACACGCCCAAATAATTTGGCXA +28,3,0,TCAGCXGCXGGGAAGCGGGCGCXATACT +26,1,0,CGGATGATCATCXGGGATGATGTCTA +25,1,0,GCGCCXGGAAGACGAATCTTAATTA +26,3,0,TTAGGAACXTXXCAATATGTTTCGGT +26,1,0,ACTTCTATGTCTXTGGATTACAAACA diff --git a/lectures/10.hpc_and_parallel_compute/scripts/5mc_analysis.py b/lectures/10.hpc_and_parallel_compute/scripts/5mc_analysis.py new file mode 100644 index 0000000..190c28d --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/5mc_analysis.py @@ -0,0 +1,36 @@ +import argparse +import pathlib +import sys + +import pandas as pd + +sys.path.append("../utils/") +from sequence_analysis import count_5mc_sequences + + +def main(): + # set up parser for command line arguments + parser = argparse.ArgumentParser( + description="Analyze DNA sequences for CpG content" + ) + parser.add_argument("--sequence", help="A DNA sequence to analyze") + parser.add_argument("--output_file_name", help="The file to write the results to") + args = parser.parse_args() + sequence = args.sequence + output_file_name = args.output_file_name + c_count, raw_count, count_5mc, sequence = count_5mc_sequences(sequence) + # write the results to a file + output_file = pathlib.Path("../results", output_file_name) + # make the results directory if it doesn't exist + output_file.parent.mkdir(parents=True, exist_ok=True) + if not output_file.exists(): + with open(output_file, "w") as f: + f.write("raw_count,c_count,count_5mc,sequence\n") + f.write(f"{raw_count},{c_count},{count_5mc},{sequence}\n") + else: + with open(output_file, "a") as f: + f.write(f"{raw_count},{c_count},{count_5mc},{sequence}\n") + + +if __name__ == "__main__": + main() diff --git a/lectures/10.hpc_and_parallel_compute/scripts/gnu_parallel.sh b/lectures/10.hpc_and_parallel_compute/scripts/gnu_parallel.sh new file mode 100644 index 0000000..7e344cd --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/gnu_parallel.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# this script will run the 5mc_analysis.py script in parallel using GNU parallel + +conda activate parallel_and_hpc_compute_env + +sequences_path="../data/sequences_to_analyze.txt" +output_file_name="../results/5mc_parallel.csv" +# remove the output file if it already exists +if [ -f "$output_file_name" ]; then + rm "$output_file_name" +fi + +# read in the sequences +readarray -t sequences < $sequences_path + +# get the start time +start_time=$(date +%s) + +# use gnu parallel to run the 5mc_analysis.py script in parallel +parallel -j 10 python 5mc_analysis.py --sequence {} --output_file_name "$output_file_name" ::: "${sequences[@]}" + +# get the end time +end_time=$(date +%s) +echo "Parallel run time: $((end_time - start_time)) seconds" + diff --git a/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_run.sh b/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_run.sh new file mode 100644 index 0000000..b82ad66 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_run.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +conda activate parallel_and_hpc_compute_env + +# profile the serial run +sequences_path="../data/sequences_to_analyze.txt" +output_file_name="../results/5mc_multiprocessing.csv" +# remove the output file if it exists +if [ -f "$output_file_name" ]; then + rm $output_file_name +fi + +python multiprocessing_sequence_analysis.py + +conda deactivate diff --git a/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_sequence_analysis.py b/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_sequence_analysis.py new file mode 100644 index 0000000..5984b5a --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/multiprocessing_sequence_analysis.py @@ -0,0 +1,42 @@ +import multiprocessing +import pathlib +import sys +import time + +import pandas as pd + +sys.path.append("../utils/") +from sequence_analysis import count_5mc_sequences + +if __name__ == "__main__": + # set the path for the input file + input_file_path = pathlib.Path("../data/sequences_to_analyze.txt").resolve( + strict=True + ) + # import the data + data = pd.read_csv(input_file_path, sep="\t", header=None) + data.rename(columns={0: "sequence"}, inplace=True) + + core_count = multiprocessing.cpu_count() - 2 + print(f"Running on {core_count} cores") + # Create a pool of worker processes + pool = multiprocessing.Pool(processes=core_count) + # start time profiling + pool_start_time = time.time() + # Use the pool to map the analyze_sequences function to the sequences in the data + results = pool.map(count_5mc_sequences, data["sequence"]) + + # Close the pool and wait for the work to finish + pool.close() + pool.join() + # end time profiling + pool_end_time = time.time() + + # Convert the results to a DataFrame for easier analysis + results_df = pd.DataFrame( + results, columns=["raw_count", "c_count", "count_5mc", "sequence"] + ) + # write the results to a file + pathlib.Path("../results").mkdir(parents=True, exist_ok=True) + results_df.to_csv("../results/5mc_multiprocessing.csv", sep=",", index=False) + print(f"{pool_end_time - pool_start_time} seconds to analyze.") diff --git a/lectures/10.hpc_and_parallel_compute/scripts/plot_parallel_compute_analysis.py b/lectures/10.hpc_and_parallel_compute/scripts/plot_parallel_compute_analysis.py new file mode 100644 index 0000000..51361d1 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/plot_parallel_compute_analysis.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# coding: utf-8 + +# This notebook generates a hypothetical situation calculating parallel computing time for a given number of tasks and processors. +# The goal is to show how the time to complete a task decreases as the number of processors increases. + +# In[1]: + + +import pathlib + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import seaborn as sns + +# In[2]: + + +data_path = pathlib.Path("../data/parallel_compute_analysis.csv").resolve() +df = pd.read_csv(data_path) +df.head() + + +# In[3]: + + +df["time(s)"] = df["sequences"] / df["core_count"] * df["time_per_sequence(s)"] +# log 10 transform the data +df["sequences"] = df["sequences"].apply(np.log10) + +# convert to hours +df["time(h)"] = df["time(s)"] / 3600 +df["time(d)"] = df["time(h)"] / 24 + + +# In[4]: + + +df["core_count"].unique() +# make each core count a different color +colors = sns.color_palette("husl", len(df["core_count"].unique())) +color_dict = dict(zip(df["core_count"].unique(), colors)) + + +# In[5]: + + +# plot the results +sns.set(style="whitegrid") +plt.figure(figsize=(12, 6)) +# custom palette +custom_palette = color_dict + +plt.subplot(1, 2, 1) +sns.lineplot( + x="sequences", y="time(d)", hue="core_count", data=df, palette=custom_palette +) +plt.xlabel("Number of Sequences (log10)") +plt.ylabel("Time (Days)") +plt.title("Comparison of parallel computing methods") +plt.xlim(1, max(df["sequences"])) + +plt.subplot(1, 2, 2) +sns.lineplot( + x="sequences", y="time(h)", hue="core_count", data=df, palette=custom_palette +) +plt.xlabel("Number of Sequences (log10)") +plt.ylabel("Time (Hours)") +plt.title("Comparison of parallel computing methods") +plt.xlim(1, 4) +plt.ylim(0, 1) +plt.tight_layout() +plt.show() diff --git a/lectures/10.hpc_and_parallel_compute/scripts/serial_run.sh b/lectures/10.hpc_and_parallel_compute/scripts/serial_run.sh new file mode 100644 index 0000000..62f20cb --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/serial_run.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +conda activate parallel_and_hpc_compute_env + +# profile the serial run +sequences_path="../data/sequences_to_analyze.txt" +output_file_name="../results/5mc_serial.csv" +# remove the output file if it exists +if [ -f "$output_file_name" ]; then + rm $output_file_name +fi + +# read in the sequences +# if bash version is 4.0 or higher, use readarray +# uncomment line below and comment while loop +# readarray -t sequences < $sequences_path + +# if bash version is lower than 4.0, use while loop +sequences=() +while IFS= read -r line +do + sequences+=("$line") +done < $sequences_path + +echo "Number of sequences to analyze: ${#sequences[@]}" + +# start time profiling +start_time=$(date +%s) +for sequence in "${sequences[@]}" +do + echo sequence: $sequence + python 5mc_analysis.py --sequence "$sequence" --output_file_name "$output_file_name" +done + +end_time=$(date +%s) +echo "Serial run time: $((end_time - start_time)) seconds" + +conda deactivate diff --git a/lectures/10.hpc_and_parallel_compute/scripts/submit_jobs_HPC.sh b/lectures/10.hpc_and_parallel_compute/scripts/submit_jobs_HPC.sh new file mode 100644 index 0000000..a497764 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/scripts/submit_jobs_HPC.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +#SBATCH --nodes=1 +#SBATCH --ntasks=1 +#SBATCH --partition=amilan +#SBATCH --qos=normal +#SBATCH --account=amc-general +#SBATCH --time=00:00:30 +#SBATCH --output=lecture10_output_%j.out +#SBATCH --array=0-9 + +module load anaconda + +conda activate parallel_and_hpc_compute_env + +sequences_path="../data/sequences_to_analyze.txt" +output_file_name="../results/5mc_HPC.csv" +# read in the sequences +readarray -t sequences < $sequences_path + +# set the number of sequences to analyze +num_sequences=${#sequences[@]} +SLURM_ID=$SLURM_ARRAY_TASK_ID +# get start time +start_time=$(date +%s) +python 5mc_analysis.py --sequence "${sequences[$SLURM_ID]}" --output_file_name "$output_file_name" +end_time=$(date +%s) +echo "HPC parallel run time: $((end_time - start_time)) seconds" +conda deactivate + + diff --git a/lectures/10.hpc_and_parallel_compute/utils/sequence_analysis.py b/lectures/10.hpc_and_parallel_compute/utils/sequence_analysis.py new file mode 100644 index 0000000..cf7f286 --- /dev/null +++ b/lectures/10.hpc_and_parallel_compute/utils/sequence_analysis.py @@ -0,0 +1,28 @@ +def count_5mc_sequences(sequence: str) -> tuple: + """ + This function analyzes a sequence for 5mc content and returns the results. + + Parameters + ---------- + sequence : string + a string of DNA sequence + + Returns + ------- + c_count : int + the number of 5mc sites in the sequence + raw_count : int + the total number of C sites in the sequence + """ + + # cast the sequence to uppercase + sequence = sequence.upper() + raw_count = 0 + c_count = 0 + count_5mc = 0 + for sequence_element in enumerate(sequence): + if sequence_element[1] == "X": + c_count += 1 + raw_count += 1 + + return c_count, raw_count, count_5mc, sequence