diff --git a/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb b/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb
new file mode 100644
index 0000000..1d5b2e6
--- /dev/null
+++ b/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb
@@ -0,0 +1,4910 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "f7ded04b-10a3-4eee-b7a2-9e1f8528c239",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# ATAC-seq Module1: Preprocessing and Quality Control\n",
+ "\n",
+ " \n",
+ "\n",
+ "## Overview & Purpose\n",
+ "This short tutorial demonstrates the intial processing steps for ATAC-seq analysis. In this module we focus on generating quality reports of the fastq files, adapter trimming, mapping, and removal of PCR duplicates.\n",
+ "\n",
+ "In this tutorial we will process a randomly chosen published dataset. This is available from GEO: [GSE67382](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE67382)\n",
+ "Bao X, Rubin AJ, Qu K, Zhang J et al. A novel ATAC-seq approach reveals lineage-specific reinforcement of the open chromatin landscape via cooperation between BAF and p63. Genome Biol 2015 Dec 18;16:284. PMID: 26683334\n",
+ "\n",
+ "This dataset is paired-end 50 bp sequencing. We will analyze two samples representing NHEK cells with BAF depletion compared to a control. Note that to allow faster processing we have limited the reads to that of chromosome 4. \n",
+ " \n",
+ "### Required Files\n",
+ "In this stage of the module you will use the fastq files that have been prepared. In step1 we will copy these files over to your instance. You can also use this module on your own data or any published ATAC-seq dataset. \n",
+ "\n",
+ "
\n",
+ "STEP1: Setup Environment\n",
+ "
\n",
+ "\n",
+ "Initial items to configure your google cloud environment. In this step we will use conda to install the following packages:\n",
+ "\n",
+ "Quality Reporting:\n",
+ "[fastqc](https://anaconda.org/bioconda/fastqc), [multiqc](https://anaconda.org/bioconda/multiqc)\n",
+ "\n",
+ "Read Trimming: \n",
+ "[cutadapt](https://anaconda.org/bioconda/cutadapt), [trim-galore](https://anaconda.org/bioconda/trim-galore)\n",
+ "\n",
+ "Mapping:\n",
+ "[bowtie2](https://anaconda.org/bioconda/bowtie2)\n",
+ "\n",
+ "Deduplication:\n",
+ "[samtools](https://anaconda.org/bioconda/samtools), [picard](https://anaconda.org/bioconda/picard)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "f2074873-7df9-46e7-9922-f1b1bb26f7c4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Installed kernelspec ATACtraining in /home/jupyter/.local/share/jupyter/kernels/atactraining\n",
+ "Warning: 'bioconda' already in 'channels' list, moving to the top\n",
+ "Collecting package metadata (current_repodata.json): done\n",
+ "Solving environment: done\n",
+ "\n",
+ "# All requested packages already installed.\n",
+ "\n",
+ "Retrieving notices: ...working... done\n",
+ "Requirement already satisfied: jupyterquiz in /opt/conda/lib/python3.7/site-packages (2.0.1)\n"
+ ]
+ }
+ ],
+ "source": [
+ "!python -m ipykernel install --user --name ATACtraining\n",
+ "numthreads=!lscpu | grep '^CPU(s)'| awk '{print $2-1}'\n",
+ "numthreadsint = int(numthreads[0])\n",
+ "!conda config --prepend channels bioconda\n",
+ "#!python -m pip install --user --upgrade cutadapt \n",
+ "!conda install -y -c bioconda fastqc bowtie2 picard multiqc samtools trim-galore cutadapt\n",
+ "!pip install jupyterquiz\n",
+ "from jupyterquiz import display_quiz\n",
+ "from IPython.display import IFrame\n",
+ "from IPython.display import display\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "54f8e28a-543c-4eb9-8c6a-6107ce0613a8",
+ "metadata": {},
+ "source": [
+ "## Setup FileSystem\n",
+ "Now lets create some folders to stay organized and copy over our prepared fastq files. We're going to create a directory called \"Tutorial1\" which we'll use for this module. We'll then create subfolders for our InputFiles and for the files that we'll be creating during this module. We'll also copy over the fasta file for chromosome 4 as well as some bowtie2 index files (don't worry we'll teach you how to create these index files)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "8a730ba8-82e0-4ab2-a0ef-118a6910cc92",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/jupyter\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/adapterQuiz.json...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/ATACseqWorkflowLesson1.jpg...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/Fig1Published.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/PeaksExample.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/adapterinsert.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/alignmentQuiz.json... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/duplicateQuiz.json... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/mappingquality.json... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/images/fastqformat.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/CTL_R1.fastq.gz... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/CTL_R2.fastq.gz...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/Mutant_R1.fastq.gz... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/Mutant_R2.fastq.gz... \n",
+ "- [4/4 files][124.4 MiB/124.4 MiB] 100% Done \n",
+ "Operation completed over 4 objects/124.4 MiB. \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.1.bt2...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.2.bt2...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.4.bt2... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.fa...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.3.bt2... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.rev.2.bt2... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.rev.1.bt2... \n",
+ "/ [7/7 files][449.4 MiB/449.4 MiB] 100% Done \n",
+ "Operation completed over 7 objects/449.4 MiB. \n"
+ ]
+ }
+ ],
+ "source": [
+ "#These commands create our directory structure.\n",
+ "!cd $HOMEDIR\n",
+ "!mkdir -p Tutorial1\n",
+ "!mkdir -p Tutorial1/InputFiles\n",
+ "!mkdir -p Tutorial1/QC\n",
+ "!mkdir -p Tutorial1/Trimmed\n",
+ "!mkdir -p Tutorial1/Mapped\n",
+ "!mkdir -p Tutorial1/RefGenome\n",
+ "!mkdir -p Tutorial1/LessonImages\n",
+ "!cd ./Tutorial1\n",
+ "!echo $PWD\n",
+ "\n",
+ "#These commands help identify the google cloud storage bucket where the example files are held.\n",
+ "project_id = \"nosi-unmc-seq\"\n",
+ "original_bucket = \"gs://unmc_atac_data_examples/Tutorial1\"\n",
+ "!gsutil -m cp $original_bucket/images/* Tutorial1/LessonImages\n",
+ "#This command copies our example files to the Tutorial1/Inputfiles folder that we created above.\n",
+ "! gsutil -m cp $original_bucket/InputFiles/*fastq.gz Tutorial1/InputFiles\n",
+ "! gsutil -m cp $original_bucket/InputFiles/hg38* Tutorial1/RefGenome\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "51fc4b08-4f02-4f49-9a8b-48b02a122455",
+ "metadata": {},
+ "source": [
+ "\n",
+ "### OK\n",
+ "Let's make sure that the files copied correctly. You should see 4 files after running the following command:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "bce79afb-044f-45da-b7e4-e9a5f93dd1c2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CTL_R1.fastq.gz Mutant_R1.fastq.gz Untitled.ipynb\n",
+ "CTL_R2.fastq.gz Mutant_R2.fastq.gz\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls Tutorial1/InputFiles\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf7aea89-8610-4430-a802-6f7d387deb8b",
+ "metadata": {},
+ "source": [
+ "\n",
+ "STEP2: QC\n",
+ "
\n",
+ "\n",
+ "Sequences are typically provided as files in fastq format. This format includes 4 lines per sequence.\n",
+ "\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a39c3c75-9011-4a9e-a60e-bb8c503405bb",
+ "metadata": {},
+ "source": [
+ "Let's take a look at the sequence quality of the raw reads usinq fastqc:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "f78e9802-ddd1-4abb-9bbf-3cc10e5d5d90",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Sample \n",
+ " Filename \n",
+ " File type \n",
+ " Encoding \n",
+ " Total Sequences \n",
+ " Sequences flagged as poor quality \n",
+ " Sequence length \n",
+ " %GC \n",
+ " total_deduplicated_percentage \n",
+ " avg_sequence_length \n",
+ " basic_statistics \n",
+ " per_base_sequence_quality \n",
+ " per_sequence_quality_scores \n",
+ " per_base_sequence_content \n",
+ " per_sequence_gc_content \n",
+ " per_base_n_content \n",
+ " sequence_length_distribution \n",
+ " sequence_duplication_levels \n",
+ " overrepresented_sequences \n",
+ " adapter_content \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " CTL_R1 \n",
+ " CTL_R1.fastq.gz \n",
+ " Conventional base calls \n",
+ " Sanger / Illumina 1.9 \n",
+ " 721311.0 \n",
+ " 0.0 \n",
+ " 50.0 \n",
+ " 43.0 \n",
+ " 34.116497 \n",
+ " 50.0 \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " warn \n",
+ " pass \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " CTL_R2 \n",
+ " CTL_R2.fastq.gz \n",
+ " Conventional base calls \n",
+ " Sanger / Illumina 1.9 \n",
+ " 721311.0 \n",
+ " 0.0 \n",
+ " 50.0 \n",
+ " 42.0 \n",
+ " 33.459856 \n",
+ " 50.0 \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " warn \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " fail \n",
+ " pass \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Mutant_R1 \n",
+ " Mutant_R1.fastq.gz \n",
+ " Conventional base calls \n",
+ " Sanger / Illumina 1.9 \n",
+ " 848511.0 \n",
+ " 0.0 \n",
+ " 50.0 \n",
+ " 42.0 \n",
+ " 41.516085 \n",
+ " 50.0 \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " warn \n",
+ " pass \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Mutant_R2 \n",
+ " Mutant_R2.fastq.gz \n",
+ " Conventional base calls \n",
+ " Sanger / Illumina 1.9 \n",
+ " 848511.0 \n",
+ " 0.0 \n",
+ " 50.0 \n",
+ " 42.0 \n",
+ " 37.731878 \n",
+ " 50.0 \n",
+ " pass \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " warn \n",
+ " pass \n",
+ " pass \n",
+ " fail \n",
+ " fail \n",
+ " pass \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Filename File type \\\n",
+ "0 CTL_R1 CTL_R1.fastq.gz Conventional base calls \n",
+ "1 CTL_R2 CTL_R2.fastq.gz Conventional base calls \n",
+ "2 Mutant_R1 Mutant_R1.fastq.gz Conventional base calls \n",
+ "3 Mutant_R2 Mutant_R2.fastq.gz Conventional base calls \n",
+ "\n",
+ " Encoding Total Sequences Sequences flagged as poor quality \\\n",
+ "0 Sanger / Illumina 1.9 721311.0 0.0 \n",
+ "1 Sanger / Illumina 1.9 721311.0 0.0 \n",
+ "2 Sanger / Illumina 1.9 848511.0 0.0 \n",
+ "3 Sanger / Illumina 1.9 848511.0 0.0 \n",
+ "\n",
+ " Sequence length %GC total_deduplicated_percentage avg_sequence_length \\\n",
+ "0 50.0 43.0 34.116497 50.0 \n",
+ "1 50.0 42.0 33.459856 50.0 \n",
+ "2 50.0 42.0 41.516085 50.0 \n",
+ "3 50.0 42.0 37.731878 50.0 \n",
+ "\n",
+ " basic_statistics per_base_sequence_quality per_sequence_quality_scores \\\n",
+ "0 pass pass pass \n",
+ "1 pass pass pass \n",
+ "2 pass pass pass \n",
+ "3 pass pass pass \n",
+ "\n",
+ " per_base_sequence_content per_sequence_gc_content per_base_n_content \\\n",
+ "0 fail pass pass \n",
+ "1 fail warn pass \n",
+ "2 fail pass pass \n",
+ "3 fail warn pass \n",
+ "\n",
+ " sequence_length_distribution sequence_duplication_levels \\\n",
+ "0 pass fail \n",
+ "1 pass fail \n",
+ "2 pass fail \n",
+ "3 pass fail \n",
+ "\n",
+ " overrepresented_sequences adapter_content \n",
+ "0 warn pass \n",
+ "1 fail pass \n",
+ "2 warn pass \n",
+ "3 fail pass "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#This command runs fastqc on each fastq.gz file inside our InputFiles directory and stores the ouput reports in our QC directory.\n",
+ "!fastqc -t $numthreadsint -q -o Tutorial1/QC Tutorial1/InputFiles/*fastq.gz\n",
+ "\n",
+ "#We then use multiqc to summarize the report.\n",
+ "!multiqc -o Tutorial1/QC -f Tutorial1/QC 2> Tutorial1/QC/multiqc_log.txt\n",
+ "\n",
+ "#We'll load this into a pandas table to work in this context, but fastqc also produces an html report that you can browse.\n",
+ "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_fastqc.txt\", sep='\\t')\n",
+ "display(dframe)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "744e8b64-947b-43f4-9bb0-51bf42972bc3",
+ "metadata": {},
+ "source": [
+ "Alternatively, we can view the fastqc html files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "f2df8f13-211b-4584-8600-c5ab1edf8138",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#We can display the resulting fastqc results.\n",
+ "IFrame(src='Tutorial1/QC/CTL_R1_fastqc.html', width=2000, height=1500)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "579a6da5-11b8-45c9-a9d2-3f63efb0fed4",
+ "metadata": {},
+ "source": [
+ "Look at the the \"Per base seqeuence content\" in the above FastQC report. We'll trim the reads to remove some of this effect. For now, think about possible explanations for this result.\n",
+ "\n",
+ "Also look at the \"Sequence Duplication Levels\". Sometimes duplicates appear due to the PCR amplification step of library preparation. We'll remove duplicates in a later step. \n",
+ "\n",
+ "Lastly, look at the report at the \"Overrepresented sequences\". What are some possible explanations for this result?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b228a0d9-0e88-490f-a53d-58ce20d40b64",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Trimming\n",
+ "
\n",
+ "Next let's trim our sequences.\n",
+ "\n",
+ "Why is it particularly important to trim the reads in ATAC-seq? To understand let's review how ATAC-seq works. Tn5 inserts adapter sequences into accessible regions. \n",
+ "\n",
+ " \n",
+ "\n",
+ "Image source: [Grandi et al., Nature Protocols 2022](https://www.nature.com/articles/s41596-022-00692-9)\n",
+ "\n",
+ "\n",
+ "What would happen if the distance between inserted sites is short? For example our sequencing lenghth in the example dataset is 50 bp, so what would the sequence look like if our fragment (insert size) is only 30 bp long? "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "6ca0ae04-b409-4c5d-b318-0887edc0f3c8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial1/LessonImages/adapterQuiz.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7e910ae5-83af-476d-85a6-942242dece8a",
+ "metadata": {},
+ "source": [
+ "Let's use trim galore to prepare the sequences before mapping."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "7d0a8fb1-c8bc-4a77-b7d0-d545cb2d7aab",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#This will trim off N's as well as nextera adapters present in ATAC-seq library preparation, placing the output in our Trimmed folder.\n",
+ "!trim_galore -j $numthreadsint -o Tutorial1/Trimmed --paired --nextera --trim-n --fastqc --suppress_warn Tutorial1/InputFiles/CTL_R1.fastq.gz Tutorial1/InputFiles/CTL_R2.fastq.gz > Tutorial1/Trimmed/trimgalore_errors.txt 2> Tutorial1/Trimmed/trimgalore_log2.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "adcdef0f-1461-4282-9659-b86c71ea3f77",
+ "metadata": {},
+ "source": [
+ "Let's do this for the other sample as well."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "b6275508-1f8c-42c9-b36e-3c627965478a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Trim the other sample\n",
+ "!trim_galore -j $numthreadsint -o Tutorial1/Trimmed --paired --nextera --trim-n --fastqc --suppress_warn Tutorial1/InputFiles/Mutant_R1.fastq.gz Tutorial1/InputFiles/Mutant_R2.fastq.gz > Tutorial1/Trimmed/trimgalore_errors.txt 2> Tutorial1/Trimmed/trimgalore_log2.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4e589ef3-ad38-4b18-86fa-e8afbc2b1001",
+ "metadata": {},
+ "source": [
+ "Now let's summarize the trimming results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "cedc5d1f-21f7-4bf7-8c8d-0f4209288b8e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Sample \n",
+ " Cutadapt_mqc-generalstats-cutadapt-percent_trimmed \n",
+ " FastQC_mqc-generalstats-fastqc-percent_duplicates \n",
+ " FastQC_mqc-generalstats-fastqc-percent_gc \n",
+ " FastQC_mqc-generalstats-fastqc-avg_sequence_length \n",
+ " FastQC_mqc-generalstats-fastqc-percent_fails \n",
+ " FastQC_mqc-generalstats-fastqc-total_sequences \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " CTL_R1 \n",
+ " 1.495896 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " CTL_R1_val_1 \n",
+ " NaN \n",
+ " 65.541052 \n",
+ " 43.0 \n",
+ " 49.263820 \n",
+ " 20.0 \n",
+ " 717388.0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " CTL_R2 \n",
+ " 2.049704 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " CTL_R2_val_2 \n",
+ " NaN \n",
+ " 66.321891 \n",
+ " 42.0 \n",
+ " 49.200137 \n",
+ " 30.0 \n",
+ " 717388.0 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Mutant_R1 \n",
+ " 1.641975 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Mutant_R1_val_1 \n",
+ " NaN \n",
+ " 58.276934 \n",
+ " 42.0 \n",
+ " 49.228323 \n",
+ " 20.0 \n",
+ " 841811.0 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " Mutant_R2 \n",
+ " 2.211361 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " Mutant_R2_val_2 \n",
+ " NaN \n",
+ " 62.044659 \n",
+ " 41.0 \n",
+ " 49.193254 \n",
+ " 30.0 \n",
+ " 841811.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Cutadapt_mqc-generalstats-cutadapt-percent_trimmed \\\n",
+ "0 CTL_R1 1.495896 \n",
+ "1 CTL_R1_val_1 NaN \n",
+ "2 CTL_R2 2.049704 \n",
+ "3 CTL_R2_val_2 NaN \n",
+ "4 Mutant_R1 1.641975 \n",
+ "5 Mutant_R1_val_1 NaN \n",
+ "6 Mutant_R2 2.211361 \n",
+ "7 Mutant_R2_val_2 NaN \n",
+ "\n",
+ " FastQC_mqc-generalstats-fastqc-percent_duplicates \\\n",
+ "0 NaN \n",
+ "1 65.541052 \n",
+ "2 NaN \n",
+ "3 66.321891 \n",
+ "4 NaN \n",
+ "5 58.276934 \n",
+ "6 NaN \n",
+ "7 62.044659 \n",
+ "\n",
+ " FastQC_mqc-generalstats-fastqc-percent_gc \\\n",
+ "0 NaN \n",
+ "1 43.0 \n",
+ "2 NaN \n",
+ "3 42.0 \n",
+ "4 NaN \n",
+ "5 42.0 \n",
+ "6 NaN \n",
+ "7 41.0 \n",
+ "\n",
+ " FastQC_mqc-generalstats-fastqc-avg_sequence_length \\\n",
+ "0 NaN \n",
+ "1 49.263820 \n",
+ "2 NaN \n",
+ "3 49.200137 \n",
+ "4 NaN \n",
+ "5 49.228323 \n",
+ "6 NaN \n",
+ "7 49.193254 \n",
+ "\n",
+ " FastQC_mqc-generalstats-fastqc-percent_fails \\\n",
+ "0 NaN \n",
+ "1 20.0 \n",
+ "2 NaN \n",
+ "3 30.0 \n",
+ "4 NaN \n",
+ "5 20.0 \n",
+ "6 NaN \n",
+ "7 30.0 \n",
+ "\n",
+ " FastQC_mqc-generalstats-fastqc-total_sequences \n",
+ "0 NaN \n",
+ "1 717388.0 \n",
+ "2 NaN \n",
+ "3 717388.0 \n",
+ "4 NaN \n",
+ "5 841811.0 \n",
+ "6 NaN \n",
+ "7 841811.0 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "!multiqc -o Tutorial1/QC -f Tutorial1/Trimmed 2> Tutorial1/QC/multiqc_log.txt\n",
+ "\n",
+ "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_general_stats.txt\", sep='\\t')\n",
+ "display(dframe)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9cc8fc5-fa07-4345-8f87-caeb5fccd239",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Step3: Mapping\n",
+ "
\n",
+ "Our fastq files include sequences and quality scores for each base, but we want to figure out which genomic location these sequences came from. To do this we will map each sequence to a reference genome using bowtie2. \n",
+ " \n",
+ "\n",
+ "Mapping reads requires a reference genome. Due to time and memory considerations, in this tutorial we prepared that file for you and will only map to chr4. However, in a full analysis, we would map to the entire genome. To do so you would need a fasta file corresponding to the reference genome (e.g. [hg38.fa](https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/)) from which you'd create an index of the genome using bowtie2-build. This can be done with the command: \n",
+ "\n",
+ "bowtie2-build reference_genome_file.fa outputprefix.\n",
+ "\n",
+ "As mentioned, we've gone ahead and created the index for you, and, earlier, you copied them into the RefGenome directory. These index files end in the bt2 extension. \n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "1c5d8404-a5f5-49e7-9625-7deacdbcefa1",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Tutorial1/RefGenome/hg38chr4.1.bt2 Tutorial1/RefGenome/hg38chr4.4.bt2\n",
+ "Tutorial1/RefGenome/hg38chr4.2.bt2 Tutorial1/RefGenome/hg38chr4.rev.1.bt2\n",
+ "Tutorial1/RefGenome/hg38chr4.3.bt2 Tutorial1/RefGenome/hg38chr4.rev.2.bt2\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls Tutorial1/RefGenome/*bt2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "afa82cbc-a69d-430f-ac83-e94ca498cdf3",
+ "metadata": {},
+ "source": [
+ "These index files were created from our fasta file:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "c4d3279a-de20-4c18-9c0f-39c884b3d0c3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Tutorial1/RefGenome/hg38chr4.fa\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls Tutorial1/RefGenome/*fa"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1d77a351-d805-441b-b524-4f6d1d3358d9",
+ "metadata": {},
+ "source": [
+ "Notice that the single fasta file created mutiple index files. When we align we'll specify the prefix of the index files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "1c56662b-6cf5-4319-8b8c-f404d928ea67",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "717388 reads; of these:\n",
+ " 717388 (100.00%) were paired; of these:\n",
+ " 245685 (34.25%) aligned concordantly 0 times\n",
+ " 395268 (55.10%) aligned concordantly exactly 1 time\n",
+ " 76435 (10.65%) aligned concordantly >1 times\n",
+ " ----\n",
+ " 245685 pairs aligned concordantly 0 times; of these:\n",
+ " 32486 (13.22%) aligned discordantly 1 time\n",
+ " ----\n",
+ " 213199 pairs aligned 0 times concordantly or discordantly; of these:\n",
+ " 426398 mates make up the pairs; of these:\n",
+ " 391996 (91.93%) aligned 0 times\n",
+ " 19915 (4.67%) aligned exactly 1 time\n",
+ " 14487 (3.40%) aligned >1 times\n",
+ "72.68% overall alignment rate\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Notes: The -x option specifies the prefix of the index. -1 specifies our left-end trimmed reads file. -2 specifies our right-end trimmed reads file. -S specifies our output file in sam format.\n",
+ "!bowtie2 -p $numthreadsint -x Tutorial1/RefGenome/hg38chr4 -1 Tutorial1/Trimmed/CTL_R1_val_1.fq.gz -2 Tutorial1/Trimmed/CTL_R2_val_2.fq.gz -S Tutorial1/Mapped/CTL.sam\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "612a3af0-d5b7-4c65-8b6d-be91d30252aa",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "841811 reads; of these:\n",
+ " 841811 (100.00%) were paired; of these:\n",
+ " 198542 (23.59%) aligned concordantly 0 times\n",
+ " 524810 (62.34%) aligned concordantly exactly 1 time\n",
+ " 118459 (14.07%) aligned concordantly >1 times\n",
+ " ----\n",
+ " 198542 pairs aligned concordantly 0 times; of these:\n",
+ " 37182 (18.73%) aligned discordantly 1 time\n",
+ " ----\n",
+ " 161360 pairs aligned 0 times concordantly or discordantly; of these:\n",
+ " 322720 mates make up the pairs; of these:\n",
+ " 284663 (88.21%) aligned 0 times\n",
+ " 17772 (5.51%) aligned exactly 1 time\n",
+ " 20285 (6.29%) aligned >1 times\n",
+ "83.09% overall alignment rate\n"
+ ]
+ }
+ ],
+ "source": [
+ "##Let's do the same thing for our other sample.\n",
+ "!bowtie2 -p $numthreadsint -x Tutorial1/RefGenome/hg38chr4 -1 Tutorial1/Trimmed/Mutant_R1_val_1.fq.gz -2 Tutorial1/Trimmed/Mutant_R2_val_2.fq.gz -S Tutorial1/Mapped/Mutant.sam"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fc919a58-4757-482d-b5c3-9a52716feecb",
+ "metadata": {},
+ "source": [
+ "### Answer the following question only if you are using the example dataset we provided. This question is simply a check to ensure everything was processed correctly."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "990dbd77-7dbd-461c-bf40-b29621089b76",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial1/LessonImages/alignmentQuiz.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d96b5ade-acd6-4ee7-9352-f654cd78ad85",
+ "metadata": {},
+ "source": [
+ "Bowtie2 output a file in [sam format](https://samtools.github.io/hts-specs/SAMv1.pdf) which contains the original sequence, quality scores, and the genomic coordinates matching each read. \n",
+ "\n",
+ "In the next commands we'll convert the file to the more compressed [bam format](https://genome.ucsc.edu/goldenPath/help/bam.html) and sort the reads by chromosomal coordinates."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "6dcaff27-b46c-4d50-bdf6-301f914e6671",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#This will convert to bam by using samtools view with the -b option. The h and S option tells samtools that the file has a header and is in sam format. We will pipe this to samtools sort. Pay attention to the \"-\" at the end of the sort command which tells samtools to use stdin.\n",
+ "!samtools view -q 10 -bhS Tutorial1/Mapped/CTL.sam | samtools sort -o Tutorial1/Mapped/CTL.bam - \n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "id": "e82b8ef3-3b40-4283-8955-326120668070",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Let's do the same thing for our Mutant sample.\n",
+ "!samtools view -q 10 -bhS Tutorial1/Mapped/Mutant.sam | samtools sort -o Tutorial1/Mapped/Mutant.bam - \n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "52f5444e-b437-40b8-b222-6304baf38343",
+ "metadata": {},
+ "source": [
+ "You may have noticed the parameters -bhS and -q 10 in the above commands. Briefly, -bhS describes aspects of the file to samtools, such that you want to output a bam file (the b option), that it has a header (the h option), and that it is currently in sam format (the S option). We also specified -q 10 which removes reads with a mapping score <= 10. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "id": "c7eeca9f-d6d0-43f5-b4f4-7a2cfe44ce5e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial1/LessonImages/mappingquality.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "947d41c9-3436-47f8-854d-bcf1625919b3",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Step4: Removal of Duplicates\n",
+ "
\n",
+ "It's important to remove duplicates from our reads because part of the ATAC-seq method includes a PCR step for library amplification. This can create biases in the data resulting from PCR duplicates. To understand how PCR duplicates can affect the analysis, let's jump ahead a bit. Accessibile sites are represented by ATAC-seq \"peaks\" of signal.\n",
+ "\n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "id": "38362bd5-120e-4cfe-943c-e1d7c55a0e82",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial1/LessonImages/duplicateQuiz.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e6002033-c000-4b2b-9e23-de065180f2f6",
+ "metadata": {},
+ "source": [
+ "Okay, let's remove these duplicates using Picard."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "783c64d4-e9dc-4a15-bf85-7b1a341748b8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#this will take the sorted bam file and remove duplicates, saving a new bam file and a summary in a text file.\n",
+ "!picard MarkDuplicates --REMOVE_DUPLICATES TRUE -I Tutorial1/Mapped/CTL.bam -O Tutorial1/Mapped/CTL_dedup.bam --METRICS_FILE Tutorial1/Mapped/CTL_dedup_metrics.txt --QUIET 2> Tutorial1/Mapped/PicardLog.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "id": "0631658b-bd97-4d1c-9e56-2152c6910440",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#We also should do this for the other sample.\n",
+ "!picard MarkDuplicates --REMOVE_DUPLICATES TRUE -I Tutorial1/Mapped/Mutant.bam -O Tutorial1/Mapped/Mutant_dedup.bam --METRICS_FILE Tutorial1/Mapped/Mutant_dedup_metrics.txt --QUIET 2> Tutorial1/Mapped/PicardLog2.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "2308d570-94ca-4116-9492-493a6a87db79",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Sample \n",
+ " Picard_mqc-generalstats-picard-PERCENT_DUPLICATION \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " CTL \n",
+ " 0.569867 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Mutant \n",
+ " 0.591115 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Picard_mqc-generalstats-picard-PERCENT_DUPLICATION\n",
+ "0 CTL 0.569867 \n",
+ "1 Mutant 0.591115 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#We can use multiqc to summarize the metrics\n",
+ "!multiqc -o Tutorial1/QC -f Tutorial1/Mapped 2> Tutorial1/Mapped/multiqc_log.txt\n",
+ "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_general_stats.txt\", sep='\\t')\n",
+ "display(dframe)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "12439dc4-b9ad-49fa-9ccb-4383a272bcaf",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Great job! \n",
+ "
\n",
+ "We have completed the preprocessing steps and are ready to move on to some downstream analysis. Take a break here or move on to the next tutorial. \n"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m94",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m94"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb b/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb
new file mode 100644
index 0000000..d7b685c
--- /dev/null
+++ b/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb
@@ -0,0 +1,4476 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "f7ded04b-10a3-4eee-b7a2-9e1f8528c239",
+ "metadata": {},
+ "source": [
+ "# ATAC-seq Module2: Visualization and Peak Identification\n",
+ "\n",
+ " \n",
+ "\n",
+ "## Overview & Purpose\n",
+ "In the previous section of this module we performed preprocessing quality control, mapping, and deduplication. In this section we will focus on visualization of the signal, create average plots of signal around transcription start sites (TSSs), and identification of peak signal. \n",
+ "\n",
+ "### Required Files\n",
+ "In this stage of the module you will use the deduplicated bam files that we prepared in the previous section. Don't worry if you are just jumping in now, we have examples of these files saved and will include a step that copies them for your use. You can also use this module on your own data or any published ATAC-seq dataset, but you should complete the mappping and deduplication steps first.\n",
+ "\n",
+ "\n",
+ "STEP1: Setup Environment\n",
+ "
\n",
+ "\n",
+ "Initial items to configure your google cloud environment. In this step we will use conda to install the following packages:\n",
+ "\n",
+ "Visualization:\n",
+ "[samtools](https://anaconda.org/bioconda/samtools), [deeptools](https://anaconda.org/bioconda/deeptools), [IGV](https://anaconda.org/bioconda/igv)\n",
+ "\n",
+ "Peak Identification:\n",
+ "[macs2](https://anaconda.org/bioconda/macs2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "f2074873-7df9-46e7-9922-f1b1bb26f7c4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Installed kernelspec ATACtraining in /home/jupyter/.local/share/jupyter/kernels/atactraining\n",
+ "Warning: 'bioconda' already in 'channels' list, moving to the top\n",
+ "Collecting package metadata (current_repodata.json): done\n",
+ "Solving environment: done\n",
+ "\n",
+ "# All requested packages already installed.\n",
+ "\n",
+ "Retrieving notices: ...working... done\n",
+ "Requirement already satisfied: numpy in ./.local/lib/python3.7/site-packages (1.21.6)\n",
+ "Requirement already satisfied: numpydoc in ./.local/lib/python3.7/site-packages (1.4.0)\n",
+ "Requirement already satisfied: Jinja2>=2.10 in /opt/conda/lib/python3.7/site-packages (from numpydoc) (3.1.2)\n",
+ "Requirement already satisfied: sphinx>=3.0 in ./.local/lib/python3.7/site-packages (from numpydoc) (5.1.1)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.7/site-packages (from Jinja2>=2.10->numpydoc) (2.1.1)\n",
+ "Requirement already satisfied: sphinxcontrib-serializinghtml>=1.1.5 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.1.5)\n",
+ "Requirement already satisfied: requests>=2.5.0 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.28.1)\n",
+ "Requirement already satisfied: sphinxcontrib-qthelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.3)\n",
+ "Requirement already satisfied: sphinxcontrib-devhelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.2)\n",
+ "Requirement already satisfied: alabaster<0.8,>=0.7 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (0.7.12)\n",
+ "Requirement already satisfied: imagesize in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.4.1)\n",
+ "Requirement already satisfied: packaging in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (21.3)\n",
+ "Requirement already satisfied: sphinxcontrib-applehelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.2)\n",
+ "Requirement already satisfied: babel>=1.3 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.10.3)\n",
+ "Requirement already satisfied: sphinxcontrib-jsmath in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.1)\n",
+ "Requirement already satisfied: sphinxcontrib-htmlhelp>=2.0.0 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.0.0)\n",
+ "Requirement already satisfied: snowballstemmer>=1.1 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.2.0)\n",
+ "Requirement already satisfied: Pygments>=2.0 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.12.0)\n",
+ "Requirement already satisfied: importlib-metadata>=4.4 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (4.11.4)\n",
+ "Requirement already satisfied: docutils<0.20,>=0.14 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (0.19)\n",
+ "Requirement already satisfied: pytz>=2015.7 in /opt/conda/lib/python3.7/site-packages (from babel>=1.3->sphinx>=3.0->numpydoc) (2022.1)\n",
+ "Requirement already satisfied: typing-extensions>=3.6.4 in /opt/conda/lib/python3.7/site-packages (from importlib-metadata>=4.4->sphinx>=3.0->numpydoc) (4.2.0)\n",
+ "Requirement already satisfied: zipp>=0.5 in /opt/conda/lib/python3.7/site-packages (from importlib-metadata>=4.4->sphinx>=3.0->numpydoc) (3.8.0)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (3.3)\n",
+ "Requirement already satisfied: charset-normalizer<3,>=2 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (2.1.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (2022.6.15)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (1.26.9)\n",
+ "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging->sphinx>=3.0->numpydoc) (3.0.9)\n",
+ "Requirement already satisfied: jupyterquiz in /opt/conda/lib/python3.7/site-packages (2.0.1)\n",
+ "Requirement already satisfied: igv-notebook in /opt/conda/lib/python3.7/site-packages (0.3.1)\n"
+ ]
+ }
+ ],
+ "source": [
+ "!python -m ipykernel install --user --name ATACtraining\n",
+ "numthreads=!lscpu | grep '^CPU(s)'| awk '{print $2-1}'\n",
+ "numthreadsint = int(numthreads[0])\n",
+ "!conda config --prepend channels bioconda\n",
+ "#!python -m pip install --user --upgrade pdf2image\n",
+ "#from pdf2image import convert_from_path, convert_from_bytes\n",
+ "!conda install -y -c bioconda samtools deeptools igv macs2\n",
+ "#!python -m pip install --user --upgrade macs3\n",
+ "#!conda install -y -c maximinio macs3 \n",
+ "!python -m pip install --user --upgrade numpy numpydoc\n",
+ "!pip install jupyterquiz\n",
+ "!pip install --user igv-notebook\n",
+ "import igv_notebook\n",
+ "from jupyterquiz import display_quiz\n",
+ "from IPython.display import IFrame\n",
+ "from IPython.display import display\n",
+ "from IPython.display import Image\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "54f8e28a-543c-4eb9-8c6a-6107ce0613a8",
+ "metadata": {},
+ "source": [
+ "## Setup FileSystem\n",
+ "Now lets create some folders to stay organized and copy over our prepared fastq files. We're going to create a directory called \"Tutorial1\" which we'll use for this module. We'll then create subfolders for our InputFiles and for the files that we'll be creating during this module. We'll also copy over the fasta file for chromosome 4 as well as some bowtie2 index files (don't worry we'll teach you how to create these index files)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "8a730ba8-82e0-4ab2-a0ef-118a6910cc92",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/jupyter\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/Peak.jpg...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/ATACseqWorkflowLesson2.jpg...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/BPMnorm.json... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/InsertSizeQuiz.json... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/adapterinsert9bp.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/igv.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/samformat.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/images/sizeProfile.jpg... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/Annotations/hg38_genes_chr4.bed...\n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/InputFiles/Mutant_dedup.bam... \n",
+ "Copying gs://unmc_atac_data_examples/Tutorial2/InputFiles/CTL_dedup.bam... \n",
+ "- [2/2 files][ 42.3 MiB/ 42.3 MiB] 100% Done \n",
+ "Operation completed over 2 objects/42.3 MiB. \n"
+ ]
+ }
+ ],
+ "source": [
+ "#These commands create our directory structure.\n",
+ "!cd $HOMEDIR\n",
+ "!mkdir -p Tutorial2\n",
+ "!mkdir -p Tutorial2/InputFiles\n",
+ "!mkdir -p Tutorial2/GenomeAnnotations\n",
+ "!mkdir -p Tutorial2/BigWigFiles\n",
+ "!mkdir -p Tutorial2/Peaks\n",
+ "!mkdir -p Tutorial2/LessonImages\n",
+ "!mkdir -p Tutorial2/Plots\n",
+ "!cd ./Tutorial2\n",
+ "!echo $PWD\n",
+ "\n",
+ "#These commands help identify the google cloud storage bucket where the example files are held.\n",
+ "project_id = \"nosi-unmc-seq\"\n",
+ "original_bucket = \"gs://unmc_atac_data_examples/Tutorial2\"\n",
+ "!gsutil -m cp $original_bucket/images/* Tutorial2/LessonImages\n",
+ "!gsutil -m cp $original_bucket/Annotations/* Tutorial2/GenomeAnnotations\n",
+ "#This command copies our example files to the Tutorial1/Inputfiles folder that we created above.\n",
+ "! gsutil -m cp $original_bucket/InputFiles/*bam Tutorial2/InputFiles\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "51fc4b08-4f02-4f49-9a8b-48b02a122455",
+ "metadata": {},
+ "source": [
+ "\n",
+ "### OK\n",
+ "Let's make sure that the files copied correctly. You should see 2 .bam files after running the following command:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "bce79afb-044f-45da-b7e4-e9a5f93dd1c2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CTL_Nucleosomal.bam CTL_shift.bam\t Mutant_dedup.bam.bai\n",
+ "CTL_THSS.bam\t Mutant_Nucleosomal.bam Mutant_shift.bam\n",
+ "CTL_dedup.bam\t Mutant_THSS.bam\n",
+ "CTL_dedup.bam.bai Mutant_dedup.bam\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls Tutorial2/InputFiles\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf7aea89-8610-4430-a802-6f7d387deb8b",
+ "metadata": {},
+ "source": [
+ "\n",
+ "STEP2: Visualization\n",
+ "
\n",
+ "Files in sam/bam format contain a lot of information including the original sequence of the reads, quality scores, and their corresponding chromosomal coordinates.\n",
+ "\n",
+ " \n",
+ "\n",
+ "### Please view this [site](https://www.samformat.info/sam-format-flag) for a more complete description of sam format and to see what the various sam flag values mean.\n",
+ "\n",
+ "Let's view the first few lines of one of our bam files:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "a51f1ba8-3bf0-4715-bb97-4a029352a3cd",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "SRR1944627.37127681\t99\tchr4\t39845\t31\t50M\t=\t39881\t86\tATCTTTGTGGCATTCTCTGTATTTCCTGAATTTGAATGTTGGCCTGCCTT\tCCCFFFFFHHHHHJJJJJJJJJJJJJJJJJJIJIIIJJIJJJJJJJJJJJ\tMD:Z:50\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:0\tYT:Z:CP\n",
+ "SRR1944627.37127681\t147\tchr4\t39881\t31\t50M\t=\t39845\t-86\tTGTTGGCCTGCCTTGCTAGGTTGGGAAAGTTCTCCTGGATAATATCCTGA\tHEJJJIJJJJJJJJHJJJJJJIJJJJJJIJJIJJJJJHHHHHFFFFFCCC\tMD:Z:50\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:0\tYT:Z:CP\n",
+ "SRR1944627.50776065\t99\tchr4\t98978\t11\t49M\t=\t99304\t376\tGAGTCTCACTCTGTCACCCAGGCTGGAGTGCAGTGGCACGATCTCGGCT\t@C@FFFFFHHGHGHIIJJJJIGIBHEIICFCHGEHJGIJIHCHIIJGII\tMD:Z:49\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:-12\tYT:Z:CP\n",
+ "samtools view: writing to standard output failed: Broken pipe\n",
+ "samtools view: error closing standard output: -1\n"
+ ]
+ }
+ ],
+ "source": [
+ "!samtools view Tutorial2/InputFiles/CTL_dedup.bam | head -3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a39c3c75-9011-4a9e-a60e-bb8c503405bb",
+ "metadata": {},
+ "source": [
+ "While we can see the coordinates of each read, we will need a better way of visualizing the results. In this step we will create a binary file that summarizes the pileup of reads at basepair along our genome, in [bigwig](http://genome.ucsc.edu/goldenPath/help/bigWig.html) format. \n",
+ "\n",
+ "To create the bigwig files let's use the command bamCoverage, part of the [deeptools](https://deeptools.readthedocs.io/en/develop/) package."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "f78e9802-ddd1-4abb-9bbf-3cc10e5d5d90",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "# First we need to create an index of our bam file.\n",
+ "!samtools index Tutorial2/InputFiles/CTL_dedup.bam\n",
+ "\n",
+ "# Then we can create a bigwig file of the control sample.\n",
+ "!bamCoverage -b Tutorial2/InputFiles/CTL_dedup.bam -o Tutorial2/BigWigFiles/Control.bw -bs 1 -p $numthreadsint --normalizeUsing BPM 2> Tutorial2/BigWigFiles/bamCovLog_ctl.txt\n",
+ "\n",
+ "# Now let's rerun the commands for our mutant sample.\n",
+ "!samtools index Tutorial2/InputFiles/Mutant_dedup.bam\n",
+ "!bamCoverage -b Tutorial2/InputFiles/Mutant_dedup.bam -o Tutorial2/BigWigFiles/Mutant.bw -bs 1 -p $numthreadsint --normalizeUsing BPM 2> Tutorial2/BigWigFiles/bamCovLog_mut.txt\n",
+ "\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "744e8b64-947b-43f4-9bb0-51bf42972bc3",
+ "metadata": {},
+ "source": [
+ "In the above example we specify the bam file name after -b and the output file name after -o. \n",
+ "\n",
+ "We specified -bs 1, which tells bamCoverage the summarize the reads at every basepair; the default is to summarize at 50 bp resolution, but for ATAC-seq we find it useful to summarize the data at finer-scale. \n",
+ "\n",
+ "We also specified the number of threads to use with -p, which is held in a variable in our notebook.\n",
+ "\n",
+ "Lastly, we specified --normalizeUsing BPM. BPM stands for Bins Per Million mapped reads. What do you think this normalization does?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "f2df8f13-211b-4584-8600-c5ab1edf8138",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial2/LessonImages/BPMnorm.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b228a0d9-0e88-490f-a53d-58ce20d40b64",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Genome Browser\n",
+ "
\n",
+ "\n",
+ "Now that we have our bigwig files, we can visualize the signal in a genome browser. We'll use [igv](https://igv.org/) in this example. \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "4611752a-36fe-4b76-8fc1-5764a69e74d8",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "!function (global, factory) {window.igv = factory()}(this,(function(){\"use strict\";\n",
+ "/*!\n",
+ " * jQuery JavaScript Library v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n",
+ " * https://jquery.com/\n",
+ " *\n",
+ " * Includes Sizzle.js\n",
+ " * https://sizzlejs.com/\n",
+ " *\n",
+ " * Copyright JS Foundation and other contributors\n",
+ " * Released under the MIT license\n",
+ " * https://jquery.org/license\n",
+ " *\n",
+ " * Date: 2018-01-20T17:24Z\n",
+ " */var t=[],e=window.document,n=Object.getPrototypeOf,r=t.slice,i=t.concat,o=t.push,s=t.indexOf,a={},c=a.toString,l=a.hasOwnProperty,h=l.toString,u=h.call(Object),f={},d=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},p=function(t){return null!=t&&t===t.window},g={type:!0,src:!0,noModule:!0};function m(t,n,r){var i,o=(n=n||e).createElement(\"script\");if(o.text=t,r)for(i in g)r[i]&&(o[i]=r[i]);n.head.appendChild(o).parentNode.removeChild(o)}function v(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?a[c.call(t)]||\"object\":typeof t}var b=\"3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",w=function(t,e){return new w.fn.init(t,e)},y=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function x(t){var e=!!t&&\"length\"in t&&t.length,n=v(t);return!d(t)&&!p(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return r.call(this)},get:function(t){return null==t?r.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=w.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return w.each(this,t)},map:function(t){return this.pushStack(w.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),q=new RegExp(\"=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([^\\\\]'\\\"]*?)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\]\",\"g\"),W=new RegExp(z),$=new RegExp(\"^\"+D+\"$\"),G={ID:new RegExp(\"^#(\"+D+\")\"),CLASS:new RegExp(\"^\\\\.(\"+D+\")\"),TAG:new RegExp(\"^(\"+D+\"|[*])\"),ATTR:new RegExp(\"^\"+B),PSEUDO:new RegExp(\"^\"+z),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+O+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?=[^-]|$)\",\"i\")},Z=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,K=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,Q=/[+~]/,J=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|([\\\\x20\\\\t\\\\r\\\\n\\\\f])|.)\",\"ig\"),tt=function(t,e,n){var r=\"0x\"+e-65536;return r!=r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},et=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,nt=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},rt=function(){f()},it=vt((function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)}),{dir:\"parentNode\",next:\"legend\"});try{I.apply(L=N.call(x.childNodes),x.childNodes),L[x.childNodes.length].nodeType}catch(t){I={apply:L.length?function(t,e){R.apply(t,N.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ot(t,e,r,i){var o,a,l,h,u,p,v,b=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&((e?e.ownerDocument||e:x)!==d&&f(e),e=e||d,g)){if(11!==_&&(u=K.exec(t)))if(o=u[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(b&&(l=b.getElementById(o))&&w(e,l)&&l.id===o)return r.push(l),r}else{if(u[2])return I.apply(r,e.getElementsByTagName(t)),r;if((o=u[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!E[t+\" \"]&&(!m||!m.test(t))){if(1!==_)b=e,v=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((h=e.getAttribute(\"id\"))?h=h.replace(et,nt):e.setAttribute(\"id\",h=y),a=(p=s(t)).length;a--;)p[a]=\"#\"+h+\" \"+mt(p[a]);v=p.join(\",\"),b=Q.test(t)&&pt(e.parentNode)||e}if(v)try{return I.apply(r,b.querySelectorAll(v)),r}catch(t){}finally{h===y&&e.removeAttribute(\"id\")}}}return c(t.replace(V,\"$1\"),e,r,i)}function st(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function at(t){return t[y]=!0,t}function ct(t){var e=d.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function lt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function ut(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function ft(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&it(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function dt(t){return at((function(e){return e=+e,at((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function pt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},o=ot.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},f=ot.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:x;return s!==d&&9===s.nodeType&&s.documentElement?(p=(d=s).documentElement,g=!o(d),x!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",rt,!1):i.attachEvent&&i.attachEvent(\"onunload\",rt)),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(d.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=Y.test(d.getElementsByClassName),n.getById=ct((function(t){return p.appendChild(t).id=y,!d.getElementsByName||!d.getElementsByName(y).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},v=[],m=[],(n.qsa=Y.test(d.querySelectorAll))&&(ct((function(t){p.appendChild(t).innerHTML=\" \",t.querySelectorAll(\"[msallowcapture^='']\").length&&m.push(\"[*^$]=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||m.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+O+\")\"),t.querySelectorAll(\"[id~=\"+y+\"-]\").length||m.push(\"~=\"),t.querySelectorAll(\":checked\").length||m.push(\":checked\"),t.querySelectorAll(\"a#\"+y+\"+*\").length||m.push(\".#.+[+~]\")})),ct((function(t){t.innerHTML=\" \";var e=d.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&m.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&m.push(\":enabled\",\":disabled\"),p.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&m.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),m.push(\",.*:\")}))),(n.matchesSelector=Y.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=b.call(t,\"*\"),b.call(t,\"[s!='']:x\"),v.push(\"!=\",z)})),m=m.length&&new RegExp(m.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),e=Y.test(p.compareDocumentPosition),w=e||Y.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return u=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t===d||t.ownerDocument===x&&w(x,t)?-1:e===d||e.ownerDocument===x&&w(x,e)?1:h?P(h,t)-P(h,e):0:4&r?-1:1)}:function(t,e){if(t===e)return u=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t===d?-1:e===d?1:i?-1:o?1:h?P(h,t)-P(h,e):0;if(i===o)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?lt(s[r],a[r]):s[r]===x?-1:a[r]===x?1:0},d):d},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if((t.ownerDocument||t)!==d&&f(t),e=e.replace(q,\"='$1']\"),n.matchesSelector&&g&&!E[e+\" \"]&&(!v||!v.test(e))&&(!m||!m.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return ot(e,d,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!==d&&f(t),w(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!==d&&f(t);var i=r.attrHandle[e.toLowerCase()],o=i&&T.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ot.escape=function(t){return(t+\"\").replace(et,nt)},ot.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},ot.uniqueSort=function(t){var e,r=[],i=0,o=0;if(u=!n.detectDuplicates,h=!n.sortStable&&t.slice(0),t.sort(A),u){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return h=null,t},i=ot.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=ot.selectors={cacheLength:50,createPseudo:at,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(J,tt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(J,tt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return G.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&W.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(J,tt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+\" \"];return e||(e=new RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+t+\"(\"+F+\"|$)\"))&&S(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=ot.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,c){var l,h,u,f,d,p,g=o!==s?\"nextSibling\":\"previousSibling\",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!c&&!a,w=!1;if(m){if(o){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=g=\"only\"===t&&!p&&\"nextSibling\"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&b){for(w=(d=(l=(h=(u=(f=m)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1])&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(w=d=0)||p.pop();)if(1===f.nodeType&&++w&&f===e){h[t]=[_,d,w];break}}else if(b&&(w=d=(l=(h=(u=(f=e)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1]),!1===w)for(;(f=++d&&f&&f[g]||(w=d=0)||p.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++w||(b&&((h=(u=f[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]=[_,w]),f!==e)););return(w-=i)===r||w%r==0&&w/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ot.error(\"unsupported pseudo: \"+t);return i[y]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?at((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=P(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:at((function(t){var e=[],n=[],r=a(t.replace(V,\"$1\"));return r[y]?at((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:at((function(t){return function(e){return ot(t,e).length>0}})),contains:at((function(t){return t=t.replace(J,tt),function(e){return(e.textContent||e.innerText||i(e)).indexOf(t)>-1}})),lang:at((function(t){return $.test(t||\"\")||ot.error(\"unsupported lang: \"+t),t=t.replace(J,tt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return Z.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:dt((function(){return[0]})),last:dt((function(t,e){return[e-1]})),eq:dt((function(t,e,n){return[n<0?n+e:n]})),even:dt((function(t,e){for(var n=0;n=0;)t.push(r);return t})),gt:dt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function wt(t,e,n,r,i){for(var o,s=[],a=0,c=t.length,l=null!=e;a-1&&(o[l]=!(s[l]=u))}}else v=wt(v===s?v.splice(p,v.length):v),i?i(null,s,v,c):I.apply(s,v)}))}function xt(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],c=s?1:0,h=vt((function(t){return t===e}),a,!0),u=vt((function(t){return P(e,t)>-1}),a,!0),f=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?h(t,n,r):u(t,n,r));return e=null,i}];c1&&bt(f),c>1&&mt(t.slice(0,c-1).concat({value:\" \"===t[c-2].type?\"*\":\"\"})).replace(V,\"$1\"),n,c0,i=t.length>0,o=function(o,s,a,c,h){var u,p,m,v=0,b=\"0\",w=o&&[],y=[],x=l,k=o||i&&r.find.TAG(\"*\",h),S=_+=null==x?1:Math.random()||.1,C=k.length;for(h&&(l=s===d||s||h);b!==C&&null!=(u=k[b]);b++){if(i&&u){for(p=0,s||u.ownerDocument===d||(f(u),a=!g);m=t[p++];)if(m(u,s||d,a)){c.push(u);break}h&&(_=S)}n&&((u=!m&&u)&&v--,o&&w.push(u))}if(v+=b,n&&b!==v){for(p=0;m=e[p++];)m(w,y,s,a);if(o){if(v>0)for(;b--;)w[b]||y[b]||(y[b]=M.call(c));y=wt(y)}I.apply(c,y),h&&!o&&y.length>0&&v+e.length>1&&ot.uniqueSort(c)}return h&&(_=S,l=x),w};return n?at(o):o}(o,i)),a.selector=t}return a},c=ot.select=function(t,e,n,i){var o,c,l,h,u,f=\"function\"==typeof t&&t,d=!i&&s(t=f.selector||t);if(n=n||[],1===d.length){if((c=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=c[0]).type&&9===e.nodeType&&g&&r.relative[c[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(J,tt),e)||[])[0]))return n;f&&(e=e.parentNode),t=t.slice(c.shift().value.length)}for(o=G.needsContext.test(t)?0:c.length;o--&&(l=c[o],!r.relative[h=l.type]);)if((u=r.find[h])&&(i=u(l.matches[0].replace(J,tt),Q.test(c[0].type)&&pt(e.parentNode)||e))){if(c.splice(o,1),!(t=i.length&&mt(c)))return I.apply(n,i),n;break}}return(f||a(t,d))(i,e,!g,n,!e||Q.test(t)&&pt(e.parentNode)||e),n},n.sortStable=y.split(\"\").sort(A).join(\"\")===y,n.detectDuplicates=!!u,f(),ot}(window);w.find=_,w.expr=_.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=_.uniqueSort,w.text=_.getText,w.isXMLDoc=_.isXML,w.contains=_.contains,w.escapeSelector=_.escape;var k=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&w(t).is(n))break;r.push(t)}return r},S=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},C=w.expr.match.needsContext;function E(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(t,e,n){return d(e)?w.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?w.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?w.grep(t,(function(t){return s.call(e,t)>-1!==n})):w.filter(e,t,n)}w.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?w.find.matchesSelector(r,t)?[r]:[]:w.find.matches(t,w.grep(e,(function(t){return 1===t.nodeType})))},w.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(w(t).filter((function(){for(e=0;e1?w.uniqueSort(n):n},filter:function(t){return this.pushStack(T(this,t||[],!1))},not:function(t){return this.pushStack(T(this,t||[],!0))},is:function(t){return!!T(this,\"string\"==typeof t&&C.test(t)?w(t):t||[],!1).length}});var L,M=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,R=w.fn.init=function(t,n,r){var i,o;if(!t)return this;if(r=r||L,\"string\"==typeof t){if(!(i=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:M.exec(t))||!i[1]&&n)return!n||n.jquery?(n||r).find(t):this.constructor(n).find(t);if(i[1]){if(n=n instanceof w?n[0]:n,w.merge(this,w.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:e,!0)),A.test(i[1])&&w.isPlainObject(n))for(i in n)d(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}return(o=e.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):d(t)?void 0!==r.ready?r.ready(t):t(w):w.makeArray(t,this)};R.prototype=w.fn,L=w(e);var I=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}w.fn.extend({has:function(t){var e=w(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&w.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?s.call(w(t),this[0]):s.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),w.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,\"parentNode\")},parentsUntil:function(t,e,n){return k(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return k(t,\"nextSibling\")},prevAll:function(t){return k(t,\"previousSibling\")},nextUntil:function(t,e,n){return k(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return k(t,\"previousSibling\",n)},siblings:function(t){return S((t.parentNode||{}).firstChild,t)},children:function(t){return S(t.firstChild)},contents:function(t){return E(t,\"iframe\")?t.contentDocument:(E(t,\"template\")&&(t=t.content||t),w.merge([],t.childNodes))}},(function(t,e){w.fn[t]=function(n,r){var i=w.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(N[t]||w.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var O=/[^\\x20\\t\\r\\n\\f]+/g;function F(t){return t}function D(t){throw t}function B(t,e,n,r){var i;try{t&&d(i=t.promise)?i.call(t).done(e).fail(n):t&&d(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}w.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return w.each(t.match(O)||[],(function(t,n){e[n]=!0})),e}(t):w.extend({},t);var e,n,r,i,o=[],s=[],a=-1,c=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?w.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var t=arguments;return w.Deferred((function(n){w.each(e,(function(e,r){var o=d(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=o&&o.apply(this,arguments);t&&d(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,r){var i=0;function o(t,e,n,r){return function(){var s=this,a=arguments,c=function(){var c,l;if(!(t=i&&(n!==D&&(s=void 0,a=[r]),e.rejectWith(s,a))}};t?l():(w.Deferred.getStackHook&&(l.stackTrace=w.Deferred.getStackHook()),window.setTimeout(l))}}return w.Deferred((function(i){e[0][3].add(o(0,i,d(r)?r:F,i.notifyWith)),e[1][3].add(o(0,i,d(t)?t:F)),e[2][3].add(o(0,i,d(n)?n:D))})).promise()},promise:function(t){return null!=t?w.extend(t,r):r}},i={};return w.each(e,(function(t,o){var s=o[2],a=o[5];r[o[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(o[3].fire),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?void 0:this,arguments),this},i[o[0]+\"With\"]=s.fireWith})),r.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,i=Array(n),o=r.call(arguments),s=w.Deferred(),a=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?r.call(arguments):n,--e||s.resolveWith(i,o)}};if(e<=1&&(B(t,s.done(a(n)).resolve,s.reject,!e),\"pending\"===s.state()||d(o[n]&&o[n].then)))return s.then();for(;n--;)B(o[n],a(n),s.reject);return s.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,e){window.console&&window.console.warn&&t&&z.test(t.name)&&window.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},w.readyException=function(t){window.setTimeout((function(){throw t}))};var H=w.Deferred();function V(){e.removeEventListener(\"DOMContentLoaded\",V),window.removeEventListener(\"load\",V),w.ready()}w.fn.ready=function(t){return H.then(t).catch((function(t){w.readyException(t)})),this},w.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==t&&--w.readyWait>0||H.resolveWith(e,[w]))}}),w.ready.then=H.then,\"complete\"===e.readyState||\"loading\"!==e.readyState&&!e.documentElement.doScroll?window.setTimeout(w.ready):(e.addEventListener(\"DOMContentLoaded\",V),window.addEventListener(\"load\",V));var j=function(t,e,n,r,i,o,s){var a=0,c=t.length,l=null==n;if(\"object\"===v(n))for(a in i=!0,n)j(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,d(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(w(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Y.remove(this,t)}))}}),w.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=X.get(t,e),n&&(!r||Array.isArray(n)?r=X.access(t,e,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=w.queue(t,e),r=n.length,i=n.shift(),o=w._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){w.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return X.get(t,n)||X.access(t,n,{empty:w.Callbacks(\"once memory\").add((function(){X.remove(t,[e+\"queue\",n])}))})}}),w.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length\\x20\\t\\r\\n\\f]+)/i,ht=/^$|^module$|\\/(?:java|ecma)script/i,ut={option:[1,\"\",\" \"],thead:[1,\"\"],col:[2,\"\"],tr:[2,\"\"],td:[3,\"\"],_default:[0,\"\",\"\"]};function ft(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&E(t,e)?w.merge([t],n):n}function dt(t,e){for(var n=0,r=t.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),s=ft(u.appendChild(o),\"script\"),l&&dt(s),n)for(h=0;o=s[h++];)ht.test(o.type||\"\")&&n.push(o);return u}!function(){var t=e.createDocumentFragment().appendChild(e.createElement(\"div\")),n=e.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),f.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"\",f.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var mt=e.documentElement,vt=/^key/,bt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,wt=/^([^.]*)(?:\\.(.+)|)/;function yt(){return!0}function xt(){return!1}function _t(){try{return e.activeElement}catch(t){}}function kt(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)kt(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=xt;else if(!i)return t;return 1===o&&(s=i,i=function(t){return w().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=w.guid++)),t.each((function(){w.event.add(this,e,i,r,n)}))}w.event={global:{},add:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.get(t);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(mt,i),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==w&&w.event.triggered!==e.type?w.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d&&(u=w.event.special[d]||{},d=(i?u.delegateType:u.bindType)||d,u=w.event.special[d]||{},h=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:p.join(\".\")},o),(f=c[d])||((f=c[d]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,r,p,s)||t.addEventListener&&t.addEventListener(d,s)),u.add&&(u.add.call(t,h),h.handler.guid||(h.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,h):f.push(h),w.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.hasData(t)&&X.get(t);if(m&&(c=m.events)){for(l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)if(d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d){for(u=w.event.special[d]||{},f=c[d=(r?u.delegateType:u.bindType)||d]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=f.length;o--;)h=f[o],!i&&g!==h.origType||n&&n.guid!==h.guid||a&&!a.test(h.namespace)||r&&r!==h.selector&&(\"**\"!==r||!h.selector)||(f.splice(o,1),h.selector&&f.delegateCount--,u.remove&&u.remove.call(t,h));s&&!f.length&&(u.teardown&&!1!==u.teardown.call(t,p,m.handle)||w.removeEvent(t,d,m.handle),delete c[d])}else for(d in c)w.event.remove(t,d+e[l],n,r,!0);w.isEmptyObject(c)&&X.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=w.event.fix(t),c=new Array(arguments.length),l=(X.get(this,\"events\")||{})[a.type]||[],h=w.event.special[a.type]||{};for(c[0]=a,e=1;e=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n-1:w.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,c\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ct=/\n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial2/LessonImages/InsertSizeQuiz.json\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a8a9b451-c231-4dc4-9a3b-e8da8b92fcec",
+ "metadata": {},
+ "source": [
+ "With paired-end ATAC-seq data we can separate by fragment size to obtain Transposase HyperSensitive Sites (THSS) and Nucleosomal Fragments. Alternatively, some choose to keep the data together as a more general measure of \"accessible\" sites.\n",
+ "\n",
+ "We'll show you how to separate the small and large fragments into different bam files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "69afce06-71ba-40e4-b977-62d69156b4df",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Filter by insert size:\n",
+ "!samtools view -h Tutorial2/InputFiles/CTL_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 150 && $9<=250) || ($9<=-150 && $9>=-250)' | samtools view -b > Tutorial2/InputFiles/CTL_Nucleosomal.bam\n",
+ "!samtools view -h Tutorial2/InputFiles/CTL_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 10 && $9<=125) || ($9<=-10 && $9>=-125)' | samtools view -b > Tutorial2/InputFiles/CTL_THSS.bam\n",
+ "#Do the same for the mutant:\n",
+ "!samtools view -h Tutorial2/InputFiles/Mutant_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 150 && $9<=250) || ($9<=-150 && $9>=-250)' | samtools view -b > Tutorial2/InputFiles/Mutant_Nucleosomal.bam\n",
+ "!samtools view -h Tutorial2/InputFiles/Mutant_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 10 && $9<=125) || ($9<=-10 && $9>=-125)' | samtools view -b > Tutorial2/InputFiles/Mutant_THSS.bam"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f598298f-efeb-4df0-a41c-d6ec96fbaf32",
+ "metadata": {},
+ "source": [
+ "For the rest of this tutorial, we'll use the bam files that contain all the reads as many use this as a general measurement of \"accessibility\". However, you can use these split bam files to create bigwigs, view them in a genome browser, and create average profiles around features as demonstrated earlier. You can also use them in our downstream analysis in lieu of the combined file that we will show in our examples. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e6002033-c000-4b2b-9e23-de065180f2f6",
+ "metadata": {},
+ "source": [
+ "\n",
+ "STEP3: Peak Detection\n",
+ "
\n",
+ " \n",
+ "\n",
+ "Accessible sites are loci with a pileup of reads in \"Peaks\". \n",
+ "\n",
+ "### Opitional Note:\n",
+ "Tn5 insertion of adapters leaves a 9 bp gap. In the end, this probably won't impact the results much. However, to be safe we can shift the reads to account for this insertion offset.\n",
+ "\n",
+ " \n",
+ "\n",
+ "Image adjusted from: [Grandi et al., Nature Protocols 2022](https://www.nature.com/articles/s41596-022-00692-9)\n",
+ "\n",
+ "The alignmentSieve command from [deeptools](https://anaconda.org/bioconda/deeptools) allows us to shift the reads accordingly.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "d5fde7ad-bc2d-4183-889f-391a66467ff0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!alignmentSieve -p $numthreadsint --ATACshift -b Tutorial2/InputFiles/CTL_dedup.bam -o Tutorial2/InputFiles/CTL_shift.bam\n",
+ "!alignmentSieve -p $numthreadsint --ATACshift -b Tutorial2/InputFiles/Mutant_dedup.bam -o Tutorial2/InputFiles/Mutant_shift.bam"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "421549cb-3cf6-4a86-9b2f-34fdf109ff2d",
+ "metadata": {},
+ "source": [
+ "Let's identify Peaks genome-wide using [macs2](https://pypi.org/project/MACS2/)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "2bc4e422-7813-4b9f-b984-04948f40b26d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#If your data is single-end (not paired-end), use -f BAM instead.\n",
+ "!macs2 callpeak -f BAMPE -g hs --keep-dup all --cutoff-analysis -n CTL -t Tutorial2/InputFiles/CTL_shift.bam --outdir Tutorial2/Peaks/ 2> Tutorial2/Peaks/macs2_CTL.log\n",
+ "!macs2 callpeak -f BAMPE -g hs --keep-dup all --cutoff-analysis -n Mutant -t Tutorial2/InputFiles/Mutant_shift.bam --outdir Tutorial2/Peaks/ 2> Tutorial2/Peaks/macs2_Mutant.log"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2b1c921c-fe40-4fd9-8370-1711a317b632",
+ "metadata": {},
+ "source": [
+ "macs2 provides a .narrowPeak file specififying the coordinates of the peaks, an .xls file with additional information, and a .bed file with the summits of the peaks.\n",
+ "\n",
+ "Let's view the first 10 lines of the .narrowPeak file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "43fcb3c4-3341-4255-8db9-ea822dfb62aa",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "chr4\t4098436\t4098780\tCTL_peak_1\t23\t.\t2.90799\t5.28767\t2.33528\t172\n",
+ "chr4\t26975641\t26975876\tCTL_peak_2\t23\t.\t2.90799\t5.28767\t2.33528\t117\n",
+ "chr4\t49751053\t49751289\tCTL_peak_3\t23\t.\t2.90799\t5.28767\t2.33528\t118\n",
+ "chr4\t49771937\t49772236\tCTL_peak_4\t157\t.\t11.172\t19.3961\t15.7605\t148\n",
+ "chr4\t49803060\t49803221\tCTL_peak_5\t20\t.\t2.88586\t4.99951\t2.07827\t80\n",
+ "chr4\t49842974\t49843212\tCTL_peak_6\t23\t.\t2.90799\t5.28767\t2.33528\t119\n",
+ "chr4\t49927479\t49927778\tCTL_peak_7\t36\t.\t3.81875\t6.69129\t3.6285\t200\n",
+ "chr4\t50048359\t50048660\tCTL_peak_8\t44\t.\t4.63347\t7.61679\t4.49353\t209\n",
+ "chr4\t50589614\t50589840\tCTL_peak_9\t23\t.\t2.90799\t5.28767\t2.33528\t113\n",
+ "chr4\t50622209\t50622416\tCTL_peak_10\t18\t.\t2.86406\t4.76454\t1.86719\t103\n"
+ ]
+ }
+ ],
+ "source": [
+ "!head Tutorial2/Peaks/CTL_peaks.narrowPeak"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d05e89eb-5ea0-44c8-8575-876a91a6a3fd",
+ "metadata": {},
+ "source": [
+ "We can also visually inspect the peaks compared to the signal in igv:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "1d443da3-afeb-4fa3-ae64-1e2c64b6dbc1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "!function (global, factory) {window.igv = factory()}(this,(function(){\"use strict\";\n",
+ "/*!\n",
+ " * jQuery JavaScript Library v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n",
+ " * https://jquery.com/\n",
+ " *\n",
+ " * Includes Sizzle.js\n",
+ " * https://sizzlejs.com/\n",
+ " *\n",
+ " * Copyright JS Foundation and other contributors\n",
+ " * Released under the MIT license\n",
+ " * https://jquery.org/license\n",
+ " *\n",
+ " * Date: 2018-01-20T17:24Z\n",
+ " */var t=[],e=window.document,n=Object.getPrototypeOf,r=t.slice,i=t.concat,o=t.push,s=t.indexOf,a={},c=a.toString,l=a.hasOwnProperty,h=l.toString,u=h.call(Object),f={},d=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},p=function(t){return null!=t&&t===t.window},g={type:!0,src:!0,noModule:!0};function m(t,n,r){var i,o=(n=n||e).createElement(\"script\");if(o.text=t,r)for(i in g)r[i]&&(o[i]=r[i]);n.head.appendChild(o).parentNode.removeChild(o)}function v(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?a[c.call(t)]||\"object\":typeof t}var b=\"3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",w=function(t,e){return new w.fn.init(t,e)},y=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function x(t){var e=!!t&&\"length\"in t&&t.length,n=v(t);return!d(t)&&!p(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return r.call(this)},get:function(t){return null==t?r.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=w.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return w.each(this,t)},map:function(t){return this.pushStack(w.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),q=new RegExp(\"=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([^\\\\]'\\\"]*?)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\]\",\"g\"),W=new RegExp(z),$=new RegExp(\"^\"+D+\"$\"),G={ID:new RegExp(\"^#(\"+D+\")\"),CLASS:new RegExp(\"^\\\\.(\"+D+\")\"),TAG:new RegExp(\"^(\"+D+\"|[*])\"),ATTR:new RegExp(\"^\"+B),PSEUDO:new RegExp(\"^\"+z),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+O+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?=[^-]|$)\",\"i\")},Z=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,K=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,Q=/[+~]/,J=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|([\\\\x20\\\\t\\\\r\\\\n\\\\f])|.)\",\"ig\"),tt=function(t,e,n){var r=\"0x\"+e-65536;return r!=r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},et=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,nt=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},rt=function(){f()},it=vt((function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)}),{dir:\"parentNode\",next:\"legend\"});try{I.apply(L=N.call(x.childNodes),x.childNodes),L[x.childNodes.length].nodeType}catch(t){I={apply:L.length?function(t,e){R.apply(t,N.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ot(t,e,r,i){var o,a,l,h,u,p,v,b=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&((e?e.ownerDocument||e:x)!==d&&f(e),e=e||d,g)){if(11!==_&&(u=K.exec(t)))if(o=u[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(b&&(l=b.getElementById(o))&&w(e,l)&&l.id===o)return r.push(l),r}else{if(u[2])return I.apply(r,e.getElementsByTagName(t)),r;if((o=u[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!E[t+\" \"]&&(!m||!m.test(t))){if(1!==_)b=e,v=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((h=e.getAttribute(\"id\"))?h=h.replace(et,nt):e.setAttribute(\"id\",h=y),a=(p=s(t)).length;a--;)p[a]=\"#\"+h+\" \"+mt(p[a]);v=p.join(\",\"),b=Q.test(t)&&pt(e.parentNode)||e}if(v)try{return I.apply(r,b.querySelectorAll(v)),r}catch(t){}finally{h===y&&e.removeAttribute(\"id\")}}}return c(t.replace(V,\"$1\"),e,r,i)}function st(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function at(t){return t[y]=!0,t}function ct(t){var e=d.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function lt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function ut(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function ft(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&it(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function dt(t){return at((function(e){return e=+e,at((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function pt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},o=ot.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},f=ot.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:x;return s!==d&&9===s.nodeType&&s.documentElement?(p=(d=s).documentElement,g=!o(d),x!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",rt,!1):i.attachEvent&&i.attachEvent(\"onunload\",rt)),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(d.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=Y.test(d.getElementsByClassName),n.getById=ct((function(t){return p.appendChild(t).id=y,!d.getElementsByName||!d.getElementsByName(y).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},v=[],m=[],(n.qsa=Y.test(d.querySelectorAll))&&(ct((function(t){p.appendChild(t).innerHTML=\" \",t.querySelectorAll(\"[msallowcapture^='']\").length&&m.push(\"[*^$]=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||m.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+O+\")\"),t.querySelectorAll(\"[id~=\"+y+\"-]\").length||m.push(\"~=\"),t.querySelectorAll(\":checked\").length||m.push(\":checked\"),t.querySelectorAll(\"a#\"+y+\"+*\").length||m.push(\".#.+[+~]\")})),ct((function(t){t.innerHTML=\" \";var e=d.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&m.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&m.push(\":enabled\",\":disabled\"),p.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&m.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),m.push(\",.*:\")}))),(n.matchesSelector=Y.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=b.call(t,\"*\"),b.call(t,\"[s!='']:x\"),v.push(\"!=\",z)})),m=m.length&&new RegExp(m.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),e=Y.test(p.compareDocumentPosition),w=e||Y.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return u=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t===d||t.ownerDocument===x&&w(x,t)?-1:e===d||e.ownerDocument===x&&w(x,e)?1:h?P(h,t)-P(h,e):0:4&r?-1:1)}:function(t,e){if(t===e)return u=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t===d?-1:e===d?1:i?-1:o?1:h?P(h,t)-P(h,e):0;if(i===o)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?lt(s[r],a[r]):s[r]===x?-1:a[r]===x?1:0},d):d},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if((t.ownerDocument||t)!==d&&f(t),e=e.replace(q,\"='$1']\"),n.matchesSelector&&g&&!E[e+\" \"]&&(!v||!v.test(e))&&(!m||!m.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return ot(e,d,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!==d&&f(t),w(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!==d&&f(t);var i=r.attrHandle[e.toLowerCase()],o=i&&T.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ot.escape=function(t){return(t+\"\").replace(et,nt)},ot.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},ot.uniqueSort=function(t){var e,r=[],i=0,o=0;if(u=!n.detectDuplicates,h=!n.sortStable&&t.slice(0),t.sort(A),u){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return h=null,t},i=ot.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=ot.selectors={cacheLength:50,createPseudo:at,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(J,tt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(J,tt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return G.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&W.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(J,tt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+\" \"];return e||(e=new RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+t+\"(\"+F+\"|$)\"))&&S(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=ot.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,c){var l,h,u,f,d,p,g=o!==s?\"nextSibling\":\"previousSibling\",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!c&&!a,w=!1;if(m){if(o){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=g=\"only\"===t&&!p&&\"nextSibling\"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&b){for(w=(d=(l=(h=(u=(f=m)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1])&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(w=d=0)||p.pop();)if(1===f.nodeType&&++w&&f===e){h[t]=[_,d,w];break}}else if(b&&(w=d=(l=(h=(u=(f=e)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1]),!1===w)for(;(f=++d&&f&&f[g]||(w=d=0)||p.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++w||(b&&((h=(u=f[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]=[_,w]),f!==e)););return(w-=i)===r||w%r==0&&w/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ot.error(\"unsupported pseudo: \"+t);return i[y]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?at((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=P(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:at((function(t){var e=[],n=[],r=a(t.replace(V,\"$1\"));return r[y]?at((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:at((function(t){return function(e){return ot(t,e).length>0}})),contains:at((function(t){return t=t.replace(J,tt),function(e){return(e.textContent||e.innerText||i(e)).indexOf(t)>-1}})),lang:at((function(t){return $.test(t||\"\")||ot.error(\"unsupported lang: \"+t),t=t.replace(J,tt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return Z.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:dt((function(){return[0]})),last:dt((function(t,e){return[e-1]})),eq:dt((function(t,e,n){return[n<0?n+e:n]})),even:dt((function(t,e){for(var n=0;n=0;)t.push(r);return t})),gt:dt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function wt(t,e,n,r,i){for(var o,s=[],a=0,c=t.length,l=null!=e;a-1&&(o[l]=!(s[l]=u))}}else v=wt(v===s?v.splice(p,v.length):v),i?i(null,s,v,c):I.apply(s,v)}))}function xt(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],c=s?1:0,h=vt((function(t){return t===e}),a,!0),u=vt((function(t){return P(e,t)>-1}),a,!0),f=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?h(t,n,r):u(t,n,r));return e=null,i}];c1&&bt(f),c>1&&mt(t.slice(0,c-1).concat({value:\" \"===t[c-2].type?\"*\":\"\"})).replace(V,\"$1\"),n,c0,i=t.length>0,o=function(o,s,a,c,h){var u,p,m,v=0,b=\"0\",w=o&&[],y=[],x=l,k=o||i&&r.find.TAG(\"*\",h),S=_+=null==x?1:Math.random()||.1,C=k.length;for(h&&(l=s===d||s||h);b!==C&&null!=(u=k[b]);b++){if(i&&u){for(p=0,s||u.ownerDocument===d||(f(u),a=!g);m=t[p++];)if(m(u,s||d,a)){c.push(u);break}h&&(_=S)}n&&((u=!m&&u)&&v--,o&&w.push(u))}if(v+=b,n&&b!==v){for(p=0;m=e[p++];)m(w,y,s,a);if(o){if(v>0)for(;b--;)w[b]||y[b]||(y[b]=M.call(c));y=wt(y)}I.apply(c,y),h&&!o&&y.length>0&&v+e.length>1&&ot.uniqueSort(c)}return h&&(_=S,l=x),w};return n?at(o):o}(o,i)),a.selector=t}return a},c=ot.select=function(t,e,n,i){var o,c,l,h,u,f=\"function\"==typeof t&&t,d=!i&&s(t=f.selector||t);if(n=n||[],1===d.length){if((c=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=c[0]).type&&9===e.nodeType&&g&&r.relative[c[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(J,tt),e)||[])[0]))return n;f&&(e=e.parentNode),t=t.slice(c.shift().value.length)}for(o=G.needsContext.test(t)?0:c.length;o--&&(l=c[o],!r.relative[h=l.type]);)if((u=r.find[h])&&(i=u(l.matches[0].replace(J,tt),Q.test(c[0].type)&&pt(e.parentNode)||e))){if(c.splice(o,1),!(t=i.length&&mt(c)))return I.apply(n,i),n;break}}return(f||a(t,d))(i,e,!g,n,!e||Q.test(t)&&pt(e.parentNode)||e),n},n.sortStable=y.split(\"\").sort(A).join(\"\")===y,n.detectDuplicates=!!u,f(),ot}(window);w.find=_,w.expr=_.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=_.uniqueSort,w.text=_.getText,w.isXMLDoc=_.isXML,w.contains=_.contains,w.escapeSelector=_.escape;var k=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&w(t).is(n))break;r.push(t)}return r},S=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},C=w.expr.match.needsContext;function E(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(t,e,n){return d(e)?w.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?w.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?w.grep(t,(function(t){return s.call(e,t)>-1!==n})):w.filter(e,t,n)}w.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?w.find.matchesSelector(r,t)?[r]:[]:w.find.matches(t,w.grep(e,(function(t){return 1===t.nodeType})))},w.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(w(t).filter((function(){for(e=0;e1?w.uniqueSort(n):n},filter:function(t){return this.pushStack(T(this,t||[],!1))},not:function(t){return this.pushStack(T(this,t||[],!0))},is:function(t){return!!T(this,\"string\"==typeof t&&C.test(t)?w(t):t||[],!1).length}});var L,M=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,R=w.fn.init=function(t,n,r){var i,o;if(!t)return this;if(r=r||L,\"string\"==typeof t){if(!(i=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:M.exec(t))||!i[1]&&n)return!n||n.jquery?(n||r).find(t):this.constructor(n).find(t);if(i[1]){if(n=n instanceof w?n[0]:n,w.merge(this,w.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:e,!0)),A.test(i[1])&&w.isPlainObject(n))for(i in n)d(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}return(o=e.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):d(t)?void 0!==r.ready?r.ready(t):t(w):w.makeArray(t,this)};R.prototype=w.fn,L=w(e);var I=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}w.fn.extend({has:function(t){var e=w(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&w.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?s.call(w(t),this[0]):s.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),w.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,\"parentNode\")},parentsUntil:function(t,e,n){return k(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return k(t,\"nextSibling\")},prevAll:function(t){return k(t,\"previousSibling\")},nextUntil:function(t,e,n){return k(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return k(t,\"previousSibling\",n)},siblings:function(t){return S((t.parentNode||{}).firstChild,t)},children:function(t){return S(t.firstChild)},contents:function(t){return E(t,\"iframe\")?t.contentDocument:(E(t,\"template\")&&(t=t.content||t),w.merge([],t.childNodes))}},(function(t,e){w.fn[t]=function(n,r){var i=w.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(N[t]||w.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var O=/[^\\x20\\t\\r\\n\\f]+/g;function F(t){return t}function D(t){throw t}function B(t,e,n,r){var i;try{t&&d(i=t.promise)?i.call(t).done(e).fail(n):t&&d(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}w.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return w.each(t.match(O)||[],(function(t,n){e[n]=!0})),e}(t):w.extend({},t);var e,n,r,i,o=[],s=[],a=-1,c=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?w.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var t=arguments;return w.Deferred((function(n){w.each(e,(function(e,r){var o=d(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=o&&o.apply(this,arguments);t&&d(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,r){var i=0;function o(t,e,n,r){return function(){var s=this,a=arguments,c=function(){var c,l;if(!(t=i&&(n!==D&&(s=void 0,a=[r]),e.rejectWith(s,a))}};t?l():(w.Deferred.getStackHook&&(l.stackTrace=w.Deferred.getStackHook()),window.setTimeout(l))}}return w.Deferred((function(i){e[0][3].add(o(0,i,d(r)?r:F,i.notifyWith)),e[1][3].add(o(0,i,d(t)?t:F)),e[2][3].add(o(0,i,d(n)?n:D))})).promise()},promise:function(t){return null!=t?w.extend(t,r):r}},i={};return w.each(e,(function(t,o){var s=o[2],a=o[5];r[o[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(o[3].fire),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?void 0:this,arguments),this},i[o[0]+\"With\"]=s.fireWith})),r.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,i=Array(n),o=r.call(arguments),s=w.Deferred(),a=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?r.call(arguments):n,--e||s.resolveWith(i,o)}};if(e<=1&&(B(t,s.done(a(n)).resolve,s.reject,!e),\"pending\"===s.state()||d(o[n]&&o[n].then)))return s.then();for(;n--;)B(o[n],a(n),s.reject);return s.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,e){window.console&&window.console.warn&&t&&z.test(t.name)&&window.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},w.readyException=function(t){window.setTimeout((function(){throw t}))};var H=w.Deferred();function V(){e.removeEventListener(\"DOMContentLoaded\",V),window.removeEventListener(\"load\",V),w.ready()}w.fn.ready=function(t){return H.then(t).catch((function(t){w.readyException(t)})),this},w.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==t&&--w.readyWait>0||H.resolveWith(e,[w]))}}),w.ready.then=H.then,\"complete\"===e.readyState||\"loading\"!==e.readyState&&!e.documentElement.doScroll?window.setTimeout(w.ready):(e.addEventListener(\"DOMContentLoaded\",V),window.addEventListener(\"load\",V));var j=function(t,e,n,r,i,o,s){var a=0,c=t.length,l=null==n;if(\"object\"===v(n))for(a in i=!0,n)j(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,d(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(w(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Y.remove(this,t)}))}}),w.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=X.get(t,e),n&&(!r||Array.isArray(n)?r=X.access(t,e,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=w.queue(t,e),r=n.length,i=n.shift(),o=w._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){w.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return X.get(t,n)||X.access(t,n,{empty:w.Callbacks(\"once memory\").add((function(){X.remove(t,[e+\"queue\",n])}))})}}),w.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length\\x20\\t\\r\\n\\f]+)/i,ht=/^$|^module$|\\/(?:java|ecma)script/i,ut={option:[1,\"\",\" \"],thead:[1,\"\"],col:[2,\"\"],tr:[2,\"\"],td:[3,\"\"],_default:[0,\"\",\"\"]};function ft(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&E(t,e)?w.merge([t],n):n}function dt(t,e){for(var n=0,r=t.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),s=ft(u.appendChild(o),\"script\"),l&&dt(s),n)for(h=0;o=s[h++];)ht.test(o.type||\"\")&&n.push(o);return u}!function(){var t=e.createDocumentFragment().appendChild(e.createElement(\"div\")),n=e.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),f.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"\",f.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var mt=e.documentElement,vt=/^key/,bt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,wt=/^([^.]*)(?:\\.(.+)|)/;function yt(){return!0}function xt(){return!1}function _t(){try{return e.activeElement}catch(t){}}function kt(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)kt(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=xt;else if(!i)return t;return 1===o&&(s=i,i=function(t){return w().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=w.guid++)),t.each((function(){w.event.add(this,e,i,r,n)}))}w.event={global:{},add:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.get(t);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(mt,i),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==w&&w.event.triggered!==e.type?w.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d&&(u=w.event.special[d]||{},d=(i?u.delegateType:u.bindType)||d,u=w.event.special[d]||{},h=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:p.join(\".\")},o),(f=c[d])||((f=c[d]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,r,p,s)||t.addEventListener&&t.addEventListener(d,s)),u.add&&(u.add.call(t,h),h.handler.guid||(h.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,h):f.push(h),w.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.hasData(t)&&X.get(t);if(m&&(c=m.events)){for(l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)if(d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d){for(u=w.event.special[d]||{},f=c[d=(r?u.delegateType:u.bindType)||d]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=f.length;o--;)h=f[o],!i&&g!==h.origType||n&&n.guid!==h.guid||a&&!a.test(h.namespace)||r&&r!==h.selector&&(\"**\"!==r||!h.selector)||(f.splice(o,1),h.selector&&f.delegateCount--,u.remove&&u.remove.call(t,h));s&&!f.length&&(u.teardown&&!1!==u.teardown.call(t,p,m.handle)||w.removeEvent(t,d,m.handle),delete c[d])}else for(d in c)w.event.remove(t,d+e[l],n,r,!0);w.isEmptyObject(c)&&X.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=w.event.fix(t),c=new Array(arguments.length),l=(X.get(this,\"events\")||{})[a.type]||[],h=w.event.special[a.type]||{};for(c[0]=a,e=1;e=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n-1:w.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,c\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ct=/\n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display_quiz(\"Tutorial3/LessonImages/DiffPeaks.json\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "21691ec7-e2d0-474f-939e-ddc84b046452",
+ "metadata": {},
+ "source": [
+ "### Consider the below peak which was identified in both the control and mutant sample. A simple intersect would result in this peak being reported as unchanged between the two samples. To represent the differences we will use [manorm](https://anaconda.org/bioconda/manormfast).\n",
+ "\n",
+ " \n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "17cea9d5-2b65-4513-bba3-7e2970c90aa9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#We specify several non-default parameters to better reflect ATAC-seq data\n",
+ "!manorm --p1 Tutorial3/InputFiles/CTL_peaks.narrowPeak --p2 Tutorial3/InputFiles/Mutant_peaks.narrowPeak --r1 Tutorial3/InputFiles/CTL_dedup.bam --r2 Tutorial3/InputFiles/Mutant_dedup.bam --rf bam --n1 CTL --n2 Mutant --pe -w 1000 -o Tutorial3/DiffPeaks --wa 2> Tutorial3/DiffPeaks/log_manorm.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1e61bd4a-26e2-4ce6-a719-6b8c51ed9dca",
+ "metadata": {},
+ "source": [
+ "The above command will write out several files including the differential peaks for each sample as well as the unchanged peaks."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "a51f1ba8-3bf0-4715-bb97-4a029352a3cd",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CTL_vs_Mutant_M_above_1.0_biased_peaks.bed CTL_vs_Mutant_unbiased_peaks.bed\n",
+ "CTL_vs_Mutant_M_below_-1.0_biased_peaks.bed\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls Tutorial3/DiffPeaks/output_filters"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "4d7d7656-9e43-4cce-a173-fee9b0a82dfa",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "chr4\t52059325\t52059732\tCTL_unique\t2.20155\n",
+ "chr4\t52298589\t52298799\tCTL_unique\t1.09775\n",
+ "chr4\t52550105\t52550494\tCTL_unique\t1.29536\n",
+ "chr4\t52698223\t52698464\tCTL_unique\t1.84416\n",
+ "chr4\t52834103\t52834470\tCTL_unique\t1.26119\n",
+ "chr4\t52884232\t52884622\tCTL_unique\t1.09835\n",
+ "chr4\t52968329\t52968671\tCTL_unique\t1.41519\n",
+ "chr4\t52993914\t52994157\tCTL_unique\t1.22576\n",
+ "chr4\t53595301\t53595477\tCTL_unique\t1.20393\n",
+ "chr4\t53702525\t53703113\tCTL_unique\t1.07373\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Let's also check the format of these files\n",
+ "!head Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "42d1dbc3-7708-4907-8089-a76fee983a3e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " 124 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed\n",
+ " 74 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_below_-1.0_biased_peaks.bed\n",
+ " 590 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_unbiased_peaks.bed\n",
+ " 788 total\n"
+ ]
+ }
+ ],
+ "source": [
+ "#We can also count how many are in each.\n",
+ "!wc -l Tutorial3/DiffPeaks/output_filters/*bed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ff40bca1-bef8-48c8-8c9b-033ac6fec8c7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "==== Stats ====\n",
+ "Total read pairs of sample 1: 167,920\n",
+ "Total read pairs of sample 2: 219,380\n",
+ "Total peaks of sample 1: 650 (unique: 277 common: 373)\n",
+ "Total peaks of sample 2: 560 (unique: 190 common: 370)\n",
+ "Number of merged common peaks: 369\n",
+ "M-A model: M = -0.04460 * A +0.18904\n",
+ "590 peaks are filtered as unbiased peaks\n",
+ "124 peaks are filtered as sample1-biased peaks\n",
+ "74 peaks are filtered as sample2-biased peaks\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Our log file tells us this information as well\n",
+ "!tail Tutorial3/DiffPeaks/log_manorm.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2832435-d335-476e-9bef-1c71797f10c7",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Annotating Peaks\n",
+ "
\n",
+ "\n",
+ "Let's take the differential peaks and annotate them with nearby genes and perform gene ontology using [homer](https://anaconda.org/bioconda/homer).\n",
+ "\n",
+ "First we need to reformat the differential peaks file to the format required by homer.\n",
+ "\n",
+ "In an earlier command, we examined the format of manorm's ouput using head and saw that it outputs a five column format. We will change this to a 6 column bed format including a unique name for each peak."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "7029964f-05bb-40e1-a007-69387a33485e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "chr4\t52059325\t52059732\tCTL_unique_1\t2.20155\t+\n",
+ "chr4\t52298589\t52298799\tCTL_unique_2\t1.09775\t+\n",
+ "chr4\t52550105\t52550494\tCTL_unique_3\t1.29536\t+\n",
+ "chr4\t52698223\t52698464\tCTL_unique_4\t1.84416\t+\n",
+ "chr4\t52834103\t52834470\tCTL_unique_5\t1.26119\t+\n",
+ "chr4\t52884232\t52884622\tCTL_unique_6\t1.09835\t+\n",
+ "chr4\t52968329\t52968671\tCTL_unique_7\t1.41519\t+\n",
+ "chr4\t52993914\t52994157\tCTL_unique_8\t1.22576\t+\n",
+ "chr4\t53595301\t53595477\tCTL_unique_9\t1.20393\t+\n",
+ "chr4\t53702525\t53703113\tCTL_unique_10\t1.07373\t+\n"
+ ]
+ }
+ ],
+ "source": [
+ "#This command will reformat the peaks file including the line number in naming the peaks (NR) as well as a place-holder strand in the 6th column (note that peaks don't necessarily have a strand, but the format requires this column). The -F \\t tells awk that the file is tab delimited.\n",
+ "!awk '{print $1\"\\t\"$2\"\\t\"$3\"\\t\"$4\"_\"NR\"\\t\"$5\"\\t+\"}' Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed > Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed\n",
+ "#Let's head this to compare\n",
+ "!head Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0996284a-06bd-43f2-ae7b-ed6807e5623c",
+ "metadata": {},
+ "source": [
+ "Now let's configure homer to recognize our genome build. We aligned our reads to hg38, so we'll have homer use that."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "32334764-854f-4739-a178-4273997248a2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "!perl /opt/conda/share/homer/configureHomer.pl -install hg38 2> Tutorial3/DiffPeaks/homer_log1.txt\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3f00783-28c0-4032-a841-42a5da716536",
+ "metadata": {},
+ "source": [
+ "Let's use that reformatted peak file to get nearby genes and perform gene onotology analysis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "a79558d5-24a2-4b4c-9795-48af65cf6545",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "\tPeak file = Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed\n",
+ "\tGenome = hg38\n",
+ "\tOrganism = human\n",
+ "\tWill perform Gene Ontology analysis - output to directory = Tutorial3/GenomeAnnotation/CTL_GO\n",
+ "\tPeak/BED file conversion summary:\n",
+ "\t\tBED/Header formatted lines: 124\n",
+ "\t\tpeakfile formatted lines: 0\n",
+ "\t\tDuplicated Peak IDs: 0\n",
+ "\n",
+ "\tPeak File Statistics:\n",
+ "\t\tTotal Peaks: 124\n",
+ "\t\tRedundant Peak IDs: 0\n",
+ "\t\tPeaks lacking information: 0 (need at least 5 columns per peak)\n",
+ "\t\tPeaks with misformatted coordinates: 0 (should be integer)\n",
+ "\t\tPeaks with misformatted strand: 0 (should be either +/- or 0/1)\n",
+ "\n",
+ "\tPeak file looks good!\n",
+ "\n",
+ "\tReading Positions...\n",
+ "\t-----------------------\n",
+ "\tFinding Closest TSS...\n",
+ "\tAnnotating:.\n",
+ "\t\tAnnotation\tNumber of peaks\tTotal size (bp)\tLog2 Ratio (obs/exp)\tLogP enrichment (+values depleted)\n",
+ "\t\t3UTR\t0.0\t1226327\t-0.852\t0.802\n",
+ "\t\tmiRNA\t0.0\t3258\t-0.003\t0.002\n",
+ "\t\tncRNA\t0.0\t315963\t-0.271\t0.206\n",
+ "\t\tTTS\t1.0\t1306500\t0.231\t-0.554\n",
+ "\t\tpseudo\t0.0\t40049\t-0.037\t0.026\n",
+ "\t\tExon\t0.0\t1490268\t-0.985\t0.975\n",
+ "\t\tIntron\t33.0\t73166083\t-0.532\t5.597\n",
+ "\t\tIntergenic\t84.0\t111121736\t0.213\t-3.865\n",
+ "\t\tPromoter\t5.0\t1403974\t2.450\t-6.038\n",
+ "\t\t5UTR\t1.0\t114432\t3.745\t-2.632\n",
+ "\tNOTE: If this part takes more than 2 minutes, there is a good chance\n",
+ "\t\tyour machine ran out of memory: consider hitting ctrl+C and rerunning\n",
+ "\t\tthe command with \"-noann\"\n",
+ "\tAnnotating:.\n",
+ "\t\tAnnotation\tNumber of peaks\tTotal size (bp)\tLog2 Ratio (obs/exp)\tLogP enrichment (+values depleted)\n",
+ "\t\t3UTR\t0.0\t1226327\t-0.852\t0.802\n",
+ "\t\tRetroposon\t0.0\t200838\t-0.178\t0.131\n",
+ "\t\tRC?\t0.0\t2850\t-0.003\t0.002\n",
+ "\t\tRNA\t0.0\t6910\t-0.006\t0.005\n",
+ "\t\tmiRNA\t0.0\t3258\t-0.003\t0.002\n",
+ "\t\tncRNA\t0.0\t315963\t-0.271\t0.206\n",
+ "\t\tTTS\t1.0\t1306500\t0.232\t-0.554\n",
+ "\t\tLINE\t18.0\t45014382\t-0.705\t4.777\n",
+ "\t\tsrpRNA\t0.0\t13945\t-0.013\t0.009\n",
+ "\t\tSINE\t6.0\t18936280\t-1.041\t3.470\n",
+ "\t\tRC\t0.0\t20949\t-0.020\t0.014\n",
+ "\t\ttRNA\t0.0\t2852\t-0.003\t0.002\n",
+ "\t\tDNA?\t0.0\t27318\t-0.025\t0.018\n",
+ "\t\tpseudo\t0.0\t40049\t-0.037\t0.026\n",
+ "\t\tDNA\t1.0\t6724040\t-2.132\t2.750\n",
+ "\t\tExon\t0.0\t1490268\t-0.985\t0.975\n",
+ "\t\tIntron\t25.0\t38474934\t-0.005\t0.605\n",
+ "\t\tIntergenic\t39.0\t48657251\t0.298\t-2.484\n",
+ "\t\tPromoter\t5.0\t1403974\t2.450\t-6.038\n",
+ "\t\t5UTR\t1.0\t114432\t3.745\t-2.632\n",
+ "\t\tLTR?\t0.0\t92183\t-0.084\t0.060\n",
+ "\t\tscRNA\t0.0\t6881\t-0.006\t0.004\n",
+ "\t\tCpG-Island\t0.0\t373419\t-0.315\t0.244\n",
+ "\t\tLow_complexity\t0.0\t365373\t-0.309\t0.238\n",
+ "\t\tLTR\t27.0\t20757981\t0.997\t-7.957\n",
+ "\t\tSimple_repeat\t1.0\t2265635\t-0.563\t0.572\n",
+ "\t\tsnRNA\t0.0\t18664\t-0.017\t0.012\n",
+ "\t\tUnknown\t0.0\t49238\t-0.046\t0.032\n",
+ "\t\tSINE?\t0.0\t130\t-0.000\t0.000\n",
+ "\t\tSatellite\t0.0\t2306654\t-1.335\t1.513\n",
+ "\t\trRNA\t0.0\t7760\t-0.007\t0.005\n",
+ "\tPerforming Gene Ontology Analysis...\n",
+ "rm: cannot remove '0.710786658429669.bg.tmp': No such file or directory\n",
+ "\tCounting Tags in Peaks from each directory...\n",
+ "\tOrganism: human\n",
+ "\tLoading Gene Informaiton...\n",
+ "\tOutputing Annotation File...\n",
+ "\tDone annotating peaks file\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "!annotatePeaks.pl Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed hg38 -go Tutorial3/GenomeAnnotation/CTL_GO -annStats Tutorial3/GenomeAnnotation/CTL_annStats.txt > Tutorial3/GenomeAnnotation/CTL_specific_Annotated.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ccb425f8-7be0-4854-9344-48479b57ab70",
+ "metadata": {},
+ "source": [
+ "Let's look at the output files. First, let's look at the first 2 lines of at our annotation stats."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "efa56f92-b6be-42dc-a3df-65a03b201e93",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " annotation \n",
+ " peakcount \n",
+ " size \n",
+ " foldenrichment \n",
+ " log10significance \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 5UTR \n",
+ " 1.0 \n",
+ " 114432 \n",
+ " 3.745 \n",
+ " -2.632 \n",
+ " \n",
+ " \n",
+ " 14 \n",
+ " Promoter \n",
+ " 5.0 \n",
+ " 1403974 \n",
+ " 2.450 \n",
+ " -6.038 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " LTR \n",
+ " 27.0 \n",
+ " 20757981 \n",
+ " 0.997 \n",
+ " -7.957 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " Intergenic \n",
+ " 39.0 \n",
+ " 48657251 \n",
+ " 0.298 \n",
+ " -2.484 \n",
+ " \n",
+ " \n",
+ " 24 \n",
+ " TTS \n",
+ " 1.0 \n",
+ " 1306500 \n",
+ " 0.232 \n",
+ " -0.554 \n",
+ " \n",
+ " \n",
+ " 23 \n",
+ " TTS \n",
+ " 1.0 \n",
+ " 1306500 \n",
+ " 0.231 \n",
+ " -0.554 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " Intergenic \n",
+ " 84.0 \n",
+ " 111121736 \n",
+ " 0.213 \n",
+ " -3.865 \n",
+ " \n",
+ " \n",
+ " 20 \n",
+ " SINE? \n",
+ " 0.0 \n",
+ " 130 \n",
+ " -0.000 \n",
+ " 0.000 \n",
+ " \n",
+ " \n",
+ " 33 \n",
+ " tRNA \n",
+ " 0.0 \n",
+ " 2852 \n",
+ " -0.003 \n",
+ " 0.002 \n",
+ " \n",
+ " \n",
+ " 26 \n",
+ " miRNA \n",
+ " 0.0 \n",
+ " 3258 \n",
+ " -0.003 \n",
+ " 0.002 \n",
+ " \n",
+ " \n",
+ " 16 \n",
+ " RC? \n",
+ " 0.0 \n",
+ " 2850 \n",
+ " -0.003 \n",
+ " 0.002 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " Intron \n",
+ " 25.0 \n",
+ " 38474934 \n",
+ " -0.005 \n",
+ " 0.605 \n",
+ " \n",
+ " \n",
+ " 30 \n",
+ " scRNA \n",
+ " 0.0 \n",
+ " 6881 \n",
+ " -0.006 \n",
+ " 0.004 \n",
+ " \n",
+ " \n",
+ " 17 \n",
+ " RNA \n",
+ " 0.0 \n",
+ " 6910 \n",
+ " -0.006 \n",
+ " 0.005 \n",
+ " \n",
+ " \n",
+ " 29 \n",
+ " rRNA \n",
+ " 0.0 \n",
+ " 7760 \n",
+ " -0.007 \n",
+ " 0.005 \n",
+ " \n",
+ " \n",
+ " 32 \n",
+ " srpRNA \n",
+ " 0.0 \n",
+ " 13945 \n",
+ " -0.013 \n",
+ " 0.009 \n",
+ " \n",
+ " \n",
+ " 31 \n",
+ " snRNA \n",
+ " 0.0 \n",
+ " 18664 \n",
+ " -0.017 \n",
+ " 0.012 \n",
+ " \n",
+ " \n",
+ " 15 \n",
+ " RC \n",
+ " 0.0 \n",
+ " 20949 \n",
+ " -0.020 \n",
+ " 0.014 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " DNA? \n",
+ " 0.0 \n",
+ " 27318 \n",
+ " -0.025 \n",
+ " 0.018 \n",
+ " \n",
+ " \n",
+ " 28 \n",
+ " pseudo \n",
+ " 0.0 \n",
+ " 40049 \n",
+ " -0.037 \n",
+ " 0.026 \n",
+ " \n",
+ " \n",
+ " 25 \n",
+ " Unknown \n",
+ " 0.0 \n",
+ " 49238 \n",
+ " -0.046 \n",
+ " 0.032 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " LTR? \n",
+ " 0.0 \n",
+ " 92183 \n",
+ " -0.084 \n",
+ " 0.060 \n",
+ " \n",
+ " \n",
+ " 18 \n",
+ " Retroposon \n",
+ " 0.0 \n",
+ " 200838 \n",
+ " -0.178 \n",
+ " 0.131 \n",
+ " \n",
+ " \n",
+ " 27 \n",
+ " ncRNA \n",
+ " 0.0 \n",
+ " 315963 \n",
+ " -0.271 \n",
+ " 0.206 \n",
+ " \n",
+ " \n",
+ " 13 \n",
+ " Low_complexity \n",
+ " 0.0 \n",
+ " 365373 \n",
+ " -0.309 \n",
+ " 0.238 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " CpG-Island \n",
+ " 0.0 \n",
+ " 373419 \n",
+ " -0.315 \n",
+ " 0.244 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " Intron \n",
+ " 33.0 \n",
+ " 73166083 \n",
+ " -0.532 \n",
+ " 5.597 \n",
+ " \n",
+ " \n",
+ " 22 \n",
+ " Simple_repeat \n",
+ " 1.0 \n",
+ " 2265635 \n",
+ " -0.563 \n",
+ " 0.572 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " LINE \n",
+ " 18.0 \n",
+ " 45014382 \n",
+ " -0.705 \n",
+ " 4.777 \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 3UTR \n",
+ " 0.0 \n",
+ " 1226327 \n",
+ " -0.852 \n",
+ " 0.802 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Exon \n",
+ " 0.0 \n",
+ " 1490268 \n",
+ " -0.985 \n",
+ " 0.975 \n",
+ " \n",
+ " \n",
+ " 19 \n",
+ " SINE \n",
+ " 6.0 \n",
+ " 18936280 \n",
+ " -1.041 \n",
+ " 3.470 \n",
+ " \n",
+ " \n",
+ " 21 \n",
+ " Satellite \n",
+ " 0.0 \n",
+ " 2306654 \n",
+ " -1.335 \n",
+ " 1.513 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " DNA \n",
+ " 1.0 \n",
+ " 6724040 \n",
+ " -2.132 \n",
+ " 2.750 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " annotation peakcount size foldenrichment log10significance\n",
+ "1 5UTR 1.0 114432 3.745 -2.632\n",
+ "14 Promoter 5.0 1403974 2.450 -6.038\n",
+ "11 LTR 27.0 20757981 0.997 -7.957\n",
+ "6 Intergenic 39.0 48657251 0.298 -2.484\n",
+ "24 TTS 1.0 1306500 0.232 -0.554\n",
+ "23 TTS 1.0 1306500 0.231 -0.554\n",
+ "7 Intergenic 84.0 111121736 0.213 -3.865\n",
+ "20 SINE? 0.0 130 -0.000 0.000\n",
+ "33 tRNA 0.0 2852 -0.003 0.002\n",
+ "26 miRNA 0.0 3258 -0.003 0.002\n",
+ "16 RC? 0.0 2850 -0.003 0.002\n",
+ "8 Intron 25.0 38474934 -0.005 0.605\n",
+ "30 scRNA 0.0 6881 -0.006 0.004\n",
+ "17 RNA 0.0 6910 -0.006 0.005\n",
+ "29 rRNA 0.0 7760 -0.007 0.005\n",
+ "32 srpRNA 0.0 13945 -0.013 0.009\n",
+ "31 snRNA 0.0 18664 -0.017 0.012\n",
+ "15 RC 0.0 20949 -0.020 0.014\n",
+ "4 DNA? 0.0 27318 -0.025 0.018\n",
+ "28 pseudo 0.0 40049 -0.037 0.026\n",
+ "25 Unknown 0.0 49238 -0.046 0.032\n",
+ "12 LTR? 0.0 92183 -0.084 0.060\n",
+ "18 Retroposon 0.0 200838 -0.178 0.131\n",
+ "27 ncRNA 0.0 315963 -0.271 0.206\n",
+ "13 Low_complexity 0.0 365373 -0.309 0.238\n",
+ "2 CpG-Island 0.0 373419 -0.315 0.244\n",
+ "9 Intron 33.0 73166083 -0.532 5.597\n",
+ "22 Simple_repeat 1.0 2265635 -0.563 0.572\n",
+ "10 LINE 18.0 45014382 -0.705 4.777\n",
+ "0 3UTR 0.0 1226327 -0.852 0.802\n",
+ "5 Exon 0.0 1490268 -0.985 0.975\n",
+ "19 SINE 6.0 18936280 -1.041 3.470\n",
+ "21 Satellite 0.0 2306654 -1.335 1.513\n",
+ "3 DNA 1.0 6724040 -2.132 2.750"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Clean up duplicate entries\n",
+ "!sort -u Tutorial3/GenomeAnnotation/CTL_annStats.txt | grep -v Annotation > Tutorial3/GenomeAnnotation/CTL_annStats_clean.txt\n",
+ "\n",
+ "#Load results into a pandas table\n",
+ "annstats = pd.read_csv(\"Tutorial3/GenomeAnnotation/CTL_annStats_clean.txt\", sep='\\t', header=None, names=['annotation','peakcount','size','foldenrichment','log10significance'])\n",
+ "\n",
+ "#View entries sorted by enrichment\n",
+ "annstats_sorted = annstats.sort_values(by=[\"foldenrichment\"], ascending=False)\n",
+ "display(annstats_sorted)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74893643-1429-4894-afeb-e4af6d745a1d",
+ "metadata": {},
+ "source": [
+ "From this we can see highest enrichment in 5' UTRs and promoters.\n",
+ "\n",
+ "Let's plot the results as a barplot.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "4fe8630e-b47a-4bb4-b9c1-80c6e93f1644",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAFOCAYAAAB0Xv3hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7wElEQVR4nO2deZgdVdH/P5UQCUvCGlkMIYALKIQAYZNN2dQXRRCQTQREAeWVTdxQAfVVUUAFN0TZFIQfYVUQ2QwJq5CQEJaAQAgaVAgoEHYD9fujzs309PSd23eZzEzn+3meeebe7upTp/uerj5dp04dc3eEEEIMbob0dwWEEEK0j4y5EEJUABlzIYSoADLmQghRAWTMhRCiAsiYCyFEBeiYMTezoWY23cyu7lSZQgghytHJnvlRwKwOlieEEKIkS3SiEDMbDewCfAc4tpH8yiuv7GPHju2EaiGEWGyYNm3aM+4+qmhfR4w58GPgS8CIegJmdihwKMCYMWOYOnVqh1QLIcTigZk9UW9f224WM/sw8LS7T+tNzt3PcvcJ7j5h1KjCB4sQQogW6YTPfCtgVzObA1wMbG9mF3SgXCGEECVp25i7+1fdfbS7jwX2Af7s7p9ou2ZCCCFK0ymfuRBigPHf//6XuXPn8uqrr/Z3VUSTDB8+nNGjRzNs2LDSx3TUmLv7zcDNnSxTCNEac+fOZcSIEYwdOxYz6+/qiJK4O88++yxz585lrbXWKn2cZoAKUVFeffVVVlppJRnyQYaZsdJKKzX9RiVjLkSFkSEfnLTyu8mYCyFEBejXAdCxX7mmx7Y5J+/SDzURovoU3W/tUOZePeOMM/jFL37BxhtvzIUXXthj/3nnncfUqVP56U9/2mPfsssuy4svvtiRup555pksvfTSfPKTnyzcf/PNN3Pqqady9dWLLrXUeeedx84778zqq6/ekfIUzSKE6DN+/vOfc+211zY1kNdpFixYwOGHH95v+utx3nnnsf7663fMmMvNIoToEw4//HBmz57NrrvuymmnncZuu+3GuHHj2GKLLZg5c2YP+ccff5wtt9ySTTfdlG984xvd9p1yyilsuummjBs3jhNPPBGAOXPmsN566/GZz3yG97znPey888688sorALzvfe/j+OOPZ7vttuP000/npJNO4tRTTwXg0UcfZccdd2TDDTdk44035rHHHgPgxRdfZM8992Tddddl//33p7bY/dixYzn++OPZcsstmTBhAvfccw8f+MAHWGeddTjzzDNbquOll17K1KlT2X///Rk/fvzCereDjLkQok8488wzWX311Zk0aRJz5sxho402YubMmXz3u98tdHccddRRfPazn+Xuu+9m1VVXXbj9+uuv55FHHuGuu+5ixowZTJs2jSlTpgDwyCOPcMQRR/DAAw+w/PLLc9llly087rnnnmPy5Ml84Qtf6KZn//3354gjjuDee+/l9ttvZ7XVVgNg+vTp/PjHP+bBBx9k9uzZ3HbbbQuPWWONNbjjjjvYZpttOOigg7j00ku58847OeGEE1qq45577smECRO48MILmTFjBksttVTb11vGXAjR59x6660ccMABAGy//fY8++yzPP/8891kbrvtNvbdd1+AhbIQhvL6669no402YuONN+ahhx7ikUceAWCttdZi/PjxAGyyySbMmTNn4XF77713j3rMnz+fJ598kt133x2IyTlLL700AJttthmjR49myJAhjB8/vltZu+66KwAbbLABm2++OSNGjGDUqFEMHz6c5557ruU6dhL5zIUQfU7NZZGlKPyuaJu789WvfpXDDjus2/Y5c+aw5JJLLvw+dOjQbu6KZZZZplQ9auTLWrBgQY99Q4YM6SY3ZMgQFixY0HIdO4l65kKIPmfbbbddGM1y8803s/LKKzNy5MhuMltttRUXX3wxQLfIlw984AOcc845CyNbnnzySZ5++umW6jFy5EhGjx7NlVdeCcBrr73Gyy+/3FJZWVqp44gRI5g/f37bumuoZy7EYkJ/hv2edNJJHHzwwYwbN46ll16a888/v4fM6aefzn777cfpp5/OHnvssXD7zjvvzKxZs9hyyy2BCFm84IILGDp0aEt1+e1vf8thhx3GCSecwLBhw5g4cWJrJ5WhlToedNBBHH744Sy11FLccccdbfvNrbfXjr5iwoQJPnXqVMWZC9GHzJo1i/XWW6+/qyFapOj3M7Np7j6hSF5uFiGEqAAy5kIIUQFkzIWoMP3hRhXt08rvJmMuREUZPnw4zz77rAz6IKOWz3z48OFNHadoFiEqyujRo5k7dy7z5s3r76qIJqmtNNQMMuZCVJRhw4b1a4IrsWiRm0UIISqAjLkQQlQAGXMhhKgAMuZCCFEBZMyFEKICyJgLIUQFkDEXQogK0LYx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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "annstats_sorted.plot.bar(x=\"annotation\", y=\"foldenrichment\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ddd988cb-5409-4734-bcf7-5a740a9e9a96",
+ "metadata": {},
+ "source": [
+ "Homer also outputs the nearest annotation for each peak. Let's look at the first few lines of our annotation file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "bff56b0d-72a8-4532-b1f7-fa4f064f2c91",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "PeakID (cmd=annotatePeaks.pl Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed hg38 -go Tutorial3/GenomeAnnotation/CTL_GO -annStats Tutorial3/GenomeAnnotation/CTL_annStats.txt)\tChr\tStart\tEnd\tStrand\tPeak Score\tFocus Ratio/Region Size\tAnnotation\tDetailed Annotation\tDistance to TSS\tNearest PromoterID\tEntrez ID\tNearest Unigene\tNearest Refseq\tNearest Ensembl\tGene Name\tGene Alias\tGene Description\tGene Type\n",
+ "CTL_unique_56\tchr4\t64144792\t64145494\t+\t3.01611\tNA\tIntergenic\tHERVK11-int|LTR|ERVK\t264307\tNM_001010874\t253017\tHs.227752\tNM_001010874\tENSG00000205678\tTECRL\tCPVT3|GPSN2L|SRD5A2L2|TERL\ttrans-2,3-enoyl-CoA reductase like\tprotein-coding\n",
+ "merged_common_90\tchr4\t54545647\t54546360\t+\t2.38644\tNA\tIntergenic\tIntergenic\t61128\tNR_134657\t339978\t\tNR_134657\tENSG00000250456\tLINC02260\t-\tlong intergenic non-protein coding RNA 2260\tncRNA\n",
+ "CTL_unique_51\tchr4\t62835674\t62836120\t+\t2.34453\tNA\tIntergenic\tIntergenic\t-674132\tNR_110595\t101927186\tHs.723269\tNR_110595\t\tADGRL3-AS1\tLPHN3-AS1\tadhesion G protein-coupled receptor L3 antisense RNA 1\tncRNA\n"
+ ]
+ }
+ ],
+ "source": [
+ "!head -4 Tutorial3/GenomeAnnotation/CTL_specific_Annotated.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7193cee9-f1cc-40b5-84be-a1aae44bd217",
+ "metadata": {},
+ "source": [
+ "Lastly, let's take a look at the gene ontology results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "59b16ae4-3d55-4363-8d27-4d812a98b115",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "biocyc.txt\t\tinteractions.txt\t prints.txt\n",
+ "biological_process.txt\tinterpro.txt\t\t prosite.txt\n",
+ "cellular_component.txt\tkegg.txt\t\t reactome.txt\n",
+ "chromosome.txt\t\tlipidmaps.txt\t\t smart.txt\n",
+ "cosmic.txt\t\tmolecular_function.txt\t smpdb.txt\n",
+ "gene3d.txt\t\tmsigdb.txt\t\t wikipathways.txt\n",
+ "geneOntology.html\tpathwayInteractionDB.txt\n",
+ "gwas.txt\t\tpfam.txt\n"
+ ]
+ }
+ ],
+ "source": [
+ "#list the files in our GO directory\n",
+ "!ls Tutorial3/GenomeAnnotation/CTL_GO/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b2ea0509-a6a4-4df0-8d69-dec674e7e3f1",
+ "metadata": {},
+ "source": [
+ "Let's view the top terms in the biological_process category."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "98cdaf7b-a83b-40de-bff4-9587642d60fb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " TermID \n",
+ " Term \n",
+ " Enrichment \n",
+ " logP \n",
+ " Genes in Term \n",
+ " Target Genes in Term \n",
+ " Fraction of Targets in Term \n",
+ " Total Target Genes \n",
+ " Total Genes \n",
+ " Entrez Gene IDs \n",
+ " Gene Symbols \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " GO:0052695 \n",
+ " cellular glucuronidation \n",
+ " 8.476896e-07 \n",
+ " -13.980751 \n",
+ " 18 \n",
+ " 3 \n",
+ " 0.15 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 79799,10941,7364 \n",
+ " UGT2A3,UGT2A1,UGT2B7 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " GO:0006063 \n",
+ " uronic acid metabolic process \n",
+ " 1.833506e-06 \n",
+ " -13.209280 \n",
+ " 23 \n",
+ " 3 \n",
+ " 0.15 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 79799,7364,10941 \n",
+ " UGT2A3,UGT2B7,UGT2A1 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " GO:0019585 \n",
+ " glucuronate metabolic process \n",
+ " 1.833506e-06 \n",
+ " -13.209280 \n",
+ " 23 \n",
+ " 3 \n",
+ " 0.15 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 79799,10941,7364 \n",
+ " UGT2A3,UGT2A1,UGT2B7 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " GO:0010817 \n",
+ " regulation of hormone levels \n",
+ " 1.370570e-05 \n",
+ " -11.197699 \n",
+ " 528 \n",
+ " 6 \n",
+ " 0.30 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 6783,5978,9575,7364,27284,2044 \n",
+ " SULT1E1,REST,CLOCK,UGT2B7,SULT1B1,EPHA5 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " GO:0006068 \n",
+ " ethanol catabolic process \n",
+ " 7.141780e-05 \n",
+ " -9.546963 \n",
+ " 12 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 27284,6783 \n",
+ " SULT1B1,SULT1E1 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " GO:0034310 \n",
+ " primary alcohol catabolic process \n",
+ " 1.134005e-04 \n",
+ " -9.084585 \n",
+ " 15 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 6783,27284 \n",
+ " SULT1E1,SULT1B1 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " GO:0051923 \n",
+ " sulfation \n",
+ " 1.295173e-04 \n",
+ " -8.951696 \n",
+ " 16 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 27284,6783 \n",
+ " SULT1B1,SULT1E1 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " GO:0006067 \n",
+ " ethanol metabolic process \n",
+ " 2.259286e-04 \n",
+ " -8.395291 \n",
+ " 21 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 27284,6783 \n",
+ " SULT1B1,SULT1E1 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " GO:0050427 \n",
+ " 3'-phosphoadenosine 5'-phosphosulfate metaboli... \n",
+ " 2.963633e-04 \n",
+ " -8.123925 \n",
+ " 24 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 27284,6783 \n",
+ " SULT1B1,SULT1E1 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " GO:0034035 \n",
+ " purine ribonucleoside bisphosphate metabolic p... \n",
+ " 3.219272e-04 \n",
+ " -8.041185 \n",
+ " 25 \n",
+ " 2 \n",
+ " 0.10 \n",
+ " 20 \n",
+ " 18680 \n",
+ " 6783,27284 \n",
+ " SULT1E1,SULT1B1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " TermID Term \\\n",
+ "0 GO:0052695 cellular glucuronidation \n",
+ "1 GO:0006063 uronic acid metabolic process \n",
+ "2 GO:0019585 glucuronate metabolic process \n",
+ "3 GO:0010817 regulation of hormone levels \n",
+ "4 GO:0006068 ethanol catabolic process \n",
+ "5 GO:0034310 primary alcohol catabolic process \n",
+ "6 GO:0051923 sulfation \n",
+ "7 GO:0006067 ethanol metabolic process \n",
+ "8 GO:0050427 3'-phosphoadenosine 5'-phosphosulfate metaboli... \n",
+ "9 GO:0034035 purine ribonucleoside bisphosphate metabolic p... \n",
+ "\n",
+ " Enrichment logP Genes in Term Target Genes in Term \\\n",
+ "0 8.476896e-07 -13.980751 18 3 \n",
+ "1 1.833506e-06 -13.209280 23 3 \n",
+ "2 1.833506e-06 -13.209280 23 3 \n",
+ "3 1.370570e-05 -11.197699 528 6 \n",
+ "4 7.141780e-05 -9.546963 12 2 \n",
+ "5 1.134005e-04 -9.084585 15 2 \n",
+ "6 1.295173e-04 -8.951696 16 2 \n",
+ "7 2.259286e-04 -8.395291 21 2 \n",
+ "8 2.963633e-04 -8.123925 24 2 \n",
+ "9 3.219272e-04 -8.041185 25 2 \n",
+ "\n",
+ " Fraction of Targets in Term Total Target Genes Total Genes \\\n",
+ "0 0.15 20 18680 \n",
+ "1 0.15 20 18680 \n",
+ "2 0.15 20 18680 \n",
+ "3 0.30 20 18680 \n",
+ "4 0.10 20 18680 \n",
+ "5 0.10 20 18680 \n",
+ "6 0.10 20 18680 \n",
+ "7 0.10 20 18680 \n",
+ "8 0.10 20 18680 \n",
+ "9 0.10 20 18680 \n",
+ "\n",
+ " Entrez Gene IDs Gene Symbols \n",
+ "0 79799,10941,7364 UGT2A3,UGT2A1,UGT2B7 \n",
+ "1 79799,7364,10941 UGT2A3,UGT2B7,UGT2A1 \n",
+ "2 79799,10941,7364 UGT2A3,UGT2A1,UGT2B7 \n",
+ "3 6783,5978,9575,7364,27284,2044 SULT1E1,REST,CLOCK,UGT2B7,SULT1B1,EPHA5 \n",
+ "4 27284,6783 SULT1B1,SULT1E1 \n",
+ "5 6783,27284 SULT1E1,SULT1B1 \n",
+ "6 27284,6783 SULT1B1,SULT1E1 \n",
+ "7 27284,6783 SULT1B1,SULT1E1 \n",
+ "8 27284,6783 SULT1B1,SULT1E1 \n",
+ "9 6783,27284 SULT1E1,SULT1B1 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "bp_GO = pd.read_csv(\"Tutorial3/GenomeAnnotation/CTL_GO/biological_process.txt\", sep='\\t')\n",
+ "\n",
+ "#keep most significant\n",
+ "bp_GO_top10 = bp_GO.nsmallest(10, \"logP\")\n",
+ "display(bp_GO_top10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d86df868-6af0-4bf9-880f-62142230bdc4",
+ "metadata": {},
+ "source": [
+ "We can also plot the enrichment scores\n",
+ "\n",
+ "Note that our results may look a little odd because we have severely downsampled the data to run quickly and focus on a single region of chr4. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "0aec57a7-412d-41fd-8aea-d8b164faa49b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "bp_GO_top10.plot.bar(x=\"Term\", y=\"Enrichment\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a6dcf583-f555-48b6-b330-b9bdfdd295da",
+ "metadata": {},
+ "source": [
+ "Homer also saves an html file where you can navigate through the various categories."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "deac4a6f-882c-42eb-acb5-f74712bbec2a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#View the html results\n",
+ "IFrame(src='Tutorial3/GenomeAnnotation/CTL_GO/geneOntology.html', width=900, height=600)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c1e519a4-f4b8-4641-b03d-2e8d51ad9e6f",
+ "metadata": {},
+ "source": [
+ "In the above html you can click throught the different ontology categories to view enriched terms and scores for genes near our differential peaks. Note that there are links to motifs, but these lead to \"pages not found\" because we have yet to do this analysis. We will run motif analysis in the next section using TOBIAS."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ff448764-630e-4898-8321-19bb6f6d357e",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Motif Footprinting\n",
+ "
\n",
+ "\n",
+ "### ATAC-seq can be used to identify accessibility at transcription factor (TF) binding sites. We'll use [tobias](https://anaconda.org/bioconda/tobias).\n",
+ "\n",
+ " \n",
+ "\n",
+ "From: [Bentsen et al., Nat. Comm. 2020](https://www.nature.com/articles/s41467-020-18035-1)\n",
+ "\n",
+ "Tn5 insertion during ATAC-seq has a sequence bias. In our first step, let's correct for that bias."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "bd4b3b34-2e1a-40f3-9f41-ad0bd6ae20f5",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "# TOBIAS 0.13.3 ATACorrect (run started 2022-09-08 17:20:57.460575)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS ATACorrect --bam Tutorial3/InputFiles/CTL_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix CTL --cores 3 --verbosity 1\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# bam:\tTutorial3/InputFiles/CTL_dedup.bam\n",
+ "# genome:\tTutorial3/InputFiles/chr4.fa\n",
+ "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "# regions_in:\tNone\n",
+ "# regions_out:\tNone\n",
+ "# blacklist:\tNone\n",
+ "# extend:\t100\n",
+ "# split_strands:\tFalse\n",
+ "# norm_off:\tFalse\n",
+ "# track_off:\t[]\n",
+ "# k_flank:\t12\n",
+ "# read_shift:\t[4, -5]\n",
+ "# bg_shift:\t100\n",
+ "# window:\t100\n",
+ "# score_mat:\tDWM\n",
+ "# prefix:\tCTL\n",
+ "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting\n",
+ "# cores:\t3\n",
+ "# split:\t100\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_uncorrected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_bias.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_expected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_corrected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_atacorrect.pdf\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "# TOBIAS 0.13.3 ATACorrect (run started 2022-09-08 17:22:15.527430)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS ATACorrect --bam Tutorial3/InputFiles/Mutant_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix Mutant --cores 3 --verbosity 1\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# bam:\tTutorial3/InputFiles/Mutant_dedup.bam\n",
+ "# genome:\tTutorial3/InputFiles/chr4.fa\n",
+ "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "# regions_in:\tNone\n",
+ "# regions_out:\tNone\n",
+ "# blacklist:\tNone\n",
+ "# extend:\t100\n",
+ "# split_strands:\tFalse\n",
+ "# norm_off:\tFalse\n",
+ "# track_off:\t[]\n",
+ "# k_flank:\t12\n",
+ "# read_shift:\t[4, -5]\n",
+ "# bg_shift:\t100\n",
+ "# window:\t100\n",
+ "# score_mat:\tDWM\n",
+ "# prefix:\tMutant\n",
+ "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting\n",
+ "# cores:\t3\n",
+ "# split:\t100\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_uncorrected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_bias.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_expected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_corrected.bw\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_atacorrect.pdf\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Tn5 has an insertion sequence bias, which Tobias can correct for. Let's use the master list of peaks provided by manorm, but we need to first remove the header and extra columns.\n",
+ "!cat Tutorial3/DiffPeaks/CTL_vs_Mutant_all_MAvalues.xls | cut -f 1-3 | grep -v start > Tutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "\n",
+ "#Now let's do the signal correction\n",
+ "!TOBIAS ATACorrect --bam Tutorial3/InputFiles/CTL_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix CTL --cores $numthreadsint --verbosity 1\n",
+ "#Let's also do this for the mutant\n",
+ "!TOBIAS ATACorrect --bam Tutorial3/InputFiles/Mutant_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix Mutant --cores $numthreadsint --verbosity 1\n",
+ "\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "21da1001-529f-4e62-8e44-2f475bfd35d4",
+ "metadata": {},
+ "source": [
+ "Now let's use the bias-corrected bigwig files to calculate footprint scores around peaks"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "6ca0ae04-b409-4c5d-b318-0887edc0f3c8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "# TOBIAS 0.13.3 ScoreBigwig (run started 2022-09-08 17:23:22.614510)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/CTL_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/CTL_footprintscores.bw --cores 3 --verbosity 1\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# signal:\tTutorial3/MotifFootprinting/CTL_corrected.bw\n",
+ "# output:\tTutorial3/MotifFootprinting/CTL_footprintscores.bw\n",
+ "# regions:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "# score:\tfootprint\n",
+ "# absolute:\tFalse\n",
+ "# extend:\t100\n",
+ "# smooth:\t1\n",
+ "# min_limit:\tNone\n",
+ "# max_limit:\tNone\n",
+ "# fp_min:\t20\n",
+ "# fp_max:\t50\n",
+ "# flank_min:\t10\n",
+ "# flank_max:\t30\n",
+ "# window:\t100\n",
+ "# cores:\t3\n",
+ "# split:\t100\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# Tutorial3/MotifFootprinting/CTL_footprintscores.bw\n",
+ "\n",
+ "\n",
+ "\n",
+ "# TOBIAS 0.13.3 ScoreBigwig (run started 2022-09-08 17:23:51.559028)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/Mutant_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --cores 3 --verbosity 1\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# signal:\tTutorial3/MotifFootprinting/Mutant_corrected.bw\n",
+ "# output:\tTutorial3/MotifFootprinting/Mutant_footprintscores.bw\n",
+ "# regions:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "# score:\tfootprint\n",
+ "# absolute:\tFalse\n",
+ "# extend:\t100\n",
+ "# smooth:\t1\n",
+ "# min_limit:\tNone\n",
+ "# max_limit:\tNone\n",
+ "# fp_min:\t20\n",
+ "# fp_max:\t50\n",
+ "# flank_min:\t10\n",
+ "# flank_max:\t30\n",
+ "# window:\t100\n",
+ "# cores:\t3\n",
+ "# split:\t100\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# Tutorial3/MotifFootprinting/Mutant_footprintscores.bw\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "!TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/CTL_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/CTL_footprintscores.bw --cores $numthreadsint --verbosity 1\n",
+ "\n",
+ "#Let's do the same for our mutant sample\n",
+ "!TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/Mutant_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --cores $numthreadsint --verbosity 1\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "affb7253-ed1b-4b21-8377-47f20f868eab",
+ "metadata": {},
+ "source": [
+ "Now that we have our corrected signal and footprint scores, let's do TF binding site prediciton as well as differential footprinting.\n",
+ "\n",
+ "Caution: this step searches throug the signal at every signal location corresponding to motifs in your jaspar file. Here we use all the motifs in the jaspar database. This can take several minutes..."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "688f95c8-2649-4f7b-aa91-43ac8f4cd163",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2022-09-08 17:24:20-- https://jaspar.genereg.net/download/data/2022/CORE/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt\n",
+ "Resolving jaspar.genereg.net (jaspar.genereg.net)... 193.60.222.202\n",
+ "Connecting to jaspar.genereg.net (jaspar.genereg.net)|193.60.222.202|:443... connected.\n",
+ "HTTP request sent, awaiting response... 200 OK\n",
+ "Length: 327864 (320K) [text/plain]\n",
+ "Saving to: ‘Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt.2’\n",
+ "\n",
+ "JASPAR2022_CORE_ver 100%[===================>] 320.18K 819KB/s in 0.4s \n",
+ "\n",
+ "2022-09-08 17:24:21 (819 KB/s) - ‘Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt.2’ saved [327864/327864]\n",
+ "\n",
+ "# TOBIAS 0.13.3 BINDetect (run started 2022-09-08 17:24:29.162477)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS BINDetect --motifs Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt --signals Tutorial3/MotifFootprinting/CTL_footprintscores.bw Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting/DiffMotifs --cond_names CTL Mutant --cores 3 --verbosity 1\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# signals:\t['Tutorial3/MotifFootprinting/CTL_footprintscores.bw', 'Tutorial3/MotifFootprinting/Mutant_footprintscores.bw']\n",
+ "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n",
+ "# motifs:\t['Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt']\n",
+ "# genome:\tTutorial3/InputFiles/chr4.fa\n",
+ "# cond_names:\t['CTL', 'Mutant']\n",
+ "# peak_header:\tNone\n",
+ "# naming:\tname_id\n",
+ "# motif_pvalue:\t0.0001\n",
+ "# bound_pvalue:\t0.001\n",
+ "# pseudo:\tNone\n",
+ "# time_series:\tFalse\n",
+ "# skip_excel:\tFalse\n",
+ "# output_peaks:\tNone\n",
+ "# norm_off:\tFalse\n",
+ "# prefix:\tbindetect\n",
+ "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs\n",
+ "# cores:\t3\n",
+ "# split:\t100\n",
+ "# debug:\tFalse\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_CTL_bound.bed\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_CTL_unbound.bed\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_Mutant_bound.bed\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_Mutant_unbound.bed\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_all.bed\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/plots/*_log2fcs.pdf\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/*_overview.txt\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/*_overview.xlsx\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_distances.txt\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.txt\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.xlsx\n",
+ "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_figures.pdf\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "done\n"
+ ]
+ }
+ ],
+ "source": [
+ "#First, we'll download the current jaspar motifs\n",
+ "!wget https://jaspar.genereg.net/download/data/2022/CORE/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt -P Tutorial3/MotifFootprinting/\n",
+ "\n",
+ "#Next we can calculate statistics for each motif represented in our jaspar motif file. If we list both our CTL and Mutant sample, it will calculate the differential footprint score for us as well.\n",
+ "!TOBIAS BINDetect --motifs Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt --signals Tutorial3/MotifFootprinting/CTL_footprintscores.bw Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting/DiffMotifs --cond_names CTL Mutant --cores $numthreadsint --verbosity 1\n",
+ "\n",
+ "print(\"done\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "880bab0f-ee58-4f1b-8e62-e1e6e1811809",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#View the html results\n",
+ "IFrame(src='Tutorial3/MotifFootprinting/DiffMotifs/bindetect_CTL_Mutant.html', width=900, height=600)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e5180387-42ea-4d87-b1f2-2d320640af2b",
+ "metadata": {},
+ "source": [
+ "In the above html file you can hover over each point to see the motif name and the sequence. This type of plot is a volcano plot showing the differntial signal on the x-axis and the significance values on the y-axis.\n",
+ "\n",
+ "For example, the original paper focused on TP63, which is one of our differential dots in the html file. \n",
+ "\n",
+ " \n",
+ "\n",
+ "Let's visualize the averge footprint at TP63 motifs."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "f9683a4e-48ba-426b-91cb-5befa06b1d32",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "# TOBIAS 0.13.3 PlotAggregate (run started 2022-09-08 17:32:40.206683)\n",
+ "# Working directory: /home/jupyter\n",
+ "# Command line call: TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2 --signal-on-x\n",
+ "\n",
+ "# ----- Input parameters -----\n",
+ "# TFBS:\t['Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed']\n",
+ "# signals:\t['Tutorial3/MotifFootprinting/CTL_corrected.bw', 'Tutorial3/MotifFootprinting/Mutant_corrected.bw']\n",
+ "# regions:\t[]\n",
+ "# whitelist:\t[]\n",
+ "# blacklist:\t[]\n",
+ "# output:\tTutorial3/MotifFootprinting/TP63_footprint_compare.png\n",
+ "# output_txt:\tNone\n",
+ "# title:\tAggregated signals\n",
+ "# flank:\t60\n",
+ "# TFBS_labels:\tNone\n",
+ "# signal_labels:\tNone\n",
+ "# region_labels:\tNone\n",
+ "# share_y:\tboth\n",
+ "# normalize:\tFalse\n",
+ "# negate:\tFalse\n",
+ "# smooth:\t2\n",
+ "# log_transform:\tFalse\n",
+ "# plot_boundaries:\tTrue\n",
+ "# signal_on_x:\tTrue\n",
+ "# remove_outliers:\t1\n",
+ "# verbosity:\t1\n",
+ "\n",
+ "\n",
+ "# ----- Output files -----\n",
+ "# Tutorial3/MotifFootprinting/TP63_footprint_compare.png\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "#IFrame(src='Tutorial2/MotifFootprinting/MYBL1_MA0776.1/plots/MYBL1_MA0776.1_log2fcs.pdf', width=900, height=600) \n",
+ "\n",
+ "#note change to Tutorial3\n",
+ "#!TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2\n",
+ "!TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2 --signal-on-x"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "ad9b80da-1111-4079-a308-d7cb6ddc2a2d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IFrame(src='Tutorial3/MotifFootprinting/TP63_footprint_compare.png', width=600, height=400) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a0b72adc-4b71-4234-9549-6381a56bfb39",
+ "metadata": {},
+ "source": [
+ "We can also get all the motifs that have differential footprints:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "5a06ef84-9a27-4d55-be1d-fed572711daa",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " output_prefix \n",
+ " name \n",
+ " motif_id \n",
+ " cluster \n",
+ " total_tfbs \n",
+ " CTL_mean_score \n",
+ " CTL_bound \n",
+ " Mutant_mean_score \n",
+ " Mutant_bound \n",
+ " CTL_Mutant_change \n",
+ " CTL_Mutant_pvalue \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Arnt_MA0004.1 \n",
+ " Arnt \n",
+ " MA0004.1 \n",
+ " C_MYC \n",
+ " 38 \n",
+ " 85.96989 \n",
+ " 16 \n",
+ " 108.49836 \n",
+ " 17 \n",
+ " -0.38044 \n",
+ " 6.770010e-46 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " AhrArnt_MA0006.1 \n",
+ " Ahr::Arnt \n",
+ " MA0006.1 \n",
+ " C_Ahr::Arnt \n",
+ " 48 \n",
+ " 122.76261 \n",
+ " 24 \n",
+ " 115.51752 \n",
+ " 22 \n",
+ " 0.16911 \n",
+ " 1.449010e-19 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Ddit3Cebpa_MA0019.1 \n",
+ " Ddit3::Cebpa \n",
+ " MA0019.1 \n",
+ " C_Ddit3::Cebpa \n",
+ " 62 \n",
+ " 80.02984 \n",
+ " 24 \n",
+ " 80.33066 \n",
+ " 23 \n",
+ " 0.01484 \n",
+ " 3.154620e-01 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Mecom_MA0029.1 \n",
+ " Mecom \n",
+ " MA0029.1 \n",
+ " C_Mecom \n",
+ " 74 \n",
+ " 61.73375 \n",
+ " 20 \n",
+ " 58.21405 \n",
+ " 21 \n",
+ " 0.04212 \n",
+ " 6.585970e-03 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " FOXF2_MA0030.1 \n",
+ " FOXF2 \n",
+ " MA0030.1 \n",
+ " C_FOXD1 \n",
+ " 70 \n",
+ " 54.91816 \n",
+ " 16 \n",
+ " 57.50246 \n",
+ " 12 \n",
+ " 0.02761 \n",
+ " 8.515360e-02 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 836 \n",
+ " ZNF281_MA1630.2 \n",
+ " ZNF281 \n",
+ " MA1630.2 \n",
+ " C_ZNF281 \n",
+ " 442 \n",
+ " 87.47939 \n",
+ " 177 \n",
+ " 93.39031 \n",
+ " 192 \n",
+ " -0.09821 \n",
+ " 5.581870e-38 \n",
+ " \n",
+ " \n",
+ " 837 \n",
+ " BACH1_MA1633.2 \n",
+ " BACH1 \n",
+ " MA1633.2 \n",
+ " C_JUNB \n",
+ " 292 \n",
+ " 107.34839 \n",
+ " 180 \n",
+ " 93.78244 \n",
+ " 132 \n",
+ " 0.44431 \n",
+ " 1.568740e-86 \n",
+ " \n",
+ " \n",
+ " 838 \n",
+ " Prdm4_MA1647.2 \n",
+ " Prdm4 \n",
+ " MA1647.2 \n",
+ " C_Prdm4 \n",
+ " 90 \n",
+ " 65.87505 \n",
+ " 28 \n",
+ " 60.36949 \n",
+ " 24 \n",
+ " 0.21506 \n",
+ " 1.012680e-39 \n",
+ " \n",
+ " \n",
+ " 839 \n",
+ " THAP1_MA0597.2 \n",
+ " THAP1 \n",
+ " MA0597.2 \n",
+ " C_THAP1 \n",
+ " 236 \n",
+ " 90.56928 \n",
+ " 101 \n",
+ " 82.79266 \n",
+ " 92 \n",
+ " 0.16360 \n",
+ " 6.101670e-48 \n",
+ " \n",
+ " \n",
+ " 840 \n",
+ " NR5A1_MA1540.2 \n",
+ " NR5A1 \n",
+ " MA1540.2 \n",
+ " C_NR5A1 \n",
+ " 88 \n",
+ " 60.87309 \n",
+ " 20 \n",
+ " 63.31646 \n",
+ " 24 \n",
+ " 0.00384 \n",
+ " 2.234170e-01 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
841 rows × 11 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " output_prefix name motif_id cluster total_tfbs \\\n",
+ "0 Arnt_MA0004.1 Arnt MA0004.1 C_MYC 38 \n",
+ "1 AhrArnt_MA0006.1 Ahr::Arnt MA0006.1 C_Ahr::Arnt 48 \n",
+ "2 Ddit3Cebpa_MA0019.1 Ddit3::Cebpa MA0019.1 C_Ddit3::Cebpa 62 \n",
+ "3 Mecom_MA0029.1 Mecom MA0029.1 C_Mecom 74 \n",
+ "4 FOXF2_MA0030.1 FOXF2 MA0030.1 C_FOXD1 70 \n",
+ ".. ... ... ... ... ... \n",
+ "836 ZNF281_MA1630.2 ZNF281 MA1630.2 C_ZNF281 442 \n",
+ "837 BACH1_MA1633.2 BACH1 MA1633.2 C_JUNB 292 \n",
+ "838 Prdm4_MA1647.2 Prdm4 MA1647.2 C_Prdm4 90 \n",
+ "839 THAP1_MA0597.2 THAP1 MA0597.2 C_THAP1 236 \n",
+ "840 NR5A1_MA1540.2 NR5A1 MA1540.2 C_NR5A1 88 \n",
+ "\n",
+ " CTL_mean_score CTL_bound Mutant_mean_score Mutant_bound \\\n",
+ "0 85.96989 16 108.49836 17 \n",
+ "1 122.76261 24 115.51752 22 \n",
+ "2 80.02984 24 80.33066 23 \n",
+ "3 61.73375 20 58.21405 21 \n",
+ "4 54.91816 16 57.50246 12 \n",
+ ".. ... ... ... ... \n",
+ "836 87.47939 177 93.39031 192 \n",
+ "837 107.34839 180 93.78244 132 \n",
+ "838 65.87505 28 60.36949 24 \n",
+ "839 90.56928 101 82.79266 92 \n",
+ "840 60.87309 20 63.31646 24 \n",
+ "\n",
+ " CTL_Mutant_change CTL_Mutant_pvalue \n",
+ "0 -0.38044 6.770010e-46 \n",
+ "1 0.16911 1.449010e-19 \n",
+ "2 0.01484 3.154620e-01 \n",
+ "3 0.04212 6.585970e-03 \n",
+ "4 0.02761 8.515360e-02 \n",
+ ".. ... ... \n",
+ "836 -0.09821 5.581870e-38 \n",
+ "837 0.44431 1.568740e-86 \n",
+ "838 0.21506 1.012680e-39 \n",
+ "839 0.16360 6.101670e-48 \n",
+ "840 0.00384 2.234170e-01 \n",
+ "\n",
+ "[841 rows x 11 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#!load the results as a pandas table Tutorial2/MotifFootprinting/bindetect_results.txt\n",
+ "dframe = pd.read_csv(\"Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.txt\", sep='\\t')\n",
+ "display(dframe)\n",
+ "DiffMotifs = dframe[dframe['CTL_Mutant_pvalue'] < .05]\n",
+ "#Write out to a tab separated file\n",
+ "DiffMotifs.to_csv('Tutorial3/MotifFootprinting/DiffMotifs_p05.txt')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "12439dc4-b9ad-49fa-9ccb-4383a272bcaf",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Great job! \n",
+ "
\n",
+ "Thank you for completing these tutorials. Feel free to download these notebooks, customize, and use them to process your own data. \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b3de930a-e91c-4d95-8d78-f98689f503ed",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m94",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m94"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb b/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb
new file mode 100644
index 0000000..9e1fd1e
--- /dev/null
+++ b/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb
@@ -0,0 +1,1205 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "ddee0923-844f-42c8-9273-7e32d7178628",
+ "metadata": {
+ "tags": [
+ "skip"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Defaulting to user installation because normal site-packages is not writeable\n",
+ "Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (22.0.4)\n",
+ "Collecting pip\n",
+ " Downloading pip-22.3.1-py3-none-any.whl (2.1 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.1/2.1 MB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: pip\n",
+ "Successfully installed pip-22.3.1\n",
+ "\u001b[33mWARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.\n",
+ "You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n",
+ "\u001b[0mDefaulting to user installation because normal site-packages is not writeable\n",
+ "Collecting pendulum==2.1.2\n",
+ " Downloading pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl (155 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m155.7/155.7 kB\u001b[0m \u001b[31m6.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting pytzdata>=2020.1\n",
+ " Downloading pytzdata-2020.1-py2.py3-none-any.whl (489 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m490.0/490.0 kB\u001b[0m \u001b[31m25.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: python-dateutil<3.0,>=2.6 in /usr/local/lib/python3.8/dist-packages (from pendulum==2.1.2) (2.8.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil<3.0,>=2.6->pendulum==2.1.2) (1.16.0)\n",
+ "Installing collected packages: pytzdata, pendulum\n",
+ "Successfully installed pendulum-2.1.2 pytzdata-2020.1\n",
+ "Defaulting to user installation because normal site-packages is not writeable\n",
+ "Requirement already satisfied: pandas==1.4.4 in /usr/local/lib/python3.8/dist-packages (1.4.4)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (2022.5)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (2.8.2)\n",
+ "Requirement already satisfied: numpy>=1.18.5 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (1.19.5)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.8.1->pandas==1.4.4) (1.16.0)\n",
+ "Defaulting to user installation because normal site-packages is not writeable\n",
+ "Requirement already satisfied: matplotlib==3.3.4 in /usr/local/lib/python3.8/dist-packages (3.3.4)\n",
+ "Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (1.19.5)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (9.2.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (2.8.2)\n",
+ "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (3.0.9)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (0.11.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (1.4.4)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.1->matplotlib==3.3.4) (1.16.0)\n",
+ "Defaulting to user installation because normal site-packages is not writeable\n",
+ "Collecting tensorflow==2.11.0\n",
+ " Downloading tensorflow-2.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (588.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m588.3/588.3 MB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: wrapt>=1.11.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.14.1)\n",
+ "Collecting tensorboard<2.12,>=2.11\n",
+ " Downloading tensorboard-2.11.0-py3-none-any.whl (6.0 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.0/6.0 MB\u001b[0m \u001b[31m100.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: packaging in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (21.3)\n",
+ "Collecting tensorflow-estimator<2.12,>=2.11.0\n",
+ " Downloading tensorflow_estimator-2.11.0-py2.py3-none-any.whl (439 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m439.2/439.2 kB\u001b[0m \u001b[31m57.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting tensorflow-io-gcs-filesystem>=0.23.1\n",
+ " Downloading tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.4 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m92.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting opt-einsum>=2.3.2\n",
+ " Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.5/65.5 kB\u001b[0m \u001b[31m10.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting protobuf<3.20,>=3.9.2\n",
+ " Downloading protobuf-3.19.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m92.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting google-pasta>=0.1.1\n",
+ " Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting libclang>=13.0.0\n",
+ " Downloading libclang-14.0.6-py2.py3-none-manylinux2010_x86_64.whl (14.1 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.1/14.1 MB\u001b[0m \u001b[31m109.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting absl-py>=1.0.0\n",
+ " Downloading absl_py-1.3.0-py3-none-any.whl (124 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m124.6/124.6 kB\u001b[0m \u001b[31m26.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting gast<=0.4.0,>=0.2.1\n",
+ " Downloading gast-0.4.0-py3-none-any.whl (9.8 kB)\n",
+ "Requirement already satisfied: setuptools in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (62.0.0)\n",
+ "Collecting astunparse>=1.6.0\n",
+ " Downloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)\n",
+ "Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (2.0.1)\n",
+ "Collecting flatbuffers>=2.0\n",
+ " Downloading flatbuffers-23.1.4-py2.py3-none-any.whl (26 kB)\n",
+ "Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.16.0)\n",
+ "Collecting keras<2.12,>=2.11.0\n",
+ " Downloading keras-2.11.0-py2.py3-none-any.whl (1.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m76.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting numpy>=1.20\n",
+ " Downloading numpy-1.24.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.3/17.3 MB\u001b[0m \u001b[31m108.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting h5py>=2.9.0\n",
+ " Downloading h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (4.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m91.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (3.10.0.2)\n",
+ "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.50.0)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/lib/python3/dist-packages (from astunparse>=1.6.0->tensorflow==2.11.0) (0.30.0)\n",
+ "Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.8/dist-packages (from tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.28.1)\n",
+ "Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.8/dist-packages (from tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.34.0)\n",
+ "Collecting markdown>=2.6.8\n",
+ " Downloading Markdown-3.4.1-py3-none-any.whl (93 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m93.3/93.3 kB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting werkzeug>=1.0.1\n",
+ " Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m232.7/232.7 kB\u001b[0m \u001b[31m37.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting tensorboard-data-server<0.7.0,>=0.6.0\n",
+ " Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m114.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting google-auth-oauthlib<0.5,>=0.4.1\n",
+ " Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB)\n",
+ "Collecting tensorboard-plugin-wit>=1.6.0\n",
+ " Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m781.3/781.3 kB\u001b[0m \u001b[31m83.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.8/dist-packages (from packaging->tensorflow==2.11.0) (3.0.9)\n",
+ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (0.2.8)\n",
+ "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (4.2.2)\n",
+ "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (4.9)\n",
+ "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.8/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.3.1)\n",
+ "Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.8/dist-packages (from markdown>=2.6.8->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (5.0.0)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.2)\n",
+ "Requirement already satisfied: charset-normalizer<3,>=2 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.1.1)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2021.5.30)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.26.12)\n",
+ "Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.8/dist-packages (from werkzeug>=1.0.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.1.1)\n",
+ "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.8/dist-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.10.0)\n",
+ "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.8/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (0.4.8)\n",
+ "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.8/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.2.2)\n",
+ "Installing collected packages: tensorboard-plugin-wit, libclang, flatbuffers, werkzeug, tensorflow-io-gcs-filesystem, tensorflow-estimator, tensorboard-data-server, protobuf, numpy, keras, google-pasta, gast, astunparse, absl-py, opt-einsum, markdown, h5py, google-auth-oauthlib, tensorboard, tensorflow\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "yellowbrick 1.3 requires numpy<1.20,>=1.16.0, but you have numpy 1.24.1 which is incompatible.\n",
+ "scipy 1.6.3 requires numpy<1.23.0,>=1.16.5, but you have numpy 1.24.1 which is incompatible.\n",
+ "ml-metadata 0.30.0 requires absl-py<0.13,>=0.9, but you have absl-py 1.3.0 which is incompatible.\n",
+ "kserve 0.8.0 requires numpy~=1.19.2, but you have numpy 1.24.1 which is incompatible.\n",
+ "kfp 1.7.post0+41.gb3589b6c6 requires absl-py<=0.11,>=0.9, but you have absl-py 1.3.0 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed absl-py-1.3.0 astunparse-1.6.3 flatbuffers-23.1.4 gast-0.4.0 google-auth-oauthlib-0.4.6 google-pasta-0.2.0 h5py-3.7.0 keras-2.11.0 libclang-14.0.6 markdown-3.4.1 numpy-1.24.1 opt-einsum-3.3.0 protobuf-3.19.6 tensorboard-2.11.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.1 tensorflow-2.11.0 tensorflow-estimator-2.11.0 tensorflow-io-gcs-filesystem-0.29.0 werkzeug-2.2.2\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kale as skip\n",
+ "! pip3 install --upgrade pip\n",
+ "! pip3 install pendulum==2.1.2\n",
+ "! pip3 install pandas==1.4.4\n",
+ "! pip3 install matplotlib==3.3.4\n",
+ "! pip3 install --upgrade tensorflow==2.11.0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "7352040d-d4ca-41af-81ca-8df30e7de6cb",
+ "metadata": {
+ "tags": [
+ "skip"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "# mark in Kale as skip\n",
+ "import os\n",
+ "\n",
+ "if not os.getenv(\"IS_TESTING\"):\n",
+ " # Automatically restart kernel after installs\n",
+ " import IPython\n",
+ "\n",
+ " app = IPython.Application.instance()\n",
+ " app.kernel.do_shutdown(True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "619de0db-3878-4254-93a4-4404553d0ecf",
+ "metadata": {
+ "tags": [
+ "imports"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "# mark in katib as imports\n",
+ "import pendulum\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import warnings\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.keras.models import Model\n",
+ "from tensorflow.keras.layers import Dense, Flatten, Conv1D, Dropout, BatchNormalization, Lambda\n",
+ "from tensorflow.keras.regularizers import l1,l2, L1L2\n",
+ "import matplotlib.pyplot as plt\n",
+ "from scipy import stats\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "42103b5f-1c53-4047-99ba-690e5bb7d398",
+ "metadata": {
+ "tags": [
+ "skip"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'2023-01-051310'"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Set time in the pipeline parameters and in Katib (as string and the only value) to the output of this\n",
+ "pendulum.now(tz='America/New_York').__str__()[:16].replace('T','').replace(':','').replace('_','-')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "fd604bf6-0d00-4178-9deb-28465c915c29",
+ "metadata": {
+ "tags": [
+ "pipeline-parameters"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "# mark in Kayle as pipeline parameters\n",
+ "data_file_to_run = \"IMP_height.txt\"\n",
+ "\n",
+ "experiment_description = \"Soy Height GWAS\"\n",
+ "\n",
+ "learning_rate = 0.001 # 0.0001957\n",
+ "conv_1_dropout_rate = 0.50 # Dropout rate for first convolutional layer\n",
+ "conv_1_kernel_l1 = 0.2 # L1 and l2 regularization for the first conv1d layer's weights\n",
+ "conv_1_kernel_l2 = 0.6\n",
+ "conv_1_bias_l2 = 0.6 # L1 and l2 regularization for the first conv1d layer's bias\n",
+ "conv_1_activity_l2 = 0.00001 # L1 and l2 activity regularization for the first conv1d layer\n",
+ "\n",
+ "conv_x_kernel_l1 = 0.3\n",
+ "conv_x_kernel_l2 = 0.3\n",
+ "conv_x_bias_l2 = 0.6\n",
+ "conv_x_activity_l2 = 0.0001\n",
+ "\n",
+ "dense_x_kernel_l1 = 0.3\n",
+ "dense_x_kernel_l2 = 0.6\n",
+ "dense_x_bias_l2 = 0.0001\n",
+ "dense_x_activity_l2 = 0.0001\n",
+ "\n",
+ "dense_out_kernel_l1 = 0.1\n",
+ "dense_out_kernel_l2 = 0.6\n",
+ "dense_out_bias_l2 = 0.6\n",
+ "dense_out_activity_l2 = 0.00001\n",
+ "\n",
+ "conv_initializer = 'TruncatedNormal' # # 'TruncatedNormal' 'glorot_uniform' \"GlorotNormal\", \"HeNormal\" 'random_normal' \n",
+ "dese_initializer = \"GlorotNormal\" # 'TruncatedNormal' # \"GlorotUniform\"\n",
+ "\n",
+ "dropout_rate = 0.151\n",
+ "num_dense_layers = 3\n",
+ "num_dense_units = 20\n",
+ "\n",
+ "conv_activation = \"elu\" # \"linear\"\n",
+ "activation = \"elu\"\n",
+ "loss = 'huber_loss' # 'mean_squared_error' 'mean_absolute_error'\n",
+ "\n",
+ "final_activation_scale_factor = 3.5\n",
+ "\n",
+ "batch_size = 30\n",
+ "epochs = 2\n",
+ "\n",
+ "time = '2023-01-051310'\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "e06747ae-77b6-4524-b803-fc0d87512fbb",
+ "metadata": {
+ "tags": [
+ "block:preprocessing"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Preprocessing successful\n"
+ ]
+ }
+ ],
+ "source": [
+ "# mark in Kayle as pipeline step: \"preprocessing\": Depends on none\n",
+ "\n",
+ "ht = pd.read_csv(data_file_to_run, sep = '\\t')\n",
+ "ht_pd = ht_relevant_cols = ht.drop(columns = ['strain', 'height', 'folds'])\n",
+ "phenotypes_norm = ht_pd.pop(\"norm_phe\")\n",
+ "for col in ht_pd.columns:\n",
+ " ht_pd[col] = ht_pd[col].astype('category')\n",
+ "ohe_height_genotypes = pd.get_dummies(ht_pd)\n",
+ "\n",
+ "def train_test_splitting(row, split_ratio):\n",
+ " string_of_row = \"\".join([str(l) for l in list(row.values)])\n",
+ " return (abs(hash(string_of_row)) % 10) / 10 < split_ratio\n",
+ "belongs_in_train_set_index =\\\n",
+ " np.array([train_test_splitting(ohe_height_genotypes.loc[i],0.7)\n",
+ " for i in np.arange(ht_pd.shape[0])])\n",
+ "\n",
+ "train_ohe_height_genotypes = ohe_height_genotypes[belongs_in_train_set_index]\n",
+ "val_ohe_height_genotypes = ohe_height_genotypes[~belongs_in_train_set_index]\n",
+ "\n",
+ "train_phenotypes_norm = phenotypes_norm[belongs_in_train_set_index]\n",
+ "val_phenotypes_norm = phenotypes_norm[~belongs_in_train_set_index]\n",
+ "\n",
+ "# Make sure the number of rows in test and train add up to the original rows\n",
+ "assert train_ohe_height_genotypes.shape[0] + val_ohe_height_genotypes.shape[0] == ht_pd.shape[0]\n",
+ "\n",
+ "# Data as a numpy array...\n",
+ "train_ohe_height_genotypes_np = train_ohe_height_genotypes.values\n",
+ "val_ohe_height_genotypes_np = val_ohe_height_genotypes.values\n",
+ "\n",
+ "train_phenotypes_norm_np = train_phenotypes_norm.values\n",
+ "val_phenotypes_norm_np = val_phenotypes_norm.values\n",
+ "\n",
+ "# Reshape to fit the conv1D network. \n",
+ "train_np_ohe_reshaped_for_conv_1_d =\\\n",
+ " train_ohe_height_genotypes_np.reshape((train_ohe_height_genotypes_np.shape[0],\n",
+ " train_ohe_height_genotypes_np.shape[1], 1))\n",
+ "val_np_ohe_reshaped_for_conv_1_d =\\\n",
+ " val_ohe_height_genotypes_np.reshape((val_ohe_height_genotypes_np.shape[0],\n",
+ " val_ohe_height_genotypes_np.shape[1],1))\n",
+ "\n",
+ "np.save('train_data_ready', train_np_ohe_reshaped_for_conv_1_d)\n",
+ "np.save('val_data_ready', val_np_ohe_reshaped_for_conv_1_d)\n",
+ "np.save('train_labels_ready', train_phenotypes_norm_np)\n",
+ "np.save('val_labels_ready',val_phenotypes_norm_np)\n",
+ "\n",
+ "# Since the data was reshaped for the convolutional 1D neural network, we are also saving the \n",
+ "# non-reshaped data to be used for calculating saliency.\n",
+ "\n",
+ "np.save(\"val_snps_for_saliency\", val_ohe_height_genotypes_np)\n",
+ "\n",
+ "print(\"Preprocessing successful\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "dd01e8b2-78ba-4315-9e12-9153b1c57ce5",
+ "metadata": {
+ "tags": [
+ "block:train",
+ "prev:preprocessing"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/2\n",
+ " 37/120 [========>.....................] - ETA: 1:07 - loss: 569.6301 - mean_absolute_error: 2.0097"
+ ]
+ },
+ {
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn [41], line 132\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[38;5;66;03m# qa_data_model = Model(inputs = inputs, outputs = outputs)\u001b[39;00m\n\u001b[1;32m 126\u001b[0m our_data_model\u001b[38;5;241m.\u001b[39mcompile(loss\u001b[38;5;241m=\u001b[39mloss,\n\u001b[1;32m 127\u001b[0m optimizer\u001b[38;5;241m=\u001b[39mtf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39moptimizers\u001b[38;5;241m.\u001b[39mAdam(learning_rate\u001b[38;5;241m=\u001b[39mlearning_rate),\n\u001b[1;32m 128\u001b[0m metrics\u001b[38;5;241m=\u001b[39m[tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mmetrics\u001b[38;5;241m.\u001b[39mMeanAbsoluteError()],\n\u001b[1;32m 129\u001b[0m jit_compile\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 131\u001b[0m history \u001b[38;5;241m=\u001b[39m\\\n\u001b[0;32m--> 132\u001b[0m \u001b[43mour_data_model\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtrain_snps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 133\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtrain_phenotypes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 134\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mepochs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 136\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mval_snps\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mval_phenotypes\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43mshuffle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_multiprocessing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;66;03m# Requirement 6: save and log your artifact. \u001b[39;00m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;66;03m# I'm adding a random number to the file name as an\u001b[39;00m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;66;03m# extra layer of safety nets against race conditions\u001b[39;00m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;66;03m# / file name conflicts\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \n\u001b[1;32m 144\u001b[0m \u001b[38;5;66;03m# tn = str(int(np.random.random() * 10 ** 12))\u001b[39;00m\n\u001b[1;32m 145\u001b[0m model_folder \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-model\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras/utils/traceback_utils.py:65\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 65\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras/engine/training.py:1650\u001b[0m, in \u001b[0;36mModel.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1642\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mprofiler\u001b[38;5;241m.\u001b[39mexperimental\u001b[38;5;241m.\u001b[39mTrace(\n\u001b[1;32m 1643\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 1644\u001b[0m epoch_num\u001b[38;5;241m=\u001b[39mepoch,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1647\u001b[0m _r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 1648\u001b[0m ):\n\u001b[1;32m 1649\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m-> 1650\u001b[0m tmp_logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1651\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_handler\u001b[38;5;241m.\u001b[39mshould_sync:\n\u001b[1;32m 1652\u001b[0m context\u001b[38;5;241m.\u001b[39masync_wait()\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:880\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 877\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 879\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 880\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 882\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 883\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:919\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 916\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 917\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 918\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 919\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_variable_creation_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 920\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ALLOW_DYNAMIC_VARIABLE_CREATION:\n\u001b[1;32m 921\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 922\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compiler.py:134\u001b[0m, in \u001b[0;36mTracingCompiler.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock:\n\u001b[1;32m 132\u001b[0m (concrete_function,\n\u001b[1;32m 133\u001b[0m filtered_flat_args) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_define_function(args, kwargs)\n\u001b[0;32m--> 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mfiltered_flat_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:1745\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1741\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1745\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_call_outputs(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1746\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcancellation_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcancellation_manager\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1747\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1748\u001b[0m args,\n\u001b[1;32m 1749\u001b[0m possible_gradient_type,\n\u001b[1;32m 1750\u001b[0m executing_eagerly)\n\u001b[1;32m 1751\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:378\u001b[0m, in \u001b[0;36m_EagerDefinedFunction.call\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _InterpolateFunctionError(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 377\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_manager \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 378\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 379\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msignature\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 380\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_num_outputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 381\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 382\u001b[0m \u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 383\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mctx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 384\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 385\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 386\u001b[0m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msignature\u001b[38;5;241m.\u001b[39mname),\n\u001b[1;32m 387\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 390\u001b[0m ctx\u001b[38;5;241m=\u001b[39mctx,\n\u001b[1;32m 391\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_manager)\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/execute.py:52\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 51\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 52\u001b[0m tensors \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_Execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_handle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mop_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+ ]
+ }
+ ],
+ "source": [
+ "# mark in Kayle as pipeline step \"train\": depends on \"data-preprocessing\"\n",
+ "nb_classes = 3\n",
+ "\n",
+ "data_files = ['./train_data_ready.npy',\n",
+ " \"./val_data_ready.npy\",\n",
+ " \"./train_labels_ready.npy\",\n",
+ " \"./val_labels_ready.npy\"]\n",
+ "# artifact_bucket_root_name = artifacts_bucket.split('/')[-1]\n",
+ "# print(artifact_bucket_root_name)\n",
+ "# storage_client = storage.Client()\n",
+ "# bucket = storage_client.get_bucket(artifact_bucket_root_name)\n",
+ "\n",
+ "ht_np_train = np.load('train_data_ready.npy', allow_pickle=True)\n",
+ "ht_np_val = np.load('val_data_ready.npy', allow_pickle=True)\n",
+ "train_labels_np = np.load('train_labels_ready.npy', allow_pickle=True)\n",
+ "val_labels_np = np.load('val_labels_ready.npy', allow_pickle=True)\n",
+ "\n",
+ "train_snps = ht_np_train\n",
+ "train_phenotypes = train_labels_np\n",
+ "val_snps = ht_np_val\n",
+ "val_phenotypes = val_labels_np\n",
+ "\n",
+ "# print(\"min\")\n",
+ "# print(val_phenotypes.min())\n",
+ "# print(\"max\")\n",
+ "# print(val_phenotypes.max())\n",
+ "\n",
+ "inputs =\\\n",
+ " tf.keras.layers.Input(\n",
+ " shape=(train_snps.shape[1], \n",
+ " train_snps.shape[2])) # train_snps.shape[1] ,nb_classes))\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " nb_classes,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_1_kernel_l1, l2=conv_1_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_1_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_1_activity_l2)\n",
+ " )(inputs)\n",
+ "\n",
+ " # kernel_initializer = conv_initializer ,\n",
+ " # kernel_regularizer=\"l2\", bias_regularizer = \"l2\")\n",
+ "x = Dropout(conv_1_dropout_rate)(x)\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " 20,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n",
+ " # kernel_initializer = 'TruncatedNormal',\n",
+ " # kernel_regularizer=\"l2\",\n",
+ " # bias_regularizer=\"l2\"\n",
+ " )(x) # Leaving l1 l2 on head layer only to see if this prevents everything from zeroing out.\n",
+ "\n",
+ "x = Dropout(dropout_rate)(x)\n",
+ "\n",
+ "\n",
+ "shortcut = Conv1D(10,\n",
+ " 4,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2))(inputs)\n",
+ "shortcut = Dropout(dropout_rate)(shortcut)\n",
+ "x = tf.keras.layers.Add()([shortcut,x])\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " 4,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n",
+ " # kernel_initializer = 'TruncatedNormal', \n",
+ " # kernel_regularizer = \"l2\",\n",
+ " # bias_regularizer = \"l2\"\n",
+ " )(x)\n",
+ "\n",
+ "# x = Dropout(dropout_rate)(x)\n",
+ "\n",
+ "x = Flatten()(x)\n",
+ "# x = Dropout(dropout_rate)(x)\n",
+ "x = BatchNormalization()(x)\n",
+ "\n",
+ "if num_dense_layers > 0:\n",
+ " y = x\n",
+ " for i in np.arange(num_dense_layers):\n",
+ " y = Dense(num_dense_units, \n",
+ " activation,\n",
+ " kernel_initializer=dese_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_x_kernel_l1, l2=dense_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(dense_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(dense_x_activity_l2)\n",
+ " )(y)\n",
+ " # y = Dropout(dropout_rate)(y)\n",
+ " y = BatchNormalization()(y)\n",
+ " \n",
+ " x = tf.keras.layers.Concatenate(axis=1)([x,y])\n",
+ " x = BatchNormalization()(x)\n",
+ "\n",
+ "outputs_unscaled = Dense(1,\n",
+ " activation=\"softsign\",\n",
+ " kernel_initializer=dese_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_out_kernel_l1, l2=dense_out_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(dense_out_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(dense_out_activity_l2),\n",
+ " # bias_regularizer = \"l2\",\n",
+ " # kernel_initializer = 'TruncatedNormal',\n",
+ " name = 'out')(x) # Should have no activation\n",
+ "# Softsign coerces the output to the range {-1,1}. The labels are norm scaled, \n",
+ "# where the range {-2,2} or {-3,3} encompasses most values. We multiply by a scalar \n",
+ "# and the range will terminate at +/- said scalar. No telling which one is optimal,\n",
+ "# so we'll le the the tuner figure out what: \n",
+ "outputs = Lambda(lambda x: x * final_activation_scale_factor)(outputs_unscaled) \n",
+ "\n",
+ "our_data_model = Model(inputs = inputs, outputs = outputs)\n",
+ "# qa_data_model = Model(inputs = inputs, outputs = outputs)\n",
+ "our_data_model.compile(loss=loss,\n",
+ " optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),\n",
+ " metrics=[tf.keras.metrics.MeanAbsoluteError()],\n",
+ " jit_compile=True)\n",
+ "\n",
+ "history =\\\n",
+ " our_data_model.fit(x = train_snps,\n",
+ " y = train_phenotypes,\n",
+ " batch_size=batch_size,\n",
+ " epochs=epochs,\n",
+ " validation_data=(val_snps, val_phenotypes),\n",
+ " shuffle= True,\n",
+ " use_multiprocessing=True)\n",
+ "# Requirement 6: save and log your artifact. \n",
+ "# I'm adding a random number to the file name as an\n",
+ "# extra layer of safety nets against race conditions\n",
+ "# / file name conflicts\n",
+ "\n",
+ "# tn = str(int(np.random.random() * 10 ** 12))\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "our_data_model.save(model_folder)\n",
+ "\n",
+ "history_df = pd.DataFrame(history.history)\n",
+ "\n",
+ "history_df[[\"mean_absolute_error\", \"val_mean_absolute_error\"]].plot()\n",
+ "plt.savefig(f'{model_folder}-history.png')\n",
+ "\n",
+ "print(model_folder)\n",
+ "\n",
+ "val_mean_absolute_error = float(history_df['val_mean_absolute_error'].values.min())\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "74954dbc-9133-40d5-9f23-400a39807724",
+ "metadata": {
+ "tags": [
+ "block:saliency_observed",
+ "prev:preprocessing"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "# mark in Kayle as pipeline step: \"saliency - known\": depends on \"data-preprocessing\"\n",
+ "\n",
+ "# Calculate observed p values: (Depends on data preprocessing)\n",
+ "\n",
+ "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n",
+ "val_phenotypes_k = np.load('val_labels_ready.npy', allow_pickle=True)\n",
+ "\n",
+ "p_values = []\n",
+ "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n",
+ " column_index_lower_bound = 3 * i\n",
+ " column_index_upper_bound = 3 * i + 3\n",
+ " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n",
+ " data_reshaped = np.argmax(data, axis=1)\n",
+ " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_k)\n",
+ " p_values.append(p_value)\n",
+ "p_values_observed_np = np.array(p_values)\n",
+ "np.save('p_values_observed_np', \n",
+ " p_values_observed_np, \n",
+ " allow_pickle=True)\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "464ffbb4-eb9e-438e-ac1e-292a2e45a99f",
+ "metadata": {
+ "tags": [
+ "block:manhattan_observed",
+ "prev:saliency_observed"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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fj5Wrlyp9V+XLl2Qm5uLtWvXamkWLFgARVHQqVMnLc3ixYvh9/u1NPPmzUPjxo0vSlUPpRSDBg3CtGnTsGDBAouqq127doiMjDT0a2ZmJg4cOGDo182bNxsYwHnz5iEpKQnNmjXT0oh58DT/X8a2oijwer1uf5YRvXv3xubNm7Fhwwbt0759ewwYMED77varizPG+bbcLe+YPHkyjY6OpuPHj6fbtm2jjz76KE1JSTFYo/9/RkFBAV2/fj1dv349BUA//vhjun79erp//35KqeqCnJKSQn/77Te6adMmev3119u6ILdt25auXLmSLlmyhDZs2NDggpybm0vT0tLoPffcQ7ds2UInT55M4+LiLloX5CeeeIImJyfTv//+mx49elT7FBcXa2kef/xxWqtWLbpgwQK6Zs0a2qVLF9qlSxftPnftvPLKK+mGDRvo7NmzaeXKlW1dO1988UWakZFBv/jii4vWtXPIkCF00aJFdO/evXTTpk10yJAhlBBC586dSyl1+/NsQfTuodTtVxdnDpdJCQOjRo2itWrVolFRUbRjx450xYoV57tK5QYLFy6kACyf++67j1KquiG//vrrNC0tjUZHR9PevXvTzMxMQx4nT56kd955J01ISKBJSUn0gQceoAUFBYY0GzdupJdddhmNjo6m1atXp8OHD/+3mvivw64/AdBx48ZpaUpKSuiTTz5JU1NTaVxcHL3xxhvp0aNHDfns27eP9uvXj8bGxtJKlSrR559/nvr9fkOahQsX0jZt2tCoqChar149QxkXEx588EFau3ZtGhUVRStXrkx79+6tMSiUuv15tmBmUtx+dXGmIJRSen5kOC5cuHDhwoULF85wbVJcuHDhwoULF+USLpPiwoULFy5cuCiXcJkUFy5cuHDhwkW5hMukuHDhwoULFy7KJVwmxYULFy5cuHBRLuEyKS5cuHDhwoWLcgmXSXHhwoULFy5clEu4TIoLFxcQxo8fbzhVdujQoWjTps1ZLePvv/8GIcRy5ooLFy5c/NtwmRQXLs4hDh48iAcffBDVqlVDVFQUateujWeeeQYnT548K/m/8MILlnNN/g1s3LgR1113HapUqYKYmBjUqVMHt99+u3YGy759+0AIQZUqVVBQUGB4tk2bNhg6dKj2u2fPniCEgBCCmJgYNGvWDKNHj/43m+PChYtyCpdJceHiHGHP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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "p_values_observed_np = np.load('p_values_observed_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log = -1 * np.log10(p_values_observed_np)\n",
+ "slug = np.arange(p_values_observed_np.shape[0])\n",
+ "\n",
+ "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n",
+ "plt.title(f\"Manhattan Plot for {experiment_description} - observed\")\n",
+ "plt.xlabel(\"Ordinal SNP\")\n",
+ "plt.ylabel(\"- log10 observed P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 observed P values\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-observed\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "f18fae63-9e34-4d5b-b5d7-76e08e94142c",
+ "metadata": {
+ "tags": [
+ "block:saliency_predicted",
+ "prev:train"
+ ]
+ },
+ "outputs": [
+ {
+ "ename": "FileNotFoundError",
+ "evalue": "[Errno 2] No such file or directory: 'val_snps_for_saliency.npy'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn [13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m val_snps_s \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mval_snps_for_saliency.npy\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallow_pickle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m model_folder \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-model\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_saved_model\u001b[39m(final_activation_scale_factor: \u001b[38;5;28mfloat\u001b[39m, model_folder: \u001b[38;5;28mstr\u001b[39m):\n",
+ "File \u001b[0;32m~/.local/lib/python3.8/site-packages/numpy/lib/npyio.py:405\u001b[0m, in \u001b[0;36mload\u001b[0;34m(file, mmap_mode, allow_pickle, fix_imports, encoding, max_header_size)\u001b[0m\n\u001b[1;32m 403\u001b[0m own_fid \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 405\u001b[0m fid \u001b[38;5;241m=\u001b[39m stack\u001b[38;5;241m.\u001b[39menter_context(\u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mos_fspath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrb\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 406\u001b[0m own_fid \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 408\u001b[0m \u001b[38;5;66;03m# Code to distinguish from NumPy binary files and pickles.\u001b[39;00m\n",
+ "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'val_snps_for_saliency.npy'"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "\n",
+ "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "\n",
+ "def get_saved_model(final_activation_scale_factor: float, model_folder: str):\n",
+ " final_model = tf.keras.models.load_model(model_folder)\n",
+ " for layer in final_model.layers:\n",
+ " layer.trainable=False\n",
+ " return final_model\n",
+ " # print(layer.weights)\n",
+ "\n",
+ "final_model = get_saved_model(final_activation_scale_factor=final_activation_scale_factor, model_folder = model_folder)\n",
+ "val_phenotypes_p = final_model.predict(val_snps_s).flatten()\n",
+ "\n",
+ "p_values_p = []\n",
+ "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n",
+ " column_index_lower_bound = 3 * i\n",
+ " column_index_upper_bound = 3 * i + 3\n",
+ " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n",
+ " data_reshaped = np.argmax(data, axis=1)\n",
+ " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_p)\n",
+ " p_values_p.append(p_value)\n",
+ "p_values_predicted_np = np.array(p_values_p)\n",
+ "np.save('p_values_predicted_np', \n",
+ " p_values_predicted_np, \n",
+ " allow_pickle=True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "043678ab-c0ae-45d7-8fdc-259d3138adba",
+ "metadata": {
+ "tags": [
+ "block:manttan_predcted",
+ "prev:saliency_predicted"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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/XjvvfewceNGTJ06Ffv27cP9998fdtvS09MRCAQwZcoUhDr6684770SDBg3w7rvvhp0/AMTGxoYtTXLhwsXFC5dJceHiHGDnzp2glKJp06a295s2bYpTp07hxIkT2rXLL78cL7zwAurXr4/69etj+PDhuOqqq/Dyyy+jUaNGeOaZZ9C3b9+QZaempuLLL79EkyZNcM0116B///4Gu5UHH3wQ/fr1Q7169dC5c2d88cUXmDlzJgoLC8NqW+fOnfH666/jrrvuQqVKldCvXz988sknOHbsmCUtIQRDhw7F//73P+zevTtk3rIsY+zYsdi0aRMuv/zysOrjwoWLixcuk+LCxTnE6Rwy3r59e8PvjIwMdOrUyXCtS5cuIfNp3rw5PB6P9rtq1aoGdcvatWtx7bXXolatWkhMTESPHj0AAAcOHAi7rh988AGysrLwzTffoHnz5vjmm2/QpEkTbN682ZK2b9++uOyyy/Dmm2865jdy5EgkJCQgNjYWjzzyCJ577jk88cQTYdfHhQsXFydcJsWFi3OABg0agBCCjIwM2/sZGRlITU1F5cqVtWvx8fFnpezIyEjDb0IIFEUBABQVFaFv375ISkrCuHHjsHr1akyZMgVA+Ma6HBUrVsStt96KYcOGISMjA9WqVXM0kh06dCgmTZqE9evX294fMGAANmzYgL1796KoqAiffvopJMldnly4+P8OdxVw4eIcoGLFirjiiiswcuRIlJSUGO5lZWVh3LhxuP3220EIccyjadOmWLlypeHaihUrzqhe27dvx8mTJzF06FB069YNTZo0OS2jWSdERUWhfv36Fu8ejo4dO+Kmm27Cq6++ans/OTkZDRo0QPXq1V3mxIULFxrc1cCFi3OEL7/8El6vF3379sWiRYtw8OBBzJo1C1dccQWqV6+ODz74IOjzzzzzDGbNmoVhw4Zh586d+PLLLzFr1qwzqlOtWrUQFRWFESNGYM+ePZg2bRree++908pj+vTpuPvuuzF9+nTs2LEDmZmZGDZsGGbMmIHrr7/e8bkPPvgA8+fPR2Zm5hm1wYULF/9/4DIpLlycIzRs2BBr1qxBvXr1cNttt6F+/fp49NFH0atXLyxfvhwVKlQI+nznzp3x7bffYvjw4WjdujXmzJmD//znP2dUp8qVK2PMmDGYPHkymjVrhqFDh4YVx0REs2bNEBcXhxdeeAFt2rRB586d8csvv+C7777DPffc4/hco0aN8OCDD6K0tPSM2uDChYv/PyD0dCz7XLhw4cKFCxcu/iW4khQXLly4cOHCRbmEy6S4cOHChQsXLsolXCbFhQsXLly4cFEu4TIpLly4cOHChYtyCZdJceHChQsXLlyUS7hMigsXLly4cOGiXMJlUly4cOHChQsX5RIuk+LChQsXLly4KJdwmRQXLly4cOHCRbmEy6S4cOHChQsXLsolXCbFhQsXLly4cFEu4TIpLly4cOHChYtyif8DlxYQ9D0TUF0AAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log = -1 * np.log10(p_values_predicted_np)\n",
+ "slug = np.arange(p_values_predicted_np.shape[0])\n",
+ "\n",
+ "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n",
+ "plt.title(f\"Manhattan Plot for {experiment_description} - predicted\")\n",
+ "plt.xlabel(\"Ordinal SNP\")\n",
+ "plt.ylabel(\"- log10 predicted P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 predicted P values\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "bae392ab-a377-49a1-afaf-b5330892d89a",
+ "metadata": {
+ "tags": [
+ "block:qq_plot",
+ "prev:saliency_observed",
+ "prev:saliency_predicted"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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+eUX7NixAw0aNAAAmJiY4Ny5c+jWrRveeusthISEwNfXF4cPH1a5whUWFgZPT0+0a9cOnTt3RqtWrbB27Votf4J56SujqD3PUrVq1bBjxw74+flhx44dGDVqFPbv348ff/wR+/btw9GjRzUuRh84zxIRERWXIedZei9yKCpYaT7PUk5GNn5v/z2/316jr4yidix99OiRckDW33//jffffx9vvfUWhg0bhvPnz2tUBBERUXljjNtwZZ2+MoraYcnJyQmXLl2CXC5HREQE2rdvDwDIzMyEiYmJxoUQERGVJ8Z43UlZp6+MovbUAUOHDkWfPn3g4uICiUSinNnzxIkT8PT01LgQIiIiIm3oK6OoHZZmzpyJBg0a4M6dO3j//feVA7hMTEzyfa8MERER5aXtrTTehstLXxlFo0kpe/fuDQB48eKFct3gwYM1LoKIiKi8YVjSD31kFLXHLMnlcsyePRtVq1aFtbU1rl+/DgCYNm2a8nE9IiIiIkPTV0ZROyzNnTsXP/zwA77++muYmf3/I48NGjTA+vXrNS6EiIioPOHTcLqnr4yidljavHkz1q5di+DgYJWR5Y0bNy7wrcVERESkimFJ9/SVUdQes3Tv3j3Url07z3qFQoGcnByNCyEiIipPBKDli3TpTfrKKGpfWapXrx4OHz6cZ/0vv/wCHx8fjQshIiIi0oa+MoraV5amT5+OwYMH4969e1AoFPjtt9+QkJCAzZs3Y9euXRoXQkREVJ7waTjd01dGUfvKUvfu3fHnn3/in3/+gZWVFaZPn474+Hj8+eefypkyiYiIqHAcs6R7+sooGs2z9PbbbyMyMlLjgxIRERHpgz4yikZhiYiIiLTD23Clh9phSSqVQiIp+Bckl8u1KoiIiKg8YFjSPX1lFLXD0u+//67yOScnB2fOnMGmTZvw5ZdfalQEERERkbb0lVHUDkvdu3fPs653796oX78+tm3bhpCQEI2LISIiKi+EkEBocXVIm75llb4yitpPwxWkefPmiIqK0tXuiIiIyjQFJFovVDzaZhSdhKXnz59j+fLlqFq1qi52R0RERKQTusgoat+Gq1ixosrgKSEEnj59CktLS2zZskXjQoiIiMoTDvDWPX1lFLXD0pIlS1QKkUqlcHR0hL+/PypWrKhxIUREROUJxyzpnr4yitphaciQIRofjIiIiF7hlSXd01dG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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kayle as pipeline step: qq plot\n",
+ "\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "\n",
+ "p_values_observed_np = np.load('p_values_observed_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log_o = -1 * np.log10(p_values_observed_np)\n",
+ "\n",
+ "\n",
+ "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log_p = -1 * np.log10(p_values_predicted_np)\n",
+ "\n",
+ "pt = plt.scatter(x = neg_log_o, y = neg_log_p, c= neg_log_p - neg_log_o)\n",
+ "plt.title(f\"QQ Plot for {experiment_description}\")\n",
+ "plt.xlabel(\"- log10 observed P values\")\n",
+ "plt.ylabel(\"- log10 predicted P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 predicted P values - log10 observed\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "be03ced0-99f2-43fd-b29e-407d0f85212c",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "\n",
+ "## There is a second notebook to run after you run this pipeline. Please find the model folder for the best model that Katib found.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "4b240cfb-b264-49dc-ae2c-73b10ef8a69d",
+ "metadata": {
+ "tags": [
+ "pipeline-metrics"
+ ]
+ },
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'val_mean_absolute_error' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn [39], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mval_mean_absolute_error\u001b[49m)\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'val_mean_absolute_error' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "print(val_mean_absolute_error)\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-10.m100",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-10:m100"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "kubeflow_notebook": {
+ "autosnapshot": true,
+ "deploy_config": {},
+ "docker_image": "",
+ "experiment": {
+ "id": "new",
+ "name": "gwas-7-d"
+ },
+ "experiment_name": "gwas-10-d",
+ "katib_metadata": {
+ "algorithm": {
+ "algorithmName": "bayesianoptimization",
+ "algorithmSettings": [
+ {
+ "name": "random_state",
+ "value": "10"
+ },
+ {
+ "name": "acq_optimizer",
+ "value": "auto"
+ },
+ {
+ "name": "acq_func",
+ "value": "gp_hedge"
+ },
+ {
+ "name": "base_estimator",
+ "value": "GP"
+ }
+ ]
+ },
+ "maxFailedTrialCount": 10,
+ "maxTrialCount": 40,
+ "objective": {
+ "additionalMetricNames": [],
+ "goal": 0.05,
+ "objectiveMetricName": "val-mean-absolute-error",
+ "type": "minimize"
+ },
+ "parallelTrialCount": 2,
+ "parameters": [
+ {
+ "feasibleSpace": {
+ "list": [
+ "IMP_height.txt"
+ ]
+ },
+ "name": "data_file_to_run",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "GWAS on soy height"
+ ]
+ },
+ "name": "experiment_description",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.3",
+ "min": "0.00001",
+ "step": "0.00001"
+ },
+ "name": "learning_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": ".98",
+ "min": "0.0001",
+ "step": "0.0001"
+ },
+ "name": "conv_1_dropout_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": ".0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "TruncatedNormal",
+ "glorot_uniform",
+ "GlorotNormal",
+ "HeNormal",
+ "random_normal"
+ ]
+ },
+ "name": "conv_initializer",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "TruncatedNormal",
+ "glorot_uniform",
+ "GlorotNormal",
+ "HeNormal",
+ "random_normal"
+ ]
+ },
+ "name": "dese_initializer",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.01",
+ "step": "0.1"
+ },
+ "name": "dropout_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "5",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "num_dense_layers",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "max": "20",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "num_dense_units",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "elu",
+ "relu",
+ "gelu",
+ "linear"
+ ]
+ },
+ "name": "conv_activation",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "elu",
+ "relu",
+ "gelu",
+ "linear"
+ ]
+ },
+ "name": "activation",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "huber_loss",
+ "mean_absolute_error",
+ "mse"
+ ]
+ },
+ "name": "loss",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "5",
+ "min": "1.2",
+ "step": "0.01"
+ },
+ "name": "final_activation_scale_factor",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "40",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "batch_size",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "max": "10",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "epochs",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "2023-01-051310"
+ ]
+ },
+ "name": "time",
+ "parameterType": "categorical"
+ }
+ ]
+ },
+ "katib_run": true,
+ "pipeline_description": "gwas-10-d",
+ "pipeline_name": "gwas-10-d",
+ "snapshot_volumes": true,
+ "volumes": [
+ {
+ "annotations": [],
+ "mount_point": "/home/jovyan",
+ "name": "gwas-11-a-workspace-gxcvc",
+ "size": 5,
+ "size_type": "Gi",
+ "snapshot": false,
+ "type": "clone"
+ }
+ ]
+ },
+ "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.8.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb b/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb
new file mode 100644
index 0000000..8d260ac
--- /dev/null
+++ b/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb
@@ -0,0 +1,1057 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "619de0db-3878-4254-93a4-4404553d0ecf",
+ "metadata": {
+ "tags": [
+ "imports"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2023-01-05 21:21:20.751703: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 AVX512F AVX512_VNNI FMA\n",
+ "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2023-01-05 21:21:20.895255: I tensorflow/core/util/port.cc:104] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n",
+ "2023-01-05 21:21:20.899185: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n",
+ "2023-01-05 21:21:20.899205: I tensorflow/compiler/xla/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n",
+ "2023-01-05 21:21:21.754779: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n",
+ "2023-01-05 21:21:21.754858: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n",
+ "2023-01-05 21:21:21.754864: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n",
+ "/usr/local/lib/python3.8/dist-packages/scipy/__init__.py:138: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.24.1)\n",
+ " warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion} is required for this version of \"\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# Don't use Kale on this one.\n",
+ "import pendulum\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import warnings\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.keras.models import Model\n",
+ "from tensorflow.keras.layers import Dense, Flatten, Conv1D, Dropout, BatchNormalization, Lambda\n",
+ "from tensorflow.keras.regularizers import l1,l2, L1L2\n",
+ "import matplotlib.pyplot as plt\n",
+ "from scipy import stats\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "365d8767-2dd3-4317-b556-2273f1510e19",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## Get the best params from Katib from running the first notebook with Kale \n",
+ "![assets/x002-final-results-page.png](assets/x002-final-results-page.png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "fd604bf6-0d00-4178-9deb-28465c915c29",
+ "metadata": {
+ "tags": [
+ "pipeline-parameters"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "# Get the best params from Katib from running the first notebook with Kale \n",
+ "data_file_to_run = \"IMP_height.txt\"\n",
+ "\n",
+ "experiment_description = \"Soy Height GWAS\"\n",
+ "\n",
+ "learning_rate = 0.000036 # 0.0001957\n",
+ "conv_1_dropout_rate = 0.60 # Dropout rate for first convolutional layer\n",
+ "conv_1_kernel_l1 = 0.0000007 # L1 and l2 regularization for the first conv1d layer's weights\n",
+ "conv_1_kernel_l2 = 0.00045\n",
+ "conv_1_bias_l2 = 0.000064 # L1 and l2 regularization for the first conv1d layer's bias\n",
+ "conv_1_activity_l2 = 0.004 # L1 and l2 activity regularization for the first conv1d layer\n",
+ "\n",
+ "conv_x_kernel_l1 = 0.7\n",
+ "conv_x_kernel_l2 = 0.14\n",
+ "conv_x_bias_l2 = 0.007\n",
+ "conv_x_activity_l2 = 0.000005\n",
+ "\n",
+ "dense_x_kernel_l1 = 0.018\n",
+ "dense_x_kernel_l2 = 0.0000015\n",
+ "dense_x_bias_l2 = 0.0017\n",
+ "dense_x_activity_l2 = 0.0005\n",
+ "\n",
+ "dense_out_kernel_l1 = 0.0000007\n",
+ "dense_out_kernel_l2 = .0000024\n",
+ "dense_out_bias_l2 = 0.023\n",
+ "dense_out_activity_l2 = 0.024\n",
+ "\n",
+ "conv_initializer = 'glorot_uniform' # 'TruncatedNormal' 'TruncatedNormal' 'glorot_uniform' \"GlorotNormal\", \"HeNormal\" 'random_normal' \n",
+ "dese_initializer = 'HeNormal' # \"GlorotNormal\" # 'TruncatedNormal' # \"GlorotUniform\"\n",
+ "\n",
+ "dropout_rate = 0.055\n",
+ "num_dense_layers = 3\n",
+ "num_dense_units = 13\n",
+ "\n",
+ "conv_activation = \"gelu\" # \"linear\"\n",
+ "activation = \"linear\"\n",
+ "loss = 'mean_squared_error' # 'mean_absolute_error' # # 'huber_loss' \n",
+ "\n",
+ "final_activation_scale_factor = 2.12\n",
+ "\n",
+ "batch_size = 25\n",
+ "epochs = 15\n",
+ "\n",
+ "time = pendulum.now(tz='America/New_York').__str__()[:16].replace('T','').replace(':','').replace('_','-')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "e06747ae-77b6-4524-b803-fc0d87512fbb",
+ "metadata": {
+ "tags": [
+ "block:preprocessing"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Preprocessing successful\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Don't run in kale this time\n",
+ "\n",
+ "ht = pd.read_csv(data_file_to_run, sep = '\\t')\n",
+ "ht_pd = ht_relevant_cols = ht.drop(columns = ['strain', 'height', 'folds'])\n",
+ "phenotypes_norm = ht_pd.pop(\"norm_phe\")\n",
+ "for col in ht_pd.columns:\n",
+ " ht_pd[col] = ht_pd[col].astype('category')\n",
+ "ohe_height_genotypes = pd.get_dummies(ht_pd)\n",
+ "\n",
+ "def train_test_splitting(row, split_ratio):\n",
+ " string_of_row = \"\".join([str(l) for l in list(row.values)])\n",
+ " return (abs(hash(string_of_row)) % 10) / 10 < split_ratio\n",
+ "belongs_in_train_set_index =\\\n",
+ " np.array([train_test_splitting(ohe_height_genotypes.loc[i],0.7)\n",
+ " for i in np.arange(ht_pd.shape[0])])\n",
+ "\n",
+ "train_ohe_height_genotypes = ohe_height_genotypes[belongs_in_train_set_index]\n",
+ "val_ohe_height_genotypes = ohe_height_genotypes[~belongs_in_train_set_index]\n",
+ "\n",
+ "train_phenotypes_norm = phenotypes_norm[belongs_in_train_set_index]\n",
+ "val_phenotypes_norm = phenotypes_norm[~belongs_in_train_set_index]\n",
+ "\n",
+ "# Make sure the number of rows in test and train add up to the original rows\n",
+ "assert train_ohe_height_genotypes.shape[0] + val_ohe_height_genotypes.shape[0] == ht_pd.shape[0]\n",
+ "\n",
+ "# Data as a numpy array...\n",
+ "train_ohe_height_genotypes_np = train_ohe_height_genotypes.values\n",
+ "val_ohe_height_genotypes_np = val_ohe_height_genotypes.values\n",
+ "\n",
+ "train_phenotypes_norm_np = train_phenotypes_norm.values\n",
+ "val_phenotypes_norm_np = val_phenotypes_norm.values\n",
+ "\n",
+ "# Reshape to fit the conv1D network. \n",
+ "train_np_ohe_reshaped_for_conv_1_d =\\\n",
+ " train_ohe_height_genotypes_np.reshape((train_ohe_height_genotypes_np.shape[0],\n",
+ " train_ohe_height_genotypes_np.shape[1], 1))\n",
+ "val_np_ohe_reshaped_for_conv_1_d =\\\n",
+ " val_ohe_height_genotypes_np.reshape((val_ohe_height_genotypes_np.shape[0],\n",
+ " val_ohe_height_genotypes_np.shape[1],1))\n",
+ "\n",
+ "np.save('train_data_ready', train_np_ohe_reshaped_for_conv_1_d)\n",
+ "np.save('val_data_ready', val_np_ohe_reshaped_for_conv_1_d)\n",
+ "np.save('train_labels_ready', train_phenotypes_norm_np)\n",
+ "np.save('val_labels_ready',val_phenotypes_norm_np)\n",
+ "\n",
+ "# Since the data was reshaped for the convolutional 1D neural network, we are also saving the \n",
+ "# non-reshaped data to be used for calculating saliency.\n",
+ "\n",
+ "np.save(\"val_snps_for_saliency\", val_ohe_height_genotypes_np)\n",
+ "\n",
+ "print(\"Preprocessing successful\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "dd01e8b2-78ba-4315-9e12-9153b1c57ce5",
+ "metadata": {
+ "tags": [
+ "block:train",
+ "prev:preprocessing"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/15\n",
+ "145/145 [==============================] - 55s 343ms/step - loss: 184.9438 - mean_absolute_error: 1.1132 - val_loss: 145.5629 - val_mean_absolute_error: 0.7159\n",
+ "Epoch 2/15\n",
+ "145/145 [==============================] - 53s 366ms/step - loss: 134.6771 - mean_absolute_error: 1.0567 - val_loss: 127.3722 - val_mean_absolute_error: 0.7289\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "WARNING:absl:Found untraced functions such as _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _update_step_xla while saving (showing 5 of 5). These functions will not be directly callable after loading.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "INFO:tensorflow:Assets written to: a-2023-01-051641-model/assets\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:tensorflow:Assets written to: a-2023-01-051641-model/assets\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "a-2023-01-051641-model\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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6zyuwWCATqezWIiIiKhtavLAUlBQAB8fH4t1Pj4+0Ol0uH79xmx+oaGhSEhIQGJiIt577z3k5ORg5MiRKC21PYVxXFwc3N3dxSUgIKBJz4OIiIhajiSmuBs3bhwmTZqE/v37IyIiAocOHUJJSQn27dtnc5+YmBhotVpxycvLa8YaExERUXNq8mHNvr6+KCwstFhXWFgIjUYDJyfrk894eHigZ8+eyMrKsnlclUoFlUp1R+tKRERE0tTkLSxhYWFISkqyWHfkyBGEhYXZ3KesrAyXLl2Cn59fU1ePiIiIWgG7A0tZWRnS09ORnp4O4Maw5fT0dLGTbExMDGbNmiWWnz9/PrKzs/H888/j/Pnz2LhxI/bt24elS5eKZZYtW4avvvoKly9fxjfffIOHH34YCoUC06ZNu83TIyIiorbA7ltCp06dwpgxY8T30dHRAICoqCgkJCQgPz/fYoRP165dcfDgQSxduhRvvfUW7rrrLmzZssViSPMvv/yCadOmobi4GF5eXhgxYgROnjwJLy+v2zk3IiIiaiNkgiAILV2JO0Gn08Hd3R1arRYaje2HQhEREZF0NPT7WxKjhIiIiIjqwsBCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSZ3dg+frrrxEZGQl/f3/IZDJ88skn9e6TnJyMQYMGQaVSoXv37khISKhVZsOGDQgMDIRarUZoaChSU1PtrRoRERG1UXYHFr1ej5CQEGzYsKFB5XNycvDggw9izJgxSE9Px5IlS/Dkk0/i8OHDYpm9e/ciOjoasbGxOH36NEJCQhAREYErV67YWz0iIiJqg2SCIAiN3lkmw8cff4yJEyfaLPP3v/8dBw8exNmzZ8V1U6dORUlJCRITEwEAoaGhGDp0KN59910AgNlsRkBAABYtWoTly5c3qC46nQ7u7u7QarXQaDSNPSUiIiJqRg39/m7yPiwp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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Don't run in Kale this time\n",
+ "nb_classes = 3\n",
+ "\n",
+ "data_files = ['./train_data_ready.npy',\n",
+ " \"./val_data_ready.npy\",\n",
+ " \"./train_labels_ready.npy\",\n",
+ " \"./val_labels_ready.npy\"]\n",
+ "# artifact_bucket_root_name = artifacts_bucket.split('/')[-1]\n",
+ "# print(artifact_bucket_root_name)\n",
+ "# storage_client = storage.Client()\n",
+ "# bucket = storage_client.get_bucket(artifact_bucket_root_name)\n",
+ "\n",
+ "ht_np_train = np.load('train_data_ready.npy', allow_pickle=True)\n",
+ "ht_np_val = np.load('val_data_ready.npy', allow_pickle=True)\n",
+ "train_labels_np = np.load('train_labels_ready.npy', allow_pickle=True)\n",
+ "val_labels_np = np.load('val_labels_ready.npy', allow_pickle=True)\n",
+ "\n",
+ "train_snps = ht_np_train\n",
+ "train_phenotypes = train_labels_np\n",
+ "val_snps = ht_np_val\n",
+ "val_phenotypes = val_labels_np\n",
+ "\n",
+ "# print(\"min\")\n",
+ "# print(val_phenotypes.min())\n",
+ "# print(\"max\")\n",
+ "# print(val_phenotypes.max())\n",
+ "\n",
+ "inputs =\\\n",
+ " tf.keras.layers.Input(\n",
+ " shape=(train_snps.shape[1], \n",
+ " train_snps.shape[2])) # train_snps.shape[1] ,nb_classes))\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " nb_classes,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_1_kernel_l1, l2=conv_1_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_1_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_1_activity_l2)\n",
+ " )(inputs)\n",
+ "\n",
+ " # kernel_initializer = conv_initializer ,\n",
+ " # kernel_regularizer=\"l2\", bias_regularizer = \"l2\")\n",
+ "x = Dropout(conv_1_dropout_rate)(x)\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " 20,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n",
+ " # kernel_initializer = 'TruncatedNormal',\n",
+ " # kernel_regularizer=\"l2\",\n",
+ " # bias_regularizer=\"l2\"\n",
+ " )(x) # Leaving l1 l2 on head layer only to see if this prevents everything from zeroing out.\n",
+ "\n",
+ "x = Dropout(dropout_rate)(x)\n",
+ "\n",
+ "\n",
+ "shortcut = Conv1D(10,\n",
+ " 4,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2))(inputs)\n",
+ "shortcut = Dropout(dropout_rate)(shortcut)\n",
+ "x = tf.keras.layers.Add()([shortcut,x])\n",
+ "\n",
+ "x = Conv1D(10,\n",
+ " 4,\n",
+ " padding='same',\n",
+ " activation = conv_activation,\n",
+ " kernel_initializer = conv_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n",
+ " # kernel_initializer = 'TruncatedNormal', \n",
+ " # kernel_regularizer = \"l2\",\n",
+ " # bias_regularizer = \"l2\"\n",
+ " )(x)\n",
+ "\n",
+ "# x = Dropout(dropout_rate)(x)\n",
+ "\n",
+ "x = Flatten()(x)\n",
+ "# x = Dropout(dropout_rate)(x)\n",
+ "x = BatchNormalization()(x)\n",
+ "\n",
+ "if num_dense_layers > 0:\n",
+ " y = x\n",
+ " for i in np.arange(num_dense_layers):\n",
+ " y = Dense(num_dense_units, \n",
+ " activation,\n",
+ " kernel_initializer=dese_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_x_kernel_l1, l2=dense_x_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(dense_x_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(dense_x_activity_l2)\n",
+ " )(y)\n",
+ " # y = Dropout(dropout_rate)(y)\n",
+ " y = BatchNormalization()(y)\n",
+ " \n",
+ " x = tf.keras.layers.Concatenate(axis=1)([x,y])\n",
+ " x = BatchNormalization()(x)\n",
+ "\n",
+ "outputs_unscaled = Dense(1,\n",
+ " activation=\"softsign\",\n",
+ " kernel_initializer=dese_initializer,\n",
+ " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_out_kernel_l1, l2=dense_out_kernel_l2),\n",
+ " bias_regularizer=tf.keras.regularizers.L2(dense_out_bias_l2),\n",
+ " activity_regularizer=tf.keras.regularizers.L2(dense_out_activity_l2),\n",
+ " # bias_regularizer = \"l2\",\n",
+ " # kernel_initializer = 'TruncatedNormal',\n",
+ " name = 'out')(x) # Should have no activation\n",
+ "# Softsign coerces the output to the range {-1,1}. The labels are norm scaled, \n",
+ "# where the range {-2,2} or {-3,3} encompasses most values. We multiply by a scalar \n",
+ "# and the range will terminate at +/- said scalar. No telling which one is optimal,\n",
+ "# so we'll le the the tuner figure out what: \n",
+ "outputs = Lambda(lambda x: x * final_activation_scale_factor)(outputs_unscaled) \n",
+ "\n",
+ "our_data_model = Model(inputs = inputs, outputs = outputs)\n",
+ "# qa_data_model = Model(inputs = inputs, outputs = outputs)\n",
+ "our_data_model.compile(loss=loss,\n",
+ " optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),\n",
+ " metrics=[tf.keras.metrics.MeanAbsoluteError()],\n",
+ " jit_compile=True)\n",
+ "\n",
+ "# We added the early stopping callback and instructed it to restore the best weights. \n",
+ "callbacks = [tf.keras.callbacks.EarlyStopping(restore_best_weights=True)]\n",
+ "\n",
+ "history =\\\n",
+ " our_data_model.fit(x = train_snps,\n",
+ " y = train_phenotypes,\n",
+ " callbacks = callbacks,\n",
+ " batch_size=batch_size,\n",
+ " epochs=epochs,\n",
+ " validation_data=(val_snps, val_phenotypes),\n",
+ " shuffle= True,\n",
+ " use_multiprocessing=True)\n",
+ "# Requirement 6: save and log your artifact. \n",
+ "# I'm adding a random number to the file name as an\n",
+ "# extra layer of safety nets against race conditions\n",
+ "# / file name conflicts\n",
+ "\n",
+ "# tn = str(int(np.random.random() * 10 ** 12))\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "our_data_model.save(model_folder)\n",
+ "\n",
+ "history_df = pd.DataFrame(history.history)\n",
+ "\n",
+ "history_df[[\"mean_absolute_error\", \"val_mean_absolute_error\"]].plot()\n",
+ "plt.savefig(f'{model_folder}-history.png')\n",
+ "\n",
+ "print(model_folder)\n",
+ "\n",
+ "val_mean_absolute_error = float(history_df['val_mean_absolute_error'].values.min())\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "74954dbc-9133-40d5-9f23-400a39807724",
+ "metadata": {
+ "tags": [
+ "block:saliency_observed",
+ "prev:preprocessing"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "\n",
+ "# Calculate observed p values: \n",
+ "\n",
+ "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n",
+ "val_phenotypes_k = np.load('val_labels_ready.npy', allow_pickle=True)\n",
+ "\n",
+ "p_values = []\n",
+ "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n",
+ " column_index_lower_bound = 3 * i\n",
+ " column_index_upper_bound = 3 * i + 3\n",
+ " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n",
+ " data_reshaped = np.argmax(data, axis=1)\n",
+ " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_k)\n",
+ " p_values.append(p_value)\n",
+ "p_values_observed_np = np.array(p_values)\n",
+ "np.save('p_values_observed_np', \n",
+ " p_values_observed_np, \n",
+ " allow_pickle=True)\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "464ffbb4-eb9e-438e-ac1e-292a2e45a99f",
+ "metadata": {
+ "tags": [
+ "block:manhattan_observed",
+ "prev:saliency_observed"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "p_values_observed_np = np.load('p_values_observed_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log = -1 * np.log10(p_values_observed_np)\n",
+ "slug = np.arange(p_values_observed_np.shape[0])\n",
+ "\n",
+ "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n",
+ "plt.title(f\"Manhattan Plot for {experiment_description} - observed\")\n",
+ "plt.xlabel(\"Ordinal SNP\")\n",
+ "plt.ylabel(\"- log10 observed P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 observed P values\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-observed\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "f18fae63-9e34-4d5b-b5d7-76e08e94142c",
+ "metadata": {
+ "tags": [
+ "block:saliency_predicted",
+ "prev:train"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "48/48 [==============================] - 2s 33ms/step\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "\n",
+ "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "\n",
+ "def get_saved_model(final_activation_scale_factor: float, model_folder: str):\n",
+ " final_model = tf.keras.models.load_model(model_folder)\n",
+ " for layer in final_model.layers:\n",
+ " layer.trainable=False\n",
+ " return final_model\n",
+ " # print(layer.weights)\n",
+ "\n",
+ "final_model = get_saved_model(final_activation_scale_factor=final_activation_scale_factor, model_folder = model_folder)\n",
+ "val_phenotypes_p = final_model.predict(val_snps_s).flatten()\n",
+ "\n",
+ "p_values_p = []\n",
+ "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n",
+ " column_index_lower_bound = 3 * i\n",
+ " column_index_upper_bound = 3 * i + 3\n",
+ " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n",
+ " data_reshaped = np.argmax(data, axis=1)\n",
+ " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_p)\n",
+ " p_values_p.append(p_value)\n",
+ "p_values_predicted_np = np.array(p_values_p)\n",
+ "np.save('p_values_predicted_np', \n",
+ " p_values_predicted_np, \n",
+ " allow_pickle=True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "043678ab-c0ae-45d7-8fdc-259d3138adba",
+ "metadata": {
+ "tags": [
+ "block:manttan_predcted",
+ "prev:saliency_predicted"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log = -1 * np.log10(p_values_predicted_np)\n",
+ "slug = np.arange(p_values_predicted_np.shape[0])\n",
+ "\n",
+ "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n",
+ "plt.title(f\"Manhattan Plot for {experiment_description} - predicted\")\n",
+ "plt.xlabel(\"Ordinal SNP\")\n",
+ "plt.ylabel(\"- log10 predicted P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 predicted P values\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "bae392ab-a377-49a1-afaf-b5330892d89a",
+ "metadata": {
+ "tags": [
+ "block:qq_plot",
+ "prev:saliency_observed",
+ "prev:saliency_predicted"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# mark in Kayle as pipeline step: qq plot\n",
+ "\n",
+ "model_folder = f\"a-{time}-model\"\n",
+ "\n",
+ "p_values_observed_np = np.load('p_values_observed_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log_o = -1 * np.log10(p_values_observed_np)\n",
+ "\n",
+ "\n",
+ "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n",
+ " allow_pickle=True)\n",
+ "\n",
+ "neg_log_p = -1 * np.log10(p_values_predicted_np)\n",
+ "\n",
+ "pt = plt.scatter(x = neg_log_o, y = neg_log_p, c= neg_log_p - neg_log_o)\n",
+ "plt.title(f\"QQ Plot for {experiment_description}\")\n",
+ "plt.xlabel(\"- log10 observed P values\")\n",
+ "plt.ylabel(\"- log10 predicted P values\")\n",
+ "cbar = plt.colorbar(pt)\n",
+ "cbar.set_label(\"- log10 predicted P values - log10 observed\")\n",
+ "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "be03ced0-99f2-43fd-b29e-407d0f85212c",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "\n",
+ "## There is a second notebook to run after you run this pipeline. Please find the model folder for the best model that Katib found.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "4b240cfb-b264-49dc-ae2c-73b10ef8a69d",
+ "metadata": {
+ "tags": [
+ "pipeline-metrics"
+ ]
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.7159170508384705\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "print(val_mean_absolute_error)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8159eb55-1b22-4662-885b-587d90e954b5",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-10.m100",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-10:m100"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "kubeflow_notebook": {
+ "autosnapshot": true,
+ "deploy_config": {},
+ "docker_image": "gcr.io/arrikto/jupyter-kale-py38@sha256:2e1ce3427b780c0c78e7cfec527ee10c391092fdc4a8344cd76f8b83c61c5234",
+ "experiment": {
+ "id": "new",
+ "name": "gwas-7-d"
+ },
+ "experiment_name": "gwas-10-d",
+ "katib_metadata": {
+ "algorithm": {
+ "algorithmName": "bayesianoptimization",
+ "algorithmSettings": [
+ {
+ "name": "random_state",
+ "value": "10"
+ },
+ {
+ "name": "acq_optimizer",
+ "value": "auto"
+ },
+ {
+ "name": "acq_func",
+ "value": "gp_hedge"
+ },
+ {
+ "name": "base_estimator",
+ "value": "GP"
+ }
+ ]
+ },
+ "maxFailedTrialCount": 10,
+ "maxTrialCount": 40,
+ "objective": {
+ "additionalMetricNames": [],
+ "goal": 0.05,
+ "objectiveMetricName": "val-mean-absolute-error",
+ "type": "minimize"
+ },
+ "parallelTrialCount": 2,
+ "parameters": [
+ {
+ "feasibleSpace": {
+ "list": [
+ "IMP_height.txt"
+ ]
+ },
+ "name": "data_file_to_run",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "GWAS on soy height"
+ ]
+ },
+ "name": "experiment_description",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.3",
+ "min": "0.00001",
+ "step": "0.00001"
+ },
+ "name": "learning_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": ".98",
+ "min": "0.0001",
+ "step": "0.0001"
+ },
+ "name": "conv_1_dropout_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_1_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "conv_x_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_x_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_kernel_l1",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_kernel_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_bias_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": ".0000001",
+ "step": "0.0000001"
+ },
+ "name": "dense_out_activity_l2",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "TruncatedNormal",
+ "glorot_uniform",
+ "GlorotNormal",
+ "HeNormal",
+ "random_normal"
+ ]
+ },
+ "name": "conv_initializer",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "TruncatedNormal",
+ "glorot_uniform",
+ "GlorotNormal",
+ "HeNormal",
+ "random_normal"
+ ]
+ },
+ "name": "dese_initializer",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "0.95",
+ "min": "0.01",
+ "step": "0.1"
+ },
+ "name": "dropout_rate",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "5",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "num_dense_layers",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "max": "20",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "num_dense_units",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "elu",
+ "relu",
+ "gelu",
+ "linear"
+ ]
+ },
+ "name": "conv_activation",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "elu",
+ "relu",
+ "gelu",
+ "linear"
+ ]
+ },
+ "name": "activation",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "huber_loss",
+ "mean_absolute_error",
+ "mse"
+ ]
+ },
+ "name": "loss",
+ "parameterType": "categorical"
+ },
+ {
+ "feasibleSpace": {
+ "max": "5",
+ "min": "1.2",
+ "step": "0.01"
+ },
+ "name": "final_activation_scale_factor",
+ "parameterType": "double"
+ },
+ {
+ "feasibleSpace": {
+ "max": "40",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "batch_size",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "max": "10",
+ "min": "1",
+ "step": "1"
+ },
+ "name": "epochs",
+ "parameterType": "int"
+ },
+ {
+ "feasibleSpace": {
+ "list": [
+ "2023-01-051310"
+ ]
+ },
+ "name": "time",
+ "parameterType": "categorical"
+ }
+ ]
+ },
+ "katib_run": true,
+ "pipeline_description": "gwas-10-d",
+ "pipeline_name": "gwas-10-d",
+ "snapshot_volumes": true,
+ "volumes": [
+ {
+ "annotations": [],
+ "mount_point": "/home/jovyan",
+ "name": "gwas-11-a-workspace-gxcvc",
+ "size": 5,
+ "size_type": "Gi",
+ "snapshot": false,
+ "type": "clone"
+ }
+ ]
+ },
+ "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.8.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/README.md b/tutorials/notebooks/DL-gwas-gcp-example/README.md
new file mode 100644
index 0000000..ed3a8ce
--- /dev/null
+++ b/tutorials/notebooks/DL-gwas-gcp-example/README.md
@@ -0,0 +1,210 @@
+# Run a deep learning GWAS on soy height on Kubeflow Pipelines with Katib's Bayesian hyperparameter tuning. (Using minikf and the Kale Jupyter plugin)
+
+- David Thrower, NIEHS Office of Scientific Computing, Kelly Goverment Solutions
+
+## Acknowledgements:
+
+1. God for writing the laws of science we can all spend a lifetime trying to decipher and never fully understand.
+2. Jennifer, my better half and my stepkids staying around thought the storm we have all weathered because of my career in science.
+2. Yang Liu at University of Missouri and his colleagues, who developed the study which we are "partially" reproducing as an abbreviated version of the study in order to make a minimum viable demonstration. Below is the original paper and the original author's source code. Those who are subject matter experts, I encourage you to extend and complete this, and to adapt this to your own work. That is what this is here for.
+ - https://www.frontiersin.org/articles/10.3389/fgene.2019.01091/full
+ - https://github.com/kateyliu/DL_gwas
+3. NIEHS Office of Scientific Computing
+ - Frank Day
+ - Kennith Grantham
+ - Greg Stamper
+ - Chris Stone
+ - Elizabeth Black
+ - Adam Burkholder
+ - Jason Baucom
+4. The NIH CIT GCP support community
+ - Danny Chester
+ - Thad Carlson
+ - Kyle O'Connell
+ - Hil Liao
+ - Teja Peddi
+5. GCP support community.
+ - Jeremiah Jenkins
+ - Cheryl Corman
+ - Alex, GCP Mexico City support team
+ - Diego, GCP Mexico City support team
+6. The KF open source community:
+ - Too many to mention
+ - https://www.kubeflow.org/docs/about/community
+7. Arrikto for the easy - to - deploy Kubeflow deployment and the low licensing fee for using this.
+ - Bogdan Kowalczyk
+ - Patrick Gryzan
+ - Constantinos Venetsanopoulos
+ - Amber Graner
+ - Chase Christensen
+ - Jimmy Guerrero
+
+## Summary:
+
+1. This task will deploy a deep learning (1D Convolutional Neural Network - MLP) GWAS experiment using the Kubeflow pipelines machine learning framework. For a tutorial on exactly how Convolutional 1D neural networks work, this is one of many recommended reads [0]. This specific algorithm is not the focus of this tutorial, as our focus is how to use Kubeflow to run any machine learning experiment in your research. My intent is to introduce you to the basic operation of the features that Kubeflow provides that are most relevant in a basic research analysis workflow and empower you to make meaningful use of them, these are tools that when used correctly, are user friendly and are in my humble opinion, underutilized by the life sciences community. This framework is used by CERN in some of their research [1], and CERN is also part of the KF open source community. This experiment will leave you with a template and the skills to build your own workflow relevant to your research.
+2. This experiment should cost you $6 - $12 to run (given pricing at the time of this writing, 2022-12-22), assuming that:
+ 1. You run the experiment on the same data (or similar sized data) without modification
+ 2. You archive your experiment data and you delete the minikf deployment after the experiment has finished running. You can always spin up another deployment of minikf just as quickly for future experiments.
+3. Kubeflow is an open - source resource which runs machine learning experiments on Kubernetes, a distributed container orchestration cluster [1] that can run things reproducibly on any current server or cloud. This has features that we will explore such as:
+ 1. Kubeflow pipelines: Kubeflow pipelines can make complex ML workflows into a GUI - based, parameterized, sharable and reproducible operation. Parameterizing and packaging common bioinformatic and quantitative tasks into a pipeline may create a more ergonomic work environment for the scientific community and could accelerate the cycle of iterative experimentation.
+ 2. Katib: Katib is a hyperparameter tuner which recursively deploys pipelines with different parameters and solves the optimal parameter set to build an optimal model. Neural Architecture Search features are also available with updated versions of Katib. NAS is basically the pinnacle of automation in model building. This is a bit beyond the scope of the discussion but, if you are interested in NAS, you may read about it here [5].
+ 1. Here, we will use Gaussian Bayesian hyperparameter tuning which can usually solve a reasonably optimized model for a ML workflow with far fewer trials than a gridsearch or random search. Gridsearch and random search are also available if you do an experiment can benefit from it.
+ 2. Trials are automatically executed in parallel in separate container execution environments on the Kubernetes cluster. Each one runs the entire pipeline on a different selection of arguments for the pipieline's parameters.
+ 3. It is also likely that the next generation of Neural Architecture Search algorithms in development will inevitably be integrated into the platform in coming years, and it is likely to eliminate the need for model building labor altogether for many classification and regression problems. There are already NAS algorithms / autoMLs in development that are outperforming XGBoost and best-realistic-case manually developed models on small data sets without the need to script different models and tune their hyperparameters. Nonetheless, data preparation, sampling, subject matter expertise on the data, and human intuition won't be automated any time soon, so don't worry, you should always have a job.
+ 3. Kubeflow also provides numerous other features that are out of scope for this tutorial, but may be useful for some users. Many KF features, plugins, and 3rd party tools provide services to track model provenance, serving predictions as a component of production systems, model performance monitoring in production (e.g. monitoring for training - serving skew, model drift, etc.). These tools may be useful for those in the community who are trying to deploy production ML systems in a regulated environment, for example, those who are developing AI based medical or diagnostic systems, those developing models that review grant or job candidate applications and prioritize applications for review, and those developing models that participate in other administrative or financial decision making ... There are many great resources that you can read up on at your leisure if this is of interest to you. GCP's Vertex AI Platform also provides a stable implementation of these features, but not all of the convenient features for AI research which we will explore here. Here we will focus on these and leave you with templates that you can substitute the data we are analyzing here with your own, or even swap out deep learning training script with an XGBoost training task. See below some images of the actual task that this tutorial will **easily** deploy from a Jupyter notebook (in the special Jupyter environment we will provision).
+
+ ![assets/dl-gwas-headline-1.png](assets/dl-gwas-headline-1.png)
+ ![assets/dl-gwas-headline-2.png](assets/dl-gwas-headline-2.png)
+
+## Step 1: Make sure that the required APIs are enabled.
+
+On GCP, many services are turned off by default for security reasons, because GCP supports many customers that work in regulated industries such as healthcare, defense, and financial services. Since we are working in a project that is designated for running academic experiments and is segregated from production resources, we can safely enable some of these services as are necessary for this experiment.
+
+1. Log into GCP with your NIH credentials `https://cloud.google.com`. After that click *console* in the upper right corner of the page.
+2. Accept any terms of service if prompted.
+3. On the main GCP console menu on the left, find [APIs and services] > library.
+![assets/000-enable-apis.png](assets/000-enable-apis.png)
+4. On the search field that appears on the top of the screen, paste `serviceusage.googleapis.com`.
+5. Click *enable*.
+![assets/service-usage-api.png](assets/service-usage-api.png)
+6. Repeat this, this time find and enable, `servicemanagement.googleapis.com`
+![assets/service-management-api.png](assets/service-management-api.png)
+8. Repeat this, this time find and enable, the compute engine API.
+![assets/enable-compute-engine.png](assets/enable-compute-engine.png)
+9. When you follow the downstream steps, you may be prompted to enable additional APIs. If so, repeat this as necessary.
+
+## Step 2: Deploy minikf kubeflow:
+
+Minikf is a small deployment of Kubeflow on a minikube Kubernetes instance. These minikube instances are single machine Kubernetes clusters that are meant for development use. For tasks this size that don't need to true highly available distributed HPC cluster to run, this is ideal, as these are easy to deploy when needed and delete when not. At current pricing at the time of this writing, the optimal scale of machine we need to run this job costs about $0.50 an hour.
+
+1. On the main GCP console menu on the left, find the GCP marketplace.
+![ASSETS/001-marketplace.png](assets/001-marketplace.png)
+2. When the marketplace page opens, enter in its search bar "minikf".
+3. Click on *Arrikto minikf*.
+4. Set the configuration for your minikf deployment:
+ 1. Give it any suitable name you want.
+ 2. Also change the machine type to any machine in the N2 family or its successor, having **16 CPU and 64 GB ram, n2-standard-16 at the time of this writing**.
+ 3. Don't get sticker shock on the monthly price. This is what you would pay if you left this running continuously, which I don't recommend doing. Here, we will use this for a few hours, make a copy of important data, then delete the instance. The price is pro-rated to the hours used.
+ 4. Provisioning a GPU is not necessary, but a GPUs it will make the experiment complete much more quickly once it is deployed on the cluster. Unless you are already familiar with the platform, I would recommend experimenting first without the GPU. They are a little expensive and it may take a little time to get the task deployed on the cluster until you are used to the setup. You probably don't want to pay for a GPU that's sitting idle while we fumble around the system.
+ 5. Leave all the other fields as default and click the *deploy* button at the bottom of the page.
+![assets/002-name-minikf.png](assets/002-name-minikf.png)
+![assets/n2-standard-16.png](assets/n2-standard-16.png)
+5. When the page that pops up tells you that the deployment was successful, click the button [ssh].
+ 1. A terminal should pop up. Pay attention to the browser for "pop up blocked" if this does not appear and enable popups from GCP if necessary.
+ ![assets/ssh-link.png](assets/ssh-link.png)
+ 2. When this terminal pops up, type: `gcloud services enable servicemanagement.googleapis.com`. If this throws errors, go back to "[APIs and services] > [library] and enable `serviceusage.googleapis.com`. Then close the ssh terminal, open a new one, and re-try `gcloud services enable servicemanagement.googleapis.com`. (This isn't an error. Yes we have to enable it here too). It doesn't make sense why, we just do...
+ ![assets/enable-service-management.png](assets/enable-service-management.png)
+ 3. Type: `minikf` and press enter.
+ ![assets/run-minikf-startup.png](assets/run-minikf-startup.png)
+ 3. Wait for it to tell you that minikf is ready. If this freezes up with the caption at "exposing services 33% progress" for more than 10 minutes, submit a help ticket on the **NIH** service desk and reference minikf and kubeflow.
+6. When the terminal tells you minikf is ready, you may close the terminal and from the web page on GCP where you deployed this, click the link to the dashboard that the marketplace page on GCP gives you. Log in with the user and password that the page gives you.
+
+## Step 3: create your Jupyter notebook:
+
+1. Click on *Notebooks* and click on "new" or "+" button.
+![assets/004-notebook.png](assets/004-notebook.png)
+![assets/x001-new-notebook.png](assets/x001-new-notebook.png)
+2. Configure the notebook to:
+ 1. any suitable name
+ 2. For docker image, pick any image having a name that includes both **"tensorflow"** and **"kale"**. Tensorflow is required for the script to run, and Kale will automatically compile and submit your pipeline for you.
+ 3. Provisions this notebook with 4.5 CPU and 9 GB of RAM.
+ 4. No GPU.
+ 5. Leave the "Workspace Volume as its default."
+ 6. For "Data volume", click "+" and leave what comes up as its default.
+ 7. Make sure "Allow access to Kubeflow Pipelines, Allow access to Rok" is selected.
+ 8. Make sure "enable shared memory is selected". This allows all the workers running the jobs in parallel to use a flexible shared pool of memory.
+ 8. Click *Launch*.
+![assets/00-create-new-notebook1.png](assets/00-create-new-notebook1.png)
+![assets/01-r3-create-new-notebook2.png](assets/01-r3-create-new-notebook2.png)
+![assets/02-create-new-notebook3.png](assets/02-create-new-notebook3.png)
+ 9. When the green checkmark shows that the notebook is ready, click [connect].
+![assets/03-open-notebook.png](assets/03-open-notebook.png)
+
+## Step 4: Run the notebook in the notebooks environment.
+
+If you chose a jupyter tensorflow container above, this should have the Kale notebooks extension. Click on the extension and make sure it's enabled. Also note the control for "Hyperparameter tuning with Katib". Leave this off for now, but we will revisit this one soon:
+
+![assets/05-enable-kale.png](assets/05-enable-kale.png)
+
+1. Upload the notebook "a1gwaskaleversion.ipynb" from this folder and the sequence file "IMP_height.txt" to the notebooks environment. You can do this one of 2 ways:
+ 1. Open a Jupyter terminal and run `git clone [the url for this repo]`. then `cd ...` into this directory. Note that the url you will use will be [ADD URL], since I was copying the notebook from a development copy of the repo.
+ ![assets/x004-launch-terminal.png](assets/x004-launch-terminal.png)
+ ![assets/x003-git-clone.png](assets/x003-git-clone.png)
+ 2. Download these 2 files, then upload them from the Jupyter files UI this way:
+ ![assets/04-upload-notebook-and-data.png](assets/04-upload-notebook-and-data.png)
+2. The kale notebook will add a selector to the right of each cell. When you click it, a menu opens above the cell. You must make a selection from this for each cell before you ask Kale to submit your job. This will tell Kale what purpose the cell serves in the pipeline [3] and how it should contextualize the cell's content. On the first 2 cells, select "skip".
+![assets/click-set-cell-kind.png](assets/click-set-cell-kind.png)
+![assets/x006-skip.png](assets/x006-skip.png)
+3. Run the first cell. It will install the updated version of Tensorflow, which will enable XLA, which should make the job run much more quickly, and other libraries. Since the options to use XLA are selected, the job will error out if this is not updated.
+ - If you are curious what XLA is, and want to read on, XLA or accelerated linear algebra is a processor (hardware) technology that allows the processor to do multiple tandem mathematical operations in one step without caching intermediate results, instead of the traditional way we do math where we complete the first operation, save the result of it, and then perform the second operation on the saved output of the first one. Basically the chip has a large and complex block of transistors arranged where it can be given the operands, the 2 desired operations and their order, and will perform, for example a "multiplication-addition" in one step. This is of course much faster than the old fashioned approach, but the downside is that it needs to be compiled with machine - specific C library options. The newer versions of Tensorflow have an option that lets you tell Tensorflow you want it to "JIT" compile its operations for XLA. JIT compiling also does other hardware - level optimizations, such as "function inlining", which basically means that the compiler does some specific refactoring of the code in the background to make it run faster. If you are curious to read more about this, you can here [4] ...
+4. Run the second cell. **Wait for a popup to appear asking you if you want to restart the kernel and click [ok] before you run the cells after this.** It will restart the Jupyter kernel, so the upgrades become effective. If you run the next cell before clicking OK, the notebook will freeze up, and you will need to restart the kernel yourself.
+![assets/x007-wait.png](assets/x007-wait.png)
+![assets/x008-restart-ok.png](assets/x008-restart-ok.png)
+5. For the remaining cells:
+ - Set the 3rd cell as imports and run it.
+ - Set the 4th cell as "pipeline parameters" and run it.
+ ![assets/updated-pipeline-params.png](assets/updated-pipeline-params.png)
+ - Set the 5th cell as "a pipeline step". In the example, I named it "preprocessing", but you can name it anything you want that. For depends on, leave blank.
+ ![assets/x009-preprocessing.png](assets/x009-preprocessing.png)
+ - For the 6th cell, set it as a pipeline step. In the example, I named it "train". In this one, set the depends on field to the name you assigned to the last cell. The purpose of the depends on field is to set the order of workflow steps. By default, Kubeflow always runs in separate execution environments on the cluster, and in addition to this, unless you tell it to do otherwise, Kubeflow will also try to run all workflow steps in parallel. If one step depends on the output of another step as its input, this will fail out. In this case, this is the same, because the first step of the workflow is a data preprocessing step. It takes in one tab delimited CSV sequence file, train-test splits it, reformats it to be amenable to a 1-d convolutional layer, and then saves the train data, train labels, test data, and test labels in separate files. The second step trains and and tunes a neural network on the data which the first step prepared. Since the second step needs files that the first step will create, we can't run these in parallel. The data preprocessing must be completed first.
+ ![assets/08-pipeline-step.png](assets/08-pipeline-step.png)
+ - For the last step, set this as "pipeline metrics". This will return the metric "val_mean_absolute_error" which the Katib tuner will try to minimize.
+ ![assets/09-pipeline-metrics.png](assets/09-pipeline-metrics.png)
+
+## Step 5: Configure Katib, compile your job, and submit it. (last step, and Kubeflow has it from here.):
+
+1. In the Kale panel to the left: Enable the hyperparameter tuning with Kale. A menu will open.
+2. Click *Set up Katib Job*.
+ 1. Checkbox each box for the pipeline parameters and set the following:
+ - All l1 and l2 regularizations: 0.0000001 to 0.9
+ - learning_rate: min 0.0001 max 0.3 step: .001 # Avoids overshooting an optimal solution when adjusting the kernel weights (weights are the "m" in the y = mx + b model) A neural network is just a chain of m3(m2(mx + b) + b2) + b3, with an activation function nested between each layer that adds non-linearity so it can't collapse to a single layer.
+ - dropout_rate: min 0.01 max 0.95 step 0.1 # Prevents overfitting; allows a more complex and robust model to be used without overfitting.
+ - num_dense_layers: min 1 max 5 step 1
+ - conv_activation and activation: elu, relu, gelu, linear (which activation function will be used; As a note, most textbook examples teach you to use relu. Elu is often said in an out of context way to be "more computationally expensive". In reality, models trained with elu usually reach convergence within a few epochs, sometimes in as few as 1 /20 as many epochs, making the higher per - epoch computational expense a moot problem in many cases, unless the celling of available ram and GPU power is barely able to compute the gradient for your task with relu. Elu usually wins out, but we will let the tuner figure what works best here in this specific case.)
+ - batch_size: min 5 max 35 step 1 # If you run into "out of memory" errors, then reduce the maximum.
+ - epochs: min 1 max 15 step 1
+ ![assets/10-setup-katib.png](assets/10-setup-katib.png)
+ 2. Select the Bayesian > Gaussian tuner. Leave the other tuner options as defaults and set it to run 3 trials in parallel and set it to run 35 trials in total (The tuner will probably converge on an optima well before that, but just in case your run does a little better than mine ... . Leave the other tuner's settings as the defaults, unless you are familiar and have recommendations on how we may improve its performance. If you do, open an issue and pull request on Github so we can make this better as we go.
+ 3. Click *Close*.
+ 4. Select advanced options for the storage.
+ - Advanced settings
+ - **Make sure "Docker image" is blank.**
+ - Storage class default
+ - Read write many
+ - Use notebook volume
+ - Take ROK snapshot during each step
+ - 5GB
+ - Second volume: None
+ - Everything else defaults
+
+ ![assets/11-r2-setup-job.png](assets/11-r2-setup-job.png)
+
+ 5. Click [Compile and Run Katib Job]
+ 6. Confirm it submitted successfully.
+ 7. Click on the browser tab where main Kubeflow dashboard is open.
+ - Click on the *Runs* tab.
+ ![assets/xx-0002-pick-a-run.png](assets/xx-0002-pick-a-run.png)
+ - Once you have opened a run, click on a pipeline step.
+ ![assets/xx0003-pick-pipeline-step.png](assets/xx0003-pick-pipeline-step.png)
+ - On a step, click its *logs*.
+ ![assets/xx0006-step-logs.png](assets/xx0006-step-logs.png)
+ - There are a few other useful tabs here like the the inputs and outputs of a step which list the hyperparameters and metrics which a step returned.
+ ![assets/xx0007-step-io.png](assets/xx0007-step-io.png)
+ - Click on experiments automl (Katib), then click on *your experiment*.
+ ![assets/xx0001-navigate-to-experiment.png](assets/xx0001-navigate-to-experiment.png)
+ - Once the first 3 runs have completed, return here. Notice the parallel coordinates visualization that shows the patterns in the parameters chosen for the trials and which subset of the hyperparameter space is contributing to the best model performance. Once several trials have completed, this will be very informative. The one in this example is a bit cluttered, I admit, as it has so many hyperaprameters. For most tasks, however, this visualization will make it clear what is tending to work and what isn't.
+ ![assets/13-parallel-coords.png](assets/13-parallel-coords.png)
+ - Feel free to find something else to do for about 2 - 3 hours. Kubeflow and Katib will continue running the experiment even if you are not logged in. In 2 - 3 hours, you can return to the [experiments AutoML] page, and it will provide the best hyperparameters it found among the trials and the validation mean absolute error for the best trial. You can run the train task with these parameters and get the model to use for further work. Alternatively, you can set the option [make a rok image of of each trial]. Visit these pages and see your results. Take screenshots. (In Windows (r), search for the snipping tool. In Mac, press "[command] + [shift] + 4"). Write down the best parameters it found. You will need these in the second notebook.
+ ![assets/14-successful-katib-run.png](assets/14-successful-katib-run.png)
+ ![assets/x002-final-results-page.png](assets/x002-final-results-page.png)
+ - Once you are sure you have a copy of everything you want, go back to the page in the deployment manager and delete the deployment, so you don't keep being billed for it. We recommend selecting the option to delete everything "disks, VPC settings, ...". The SSD disks that this uses are a little expensive.
+ ![assets/stop-instance.png](assets/stop-instance.png)
+
+## References
+
+- [0] https://colab.research.google.com/github/kmkarakaya/ML_tutorials/blob/master/Conv1d_Predict_house_prices.ipynb
+- [1] https://www.epj-conferences.org/articles/epjconf/abs/2021/05/epjconf_chep2021_02067/epjconf_chep2021_02067.html
+- [2] https://www.kubeflow.org/docs/started/introduction/
+- [3] https://docs.arrikto.com/features/pipelines/jupyterlab/cell-types.html#imports-cells
+- [4] https://www.greenend.org.uk/rjk/tech/inline.html
+- [5] https://en.wikipedia.org/wiki/Neural_architecture_search
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png
new file mode 100644
index 0000000..894f63e
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png
new file mode 100644
index 0000000..4c05358
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png
new file mode 100644
index 0000000..fbb045a
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png
new file mode 100644
index 0000000..8068370
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png
new file mode 100644
index 0000000..8395ba6
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png
new file mode 100644
index 0000000..2995a72
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png
new file mode 100644
index 0000000..5b8ae51
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png
new file mode 100644
index 0000000..db6f110
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png
new file mode 100644
index 0000000..e812cc8
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png
new file mode 100644
index 0000000..06f5dd5
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png
new file mode 100644
index 0000000..2ab5d98
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png
new file mode 100644
index 0000000..880532e
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png
new file mode 100644
index 0000000..29b141f
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png
new file mode 100644
index 0000000..5ee06bd
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png
new file mode 100644
index 0000000..a2b8dba
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png
new file mode 100644
index 0000000..441d296
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png
new file mode 100644
index 0000000..22882b8
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png
new file mode 100644
index 0000000..7439df1
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png
new file mode 100644
index 0000000..779bd62
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png
new file mode 100644
index 0000000..0741436
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png
new file mode 100644
index 0000000..6cf1500
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png
new file mode 100644
index 0000000..7c36105
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png
new file mode 100644
index 0000000..be7b4ed
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png
new file mode 100644
index 0000000..5e5add7
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png
new file mode 100644
index 0000000..3c6592e
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png
new file mode 100644
index 0000000..c3a300f
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png
new file mode 100644
index 0000000..193ab59
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png
new file mode 100644
index 0000000..4985b25
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png
new file mode 100644
index 0000000..2776a65
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png
new file mode 100644
index 0000000..120d88b
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png
new file mode 100644
index 0000000..a21da27
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png
new file mode 100644
index 0000000..018c4d2
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png
new file mode 100644
index 0000000..e4d0ef5
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png
new file mode 100644
index 0000000..d07c49c
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png
new file mode 100644
index 0000000..f51a3a3
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png
new file mode 100644
index 0000000..e039784
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png
new file mode 100644
index 0000000..f4453bd
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png
new file mode 100644
index 0000000..951d6d5
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png
new file mode 100644
index 0000000..b1fe14d
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png
new file mode 100644
index 0000000..6f5ea89
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png
new file mode 100644
index 0000000..17d4e95
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png
new file mode 100644
index 0000000..015afdb
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png
new file mode 100644
index 0000000..0c62041
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png
new file mode 100644
index 0000000..2faeff7
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png
new file mode 100644
index 0000000..49a8839
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png
new file mode 100644
index 0000000..888224b
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png
new file mode 100644
index 0000000..540af7e
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png
new file mode 100644
index 0000000..5560c63
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png
new file mode 100644
index 0000000..e5fb1d2
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png
new file mode 100644
index 0000000..42f02b7
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png differ
diff --git a/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png
new file mode 100644
index 0000000..a21da27
Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png differ
diff --git a/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb b/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb
new file mode 100644
index 0000000..3aac3ce
--- /dev/null
+++ b/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb
@@ -0,0 +1,394 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "7a244bb3",
+ "metadata": {},
+ "source": [
+ "# GWAS in the cloud\n",
+ "We adapted the NIH CFDE tutorial from [here](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud/background/) and fit it to a notebook. We have greatly simplified the instructions, so if you need or want more details, look at the full tutorial to find out more.\n",
+ "Most of this notebook is bash, but expects that you are using a Python kernel, until step 3, plotting, you will need to switch your kernel to R."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8fbf6304",
+ "metadata": {},
+ "source": [
+ "## 1. Setup\n",
+ "### Download the data\n",
+ "use %%bash to denote a bash block. You can also use '!' to denote a single bash command within a Python notebook"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8ec900bd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "mkdir GWAS\n",
+ "curl -LO https://de.cyverse.org/dl/d/E0A502CC-F806-4857-9C3A-BAEAA0CCC694/pruned_coatColor_maf_geno.vcf.gz\n",
+ "curl -LO https://de.cyverse.org/dl/d/3B5C1853-C092-488C-8C2F-CE6E8526E96B/coatColor.pheno"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4d43ae73",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "mv *.gz GWAS\n",
+ "mv *.pheno GWAS\n",
+ "ls GWAS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28aadbf8",
+ "metadata": {},
+ "source": [
+ "### Install dependencies\n",
+ "Here we install mamba, which is faster than conda, but it can be tricky to add to path in a Sagemaker notebook so we just call the whole path. You could also skip this install and just use conda since that is preinstalled in the kernel."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b3ba3eef",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f22059df-5a9c-4982-9b2f-bd15ce746bb2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b219074a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! mamba install -y -c bioconda plink vcftools"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3de2fc4c",
+ "metadata": {},
+ "source": [
+ "## 2. Analyze"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "013d960d",
+ "metadata": {},
+ "source": [
+ "### Make map and ped files from the vcf file to feed into plink"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e91c7a01",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cd GWAS"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6570875d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! vcftools --gzvcf pruned_coatColor_maf_geno.vcf.gz --plink --out coatColor"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9a38761",
+ "metadata": {},
+ "source": [
+ "### Create a list of minor alleles\n",
+ "\n",
+ "For more info on these terms, look at step 2 [here](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud/analyze/)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6c868a67",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#unzip vcf\n",
+ "! vcftools --gzvcf pruned_coatColor_maf_geno.vcf.gz --recode --out pruned_coatColor_maf_geno"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8e11f991",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#create list of minor alleles\n",
+ "! cat pruned_coatColor_maf_geno.recode.vcf | awk 'BEGIN{FS=\"\\t\";OFS=\"\\t\";}/#/{next;}{{if($3==\".\")$3=$1\":\"$2;}print $3,$5;}' > minor_alleles"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8cff47e3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! head minor_alleles"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "56d901c7",
+ "metadata": {},
+ "source": [
+ "### Run quality controls"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dafa14a6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#calculate missingness per locus\n",
+ "! plink --file coatColor --make-pheno coatColor.pheno \"yellow\" --missing --out miss_stat --noweb --dog --reference-allele minor_alleles --allow-no-sex --adjust"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5cf5f51b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#take a look at lmiss, which is the per locus rates of missingness\n",
+ "! head miss_stat.lmiss"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "915bb263",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#peek at imiss which is the individual rates of missingness\n",
+ "! head miss_stat.imiss"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4c11ca71",
+ "metadata": {},
+ "source": [
+ "### Convert to plink binary format"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3b8f2d7f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! plink --file coatColor --allow-no-sex --dog --make-bed --noweb --out coatColor.binary"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e36f6cd7",
+ "metadata": {},
+ "source": [
+ "### Run a simple association step (the GWAS part!)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f926ef9b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! plink --bfile coatColor.binary --make-pheno coatColor.pheno \"yellow\" --assoc --reference-allele minor_alleles --allow-no-sex --adjust --dog --noweb --out coatColor"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b397d484",
+ "metadata": {},
+ "source": [
+ "### Identify statistical cutoffs\n",
+ "This code finds the equivalent of 0.05 and 0.01 p value in the negative-log-transformed p values file. We will use these cutoffs to draw horizontal lines in the Manhattan plot for visualization of haplotypes that cross the 0.05 and 0.01 statistical threshold (i.e. have a statistically significant association with yellow coat color)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b94e1e2a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "unad_cutoff_sug=$(tail -n+2 coatColor.assoc.adjusted | awk '$10>=0.05' | head -n1 | awk '{print $3}')\n",
+ "unad_cutoff_conf=$(tail -n+2 coatColor.assoc.adjusted | awk '$10>=0.01' | head -n1 | awk '{print $3}')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1f52e97c",
+ "metadata": {},
+ "source": [
+ "## 3. Plotting\n",
+ "In this tutorial, plotting is done in R, so at this point you can change your kernel to R in the top right. Wait for it to say 'idle' in the bottom left, then continue. You could also plot using Python native packages and maintain the Python notebook kernel."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "effb5acd",
+ "metadata": {},
+ "source": [
+ "### Install qqman"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "60feed89",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "install.packages('qqman', contriburl=contrib.url('http://cran.r-project.org/'))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d3f1fcd2",
+ "metadata": {},
+ "source": [
+ "### Run the plotting function"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a7e8cd2b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make sure you are still CD in GWAS, when you change kernel it may reset to home\n",
+ "setwd('GWAS')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7946a3a7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "require(qqman)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0d28ef2c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data=read.table(\"coatColor.assoc\", header=TRUE)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8e5207be",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data=data[!is.na(data$P),]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6330b1e0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "manhattan(data, p = \"P\", col = c(\"blue4\", \"orange3\"),\n",
+ " suggestiveline = 12,\n",
+ " genomewideline = 15,\n",
+ " chrlabs = c(1:38, \"X\"), annotateTop=TRUE, cex = 1.2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26787d84",
+ "metadata": {},
+ "source": [
+ "In our graph, haplotypes in four parts of the genome (chromosome 2, 5, 28 and X) are found to be associated with an increased occurrence of the yellow coat color phenotype.\n",
+ "\n",
+ "The top associated mutation is a nonsense SNP in the gene MC1R known to control pigment production. The MC1R allele encoding yellow coat color contains a single base change (from C to T) at the 916th nucleotide."
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m110",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb b/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb
new file mode 100644
index 0000000..09b3d8d
--- /dev/null
+++ b/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb
@@ -0,0 +1,2590 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "92021b22-3fbf-4489-9e88-aea4d73f3529",
+ "metadata": {},
+ "source": [
+ "# Finetuning and Deploying Hugging Face Models on Vertex AI"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dfbc2ea5-1aca-4322-a15c-7bcbb3925ef6",
+ "metadata": {},
+ "source": [
+ "For this tutorial it is recommended to use 1 GPU to speed up processes, this notebooks was run using the machinetype n1-highcpu-8 (8 vCPUs, 7.199 GB RAM) on Tensorflow. Visit the following tutorial to set up notebooks that utilize: GPUs [Spinning up a Vertex AI Notebook](../../../docs/vertexai.md).\n",
+ "\n",
+ "This tutorial will focus on utilizing Hugging Face which is a repository for user to share and download machine learning models, datasets, and demos. For this tutorial we will load in a model and dataset from Hugging Face and train and test our model before deploying it on Vertex AI. The model we will be deploying is Flan T5 and the datasets is [ccdv/pubmed-summarization](https://HuggingFace.co/datasets/ccdv/pubmed-summarization). Steps will show how to hypertune a model locally and how to launch our custom training job on Vertex AI Training, these steps are based on Keras NLP Tutorials for [abstractive summarization](https://keras.io/examples/nlp/t5_hf_summarization/).\n",
+ "\n",
+ "You may be wondering why are we training a pretrained model? The reason for this is because we are fine tuning our pretrained model for optimal performance on a particular application, in our case summarizing scientific documents. This is not a necessary step anymore as new methods have been made to enhance model performance like zero-shot learning which we will go over in our next tutorial."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6ab3668c-58c0-489a-aa4f-6f7e045b450f",
+ "metadata": {},
+ "source": [
+ "## Install Tools"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "161dea96-601e-4194-a285-51b0c4403e9d",
+ "metadata": {},
+ "source": [
+ "Hugging Face **transformers** are an open-source framework that allows you to utilize APIs and tools to download pretrained models, set hyperparameters, tokenize datasets, and further tune them to suite your needs. Here we are updating Vertex AI as well as installing the transformers package and **datasets** so that we can have access to Hugging Face datasets and as a bonus we are adding the S3 feature to help download datasets that may already be in a S3 bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "a6e5884b-ac90-42d4-aafd-d34d5495d24d",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Collecting transformers\n",
+ " Obtaining dependency information for transformers from https://files.pythonhosted.org/packages/c1/bd/f64d67df4d3b05a460f281defe830ffab6d7940b7ca98ec085e94e024781/transformers-4.34.1-py3-none-any.whl.metadata\n",
+ " Downloading transformers-4.34.1-py3-none-any.whl.metadata (121 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.5/121.5 kB\u001b[0m \u001b[31m8.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting datasets\n",
+ " Obtaining dependency information for datasets from https://files.pythonhosted.org/packages/7c/55/b3432f43d6d7fee999bb23a547820d74c48ec540f5f7842e41aa5d8d5f3a/datasets-2.14.6-py3-none-any.whl.metadata\n",
+ " Downloading datasets-2.14.6-py3-none-any.whl.metadata (19 kB)\n",
+ "Collecting rouge_score\n",
+ " Downloading rouge_score-0.1.2.tar.gz (17 kB)\n",
+ " Preparing metadata (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25hCollecting evaluate\n",
+ " Obtaining dependency information for evaluate from https://files.pythonhosted.org/packages/70/63/7644a1eb7b0297e585a6adec98ed9e575309bb973c33b394dae66bc35c69/evaluate-0.4.1-py3-none-any.whl.metadata\n",
+ " Downloading evaluate-0.4.1-py3-none-any.whl.metadata (9.4 kB)\n",
+ "Collecting keras_nlp\n",
+ " Obtaining dependency information for keras_nlp from https://files.pythonhosted.org/packages/37/d4/dfd85606db811af2138e97fc480eb7ed709042dd96dd453868bede0929fe/keras_nlp-0.6.2-py3-none-any.whl.metadata\n",
+ " Downloading keras_nlp-0.6.2-py3-none-any.whl.metadata (7.2 kB)\n",
+ "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from transformers) (3.12.4)\n",
+ "Collecting huggingface-hub<1.0,>=0.16.4 (from transformers)\n",
+ " Obtaining dependency information for huggingface-hub<1.0,>=0.16.4 from https://files.pythonhosted.org/packages/ef/b5/b6107bd65fa4c96fdf00e4733e2fe5729bb9e5e09997f63074bb43d3ab28/huggingface_hub-0.18.0-py3-none-any.whl.metadata\n",
+ " Downloading huggingface_hub-0.18.0-py3-none-any.whl.metadata (13 kB)\n",
+ "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from transformers) (1.23.5)\n",
+ "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from transformers) (23.1)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from transformers) (6.0.1)\n",
+ "Requirement already satisfied: regex!=2019.12.17 in /opt/conda/lib/python3.10/site-packages (from transformers) (2023.8.8)\n",
+ "Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from transformers) (2.31.0)\n",
+ "Collecting tokenizers<0.15,>=0.14 (from transformers)\n",
+ " Obtaining dependency information for tokenizers<0.15,>=0.14 from https://files.pythonhosted.org/packages/a7/7b/c1f643eb086b6c5c33eef0c3752e37624bd23e4cbc9f1332748f1c6252d1/tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\n",
+ "Collecting safetensors>=0.3.1 (from transformers)\n",
+ " Obtaining dependency information for safetensors>=0.3.1 from https://files.pythonhosted.org/packages/20/4e/878b080dbda92666233ec6f316a53969edcb58eab1aa399a64d0521cf953/safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n",
+ "Requirement already satisfied: tqdm>=4.27 in /opt/conda/lib/python3.10/site-packages (from transformers) (4.66.1)\n",
+ "Requirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (9.0.0)\n",
+ "Requirement already satisfied: dill<0.3.8,>=0.3.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (0.3.1.1)\n",
+ "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from datasets) (2.0.3)\n",
+ "Collecting xxhash (from datasets)\n",
+ " Obtaining dependency information for xxhash from https://files.pythonhosted.org/packages/80/8a/1dd41557883b6196f8f092011a5c1f72d4d44cf36d7b67d4a5efe3127949/xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n",
+ "Collecting multiprocess (from datasets)\n",
+ " Obtaining dependency information for multiprocess from https://files.pythonhosted.org/packages/35/a8/36d8d7b3e46b377800d8dec47891cdf05842d1a2366909ae4a0c89fbc5e6/multiprocess-0.70.15-py310-none-any.whl.metadata\n",
+ " Downloading multiprocess-0.70.15-py310-none-any.whl.metadata (7.2 kB)\n",
+ "Requirement already satisfied: fsspec[http]<=2023.10.0,>=2023.1.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (2023.9.2)\n",
+ "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets) (3.8.5)\n",
+ "Requirement already satisfied: absl-py in /opt/conda/lib/python3.10/site-packages (from rouge_score) (1.4.0)\n",
+ "Collecting nltk (from rouge_score)\n",
+ " Downloading nltk-3.8.1-py3-none-any.whl (1.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m80.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: six>=1.14.0 in /opt/conda/lib/python3.10/site-packages (from rouge_score) (1.16.0)\n",
+ "Collecting responses<0.19 (from evaluate)\n",
+ " Downloading responses-0.18.0-py3-none-any.whl (38 kB)\n",
+ "Requirement already satisfied: keras-core in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (0.1.7)\n",
+ "Requirement already satisfied: rich in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (13.5.3)\n",
+ "Requirement already satisfied: dm-tree in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (0.1.8)\n",
+ "Collecting tensorflow-text (from keras_nlp)\n",
+ " Obtaining dependency information for tensorflow-text from https://files.pythonhosted.org/packages/0b/5f/8b301d2d0cea8334c22aaeb8880ce115ec34d7eba20f7b08c64202011a85/tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.9 kB)\n",
+ "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (23.1.0)\n",
+ "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (3.2.0)\n",
+ "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (6.0.4)\n",
+ "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (4.0.3)\n",
+ "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.9.2)\n",
+ "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.4.0)\n",
+ "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.3.1)\n",
+ "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.16.4->transformers) (4.5.0)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (3.4)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (1.26.16)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (2023.7.22)\n",
+ "Collecting huggingface-hub<1.0,>=0.16.4 (from transformers)\n",
+ " Obtaining dependency information for huggingface-hub<1.0,>=0.16.4 from https://files.pythonhosted.org/packages/aa/f3/3fc97336a0e90516901befd4f500f08d691034d387406fdbde85bea827cc/huggingface_hub-0.17.3-py3-none-any.whl.metadata\n",
+ " Downloading huggingface_hub-0.17.3-py3-none-any.whl.metadata (13 kB)\n",
+ "Requirement already satisfied: namex in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp) (0.0.7)\n",
+ "Requirement already satisfied: h5py in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp) (3.9.0)\n",
+ "Collecting dill<0.3.8,>=0.3.0 (from datasets)\n",
+ " Obtaining dependency information for dill<0.3.8,>=0.3.0 from https://files.pythonhosted.org/packages/f5/3a/74a29b11cf2cdfcd6ba89c0cecd70b37cd1ba7b77978ce611eb7a146a832/dill-0.3.7-py3-none-any.whl.metadata\n",
+ " Downloading dill-0.3.7-py3-none-any.whl.metadata (9.9 kB)\n",
+ "Requirement already satisfied: click in /opt/conda/lib/python3.10/site-packages (from nltk->rouge_score) (8.1.7)\n",
+ "Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from nltk->rouge_score) (1.3.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.3.post1)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.3)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp) (2.16.1)\n",
+ "Requirement already satisfied: tensorflow-hub>=0.13.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow-text->keras_nlp) (0.14.0)\n",
+ "Collecting tensorflow<2.15,>=2.14.0 (from tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for tensorflow<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/e2/7a/c7762c698fb1ac41a7e3afee51dc72aa3ec74ae8d2f57ce19a9cded3a4af/tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras_nlp) (0.1.2)\n",
+ "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.6.3)\n",
+ "Requirement already satisfied: flatbuffers>=23.5.26 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (23.5.26)\n",
+ "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.4.0)\n",
+ "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.2.0)\n",
+ "Requirement already satisfied: libclang>=13.0.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (16.0.6)\n",
+ "Collecting ml-dtypes==0.2.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for ml-dtypes==0.2.0 from https://files.pythonhosted.org/packages/d1/1d/d5cf76e5e40f69dbd273036e3172ae4a614577cb141673427b80cac948df/ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)\n",
+ "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.3.0)\n",
+ "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.20.3)\n",
+ "Requirement already satisfied: setuptools in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (68.2.2)\n",
+ "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.3.0)\n",
+ "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.14.1)\n",
+ "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.31.0)\n",
+ "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.48.0)\n",
+ "Collecting tensorboard<2.15,>=2.14 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for tensorboard<2.15,>=2.14 from https://files.pythonhosted.org/packages/73/a2/66ed644f6ed1562e0285fcd959af17670ea313c8f331c46f79ee77187eb9/tensorboard-2.14.1-py3-none-any.whl.metadata\n",
+ " Downloading tensorboard-2.14.1-py3-none-any.whl.metadata (1.7 kB)\n",
+ "Collecting tensorflow-estimator<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for tensorflow-estimator<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/d1/da/4f264c196325bb6e37a6285caec5b12a03def489b57cc1fdac02bb6272cd/tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata\n",
+ " Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata (1.3 kB)\n",
+ "Collecting keras<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for keras<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/fe/58/34d4d8f1aa11120c2d36d7ad27d0526164b1a8ae45990a2fede31d0e59bf/keras-2.14.0-py3-none-any.whl.metadata\n",
+ " Downloading keras-2.14.0-py3-none-any.whl.metadata (2.4 kB)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.41.2)\n",
+ "Collecting grpcio<2.0,>=1.24.3 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n",
+ " Obtaining dependency information for grpcio<2.0,>=1.24.3 from https://files.pythonhosted.org/packages/29/cc/e6883efbbcaa6570a0d2207ba53c796137f11293e47d11e2696f37b66811/grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n",
+ "Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.23.0)\n",
+ "Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.0.0)\n",
+ "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.4.4)\n",
+ "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.7.1)\n",
+ "Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.1.2)\n",
+ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (4.2.4)\n",
+ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.3.0)\n",
+ "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (4.9)\n",
+ "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.3.1)\n",
+ "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.5.0)\n",
+ "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.2.2)\n",
+ "Downloading transformers-4.34.1-py3-none-any.whl (7.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.7/7.7 MB\u001b[0m \u001b[31m98.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading datasets-2.14.6-py3-none-any.whl (493 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m493.7/493.7 kB\u001b[0m \u001b[31m57.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading evaluate-0.4.1-py3-none-any.whl (84 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m84.1/84.1 kB\u001b[0m \u001b[31m17.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading keras_nlp-0.6.2-py3-none-any.whl (590 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m590.1/590.1 kB\u001b[0m \u001b[31m58.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m84.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.8/3.8 MB\u001b[0m \u001b[31m108.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading huggingface_hub-0.17.3-py3-none-any.whl (295 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m295.0/295.0 kB\u001b[0m \u001b[31m46.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading multiprocess-0.70.15-py310-none-any.whl (134 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m25.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading dill-0.3.7-py3-none-any.whl (115 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m115.3/115.3 kB\u001b[0m \u001b[31m23.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.5/6.5 MB\u001b[0m \u001b[31m108.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.1/194.1 kB\u001b[0m \u001b[31m33.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m489.8/489.8 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/1.0 MB\u001b[0m \u001b[31m69.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading keras-2.14.0-py3-none-any.whl (1.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m89.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading tensorboard-2.14.1-py3-none-any.whl (5.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.5/5.5 MB\u001b[0m \u001b[31m113.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m115.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl (440 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m440.7/440.7 kB\u001b[0m \u001b[31m53.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hBuilding wheels for collected packages: rouge_score\n",
+ " Building wheel for rouge_score (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25h Created wheel for rouge_score: filename=rouge_score-0.1.2-py3-none-any.whl size=24932 sha256=57aa40a32d8d9171d43b9bc47cc3472fac0fb1192aa80eba9defb8e4ffd2352a\n",
+ " Stored in directory: /home/jupyter/.cache/pip/wheels/5f/dd/89/461065a73be61a532ff8599a28e9beef17985c9e9c31e541b4\n",
+ "Successfully built rouge_score\n",
+ "Installing collected packages: xxhash, tensorflow-estimator, safetensors, nltk, ml-dtypes, keras, grpcio, dill, rouge_score, responses, multiprocess, huggingface-hub, tokenizers, transformers, tensorboard, datasets, tensorflow, evaluate, tensorflow-text, keras_nlp\n",
+ " Attempting uninstall: tensorflow-estimator\n",
+ " Found existing installation: tensorflow-estimator 2.12.0\n",
+ " Uninstalling tensorflow-estimator-2.12.0:\n",
+ " Successfully uninstalled tensorflow-estimator-2.12.0\n",
+ " Attempting uninstall: ml-dtypes\n",
+ " Found existing installation: ml-dtypes 0.3.1\n",
+ " Uninstalling ml-dtypes-0.3.1:\n",
+ " Successfully uninstalled ml-dtypes-0.3.1\n",
+ " Attempting uninstall: keras\n",
+ " Found existing installation: keras 2.12.0\n",
+ " Uninstalling keras-2.12.0:\n",
+ " Successfully uninstalled keras-2.12.0\n",
+ " Attempting uninstall: grpcio\n",
+ " Found existing installation: grpcio 1.48.0\n",
+ " Uninstalling grpcio-1.48.0:\n",
+ " Successfully uninstalled grpcio-1.48.0\n",
+ " Attempting uninstall: dill\n",
+ " Found existing installation: dill 0.3.1.1\n",
+ " Uninstalling dill-0.3.1.1:\n",
+ " Successfully uninstalled dill-0.3.1.1\n",
+ " Attempting uninstall: tensorboard\n",
+ " Found existing installation: tensorboard 2.12.3\n",
+ " Uninstalling tensorboard-2.12.3:\n",
+ " Successfully uninstalled tensorboard-2.12.3\n",
+ " Attempting uninstall: tensorflow\n",
+ " Found existing installation: tensorflow 2.12.0\n",
+ " Uninstalling tensorflow-2.12.0:\n",
+ " Successfully uninstalled tensorflow-2.12.0\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "apache-beam 2.46.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.7 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed datasets-2.14.6 dill-0.3.7 evaluate-0.4.1 grpcio-1.58.0 huggingface-hub-0.17.3 keras-2.14.0 keras_nlp-0.6.2 ml-dtypes-0.2.0 multiprocess-0.70.15 nltk-3.8.1 responses-0.18.0 rouge_score-0.1.2 safetensors-0.4.0 tensorboard-2.14.1 tensorflow-2.14.0 tensorflow-estimator-2.14.0 tensorflow-text-2.14.0 tokenizers-0.14.1 transformers-4.34.1 xxhash-3.4.1\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install \"transformers\" \"datasets\" \"rouge_score\" \"evaluate\" \"keras_nlp\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e9b287a7-3035-48c1-8520-a7d3de4f925b",
+ "metadata": {},
+ "source": [
+ "## Download your dataset from Hugging Face"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd58ed15-7e8f-4f24-b68f-4a5b5fcd5cf2",
+ "metadata": {},
+ "source": [
+ "We will be downloading Hugging Face dataset 'ccdv/pubmed-summarization' which contains the full article and their abstracts which will help train our model to summarize scientific articles. Once the dataset is loaded we'll split the data into train, test, and validation datasets. Since these are large datasets we will only be using 5% of dataset to help our process run faster."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 211,
+ "id": "8f59e17e-c006-45ee-be0b-766774f9d420",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from datasets import load_dataset\n",
+ "\n",
+ "# load dataset\n",
+ "train, test, validation = load_dataset(\"ccdv/pubmed-summarization\", split=[\"train[:5%]\", \"test[:5%]\", \"validation[:5%]\" ])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "51d2756c-d280-4aec-a6fb-416dd91c3ba5",
+ "metadata": {},
+ "source": [
+ "Lets list the feaures of one of our datasets to determine what we will need to tokenize in a later step. this dataset features are 'article' and 'abstract'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 114,
+ "id": "760c9128-793a-4bed-a127-b92ef496e33b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dataset({\n",
+ " features: ['article', 'abstract'],\n",
+ " num_rows: 5996\n",
+ "})\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(train)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3446d1b6-af0c-4127-93c0-c47fde142546",
+ "metadata": {},
+ "source": [
+ "## Finetuning our Model Locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ed6ddff1-2636-4e3b-88ee-e3c86c584245",
+ "metadata": {},
+ "source": [
+ "Now that we have our datasets we can upload our model which will be the small version of Flan T5."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b112574b-0e33-4c31-b12a-f1839024ea44",
+ "metadata": {},
+ "source": [
+ "\n",
+ "**Flan T5** is a text-to-text generation model and an advancement to the original T5 model and can be run on both CPUs and GPUs. **Text-to-text** is a method of creating text by using a neural network to generate new text from a given input. These T5 models can be fine-tuned for various zero shot NLP tasks that we have seen and heard of before: text classification, summarization, translation, and question-answering. Text-to-text is not to be confused by text2text generation which is a earlier version of T5 that is designed specifically for sequence-to-sequence tasks, such as machine translation and text generation and is limited to these task where as T5 models are more flexible due to the wider range of NPL tasks they can execute.\n",
+ "\n",
+ "Because it is a seq2seq class model we will be using the transformer **TFAutoModelForSeq2Seq** (specifically for tensorflow models) to help find a load our pretrained model architecture. Then we will assign an **AutoTokenizer** to preprocess the text of our inputs (the test, train, validation datasets) into an array of numbers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 185,
+ "id": "bfd433b3-9790-4a10-ac08-6c90c194d8b0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#model name\n",
+ "CHECKPOINT = \"google/flan-t5-small\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 184,
+ "id": "1988cbcb-4bec-4aa2-a356-a211584ceacb",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2023-11-03 15:13:42.327557: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
+ "2023-11-03 15:13:42.327603: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
+ "2023-11-03 15:13:42.327636: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
+ "2023-11-03 15:13:42.336037: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
+ "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2023-11-03 15:13:44.543851: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:44.554372: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:44.557202: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:44.560698: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:44.563540: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:44.566113: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:45.308267: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:45.310177: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:45.311838: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2023-11-03 15:13:45.313437: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1886] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13589 MB memory: -> device: 0, name: Tesla T4, pci bus id: 0000:00:04.0, compute capability: 7.5\n",
+ "/opt/conda/lib/python3.10/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomNormal is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n",
+ " warnings.warn(\n",
+ "All PyTorch model weights were used when initializing TFT5ForConditionalGeneration.\n",
+ "\n",
+ "All the weights of TFT5ForConditionalGeneration were initialized from the PyTorch model.\n",
+ "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n"
+ ]
+ }
+ ],
+ "source": [
+ "from transformers import TFAutoModelForSeq2SeqLM, AutoTokenizer\n",
+ "\n",
+ "model = TFAutoModelForSeq2SeqLM.from_pretrained(CHECKPOINT)\n",
+ "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f6ca0419-0075-4f62-becf-b859312cea22",
+ "metadata": {},
+ "source": [
+ "Now that we have loaded the architecture of our model and configured it to tokenize our inputs we can now implement a tokenization functions to start processing our datasets.\n",
+ "Since we are using a T5 model we will have to prefix the inputs with \"summarize:\" to know which task to perform. We create a preprocess function to append the prefix to each row within the \"article\" column of our dataset labeling them as inputs. The inputs are then tokenized, limited by a set max length, and truncated.\n",
+ "\n",
+ "A similar process is done for the \"abstract\" column within our dataset except we do not add the prefix and we labels them as **labels**.\n",
+ "\n",
+ "**What is Truncating?**\n",
+ "\n",
+ "Our group of inputs or batch will usually be different lengths which makes it hard to be converted to fixed-size tensors. To fix this problem **truncation** removes tokens ensure longer sequences will have the same length as the longest sequence in the batch which we have set to be **1024** for our inputs and **128** for our labels.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 212,
+ "id": "f101c309-f214-4b3f-b77b-d55491e48a59",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "prefix = \"summarize: \"\n",
+ "\n",
+ "def preprocess_function(examples):\n",
+ " inputs = [prefix + doc for doc in examples[\"article\"]]\n",
+ " model_inputs = tokenizer(inputs, max_length=1024, truncation=True)\n",
+ "\n",
+ " labels = tokenizer(text_target=\n",
+ " examples[\"abstract\"], max_length=128, truncation=True\n",
+ " )\n",
+ "\n",
+ " model_inputs[\"labels\"] = labels[\"input_ids\"]\n",
+ "\n",
+ " return model_inputs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "491efc2a-1679-4044-9f53-4aff27329856",
+ "metadata": {},
+ "source": [
+ "Now that we have our tokenized function the next step is to implement the **map** function to iterate the function **preprocess_function** over our loaded datasets."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 210,
+ "id": "5e58eb58-a655-4e2b-8665-b4b770bc87a7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tokenized_train = train.map(preprocess_function, batched=True)\n",
+ "\n",
+ "#tokenized_test = test.map(preprocess_function, batched=True)\n",
+ "\n",
+ "#tokenized_validation = validation.map(preprocess_function, batched=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "41bc1576-44dd-4604-b5db-6c57b711096a",
+ "metadata": {},
+ "source": [
+ "Lets look at the structure of one of our new tokenized datasets you should see 3 new features (**'input_ids', 'attention_mask', 'labels'**) making 5 features total:\n",
+ "\n",
+ "- **input_ids:** As our inputs are being tokenized an ID is assigned for each token, meaning as each text is broken up into sequences (which can be words or subwords) and converted to tokens within our dataset they are assign an ID.\n",
+ "- **attention_masks:** Tokens that should be ignored by the model usually represented by a 0. Masking can be done when some sequences are not the same length so they can not belong in the same tensor and need to be padded.\n",
+ "- **labels:** The new name of the abstract column that has been tokenized."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "80a25bc8-00db-4b8d-9b68-d52c5d6ca7fe",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dataset({\n",
+ " features: ['article', 'abstract', 'input_ids', 'attention_mask', 'labels'],\n",
+ " num_rows: 5996\n",
+ "})\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(tokenized_train)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "285d972c-6aa3-4072-a405-86e7dd82904e",
+ "metadata": {},
+ "source": [
+ "DataCollators are objects that dynamically pads the inputs and the labels in our batches, reverse to truncating **padding** adds a special padding token to ensure shorter sequences will have the same length as the longest sequence in the batch which a gain we set in out preprocess_function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "875ef33d-5ef3-4b07-b1de-6d471743a8ad",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from transformers import DataCollatorForSeq2Seq\n",
+ "data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=CHECKPOINT, return_tensors=\"tf\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1b48b037-d666-417b-b28e-88b715a1083c",
+ "metadata": {},
+ "source": [
+ "Then the last step will be to set our data format to be suitable for Tensorflow using the function **'prepare_tf_dataset()'** by automatically inspecting your model and keep only the features that are necessary. As you can see there are only 2 of our features left represented in the dataset: **input_ids and attention_mask**."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "6fcac5a8-912f-461f-bfab-990e472c01ca",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "You're using a T5TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.\n"
+ ]
+ }
+ ],
+ "source": [
+ "tf_train_set = model.prepare_tf_dataset(\n",
+ " tokenized_train,\n",
+ " shuffle=True,\n",
+ " batch_size=10,\n",
+ " collate_fn=data_collator,\n",
+ " \n",
+ ")\n",
+ "\n",
+ "tf_test_set = model.prepare_tf_dataset(\n",
+ " tokenized_test,\n",
+ " shuffle=False,\n",
+ " batch_size=10,\n",
+ " collate_fn=data_collator,\n",
+ " \n",
+ ")\n",
+ "\n",
+ "tf_validation_set = model.prepare_tf_dataset(\n",
+ " tokenized_validation,\n",
+ " shuffle=False,\n",
+ " batch_size=10,\n",
+ " collate_fn=data_collator,\n",
+ " \n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "11aaf028-c713-4064-84cc-f699df3151ec",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "<_PrefetchDataset element_spec=({'input_ids': TensorSpec(shape=(10, None), dtype=tf.int64, name=None), 'attention_mask': TensorSpec(shape=(10, None), dtype=tf.int64, name=None)}, TensorSpec(shape=(10, None), dtype=tf.int64, name=None))>\n"
+ ]
+ }
+ ],
+ "source": [
+ "print (tf_train_set)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7ad7839-4967-40fb-aa26-39cea71fa085",
+ "metadata": {},
+ "source": [
+ "**Learning rate** controls how much the model will change in response to the estimated error each time the model weights are updated. Too small of a learning rate could result very slow training process that could eventually get stuck, whereas a value too large may result in an unstable training process. Setting the **weight decay** helps to avoid overfitting, weights small, and avoid exploding gradient. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "50ed6068-763a-46a6-8aed-4862f84413a9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from transformers import AdamWeightDecay\n",
+ "optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01)\n",
+ "model.compile(optimizer=optimizer)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd6a770a-e149-4970-a915-1362f544ef40",
+ "metadata": {},
+ "source": [
+ "Using the function metric_fn will help us calculate the **ROUGE** score between the ground-truth and predictions while training. ROUGE stands for **Recall-Oriented Understudy for Gisting Evaluation** this metric compares a reference sentence with what our model produces see if there is overlap if there is it calculates the precision and recall using the overlap.\n",
+ "\n",
+ "As an example say our model produced a sentence like so:\n",
+ "\n",
+ "**'the cat was found under the bed'**\n",
+ "\n",
+ "but the reference sentence normally written by a human is:\n",
+ "\n",
+ "**'the cat was under the bed'**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "f9c6b45b-7349-4965-938b-3a334ced3882",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend\n"
+ ]
+ }
+ ],
+ "source": [
+ "import keras_nlp\n",
+ "\n",
+ "rouge_l = keras_nlp.metrics.RougeL()\n",
+ "\n",
+ "\n",
+ "def metric_fn(eval_predictions):\n",
+ " predictions, labels = eval_predictions\n",
+ " decoded_predictions = tokenizer.batch_decode(predictions, skip_special_tokens=True)\n",
+ " for label in labels:\n",
+ " label[label < 0] = tokenizer.pad_token_id # Replace masked label tokens\n",
+ " decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)\n",
+ " result = rouge_l(decoded_labels, decoded_predictions)\n",
+ " # We will print only the F1 score, you can use other aggregation metrics as well\n",
+ " result = {\"RougeL\": result[\"f1_score\"]}\n",
+ "\n",
+ " return result"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b57e9aa9-9d7c-41d0-8ab1-5d79277c969d",
+ "metadata": {},
+ "source": [
+ "We will use the validation dataset for calculating our ROUGE score. While our ROUGE score is being calculated and our training is running its best to set up a **callback system**. A callback is an object that can perform actions at various stages of training and helps to write logs after every batch of training to monitor your metrics, periodically save your model to disk, and if need be do early stopping. Here we are using Keras call back system."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "06e014b1-e9d2-4d9f-a149-c6c0381f7407",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from transformers.keras_callbacks import KerasMetricCallback\n",
+ "metric_callback = KerasMetricCallback(\n",
+ " metric_fn, eval_dataset=tf_validation_set, predict_with_generate=True, use_xla_generation=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd1b16ea-0e8a-4c78-875e-e3edea6cf043",
+ "metadata": {},
+ "source": [
+ "Before we start to train our model the last step will be to set how many batches of training we should do, the number of iterations is called **epochs**, we will set ours to 3. Now we can start to train our model using the function **'fit'** and save our artifacts to a directory. The artifact that holds our model will be a file named **tf_model.h5**. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "b8fd0c64-4d85-4b5e-86fe-538c7dc65da7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/3\n",
+ "599/599 [==============================] - ETA: 0s - loss: 2.5073"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/opt/conda/lib/python3.10/site-packages/tensorflow/python/autograph/impl/api.py:371: UserWarning: Using the model-agnostic default `max_length` (=20) to control the generation length. recommend setting `max_new_tokens` to control the maximum length of the generation.\n",
+ " return py_builtins.overload_of(f)(*args)\n",
+ "2023-11-02 13:09:59.053088: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55faf0d80f50 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n",
+ "2023-11-02 13:09:59.053132: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Tesla T4, Compute Capability 7.5\n",
+ "2023-11-02 13:10:00.019242: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n",
+ "2023-11-02 13:10:00.163195: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n",
+ "2023-11-02 13:10:00.714302: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less_1/Assert/Assert\n",
+ "2023-11-02 13:10:01.396732: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n",
+ "2023-11-02 13:10:02.853947: I tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:442] Loaded cuDNN version 8900\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n",
+ "2023-11-02 13:10:12.362168: I ./tensorflow/compiler/jit/device_compiler.h:186] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n",
+ "2023-11-02 13:10:25.996665: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n",
+ "2023-11-02 13:10:26.174121: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less_1/Assert/Assert\n",
+ "2023-11-02 13:10:26.666553: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n",
+ "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "599/599 [==============================] - 731s 1s/step - loss: 2.5073 - val_loss: 2.0886 - RougeL: 0.1196\n",
+ "Epoch 2/3\n",
+ "599/599 [==============================] - 662s 1s/step - loss: 2.3710 - val_loss: 2.0231 - RougeL: 0.1191\n",
+ "Epoch 3/3\n",
+ "599/599 [==============================] - 662s 1s/step - loss: 2.3102 - val_loss: 1.9996 - RougeL: 0.1172\n"
+ ]
+ }
+ ],
+ "source": [
+ "model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3, callbacks=metric_callback)\n",
+ "\n",
+ "model.save_pretrained('saved_model')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d1c35de0-4cdf-4c2b-9c0d-c2272b71b362",
+ "metadata": {},
+ "source": [
+ "## Testing the Model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "31f7f62a-ca17-4dcc-b25d-825572ee1630",
+ "metadata": {},
+ "source": [
+ "Here we will use a sample text that we want our model to summarize."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "id": "980d0053-0c3b-4d0d-91b9-9dd6e6dd3e64",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "text = \"Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) is a \\\n",
+ "highly transmissible and pathogenic coronavirus that emerged in late 2019 and has \\\n",
+ "caused a pandemic of acute respiratory disease, named ‘coronavirus disease 2019’ (COVID-19), \\\n",
+ "which threatens human health and public safety. In this Review, we describe the basic virology of \\\n",
+ "SARS-CoV-2, including genomic characteristics and receptor use, highlighting its key difference \\\n",
+ "from previously known coronaviruses. We summarize current knowledge of clinical, epidemiological and \\\n",
+ "pathological features of COVID-19, as well as recent progress in animal models and antiviral treatment \\\n",
+ "approaches for SARS-CoV-2 infection. We also discuss the potential wildlife hosts and zoonotic origin \\\n",
+ "of this emerging virus in detail.\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3156ef96-20ab-46ff-ae76-57d6ea54f0ff",
+ "metadata": {},
+ "source": [
+ "To predict the following tokenizes the text to gather the inputs, then uses **generate()** generate sequences of token ids for our model. We then decode our output to translate our tokenized output into text."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cb34d7c2-a815-4c9d-bd8b-495aca8b2d02",
+ "metadata": {},
+ "source": [
+ "Below you will see that we have provided a paragraph about SARS-CoV-2 as our output, we also have some parameters that we specify to further tune our model to get a concise summary of what our text is about.\n",
+ "\n",
+ "- **Max_Length:** Max number of words to generate.\n",
+ "- **Num_Return_Sequences:** Number of different outputs to generate. For our example we want one sentence or sequence.\n",
+ "- **Temperature:** Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1.\n",
+ "- **Top_p (nucleus):** The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n",
+ "- **Top_k**: Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "id": "fc2206c7-1bbf-41eb-8c63-abb17752d00d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "All model checkpoint layers were used when initializing TFT5ForConditionalGeneration.\n",
+ "\n",
+ "All the layers of TFT5ForConditionalGeneration were initialized from the model checkpoint at saved_model.\n",
+ "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'We describe the basic virology of Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) and its role in preventing the pandemic of acute respiratory disease, named ‘coronavirus disease 2019’ (COVID-19), which threatens human health and public safety.'"
+ ]
+ },
+ "execution_count": 101,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from transformers import AutoTokenizer\n",
+ "\n",
+ "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)\n",
+ "inputs = tokenizer.encode(text, return_tensors=\"tf\")\n",
+ "\n",
+ "from transformers import TFAutoModelForSeq2SeqLM\n",
+ "\n",
+ "model = TFAutoModelForSeq2SeqLM.from_pretrained(\"saved_model\")\n",
+ "\n",
+ "outputs = model.generate(inputs, \n",
+ " max_length=1000,\n",
+ " num_return_sequences = 1,\n",
+ " do_sample=True, \n",
+ " temperature = 0.6,\n",
+ " top_k = 50, \n",
+ " top_p = 0.95,)\n",
+ "\n",
+ "tokenizer.decode(outputs[0], skip_special_tokens=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "af0f0064-d9b4-430c-90ae-d2e390d1b78c",
+ "metadata": {},
+ "source": [
+ "### Optional: Summarizing PDF Files"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1abe4b0b-8ee2-48f1-afed-0cd2796717a2",
+ "metadata": {},
+ "source": [
+ "The process of summarizing scientific PDF files is relatively the same except that we first need to extract the text from the PDF. To do so lets download a PDF file from PubMed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "id": "d69aa008-80c0-4a19-aa0f-8f5798673c47",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2023-11-02 20:07:00-- https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7784226/pdf/12248_2020_Article_532.pdf\n",
+ "Resolving www.ncbi.nlm.nih.gov (www.ncbi.nlm.nih.gov)... 130.14.29.110, 2607:f220:41e:4290::110\n",
+ "Connecting to www.ncbi.nlm.nih.gov (www.ncbi.nlm.nih.gov)|130.14.29.110|:443... connected.\n",
+ "HTTP request sent, awaiting response... 200 OK\n",
+ "Length: 5757370 (5.5M) [application/pdf]\n",
+ "Saving to: ‘12248_2020_Article_532.pdf’\n",
+ "\n",
+ "12248_2020_Article_ 100%[===================>] 5.49M 7.25MB/s in 0.8s \n",
+ "\n",
+ "2023-11-02 20:07:01 (7.25 MB/s) - ‘12248_2020_Article_532.pdf’ saved [5757370/5757370]\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "! wget --user-agent=\"Chrome\" https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7784226/pdf/12248_2020_Article_532.pdf"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6555b048-a76c-4f10-b13c-4ac93f436fe8",
+ "metadata": {},
+ "source": [
+ "We'll be downloading some tools that help us extract only the text from our pdf file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "1347b3cd-5ce0-44c9-864d-a688bcacb1d0",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
+ "To disable this warning, you can either:\n",
+ "\t- Avoid using `tokenizers` before the fork if possible\n",
+ "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: fitz in /opt/conda/lib/python3.10/site-packages (0.0.1.dev2)\n",
+ "Collecting PyMuPDF\n",
+ " Obtaining dependency information for PyMuPDF from https://files.pythonhosted.org/packages/41/4a/530017aaf0a554aa6d9abd547932a02c0188962d12122fe611bf7a6d0c26/PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl.metadata\n",
+ " Downloading PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl.metadata (3.4 kB)\n",
+ "Requirement already satisfied: configobj in /opt/conda/lib/python3.10/site-packages (from fitz) (5.0.8)\n",
+ "Requirement already satisfied: configparser in /opt/conda/lib/python3.10/site-packages (from fitz) (6.0.0)\n",
+ "Requirement already satisfied: httplib2 in /opt/conda/lib/python3.10/site-packages (from fitz) (0.21.0)\n",
+ "Requirement already satisfied: nibabel in /opt/conda/lib/python3.10/site-packages (from fitz) (5.1.0)\n",
+ "Requirement already satisfied: nipype in /opt/conda/lib/python3.10/site-packages (from fitz) (1.8.6)\n",
+ "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from fitz) (1.23.5)\n",
+ "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from fitz) (2.0.3)\n",
+ "Requirement already satisfied: pyxnat in /opt/conda/lib/python3.10/site-packages (from fitz) (1.6)\n",
+ "Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from fitz) (1.11.2)\n",
+ "Collecting PyMuPDFb==1.23.5 (from PyMuPDF)\n",
+ " Obtaining dependency information for PyMuPDFb==1.23.5 from https://files.pythonhosted.org/packages/cf/14/de59687368ad2c047b038b5b9b04e40bd5d486d5b36c6aef42c18c35ea2c/PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata\n",
+ " Downloading PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.3 kB)\n",
+ "Requirement already satisfied: six in /opt/conda/lib/python3.10/site-packages (from configobj->fitz) (1.16.0)\n",
+ "Requirement already satisfied: pyparsing!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4,>=2.4.2 in /opt/conda/lib/python3.10/site-packages (from httplib2->fitz) (3.1.1)\n",
+ "Requirement already satisfied: packaging>=17 in /opt/conda/lib/python3.10/site-packages (from nibabel->fitz) (23.1)\n",
+ "Requirement already satisfied: click>=6.6.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (8.1.7)\n",
+ "Requirement already satisfied: networkx>=2.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.1)\n",
+ "Requirement already satisfied: prov>=1.5.2 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (2.0.0)\n",
+ "Requirement already satisfied: pydot>=1.2.3 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (1.4.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.2 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (2.8.2)\n",
+ "Requirement already satisfied: rdflib>=5.0.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (7.0.0)\n",
+ "Requirement already satisfied: simplejson>=3.8.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.19.2)\n",
+ "Requirement already satisfied: traits!=5.0,<6.4,>=4.6 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (6.3.2)\n",
+ "Requirement already satisfied: filelock>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.12.4)\n",
+ "Requirement already satisfied: etelemetry>=0.2.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (0.3.1)\n",
+ "Requirement already satisfied: looseversion in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (1.3.0)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->fitz) (2023.3.post1)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->fitz) (2023.3)\n",
+ "Requirement already satisfied: future>=0.16 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (0.18.3)\n",
+ "Requirement already satisfied: lxml>=4.3 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (4.9.3)\n",
+ "Requirement already satisfied: pathlib>=1.0 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (1.0.1)\n",
+ "Requirement already satisfied: requests>=2.20 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (2.31.0)\n",
+ "Requirement already satisfied: ci-info>=0.2 in /opt/conda/lib/python3.10/site-packages (from etelemetry>=0.2.0->nipype->fitz) (0.3.0)\n",
+ "Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /opt/conda/lib/python3.10/site-packages (from rdflib>=5.0.0->nipype->fitz) (0.6.1)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (3.2.0)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (3.4)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (1.26.16)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (2023.7.22)\n",
+ "Downloading PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl (4.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.3/4.3 MB\u001b[0m \u001b[31m46.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (30.6 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m30.6/30.6 MB\u001b[0m \u001b[31m42.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: PyMuPDFb, PyMuPDF\n",
+ "Successfully installed PyMuPDF-1.23.5 PyMuPDFb-1.23.5\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install \"fitz\" \"PyMuPDF\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3331b05f-d00e-4ff2-be24-edea732e4af2",
+ "metadata": {},
+ "source": [
+ "Now we can make a function **extract_text_from_pdf** to extract the text from the pdf and save it as a variable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "id": "d77b6ffe-90e1-4a01-aa52-9cf93a9c5c85",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import fitz\n",
+ "def extract_text_from_pdf(pdf_path):\n",
+ " doc = fitz.open(pdf_path)\n",
+ " text = ''\n",
+ " for page in doc:\n",
+ " text += page.get_text()\n",
+ " return text\n",
+ "\n",
+ "text_pdf=extract_text_from_pdf('12248_2020_Article_532.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "10e761c6-da93-4ca0-827e-a3715c20eb10",
+ "metadata": {},
+ "source": [
+ "Finally we'll follow the same steps we did before to encode our inputs, pass it to our model, and then decode our output. Notice how we increased the max_length of what is expected of our input."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "id": "9a1f5dbd-6a9f-4533-a12e-8a6c4073df74",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "All model checkpoint layers were used when initializing TFT5ForConditionalGeneration.\n",
+ "\n",
+ "All the layers of TFT5ForConditionalGeneration were initialized from the model checkpoint at saved_model.\n",
+ "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n"
+ ]
+ },
+ {
+ "ename": "TypeError",
+ "evalue": "Cannot convert 'Summary:' to EagerTensor of dtype int32",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[97], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m model \u001b[38;5;241m=\u001b[39m TFAutoModelForSeq2SeqLM\u001b[38;5;241m.\u001b[39mfrom_pretrained(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msaved_model\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 10\u001b[0m outputs \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mgenerate(inputs, max_new_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m100\u001b[39m, do_sample\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m---> 12\u001b[0m tokenizer\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mSummary:\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m, skip_special_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py:153\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\u001b[38;5;241m.\u001b[39mwith_traceback(filtered_tb) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 155\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m filtered_tb\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/tensorflow/python/framework/constant_op.py:102\u001b[0m, in \u001b[0;36mconvert_to_eager_tensor\u001b[0;34m(value, ctx, dtype)\u001b[0m\n\u001b[1;32m 100\u001b[0m dtype \u001b[38;5;241m=\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mas_dtype(dtype)\u001b[38;5;241m.\u001b[39mas_datatype_enum\n\u001b[1;32m 101\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m--> 102\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEagerTensor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m)\u001b[49m\n",
+ "\u001b[0;31mTypeError\u001b[0m: Cannot convert 'Summary:' to EagerTensor of dtype int32"
+ ]
+ }
+ ],
+ "source": [
+ "from transformers import AutoTokenizer\n",
+ "\n",
+ "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)\n",
+ "inputs = tokenizer.encode(text_pdf, max_length=1000, truncation=True, return_tensors=\"tf\")\n",
+ "\n",
+ "from transformers import TFAutoModelForSeq2SeqLM\n",
+ "\n",
+ "model = TFAutoModelForSeq2SeqLM.from_pretrained(\"saved_model\")\n",
+ "\n",
+ "outputs = model.generate(inputs, max_new_tokens=100, do_sample=False)\n",
+ "\n",
+ "tokenizer.decode(outputs[0], skip_special_tokens=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "257fb45f-7752-481d-a1f6-f3eeb7655fac",
+ "metadata": {},
+ "source": [
+ "## Finetuning our Model via Vertex AI Training API"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6ac841f6-c65e-4ebf-8c42-3030e2f92cb0",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### Setting up our Datasets for Training "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fff825cf-86fb-4777-885b-9e981be831b7",
+ "metadata": {},
+ "source": [
+ "Although we have our datasets saved locally inorder to utilize the Vertex AI Training API we will need to store our datasets in a bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 233,
+ "id": "d3f49896-b2c1-47e6-a7cc-aca7753bb6c4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from datasets import load_dataset\n",
+ "\n",
+ "# load dataset\n",
+ "train, test, validation = load_dataset(\"ccdv/pubmed-summarization\", split=[\"train[:5%]\", \"test[:5%]\", \"validation[:5%]\" ])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "1b91fe7c-5970-45c1-9401-1db3206a8ce9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#load in the storage package and name our bucket\n",
+ "from google.cloud import storage\n",
+ "BUCKET='flan-t5-model-resources'\n",
+ "client = storage.Client()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "id": "0066ad72-e451-41c0-b30a-c3a7dfa5f17c",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "ename": "Conflict",
+ "evalue": "409 POST https://storage.googleapis.com/storage/v1/b?project=cit-oconnellka-9999&prettyPrint=false: Your previous request to create the named bucket succeeded and you already own it.",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mConflict\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[105], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m#Create bucket\u001b[39;00m\n\u001b[1;32m 2\u001b[0m bucket \u001b[38;5;241m=\u001b[39m client\u001b[38;5;241m.\u001b[39mbucket(BUCKET)\n\u001b[0;32m----> 3\u001b[0m \u001b[43mbucket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/bucket.py:972\u001b[0m, in \u001b[0;36mBucket.create\u001b[0;34m(self, client, project, location, predefined_acl, predefined_default_object_acl, timeout, retry)\u001b[0m\n\u001b[1;32m 925\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Creates current bucket.\u001b[39;00m\n\u001b[1;32m 926\u001b[0m \n\u001b[1;32m 927\u001b[0m \u001b[38;5;124;03mIf the bucket already exists, will raise\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 968\u001b[0m \u001b[38;5;124;03m (Optional) How to retry the RPC. See: :ref:`configuring_retries`\u001b[39;00m\n\u001b[1;32m 969\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 971\u001b[0m client \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_require_client(client)\n\u001b[0;32m--> 972\u001b[0m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_bucket\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 973\u001b[0m \u001b[43m \u001b[49m\u001b[43mbucket_or_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 974\u001b[0m \u001b[43m \u001b[49m\u001b[43mproject\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mproject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 975\u001b[0m \u001b[43m \u001b[49m\u001b[43muser_project\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43muser_project\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 976\u001b[0m \u001b[43m \u001b[49m\u001b[43mlocation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 977\u001b[0m \u001b[43m \u001b[49m\u001b[43mpredefined_acl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpredefined_acl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 978\u001b[0m \u001b[43m \u001b[49m\u001b[43mpredefined_default_object_acl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpredefined_default_object_acl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 979\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 980\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 981\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:954\u001b[0m, in \u001b[0;36mClient.create_bucket\u001b[0;34m(self, bucket_or_name, requester_pays, project, user_project, location, data_locations, predefined_acl, predefined_default_object_acl, timeout, retry)\u001b[0m\n\u001b[1;32m 951\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_locations \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 952\u001b[0m properties[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcustomPlacementConfig\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdataLocations\u001b[39m\u001b[38;5;124m\"\u001b[39m: data_locations}\n\u001b[0;32m--> 954\u001b[0m api_response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post_resource\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 955\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/b\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 956\u001b[0m \u001b[43m \u001b[49m\u001b[43mproperties\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 957\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 958\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 959\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 960\u001b[0m \u001b[43m \u001b[49m\u001b[43m_target_object\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbucket\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 961\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 963\u001b[0m bucket\u001b[38;5;241m.\u001b[39m_set_properties(api_response)\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m bucket\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:618\u001b[0m, in \u001b[0;36mClient._post_resource\u001b[0;34m(self, path, data, query_params, headers, timeout, retry, _target_object)\u001b[0m\n\u001b[1;32m 557\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_post_resource\u001b[39m(\n\u001b[1;32m 558\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 559\u001b[0m path,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 565\u001b[0m _target_object\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 566\u001b[0m ):\n\u001b[1;32m 567\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Helper for bucket / blob methods making API 'POST' calls.\u001b[39;00m\n\u001b[1;32m 568\u001b[0m \n\u001b[1;32m 569\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[38;5;124;03m If the bucket is not found.\u001b[39;00m\n\u001b[1;32m 616\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 618\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapi_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 619\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 620\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 621\u001b[0m \u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 622\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 623\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 624\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 625\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 626\u001b[0m \u001b[43m \u001b[49m\u001b[43m_target_object\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_target_object\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 627\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/_http.py:72\u001b[0m, in \u001b[0;36mConnection.api_request\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry:\n\u001b[1;32m 71\u001b[0m call \u001b[38;5;241m=\u001b[39m retry(call)\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/api_core/retry.py:349\u001b[0m, in \u001b[0;36mRetry.__call__..retry_wrapped_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 345\u001b[0m target \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mpartial(func, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 346\u001b[0m sleep_generator \u001b[38;5;241m=\u001b[39m exponential_sleep_generator(\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_initial, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maximum, multiplier\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_multiplier\n\u001b[1;32m 348\u001b[0m )\n\u001b[0;32m--> 349\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mretry_target\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mtarget\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_predicate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43msleep_generator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[43m \u001b[49m\u001b[43mon_error\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mon_error\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/api_core/retry.py:191\u001b[0m, in \u001b[0;36mretry_target\u001b[0;34m(target, predicate, sleep_generator, timeout, on_error, **kwargs)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m sleep \u001b[38;5;129;01min\u001b[39;00m sleep_generator:\n\u001b[1;32m 190\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 191\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtarget\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 193\u001b[0m \u001b[38;5;66;03m# pylint: disable=broad-except\u001b[39;00m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;66;03m# This function explicitly must deal with broad exceptions.\u001b[39;00m\n\u001b[1;32m 195\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n",
+ "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/_http/__init__.py:494\u001b[0m, in \u001b[0;36mJSONConnection.api_request\u001b[0;34m(self, method, path, query_params, data, content_type, headers, api_base_url, api_version, expect_json, _target_object, timeout, extra_api_info)\u001b[0m\n\u001b[1;32m 482\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(\n\u001b[1;32m 483\u001b[0m method\u001b[38;5;241m=\u001b[39mmethod,\n\u001b[1;32m 484\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 490\u001b[0m extra_api_info\u001b[38;5;241m=\u001b[39mextra_api_info,\n\u001b[1;32m 491\u001b[0m )\n\u001b[1;32m 493\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m:\n\u001b[0;32m--> 494\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exceptions\u001b[38;5;241m.\u001b[39mfrom_http_response(response)\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expect_json \u001b[38;5;129;01mand\u001b[39;00m response\u001b[38;5;241m.\u001b[39mcontent:\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\u001b[38;5;241m.\u001b[39mjson()\n",
+ "\u001b[0;31mConflict\u001b[0m: 409 POST https://storage.googleapis.com/storage/v1/b?project=cit-oconnellka-9999&prettyPrint=false: Your previous request to create the named bucket succeeded and you already own it."
+ ]
+ }
+ ],
+ "source": [
+ "#Create bucket\n",
+ "bucket = client.bucket(BUCKET)\n",
+ "bucket.create()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4fc7335e-cfa7-4b0e-8880-85edfa573772",
+ "metadata": {},
+ "source": [
+ "Convert our datasets to csv and upload to our bucket in one step!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "id": "1bfbbd92-4b2c-4e5c-95f8-d4e645a6ab24",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "094bf0b9c0bf44b0859f2b9c5f375e8c",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Creating CSV from Arrow format: 0%| | 0/6 [00:00, ?ba/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from io import BytesIO\n",
+ "\n",
+ "#convert train dataset to csv and push to GCS bucket\n",
+ "csv_buffer = BytesIO()\n",
+ "train.to_csv(csv_buffer)\n",
+ "client = storage.Client()\n",
+ "bucket = client.get_bucket(BUCKET)\n",
+ "bucket.blob('train.csv').upload_from_file(csv_buffer, 'text/csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "id": "dbf3f68f-acc8-4086-9b89-be0d3eacf898",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e54494e07db241aa8537c6bce84558bd",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Creating CSV from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#convert test dataset to csv and push to GCS bucket\n",
+ "csv_buffer = BytesIO()\n",
+ "test.to_csv(csv_buffer)\n",
+ "client = storage.Client()\n",
+ "bucket = client.get_bucket(BUCKET)\n",
+ "bucket.blob('test.csv').upload_from_file(csv_buffer, 'text/csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "id": "ea1773e1-dfe2-46b5-a63d-782101d79096",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "8b3cd00c2e42453b9c85320fd43360a5",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Creating CSV from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#convert validation dataset to csv and push to GCS bucket\n",
+ "csv_buffer = BytesIO()\n",
+ "validation.to_csv(csv_buffer)\n",
+ "client = storage.Client()\n",
+ "bucket = client.get_bucket(BUCKET)\n",
+ "bucket.blob('validation.csv').upload_from_file(csv_buffer, 'text/csv')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f18630a7-109c-4f53-9233-1842f5c27029",
+ "metadata": {},
+ "source": [
+ "Here we will be saving the location of our datasets be used when we execute the training of our model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 257,
+ "id": "ebc1bc39-a554-473b-949a-d9588f6e7fb8",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# save train_dataset to s3\n",
+ "training_input_path = f'gs://{BUCKET}/train.csv'\n",
+ "\n",
+ "# save test_dataset to s3\n",
+ "test_input_path = f'gs://{BUCKET}/test.csv'\n",
+ "\n",
+ "validation_input_path = f'gs://{BUCKET}/validation.csv'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9204b6dc-8f6e-407e-8c68-a036a6a5b7c9",
+ "metadata": {},
+ "source": [
+ "### Training our Model via Vertex AI Training API"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2f873f2f-90b8-4566-96f5-37a23a2294e1",
+ "metadata": {},
+ "source": [
+ "To train our model on Vertex AI Training API you must first create a custom AI job, this is done by creating a autopkg that holds your requirements.txt and task.py files is a specific structure like so: "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8eeafae2-a698-4a52-a4f1-cae550245d0b",
+ "metadata": {},
+ "source": [
+ "```\n",
+ "autopkg-summarizer /\n",
+ " + requirements.txt\n",
+ " + trainer/\n",
+ " + task.py\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 103,
+ "id": "48d49de7-6d86-411e-9e6e-104763ae36e6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Creates the following directories and files\n",
+ "!mkdir autopkg-summarizer\n",
+ "!touch autopkg-summarizer/requirements.txt\n",
+ "!mkdir autopkg-summarizer/trainer\n",
+ "!touch autopkg-summarizer/trainer/task.py"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7bd953b5-8d21-4c07-adcc-23604d5d0279",
+ "metadata": {},
+ "source": [
+ "Add your requirements.txt file by adding the packages below:\n",
+ "```\n",
+ "nltk\n",
+ "transformers\n",
+ "keras_nlp\n",
+ "datasets\n",
+ "rouge_score\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "443f0e45-dbe6-4ce9-b0ad-96a5fe52a455",
+ "metadata": {},
+ "source": [
+ "To create our training script we will be adding all the steps that we ran from the 'Finetuning our Model Locally' section of this tutorial to a file named task.py:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "14ab5a7d-36bf-449d-b2cd-4f7e107c75de",
+ "metadata": {},
+ "source": [
+ "```\n",
+ "import nltk\n",
+ "import argparse\n",
+ "from datasets import load_dataset\n",
+ "#import evaluate\n",
+ "import numpy as np\n",
+ "from transformers import create_optimizer, AdamWeightDecay, TFAutoModelForSeq2SeqLM, AutoTokenizer, DataCollatorForSeq2Seq, set_seed\n",
+ "import tensorflow as tf\n",
+ "from tensorflow import keras\n",
+ "from transformers.keras_callbacks import KerasMetricCallback\n",
+ "import keras_nlp\n",
+ "\n",
+ "def get_args():\n",
+ " '''Parses args.'''\n",
+ " parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n",
+ " parser.add_argument(\n",
+ " '--model_name_or_path',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='name of model or path to load into tokenizer and class')\n",
+ " parser.add_argument(\n",
+ " '--train_file',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='train dataset in csv or json format')\n",
+ " parser.add_argument(\n",
+ " '--test_file',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='test dataset in csv or json format')\n",
+ " parser.add_argument(\n",
+ " '--validation_file',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='validation dataset in csv or json format used to calculate ROUGE score')\n",
+ " parser.add_argument(\n",
+ " '--text_column',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='The name of the column in the datasets containing the full texts (for summarization)')\n",
+ " parser.add_argument(\n",
+ " '--summary_column',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='The name of the column in the datasets containing the abstracts or summary of the full text')\n",
+ " parser.add_argument(\n",
+ " '--num_train_epochs',\n",
+ " required=False,\n",
+ " type=int,\n",
+ " default=3,\n",
+ " help='number of complete passes through the training dataset')\n",
+ " parser.add_argument(\n",
+ " '--source_prefix',\n",
+ " required=False,\n",
+ " type=str,\n",
+ " help='A prefix to add before every source text (needed for T5 models)')\n",
+ " parser.add_argument(\n",
+ " '--inputs_max_length',\n",
+ " required=False,\n",
+ " type=int,\n",
+ " default=1024,\n",
+ " help='max token length for model inputs')\n",
+ " parser.add_argument(\n",
+ " '--labels_max_length',\n",
+ " required=False,\n",
+ " type=int,\n",
+ " default=128,\n",
+ " help='max token length for model labels or targets')\n",
+ " parser.add_argument(\n",
+ " '--batch_size',\n",
+ " required=False,\n",
+ " type=int,\n",
+ " default=10,\n",
+ " help='max token length for model labels or targets')\n",
+ " parser.add_argument(\n",
+ " '--output_dir',\n",
+ " required=True,\n",
+ " type=str,\n",
+ " help='bucket to store saved model, include gs://')\n",
+ " \n",
+ " args = parser.parse_args()\n",
+ " return args\n",
+ "\n",
+ "def main():\n",
+ " \n",
+ " args = get_args() \n",
+ " \n",
+ " checkpoint = args.model_name_or_path\n",
+ " \n",
+ " tokenizer = AutoTokenizer.from_pretrained(checkpoint)\n",
+ " \n",
+ " text = args.text_column\n",
+ " summary = args.summary_column\n",
+ " inputs_max_length = args.inputs_max_length\n",
+ " labels_max_length = args.labels_max_length\n",
+ " prefix = args.source_prefix \n",
+ " \n",
+ " model = TFAutoModelForSeq2SeqLM.from_pretrained(checkpoint) \n",
+ " \n",
+ " data_files = {'train':args.train_file, 'test':args.test_file, 'validation':args.validation_file}\n",
+ " extension = args.train_file.split(\".\")[-1]\n",
+ " \n",
+ " raw_datasets = load_dataset(\n",
+ " extension,\n",
+ " data_files=data_files)\n",
+ " \n",
+ " raw_datasets = raw_datasets.filter(lambda x: x[text] is not None) \n",
+ " \n",
+ " train = raw_datasets[\"train\"]\n",
+ " test = raw_datasets[\"test\"]\n",
+ " validation = raw_datasets[\"validation\"]\n",
+ " \n",
+ " def preprocess_function(examples):\n",
+ " \n",
+ " inputs = [prefix + doc for doc in examples[text]]\n",
+ " model_inputs = tokenizer(inputs, max_length=inputs_max_length, truncation=True)\n",
+ "\n",
+ " # labels = tokenizer(text_target=examples[\"abstract\"], max_length=128, truncation=True)\n",
+ "\n",
+ " labels = tokenizer(text_target=\n",
+ " examples[summary], max_length=labels_max_length, truncation=True\n",
+ " )\n",
+ "\n",
+ " model_inputs[\"labels\"] = labels[\"input_ids\"]\n",
+ " return model_inputs\n",
+ " \n",
+ " tokenized_train = train.map(preprocess_function, batched=True)\n",
+ " tokenized_test = test.map(preprocess_function, batched=True)\n",
+ " tokenized_validation = validation.map(preprocess_function, batched=True)\n",
+ " \n",
+ " data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint, return_tensors=\"tf\")\n",
+ "\n",
+ " optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01)\n",
+ " model.compile(optimizer=optimizer)\n",
+ "\n",
+ " tf_train_set = model.prepare_tf_dataset(\n",
+ " tokenized_train,\n",
+ " shuffle=True,\n",
+ " batch_size=args.batch_size,\n",
+ " collate_fn=data_collator\n",
+ " )\n",
+ "\n",
+ " tf_test_set = model.prepare_tf_dataset(\n",
+ " tokenized_test,\n",
+ " shuffle=False,\n",
+ " batch_size=args.batch_size,\n",
+ " collate_fn=data_collator\n",
+ " )\n",
+ " \n",
+ " tf_validation_set = model.prepare_tf_dataset(\n",
+ " tokenized_validation,\n",
+ " shuffle=False,\n",
+ " batch_size=args.batch_size,\n",
+ " collate_fn=data_collator\n",
+ " ) \n",
+ " \n",
+ " def metric_fn(eval_predictions):\n",
+ " predictions, labels = eval_predictions\n",
+ " decoded_predictions = tokenizer.batch_decode(predictions, skip_special_tokens=True)\n",
+ " for label in labels:\n",
+ " label[label < 0] = tokenizer.pad_token_id # Replace masked label tokens\n",
+ " decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)\n",
+ " result = rouge_l(decoded_labels, decoded_predictions)\n",
+ " # We will print only the F1 score, you can use other aggregation metrics as well\n",
+ " result = {\"RougeL\": result[\"f1_score\"]}\n",
+ "\n",
+ " return result\n",
+ " \n",
+ " rouge_l = keras_nlp.metrics.RougeL()\n",
+ "\n",
+ " metric_callback = KerasMetricCallback(\n",
+ " metric_fn, eval_dataset=tf_validation_set, predict_with_generate=True, use_xla_generation=True)\n",
+ "\n",
+ "\n",
+ " model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=args.num_train_epochs, callbacks=metric_callback)\n",
+ " model.save(f'{args.output_dir}/saved_model_artifacts_tf')\n",
+ " model.save_pretrained(f'{args.output_dir}/saved_model_hf_tf')\n",
+ "\n",
+ "\n",
+ "if __name__ == \"__main__\":\n",
+ " main()\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8775dba1-c47b-4375-9587-6fec561bc5f9",
+ "metadata": {},
+ "source": [
+ "### Hyperparameters (for the training script and custom AI job)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a66d0c47-f6df-4b79-87a6-a637b04ebc87",
+ "metadata": {},
+ "source": [
+ "The first step to training our model other than setting up our datasets is to set our **hyperparameters**. Hyperparameters depend on your training script and for this one we need to identify our model, the location of our train and test files, etc. \n",
+ "\n",
+ "The batch_size, inputs_max_length, num_train_epochs, and labels_max_length already have defualts setting same as the ones we used in the first section of this tutorial!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "764980e6-9bc1-4715-b540-9e254b12f1f3",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2023-11-03 12:32:26.151679: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
+ "2023-11-03 12:32:26.151738: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
+ "2023-11-03 12:32:26.151777: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
+ "2023-11-03 12:32:26.161962: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
+ "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "Traceback (most recent call last):\n",
+ " File \"/home/jupyter/autopkg-summarizer/trainer/task.py\", line 4, in \n",
+ " import evaluate\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/evaluate/__init__.py\", line 29, in \n",
+ " from .evaluation_suite import EvaluationSuite\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/evaluate/evaluation_suite/__init__.py\", line 10, in \n",
+ " from ..evaluator import evaluator\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/evaluate/evaluator/__init__.py\", line 17, in \n",
+ " from transformers.pipelines import SUPPORTED_TASKS as SUPPORTED_PIPELINE_TASKS\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/transformers/pipelines/__init__.py\", line 72, in \n",
+ " from .table_question_answering import TableQuestionAnsweringArgumentHandler, TableQuestionAnsweringPipeline\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/transformers/pipelines/table_question_answering.py\", line 26, in \n",
+ " import tensorflow_probability as tfp\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/__init__.py\", line 20, in \n",
+ " from tensorflow_probability import substrates\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/substrates/__init__.py\", line 17, in \n",
+ " from tensorflow_probability.python.internal import all_util\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/__init__.py\", line 138, in \n",
+ " dir(globals()[pkg_name]) # Forces loading the package from its lazy loader.\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/lazy_loader.py\", line 57, in __dir__\n",
+ " module = self._load()\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/lazy_loader.py\", line 40, in _load\n",
+ " module = importlib.import_module(self.__name__)\n",
+ " File \"/opt/conda/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n",
+ " return _bootstrap._gcd_import(name[level:], package, level)\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/__init__.py\", line 31, in \n",
+ " from tensorflow_probability.python.experimental import bayesopt\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/__init__.py\", line 17, in \n",
+ " from tensorflow_probability.python.experimental.bayesopt import acquisition\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/acquisition/__init__.py\", line 17, in \n",
+ " from tensorflow_probability.python.experimental.bayesopt.acquisition.acquisition_function import AcquisitionFunction\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/acquisition/acquisition_function.py\", line 22, in \n",
+ " from tensorflow_probability.python.internal import prefer_static as ps\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/prefer_static.py\", line 361, in \n",
+ " ones_like = _copy_docstring(tf.ones_like, _ones_like)\n",
+ " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/prefer_static.py\", line 84, in _copy_docstring\n",
+ " raise ValueError(\n",
+ "ValueError: Arg specs do not match: original=FullArgSpec(args=['input', 'dtype', 'name', 'layout'], varargs=None, varkw=None, defaults=(None, None, None), kwonlyargs=[], kwonlydefaults=None, annotations={}), new=FullArgSpec(args=['input', 'dtype', 'name'], varargs=None, varkw=None, defaults=(None, None), kwonlyargs=[], kwonlydefaults=None, annotations={}), fn=\n"
+ ]
+ }
+ ],
+ "source": [
+ "#to view options and defaults you can run the command below\n",
+ "!python autopkg-summarizer/trainer/task.py --help"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 258,
+ "id": "b21c8c79-1709-4052-8522-ae332cfec934",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Parameters for task.py script\n",
+ "CHECKPOINT = \"google/flan-t5-small\"\n",
+ "train_file=training_input_path\n",
+ "test_file=test_input_path\n",
+ "validation_file=validation_input_path\n",
+ "text_column=\"article\"\n",
+ "summary_column=\"abstract\"\n",
+ "source_prefix=\"summarize: \" \n",
+ "output_dir= f'gs://{BUCKET}'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e830bb4a-854e-412d-93ec-3059faf603d6",
+ "metadata": {},
+ "source": [
+ "For custom AI we need to set the machine type, the accelerator for GPUs, and prebuilt docker image that will run our training. See here for more available containers: https://cloud.google.com/vertex-ai/docs/training/pre-built-containers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "09392ddd-aa9d-4358-95a6-3e64fa1692ad",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Parameters for custom AI job\n",
+ "display_name='flan-t5-training-tf'\n",
+ "BASE_GPU_IMAGE_tf='us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-12.py310:latest'\n",
+ "machine_type='n1-standard-4'\n",
+ "accelerator_type='NVIDIA_TESLA_V100'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7a6a7856-624d-4229-8a5d-cfd263a84033",
+ "metadata": {},
+ "source": [
+ "### Submit Custom AI Training Job"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "16c88abb-2a4f-4475-ad58-1d69ca31c449",
+ "metadata": {},
+ "source": [
+ "Finally we can submit our training via a custom job! It will first deploy the container that we specified and then submit our model for training. This custom job can take 15 - 20 min using our sample datasets."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 262,
+ "id": "252d8e16-5b3d-409b-bc86-9da0ce996f72",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
+ "To disable this warning, you can either:\n",
+ "\t- Avoid using `tokenizers` before the fork if possible\n",
+ "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Using endpoint [https://us-central1-aiplatform.googleapis.com/]\n",
+ "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:935: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n",
+ " self.stdin = io.open(p2cwrite, 'wb', bufsize)\n",
+ "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:941: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n",
+ " self.stdout = io.open(c2pread, 'rb', bufsize)\n",
+ "Sending build context to Docker daemon 18.99kB\n",
+ "Step 1/10 : FROM us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-12.py310:latest\n",
+ " ---> bd2bbbab7d71\n",
+ "Step 2/10 : RUN mkdir -m 777 -p /usr/app /home\n",
+ " ---> Running in 358dbf3724e8\n",
+ "Removing intermediate container 358dbf3724e8\n",
+ " ---> edf7be7209d7\n",
+ "Step 3/10 : WORKDIR /usr/app\n",
+ " ---> Running in a23be90e59c5\n",
+ "Removing intermediate container a23be90e59c5\n",
+ " ---> c35f2baa964c\n",
+ "Step 4/10 : ENV HOME=/home\n",
+ " ---> Running in 0137537b093b\n",
+ "Removing intermediate container 0137537b093b\n",
+ " ---> 64af9b387e54\n",
+ "Step 5/10 : ENV PYTHONDONTWRITEBYTECODE=1\n",
+ " ---> Running in cc5806ee80a2\n",
+ "Removing intermediate container cc5806ee80a2\n",
+ " ---> dfe914f7ecbc\n",
+ "Step 6/10 : RUN rm -rf /var/sitecustomize\n",
+ " ---> Running in 3e7c5fa57fe2\n",
+ "Removing intermediate container 3e7c5fa57fe2\n",
+ " ---> fa997bc68c88\n",
+ "Step 7/10 : COPY [\"./requirements.txt\", \"./requirements.txt\"]\n",
+ " ---> 7c46da48c940\n",
+ "Step 8/10 : RUN pip3 install --no-cache-dir -r ./requirements.txt\n",
+ " ---> Running in 6502f72390d6\n",
+ "Collecting evaluate (from -r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for evaluate from https://files.pythonhosted.org/packages/70/63/7644a1eb7b0297e585a6adec98ed9e575309bb973c33b394dae66bc35c69/evaluate-0.4.1-py3-none-any.whl.metadata\n",
+ " Downloading evaluate-0.4.1-py3-none-any.whl.metadata (9.4 kB)\n",
+ "Collecting nltk (from -r ./requirements.txt (line 2))\n",
+ " Downloading nltk-3.8.1-py3-none-any.whl (1.5 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 61.9 MB/s eta 0:00:00\n",
+ "Collecting transformers (from -r ./requirements.txt (line 3))\n",
+ " Obtaining dependency information for transformers from https://files.pythonhosted.org/packages/9a/06/e4ec2a321e57c03b7e9345d709d554a52c33760e5015fdff0919d9459af0/transformers-4.35.0-py3-none-any.whl.metadata\n",
+ " Downloading transformers-4.35.0-py3-none-any.whl.metadata (123 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.1/123.1 kB 203.6 MB/s eta 0:00:00\n",
+ "Collecting keras_nlp (from -r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for keras_nlp from https://files.pythonhosted.org/packages/37/d4/dfd85606db811af2138e97fc480eb7ed709042dd96dd453868bede0929fe/keras_nlp-0.6.2-py3-none-any.whl.metadata\n",
+ " Downloading keras_nlp-0.6.2-py3-none-any.whl.metadata (7.2 kB)\n",
+ "Collecting datasets (from -r ./requirements.txt (line 5))\n",
+ " Obtaining dependency information for datasets from https://files.pythonhosted.org/packages/7c/55/b3432f43d6d7fee999bb23a547820d74c48ec540f5f7842e41aa5d8d5f3a/datasets-2.14.6-py3-none-any.whl.metadata\n",
+ " Downloading datasets-2.14.6-py3-none-any.whl.metadata (19 kB)\n",
+ "Collecting rouge_score (from -r ./requirements.txt (line 6))\n",
+ " Downloading rouge_score-0.1.2.tar.gz (17 kB)\n",
+ " Preparing metadata (setup.py): started\n",
+ " Preparing metadata (setup.py): finished with status 'done'\n",
+ "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (1.23.5)\n",
+ "Collecting dill (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for dill from https://files.pythonhosted.org/packages/f5/3a/74a29b11cf2cdfcd6ba89c0cecd70b37cd1ba7b77978ce611eb7a146a832/dill-0.3.7-py3-none-any.whl.metadata\n",
+ " Downloading dill-0.3.7-py3-none-any.whl.metadata (9.9 kB)\n",
+ "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2.0.3)\n",
+ "Requirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2.31.0)\n",
+ "Requirement already satisfied: tqdm>=4.62.1 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (4.65.0)\n",
+ "Collecting xxhash (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for xxhash from https://files.pythonhosted.org/packages/80/8a/1dd41557883b6196f8f092011a5c1f72d4d44cf36d7b67d4a5efe3127949/xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n",
+ "Collecting multiprocess (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for multiprocess from https://files.pythonhosted.org/packages/35/a8/36d8d7b3e46b377800d8dec47891cdf05842d1a2366909ae4a0c89fbc5e6/multiprocess-0.70.15-py310-none-any.whl.metadata\n",
+ " Downloading multiprocess-0.70.15-py310-none-any.whl.metadata (7.2 kB)\n",
+ "Requirement already satisfied: fsspec[http]>=2021.05.0 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2023.6.0)\n",
+ "Collecting huggingface-hub>=0.7.0 (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for huggingface-hub>=0.7.0 from https://files.pythonhosted.org/packages/ef/b5/b6107bd65fa4c96fdf00e4733e2fe5729bb9e5e09997f63074bb43d3ab28/huggingface_hub-0.18.0-py3-none-any.whl.metadata\n",
+ " Downloading huggingface_hub-0.18.0-py3-none-any.whl.metadata (13 kB)\n",
+ "Requirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (23.1)\n",
+ "Collecting responses<0.19 (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Downloading responses-0.18.0-py3-none-any.whl (38 kB)\n",
+ "Requirement already satisfied: click in /opt/conda/lib/python3.10/site-packages (from nltk->-r ./requirements.txt (line 2)) (8.1.6)\n",
+ "Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from nltk->-r ./requirements.txt (line 2)) (1.3.1)\n",
+ "Collecting regex>=2021.8.3 (from nltk->-r ./requirements.txt (line 2))\n",
+ " Obtaining dependency information for regex>=2021.8.3 from https://files.pythonhosted.org/packages/8f/3e/4b8b40eb3c80aeaf360f0361d956d129bb3d23b2a3ecbe3a04a8f3bdd6d3/regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 178.9 MB/s eta 0:00:00\n",
+ "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from transformers->-r ./requirements.txt (line 3)) (3.12.2)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from transformers->-r ./requirements.txt (line 3)) (6.0.1)\n",
+ "Collecting tokenizers<0.15,>=0.14 (from transformers->-r ./requirements.txt (line 3))\n",
+ " Obtaining dependency information for tokenizers<0.15,>=0.14 from https://files.pythonhosted.org/packages/a7/7b/c1f643eb086b6c5c33eef0c3752e37624bd23e4cbc9f1332748f1c6252d1/tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\n",
+ "Collecting safetensors>=0.3.1 (from transformers->-r ./requirements.txt (line 3))\n",
+ " Obtaining dependency information for safetensors>=0.3.1 from https://files.pythonhosted.org/packages/20/4e/878b080dbda92666233ec6f316a53969edcb58eab1aa399a64d0521cf953/safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n",
+ "Collecting keras-core (from keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for keras-core from https://files.pythonhosted.org/packages/95/f7/b8dcff937ea64f822f0d3fe8c6010793406b82d14467cd0e9eecea458a40/keras_core-0.1.7-py3-none-any.whl.metadata\n",
+ " Downloading keras_core-0.1.7-py3-none-any.whl.metadata (4.3 kB)\n",
+ "Requirement already satisfied: absl-py in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (1.4.0)\n",
+ "Requirement already satisfied: rich in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (13.5.1)\n",
+ "Requirement already satisfied: dm-tree in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (0.1.8)\n",
+ "Collecting tensorflow-text (from keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for tensorflow-text from https://files.pythonhosted.org/packages/0b/5f/8b301d2d0cea8334c22aaeb8880ce115ec34d7eba20f7b08c64202011a85/tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.9 kB)\n",
+ "Requirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets->-r ./requirements.txt (line 5)) (12.0.1)\n",
+ "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets->-r ./requirements.txt (line 5)) (3.8.5)\n",
+ "Requirement already satisfied: six>=1.14.0 in /opt/conda/lib/python3.10/site-packages (from rouge_score->-r ./requirements.txt (line 6)) (1.16.0)\n",
+ "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (23.1.0)\n",
+ "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (3.2.0)\n",
+ "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (6.0.4)\n",
+ "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (4.0.2)\n",
+ "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.9.2)\n",
+ "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.4.0)\n",
+ "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.3.1)\n",
+ "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.7.0->evaluate->-r ./requirements.txt (line 1)) (4.7.1)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (3.4)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (1.26.16)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (2023.7.22)\n",
+ "Collecting huggingface-hub>=0.7.0 (from evaluate->-r ./requirements.txt (line 1))\n",
+ " Obtaining dependency information for huggingface-hub>=0.7.0 from https://files.pythonhosted.org/packages/aa/f3/3fc97336a0e90516901befd4f500f08d691034d387406fdbde85bea827cc/huggingface_hub-0.17.3-py3-none-any.whl.metadata\n",
+ " Downloading huggingface_hub-0.17.3-py3-none-any.whl.metadata (13 kB)\n",
+ "Collecting namex (from keras-core->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Downloading namex-0.0.7-py3-none-any.whl (5.8 kB)\n",
+ "Requirement already satisfied: h5py in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp->-r ./requirements.txt (line 4)) (3.9.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2023.3)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2023.3)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp->-r ./requirements.txt (line 4)) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp->-r ./requirements.txt (line 4)) (2.15.1)\n",
+ "Collecting tensorflow-hub>=0.13.0 (from tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for tensorflow-hub>=0.13.0 from https://files.pythonhosted.org/packages/6e/1a/fbae76f4057b9bcdf9468025d7a8ca952dec14bfafb9fc0b1e4244ce212f/tensorflow_hub-0.15.0-py2.py3-none-any.whl.metadata\n",
+ " Downloading tensorflow_hub-0.15.0-py2.py3-none-any.whl.metadata (1.3 kB)\n",
+ "Collecting tensorflow<2.15,>=2.14.0 (from tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for tensorflow<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/e2/7a/c7762c698fb1ac41a7e3afee51dc72aa3ec74ae8d2f57ce19a9cded3a4af/tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n",
+ " Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras_nlp->-r ./requirements.txt (line 4)) (0.1.2)\n",
+ "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.6.3)\n",
+ "Requirement already satisfied: flatbuffers>=23.5.26 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (23.5.26)\n",
+ "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.4.0)\n",
+ "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.2.0)\n",
+ "Requirement already satisfied: libclang>=13.0.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (16.0.6)\n",
+ "Requirement already satisfied: ml-dtypes==0.2.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.2.0)\n",
+ "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.3.0)\n",
+ "Collecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 from https://files.pythonhosted.org/packages/ae/32/45b1cf0c5d4a3ba881f5164c26af877c0dabfe6de0019d426aa0e5cf6806/protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl.metadata\n",
+ " Downloading protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl.metadata (541 bytes)\n",
+ "Requirement already satisfied: setuptools in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (68.0.0)\n",
+ "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.3.0)\n",
+ "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.14.1)\n",
+ "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.32.0)\n",
+ "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.56.2)\n",
+ "Collecting tensorboard<2.15,>=2.14 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for tensorboard<2.15,>=2.14 from https://files.pythonhosted.org/packages/73/a2/66ed644f6ed1562e0285fcd959af17670ea313c8f331c46f79ee77187eb9/tensorboard-2.14.1-py3-none-any.whl.metadata\n",
+ " Downloading tensorboard-2.14.1-py3-none-any.whl.metadata (1.7 kB)\n",
+ "Collecting tensorflow-estimator<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for tensorflow-estimator<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/d1/da/4f264c196325bb6e37a6285caec5b12a03def489b57cc1fdac02bb6272cd/tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata\n",
+ " Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata (1.3 kB)\n",
+ "Collecting keras<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n",
+ " Obtaining dependency information for keras<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/fe/58/34d4d8f1aa11120c2d36d7ad27d0526164b1a8ae45990a2fede31d0e59bf/keras-2.14.0-py3-none-any.whl.metadata\n",
+ " Downloading keras-2.14.0-py3-none-any.whl.metadata (2.4 kB)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.41.0)\n",
+ "Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.22.0)\n",
+ "Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.0.0)\n",
+ "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.4.4)\n",
+ "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.7.1)\n",
+ "Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.3.6)\n",
+ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (5.3.1)\n",
+ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.3.0)\n",
+ "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (4.9)\n",
+ "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.3.1)\n",
+ "Requirement already satisfied: MarkupSafe>=2.1.1 in /opt/conda/lib/python3.10/site-packages (from werkzeug>=1.0.1->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.1.3)\n",
+ "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.5.0)\n",
+ "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.2.2)\n",
+ "Downloading evaluate-0.4.1-py3-none-any.whl (84 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.1/84.1 kB 198.5 MB/s eta 0:00:00\n",
+ "Downloading transformers-4.35.0-py3-none-any.whl (7.9 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 124.2 MB/s eta 0:00:00\n",
+ "Downloading keras_nlp-0.6.2-py3-none-any.whl (590 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 590.1/590.1 kB 225.3 MB/s eta 0:00:00\n",
+ "Downloading datasets-2.14.6-py3-none-any.whl (493 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 493.7/493.7 kB 214.8 MB/s eta 0:00:00\n",
+ "Downloading dill-0.3.7-py3-none-any.whl (115 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.3/115.3 kB 230.1 MB/s eta 0:00:00\n",
+ "Downloading regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (773 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 773.9/773.9 kB 233.9 MB/s eta 0:00:00\n",
+ "Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 228.3 MB/s eta 0:00:00\n",
+ "Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 223.3 MB/s eta 0:00:00\n",
+ "Downloading huggingface_hub-0.17.3-py3-none-any.whl (295 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 295.0/295.0 kB 240.5 MB/s eta 0:00:00\n",
+ "Downloading keras_core-0.1.7-py3-none-any.whl (950 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 950.8/950.8 kB 236.1 MB/s eta 0:00:00\n",
+ "Downloading multiprocess-0.70.15-py310-none-any.whl (134 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 216.1 MB/s eta 0:00:00\n",
+ "Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5/6.5 MB 158.6 MB/s eta 0:00:00\n",
+ "Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.1/194.1 kB 223.4 MB/s eta 0:00:00\n",
+ "Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 489.8/489.8 MB 212.8 MB/s eta 0:00:00\n",
+ "Downloading tensorflow_hub-0.15.0-py2.py3-none-any.whl (85 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.4/85.4 kB 185.0 MB/s eta 0:00:00\n",
+ "Downloading keras-2.14.0-py3-none-any.whl (1.7 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 219.8 MB/s eta 0:00:00\n",
+ "Downloading protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl (294 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 294.4/294.4 kB 217.2 MB/s eta 0:00:00\n",
+ "Downloading tensorboard-2.14.1-py3-none-any.whl (5.5 MB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.5/5.5 MB 212.0 MB/s eta 0:00:00\n",
+ "Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl (440 kB)\n",
+ " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 440.7/440.7 kB 223.9 MB/s eta 0:00:00\n",
+ "Building wheels for collected packages: rouge_score\n",
+ " Building wheel for rouge_score (setup.py): started\n",
+ " Building wheel for rouge_score (setup.py): finished with status 'done'\n",
+ " Created wheel for rouge_score: filename=rouge_score-0.1.2-py3-none-any.whl size=24933 sha256=7fb2b5092b892710a8c128f5633d6f5f22dc260df119b78067900b8c74e972a4\n",
+ " Stored in directory: /tmp/pip-ephem-wheel-cache-sagd5q__/wheels/5f/dd/89/461065a73be61a532ff8599a28e9beef17985c9e9c31e541b4\n",
+ "Successfully built rouge_score\n",
+ "Installing collected packages: namex, xxhash, tensorflow-estimator, safetensors, regex, protobuf, keras, dill, tensorflow-hub, responses, nltk, multiprocess, huggingface-hub, tokenizers, rouge_score, keras-core, transformers, tensorboard, datasets, tensorflow, evaluate, tensorflow-text, keras_nlp\n",
+ " Attempting uninstall: tensorflow-estimator\n",
+ " Found existing installation: tensorflow-estimator 2.12.0\n",
+ " Uninstalling tensorflow-estimator-2.12.0:\n",
+ " Successfully uninstalled tensorflow-estimator-2.12.0\n",
+ " Attempting uninstall: protobuf\n",
+ " Found existing installation: protobuf 3.20.1\n",
+ " Uninstalling protobuf-3.20.1:\n",
+ " Successfully uninstalled protobuf-3.20.1\n",
+ " Attempting uninstall: keras\n",
+ " Found existing installation: keras 2.12.0\n",
+ " Uninstalling keras-2.12.0:\n",
+ " Successfully uninstalled keras-2.12.0\n",
+ " Attempting uninstall: tensorboard\n",
+ " Found existing installation: tensorboard 2.12.3\n",
+ " Uninstalling tensorboard-2.12.3:\n",
+ " Successfully uninstalled tensorboard-2.12.3\n",
+ " Attempting uninstall: tensorflow\n",
+ " Found existing installation: tensorflow 2.12.0\n",
+ " Uninstalling tensorflow-2.12.0:\n",
+ " Successfully uninstalled tensorflow-2.12.0\n",
+ "Successfully installed datasets-2.14.6 dill-0.3.7 evaluate-0.4.1 huggingface-hub-0.17.3 keras-2.14.0 keras-core-0.1.7 keras_nlp-0.6.2 multiprocess-0.70.15 namex-0.0.7 nltk-3.8.1 protobuf-4.25.0 regex-2023.10.3 responses-0.18.0 rouge_score-0.1.2 safetensors-0.4.0 tensorboard-2.14.1 tensorflow-2.14.0 tensorflow-estimator-2.14.0 tensorflow-hub-0.15.0 tensorflow-text-2.14.0 tokenizers-0.14.1 transformers-4.35.0 xxhash-3.4.1\n",
+ "\u001b[91mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "google-cloud-datastore 1.15.5 requires protobuf<4.0.0dev, but you have protobuf 4.25.0 which is incompatible.\n",
+ "\u001b[0m\u001b[91mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n",
+ "\u001b[0mRemoving intermediate container 6502f72390d6\n",
+ " ---> 97a4b7990a59\n",
+ "Step 9/10 : COPY [\"trainer\", \"trainer\"]\n",
+ " ---> dce93f89c146\n",
+ "Step 10/10 : ENTRYPOINT [\"python3\", \"-m\", \"trainer.task\"]\n",
+ " ---> Running in beccb40ff5ce\n",
+ "Removing intermediate container beccb40ff5ce\n",
+ " ---> 6be133543c75\n",
+ "Successfully built 6be133543c75\n",
+ "Successfully tagged gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660\n",
+ "\n",
+ "A custom container image is built locally.\n",
+ "\n",
+ "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:935: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n",
+ " self.stdin = io.open(p2cwrite, 'wb', bufsize)\n",
+ "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:941: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n",
+ " self.stdout = io.open(c2pread, 'rb', bufsize)\n",
+ "The push refers to repository [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3]\n",
+ "de565aa0e952: Preparing\n",
+ "8027f564cadd: Preparing\n",
+ "5bd43a783137: Preparing\n",
+ "c2cec13eda62: Preparing\n",
+ "73c814d198fd: Preparing\n",
+ "e42695c7b436: Preparing\n",
+ "e42695c7b436: Preparing\n",
+ "7e34967c8575: Preparing\n",
+ "19c1ff49a1a3: Preparing\n",
+ "724eb7d1e386: Preparing\n",
+ "e7df186da59e: Preparing\n",
+ "e7df186da59e: Preparing\n",
+ "d9e5455afa58: Preparing\n",
+ "a4f1c7b5b5c5: Preparing\n",
+ "1eeca563762d: Preparing\n",
+ "b3f8d9df367e: Preparing\n",
+ "29e2658ae6ea: Preparing\n",
+ "228616cf4f10: Preparing\n",
+ "ae32b7336b96: Preparing\n",
+ "ae32b7336b96: Preparing\n",
+ "ea7b0ccc272e: Preparing\n",
+ "01d4173a3960: Preparing\n",
+ "c235d251a607: Preparing\n",
+ "f2833e4d69b4: Preparing\n",
+ "49fc5a524f1f: Preparing\n",
+ "e175e85d3600: Preparing\n",
+ "55bfb3527de7: Preparing\n",
+ "ee67859f37c6: Preparing\n",
+ "ed7e041f0699: Preparing\n",
+ "0235cf47cbae: Preparing\n",
+ "724eb7d1e386: Waiting\n",
+ "2971cdbb4b45: Preparing\n",
+ "8374b2bc65e7: Preparing\n",
+ "3b93a6feba89: Preparing\n",
+ "b15400eb0fa7: Preparing\n",
+ "29ecaf0c2ae0: Preparing\n",
+ "a4f1c7b5b5c5: Waiting\n",
+ "41e673079fce: Preparing\n",
+ "e7df186da59e: Waiting\n",
+ "1eeca563762d: Waiting\n",
+ "cda9215846ee: Preparing\n",
+ "d9e5455afa58: Waiting\n",
+ "c5eafb4bee8f: Preparing\n",
+ "b3f8d9df367e: Waiting\n",
+ "29e2658ae6ea: Waiting\n",
+ "81182eb0608d: Preparing\n",
+ "f2baf76d88ee: Preparing\n",
+ "228616cf4f10: Waiting\n",
+ "01d4173a3960: Waiting\n",
+ "cdd7c7392317: Preparing\n",
+ "ae32b7336b96: Waiting\n",
+ "c235d251a607: Waiting\n",
+ "ea7b0ccc272e: Waiting\n",
+ "e175e85d3600: Waiting\n",
+ "f2833e4d69b4: Waiting\n",
+ "b15400eb0fa7: Waiting\n",
+ "29ecaf0c2ae0: Waiting\n",
+ "2971cdbb4b45: Waiting\n",
+ "49fc5a524f1f: Waiting\n",
+ "41e673079fce: Waiting\n",
+ "55bfb3527de7: Waiting\n",
+ "ee67859f37c6: Waiting\n",
+ "cda9215846ee: Waiting\n",
+ "3b93a6feba89: Waiting\n",
+ "8374b2bc65e7: Waiting\n",
+ "ed7e041f0699: Waiting\n",
+ "c5eafb4bee8f: Waiting\n",
+ "0235cf47cbae: Waiting\n",
+ "81182eb0608d: Waiting\n",
+ "cdd7c7392317: Waiting\n",
+ "f2baf76d88ee: Waiting\n",
+ "e42695c7b436: Waiting\n",
+ "7e34967c8575: Waiting\n",
+ "19c1ff49a1a3: Waiting\n",
+ "73c814d198fd: Pushed\n",
+ "5bd43a783137: Pushed\n",
+ "c2cec13eda62: Pushed\n",
+ "de565aa0e952: Pushed\n",
+ "e42695c7b436: Layer already exists\n",
+ "7e34967c8575: Layer already exists\n",
+ "19c1ff49a1a3: Layer already exists\n",
+ "e7df186da59e: Layer already exists\n",
+ "724eb7d1e386: Layer already exists\n",
+ "d9e5455afa58: Layer already exists\n",
+ "a4f1c7b5b5c5: Layer already exists\n",
+ "1eeca563762d: Layer already exists\n",
+ "b3f8d9df367e: Layer already exists\n",
+ "228616cf4f10: Layer already exists\n",
+ "29e2658ae6ea: Layer already exists\n",
+ "ae32b7336b96: Layer already exists\n",
+ "ea7b0ccc272e: Layer already exists\n",
+ "01d4173a3960: Layer already exists\n",
+ "c235d251a607: Layer already exists\n",
+ "f2833e4d69b4: Layer already exists\n",
+ "49fc5a524f1f: Layer already exists\n",
+ "e175e85d3600: Layer already exists\n",
+ "55bfb3527de7: Layer already exists\n",
+ "ee67859f37c6: Layer already exists\n",
+ "ed7e041f0699: Layer already exists\n",
+ "0235cf47cbae: Layer already exists\n",
+ "2971cdbb4b45: Layer already exists\n",
+ "8374b2bc65e7: Layer already exists\n",
+ "3b93a6feba89: Layer already exists\n",
+ "b15400eb0fa7: Layer already exists\n",
+ "41e673079fce: Layer already exists\n",
+ "29ecaf0c2ae0: Layer already exists\n",
+ "c5eafb4bee8f: Layer already exists\n",
+ "cda9215846ee: Layer already exists\n",
+ "81182eb0608d: Layer already exists\n",
+ "f2baf76d88ee: Layer already exists\n",
+ "cdd7c7392317: Layer already exists\n",
+ "8027f564cadd: Pushed\n",
+ "20231103.17.39.12.779660: digest: sha256:1240e61185c933e273e7bc6b5112358d85942e1f8bcb2cf076b3a144e5b748eb size: 8901\n",
+ "\n",
+ "Custom container image [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660] is created for your custom job.\n",
+ "\n",
+ "CustomJob [projects/144763482491/locations/us-central1/customJobs/6207308081613766656] is submitted successfully.\n",
+ "\n",
+ "Your job is still active. You may view the status of your job with the command\n",
+ "\n",
+ " $ gcloud ai custom-jobs describe projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n",
+ "\n",
+ "or continue streaming the logs with the command\n",
+ "\n",
+ " $ gcloud ai custom-jobs stream-logs projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n"
+ ]
+ }
+ ],
+ "source": [
+ "!gcloud ai custom-jobs create \\\n",
+ "--region=us-central1 \\\n",
+ "--display-name=$display_name \\\n",
+ "--args=--model_name_or_path=$CHECKPOINT \\\n",
+ "--args=--train_file=$train_file \\\n",
+ "--args=--test_file=$test_file \\\n",
+ "--args=--validation_file=$validation_file \\\n",
+ "--args=--text_column=$text_column \\\n",
+ "--args=--summary_column=$summary_column \\\n",
+ "--args=--output_dir=gs://$BUCKET \\\n",
+ "--args=--source_prefix=$source_prefix \\\n",
+ "--worker-pool-spec=machine-type=$machine_type,replica-count=1,accelerator-type=$accelerator_type,executor-image-uri=$BASE_GPU_IMAGE_tf,local-package-path=autopkg-summarizer,python-module=trainer.task"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "403fe77f-990c-4518-ad3a-0aac3d2c8b92",
+ "metadata": {},
+ "source": [
+ "Once you start training the output from the command line should show you the command to use to view the progress of your training via the command `gcloud ai custom-jobs stream-logs <`. You can also monitor and view logs on the console by going to `Vertex AI > Training > Custom Jobs`\n",
+ "select your custom job and click on \"View Logs\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dc7b81af-d424-427d-a37a-ac5da197567e",
+ "metadata": {},
+ "source": [
+ "## Deploy the Model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d772dc95-95e9-40f2-a5c5-dc782d6f7e14",
+ "metadata": {},
+ "source": [
+ "### Upload the Model to Vertex AI's Model Registry"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4dff127a-4d14-4fa1-a22a-75662eccce02",
+ "metadata": {},
+ "source": [
+ "Once our model is done training you should see a model_save.pd file in your bucket. We will need this inorder to upload our model to the Model Registry. Here we are specifiying a prebuilt docker image that will run our predictions, the name of our model and the directory in our bucket that holds our **model_save.pd** file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "26042230-dc95-4b6c-bd32-bf3596e5de52",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "TF_PREDICTION_IMAGE_URI_RUNTIME = 'us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-gpu.2-12:latest'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "f5a3ef3b-8080-4e2d-bb8f-7e2f22c59e05",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating Model\n",
+ "Create Model backing LRO: projects/144763482491/locations/us-central1/models/3296764669607280640/operations/1237604172191236096\n",
+ "Model created. Resource name: projects/144763482491/locations/us-central1/models/3296764669607280640@1\n",
+ "To use this Model in another session:\n",
+ "model = aiplatform.Model('projects/144763482491/locations/us-central1/models/3296764669607280640@1')\n"
+ ]
+ }
+ ],
+ "source": [
+ "from google.cloud import aiplatform as vertexai\n",
+ "from google.cloud import aiplatform\n",
+ "\n",
+ "#give your model a name\n",
+ "MODEL_DISPLAY_NAME = \"summarizer-tf-runtime\"\n",
+ "MODEL_DESCRIPTION = \"summarizes scientific texts and pdfs\" #optional\n",
+ "\n",
+ "#add your project ID and location\n",
+ "project=''\n",
+ "location=''\n",
+ "\n",
+ "vertexai.init(project=project, location=location, staging_bucket=BUCKET)\n",
+ "\n",
+ "\n",
+ "model = aiplatform.Model.upload(\n",
+ " display_name=MODEL_DISPLAY_NAME,\n",
+ " description=MODEL_DESCRIPTION,\n",
+ " serving_container_image_uri=TF_PREDICTION_IMAGE_URI_RUNTIME,\n",
+ " serving_container_args=[\"--allow_precompilation\", \"--allow_compression\", \"--use_tfrt\"],\n",
+ " artifact_uri=f'gs://{BUCKET}/saved_model_artifacts_tf', #directory where our artifacts are in our bucket\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0d9772a7-f00d-4633-aa87-3861fa5dec79",
+ "metadata": {},
+ "source": [
+ "### Create a Endpoint and Deploy it to our Model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26122187-da1c-4d26-b1a0-ec1bd403cb19",
+ "metadata": {},
+ "source": [
+ "A **endpoint** is how the user of the model can communicate with the model. A single model endpoint responds by returning a single inference from at least one model. It can take 20 min or more to establish a endpoint."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "74a2c3dd-0e34-4049-804b-940c9a440570",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating Endpoint\n",
+ "Create Endpoint backing LRO: projects/144763482491/locations/us-central1/endpoints/5468832298092724224/operations/884634551396073472\n",
+ "Endpoint created. Resource name: projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n",
+ "To use this Endpoint in another session:\n",
+ "endpoint = aiplatform.Endpoint('projects/144763482491/locations/us-central1/endpoints/5468832298092724224')\n",
+ "Deploying model to Endpoint : projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n",
+ "Deploy Endpoint model backing LRO: projects/144763482491/locations/us-central1/endpoints/5468832298092724224/operations/5601029261159825408\n",
+ "Endpoint model deployed. Resource name: projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n"
+ ]
+ }
+ ],
+ "source": [
+ "ENDPOINT_DISPLAY_NAME = \"summarizer-endpoint\" \n",
+ "endpoint = aiplatform.Endpoint.create(display_name=ENDPOINT_DISPLAY_NAME)\n",
+ "\n",
+ "model_endpoint = model.deploy(\n",
+ " endpoint=endpoint,\n",
+ " deployed_model_display_name=MODEL_DISPLAY_NAME,\n",
+ " machine_type=\"n1-standard-8\",\n",
+ " accelerator_type=\"NVIDIA_TESLA_V100\",\n",
+ " accelerator_count=1,\n",
+ " traffic_percentage=100,\n",
+ " deploy_request_timeout=1200,\n",
+ " sync=True,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4dee7811-559f-4bdc-b56e-b932b0831c0f",
+ "metadata": {},
+ "source": [
+ "Here we are creating a endpoint and deploying our model to said endpoint. We are deploying our endpoint using 1 GPU which can take 20min to run, feel free to try out other machine types that utilize more GPUs."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1544dbe2-8f06-43e8-9b2c-e9d57332e00e",
+ "metadata": {},
+ "source": [
+ "## Delete All Resources"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8b7a6d9a-3d0c-425e-a8f3-cb3160f1ee3b",
+ "metadata": {},
+ "source": [
+ "**Warning:** Once you are done don't forget to delete your endpoint, model, buckets, and shutdown or delete your Vertex AI notebook to avoid additional charges!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "24d0fea3-fd4a-4735-b6d5-b910239b5ffa",
+ "metadata": {},
+ "source": [
+ "First we will delete our custom job. The command below will list custom jobs allowing you to gather the job id from the field called **'name:projects//locations/us-central1/customJobs/'**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "9721f52d-040f-4dc7-808e-8d1ffb5efb4a",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Using endpoint [https://us-central1-aiplatform.googleapis.com/]\n",
+ "---\n",
+ "createTime: '2023-11-03T17:43:15.502041Z'\n",
+ "displayName: flan-t5-training-tf3\n",
+ "endTime: '2023-11-03T18:03:29Z'\n",
+ "jobSpec:\n",
+ " workerPoolSpecs:\n",
+ " - containerSpec:\n",
+ " args:\n",
+ " - --model_name_or_path=google/flan-t5-small\n",
+ " - --train_file=gs://flan-t5-model-resources/train.csv\n",
+ " - --test_file=gs://flan-t5-model-resources/test.csv\n",
+ " - --validation_file=gs://flan-t5-model-resources/validation.csv\n",
+ " - --text_column=article\n",
+ " - --summary_column=abstract\n",
+ " - --output_dir=gs://flan-t5-model-resources/\n",
+ " - '--source_prefix=summarize:'\n",
+ " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660\n",
+ " diskSpec:\n",
+ " bootDiskSizeGb: 100\n",
+ " bootDiskType: pd-ssd\n",
+ " machineSpec:\n",
+ " acceleratorCount: 1\n",
+ " acceleratorType: NVIDIA_TESLA_V100\n",
+ " machineType: n1-standard-4\n",
+ " replicaCount: '1'\n",
+ "name: projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n",
+ "startTime: '2023-11-03T17:48:23Z'\n",
+ "state: JOB_STATE_SUCCEEDED\n",
+ "updateTime: '2023-11-03T18:03:44.992454Z'\n",
+ "---\n",
+ "createTime: '2023-11-02T04:29:33.732327Z'\n",
+ "displayName: flan-t5-training-tf3\n",
+ "endTime: '2023-11-02T04:34:24Z'\n",
+ "error:\n",
+ " code: 3\n",
+ " message: 'The replica workerpool0-0 exited with a non-zero status of 1. To find\n",
+ " out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=144763482491&resource=ml_job%2Fjob_id%2F2998009561996066816&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%222998009561996066816%22'\n",
+ "jobSpec:\n",
+ " workerPoolSpecs:\n",
+ " - containerSpec:\n",
+ " args:\n",
+ " - --model_name_or_path=google/flan-t5-small\n",
+ " - --train_file=gs://flan-t5-model-resources/train.csv\n",
+ " - --test_file=gs://flan-t5-model-resources/test.csv\n",
+ " - --validation_file=gs://flan-t5-model-resources/validation.csv\n",
+ " - --text_column=article\n",
+ " - --summary_column=abstract\n",
+ " - --output_dir=gs://flan-t5-model-resources\n",
+ " - '--source_prefix=summarize:'\n",
+ " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231102.04.26.29.256583\n",
+ " diskSpec:\n",
+ " bootDiskSizeGb: 100\n",
+ " bootDiskType: pd-ssd\n",
+ " machineSpec:\n",
+ " acceleratorCount: 1\n",
+ " acceleratorType: NVIDIA_TESLA_V100\n",
+ " machineType: n1-standard-4\n",
+ " replicaCount: '1'\n",
+ "name: projects/144763482491/locations/us-central1/customJobs/2998009561996066816\n",
+ "startTime: '2023-11-02T04:33:54Z'\n",
+ "state: JOB_STATE_FAILED\n",
+ "updateTime: '2023-11-02T04:34:28.106045Z'\n",
+ "---\n",
+ "createTime: '2023-10-30T11:24:17.577560Z'\n",
+ "displayName: flan-t5-training-tf\n",
+ "endTime: '2023-10-30T11:44:47Z'\n",
+ "jobSpec:\n",
+ " workerPoolSpecs:\n",
+ " - containerSpec:\n",
+ " args:\n",
+ " - --job_dir=gs://flan-t5-model-resources\n",
+ " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf:20231030.11.21.47.379363\n",
+ " diskSpec:\n",
+ " bootDiskSizeGb: 100\n",
+ " bootDiskType: pd-ssd\n",
+ " machineSpec:\n",
+ " acceleratorCount: 1\n",
+ " acceleratorType: NVIDIA_TESLA_V100\n",
+ " machineType: n1-standard-4\n",
+ " replicaCount: '1'\n",
+ "name: projects/144763482491/locations/us-central1/customJobs/612998417047617536\n",
+ "startTime: '2023-10-30T11:29:12Z'\n",
+ "state: JOB_STATE_SUCCEEDED\n",
+ "updateTime: '2023-10-30T11:45:16.382233Z'\n",
+ "---\n",
+ "createTime: '2023-10-30T10:53:26.358002Z'\n",
+ "displayName: flan-t5-training-tf\n",
+ "endTime: '2023-10-30T11:12:59Z'\n",
+ "error:\n",
+ " code: 3\n",
+ " message: 'The replica workerpool0-0 exited with a non-zero status of 1. To find\n",
+ " out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=144763482491&resource=ml_job%2Fjob_id%2F6864276174814576640&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%226864276174814576640%22'\n",
+ "jobSpec:\n",
+ " workerPoolSpecs:\n",
+ " - containerSpec:\n",
+ " args:\n",
+ " - --job_dir=gs://flan-t5-model-resources\n",
+ " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf:20231030.10.50.08.545796\n",
+ " diskSpec:\n",
+ " bootDiskSizeGb: 100\n",
+ " bootDiskType: pd-ssd\n",
+ " machineSpec:\n",
+ " acceleratorCount: 1\n",
+ " acceleratorType: NVIDIA_TESLA_V100\n",
+ " machineType: n1-standard-4\n",
+ " replicaCount: '1'\n",
+ "name: projects/144763482491/locations/us-central1/customJobs/6864276174814576640\n",
+ "startTime: '2023-10-30T10:57:55Z'\n",
+ "state: JOB_STATE_FAILED\n",
+ "updateTime: '2023-10-30T11:13:29.896168Z'\n",
+ "---\n",
+ "createTime: '2023-10-26T21:28:18.991136Z'\n",
+ "displayName: flan-t5-training\n",
+ "endTime: '2023-10-26T21:53:59Z'\n",
+ "jobSpec:\n",
+ " workerPoolSpecs:\n",
+ " - containerSpec:\n",
+ " args:\n",
+ " - --per_device_train_batch_size=2\n",
+ " - --per_device_eval_batch_size=4\n",
+ " - --model_name_or_path=google/flan-t5-small\n",
+ " - --train_file=gs://flan-t5-model-resources/datasets/train.csv\n",
+ " - --test_file=gs://flan-t5-model-resources/datasets/test.csv\n",
+ " - --text_column=article\n",
+ " - --summary_column=abstract\n",
+ " - --do_train=True\n",
+ " - --do_eval=False\n",
+ " - --do_predict=True\n",
+ " - --predict_with_generate=True\n",
+ " - --output_dir=gs://flan-t5-model-resources/model_output\n",
+ " - --num_train_epochs=3\n",
+ " - --learning_rate=5e-5\n",
+ " - --seed=7\n",
+ " - --fp16=True\n",
+ " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training:20231026.21.27.25.218708\n",
+ " diskSpec:\n",
+ " bootDiskSizeGb: 100\n",
+ " bootDiskType: pd-ssd\n",
+ " machineSpec:\n",
+ " acceleratorCount: 1\n",
+ " acceleratorType: NVIDIA_TESLA_V100\n",
+ " machineType: n1-standard-4\n",
+ " replicaCount: '1'\n",
+ "name: projects/144763482491/locations/us-central1/customJobs/8666538460460351488\n",
+ "startTime: '2023-10-26T21:33:52Z'\n",
+ "state: JOB_STATE_SUCCEEDED\n",
+ "updateTime: '2023-10-26T21:54:18.730721Z'\n"
+ ]
+ }
+ ],
+ "source": [
+ "!gcloud ai custom-jobs list --project=$project --region=$location"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "f6e10933-3d84-41fd-8785-fa801b97bfb0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Long running operation: projects/144763482491/locations/us-central1/operations/3654348322228928512\n",
+ "delete_custom_job_response: \n"
+ ]
+ }
+ ],
+ "source": [
+ "from google.cloud import aiplatform\n",
+ "custom_job_id=''\n",
+ "\n",
+ "def delete_custom_job_sample(custom_job_id: str,\n",
+ " project: str = project,\n",
+ " location: str = location,\n",
+ " api_endpoint: str = f'{location}-aiplatform.googleapis.com',\n",
+ " timeout: int = 300,\n",
+ "):\n",
+ " # The AI Platform services require regional API endpoints.\n",
+ " client_options = {\"api_endpoint\": api_endpoint}\n",
+ " # Initialize client that will be used to create and send requests.\n",
+ " # This client only needs to be created once, and can be reused for multiple requests.\n",
+ " client = aiplatform.gapic.JobServiceClient(client_options=client_options)\n",
+ " name = client.custom_job_path(\n",
+ " project=project, location=location, custom_job=custom_job_id\n",
+ " )\n",
+ " response = client.delete_custom_job(name=name)\n",
+ " print(\"Long running operation:\", response.operation.name)\n",
+ " delete_custom_job_response = response.result(timeout=timeout)\n",
+ " print(\"delete_custom_job_response:\", delete_custom_job_response)\n",
+ " \n",
+ "delete_custom_job_sample(custom_job_id)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7a02ba4b-1c8f-4fcc-93b9-3e2a6121b59b",
+ "metadata": {},
+ "source": [
+ "Now we will undeploy our model, delete endpoints, and delete finally our model!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dfc2276e-8ab2-4c80-9721-26153ea80d63",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model_endpoint.undeploy_all()\n",
+ "model_endpoint.delete()\n",
+ "model.delete()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8fc98dd1-b4e5-4ab2-a6ce-e46b5a23ab5d",
+ "metadata": {},
+ "source": [
+ "Delete custom container stored in Custom Registry or Artifacr Registry. List the images to gather the tag id."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "588af684-4c7e-43d5-a1f5-5510157aa40f",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Listed 0 items.\n",
+ "DIGEST TAGS TIMESTAMP\n",
+ "1240e61185c9 20231103.17.39.12.779660 2023-11-03T17:42:05\n",
+ "ca99b71c4661 20231103.16.13.42.102563 2023-11-03T16:21:43\n"
+ ]
+ }
+ ],
+ "source": [
+ "#list the containers\n",
+ "!gcloud container images list-tags gcr.io/$project/cloudai-autogenerated/$display_name"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "635cc519-230d-48a0-b9b7-c350c2d62ac4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Save the tag ID\n",
+ "tag_id=''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "id": "946fa12b-ad77-4d19-a556-c926309a14c4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1;33mWARNING:\u001b[0m Successfully resolved tag to sha256, but it is recommended to use sha256 directly.\n",
+ "Digests:\n",
+ "- gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3@sha256:ca99b71c466168f467152e04791710a9e269e767985b22a6cd1702e4fac2f691\n",
+ " Associated tags:\n",
+ " - 20231103.16.13.42.102563\n",
+ "Tags:\n",
+ "- gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.16.13.42.102563\n",
+ "Deleted [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.16.13.42.102563].\n",
+ "Deleted [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3@sha256:ca99b71c466168f467152e04791710a9e269e767985b22a6cd1702e4fac2f691].\n"
+ ]
+ }
+ ],
+ "source": [
+ "#delete \n",
+ "!gcloud container images delete gcr.io/$project/cloudai-autogenerated/$display_name:$tag_id --force-delete-tags --quiet"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fd4a6cfd-9567-4da3-8d1b-6a4207442680",
+ "metadata": {},
+ "source": [
+ "And finally delete our bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "85824daa-66a5-4303-8b17-2565863a2844",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gcloud storage rm --recursive gs://$BUCKET/"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-12.m112",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-12:m112"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb b/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb
new file mode 100644
index 0000000..9798d2c
--- /dev/null
+++ b/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb
@@ -0,0 +1,1151 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "2edc6187-82ae-44e2-852f-2ad2712c93aa",
+ "metadata": {},
+ "source": [
+ "# Creating a PubMed Chatbot on GCP"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3ecea2ad-7c65-4367-87e1-b021167c3a1d",
+ "metadata": {},
+ "source": [
+ "For this tutorial we are creating a PubMed chatbot that will answer questions by gathering information from documents we have provided via an index. The model we will be using today is a pretrained 'text-bison@001' model from GCP.\n",
+ "\n",
+ "This tutorial will go over the following topics:\n",
+ "- Introduce langchain\n",
+ "- Explain the differences between zero-shot, one-shot, and few-shot prompting\n",
+ "- Practice using different document retrievers"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4d01e74b-b5b4-4be9-b16e-ec55419318ef",
+ "metadata": {},
+ "source": [
+ "### Optional: Deploy the Model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9dbd13e7-afc9-416b-94dc-418a93e14587",
+ "metadata": {},
+ "source": [
+ "In this tutorial we will be using Google PaLM2 LLM **test-bison@001** which doesn't need to be deployed but if you would like to use another model you choose one from the **Model Garden** using the console which will allow you to add a model to your model registry, create an endpoint (or use an existing one), and deploy the model all in one step."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4f3e3ab1-5f7e-4028-a66f-9619926a2afd",
+ "metadata": {},
+ "source": [
+ "## PubMed API vs RAG with Vertex AI Vector Search"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5a820eea-1538-4f40-86c4-eb14fe09e127",
+ "metadata": {},
+ "source": [
+ "Our chatbot will rely on documents to answer our questions to do so we are supplying it a **vector index**. A vector index or index is a data structure that enables fast and accurate search and retrieval of vector embeddings from a large dataset of objects. We will be working with two options for our index: PubMed API vs RAG Vertex AI Vector Search method."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7314b115-9433-460d-b275-78aa50f0a858",
+ "metadata": {},
+ "source": [
+ "**What is the difference?**\n",
+ "\n",
+ "The **PubMed API** is provided free by langchain to connect your model to more than **35 million citations** for biomedical literature from MEDLINE, life science journals, and online books. The langchain package for PubMed is already a retriever meaning that just simply using this tool will our chatbot beable to retrieve documents to refer to. \n",
+ "\n",
+ "**Vertex AI Vector Search** (formally known as Matching Engine) is a vector store from GCP that allows the user more **security and control** on which documents you wish to supply to your model. Vector Search, formerly known as Vertex AI Matching Engine, is a vector store or database that stores the **embeddings** of your documents and the metadata. Because this is not a retriever we have to make it so for our model to send back an output that also tells us which documents it is referencing, this is where RAG comes in. **RAG** stands for **Retrieval-augmented generation** it is a method or technique that **indexes documents** by first loading them in, splitting them into chucks (making it easier for our model to search for relevant splits), embedding the splits, then storing them in a vector store. The next steps in RAG are based on the question you ask your chatbot. If we were to ask it \"What is a cell?\" the vector store will be searched by a retriever to find relevant splits that have to do with our question, thus **retrieving relevant documents**. And finally our chatbot will **generate an answer** that makes sense of what a cell is, as part of the answer it will also point out which source documents it used to create the answer.\n",
+ "\n",
+ "We will be exploring both methods!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bcf1690d-e93d-4cd3-89c6-8d06b5a071a8",
+ "metadata": {},
+ "source": [
+ "## Setting up Vertex AI Vector Search"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c6330ddf-7972-4451-9fcb-98cf83f5d118",
+ "metadata": {},
+ "source": [
+ "If you choose to use the RAG method with Vertex AI RAG Vector Search to supply documents to your model follow the instructions below:\n",
+ "\n",
+ "Set your project id, location, and bucket variables."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fb694dc4-9e76-4091-9ddf-cd4eca816851",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "project_id=''\n",
+ "location=' (e.g.us-east4)'\n",
+ "bucket = ''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a7a349bb-2853-4028-972d-af7f3e857867",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "project_id='cit-oconnellka-9999'\n",
+ "location='us-central1'\n",
+ "bucket = 'pubmed-chatbot-resources'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "02053f4d-fad7-44ab-a7c3-cfa1c218240f",
+ "metadata": {},
+ "source": [
+ "### Gathering our Docs For our Vector Store"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1d1c9de7-4a06-4f85-b9ff-c8c9e51f8c70",
+ "metadata": {},
+ "source": [
+ "AWS marketplace has PubMed database named **PubMed Central® (PMC)** that contains free full-text archive of biomedical and life sciences journal article at the U.S. National Institutes of Health's National Library of Medicine (NIH/NLM). We will be subsetting this database to add documents to our Vertex AI Vector Search Index. Ensure that you have the correct permissions to allow your environment to connect to buckets and Vertex AI.\n",
+ "\n",
+ "The first step will be to create a bucket that we will later use as our data source for our index."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "99d49432-cf03-4f19-aa82-ef7f8bad5bde",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make bucket\n",
+ "!gsutil mb -l {location} gs://{bucket}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b6ad30ba-cee8-47f9-bc1e-ece8961ac66a",
+ "metadata": {},
+ "source": [
+ "We will then download the metadata file from the PMC index directory, this will list all of the articles within the PMC bucket and their paths. We will use this to subset the database into our own bucket. Here we are using curl to connect to the public AWS s3 bucket where the metadata and documents are originally stored."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7b395e34-062d-4f77-afee-3601d471954a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#download the metadata file\n",
+ "!curl -O http://pmc-oa-opendata.s3.amazonaws.com/oa_comm/txt/metadata/csv/oa_comm.filelist.csv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "93a8595a-767f-4cad-9273-62d8e2cf60d1",
+ "metadata": {},
+ "source": [
+ "We only want the metadata of the first 100 files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c26b0f29-2b07-43a6-800d-4aa5e957fe52",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#import the file as a dataframe\n",
+ "import pandas as pd\n",
+ "\n",
+ "df = pd.read_csv('oa_comm.filelist.csv')\n",
+ "#first 100 files\n",
+ "first_100=df[0:100]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "abd1ae93-450e-4c79-83cc-ea46a1b507c1",
+ "metadata": {},
+ "source": [
+ "Lets look at our metadata! We can see that the bucket path to the files are under the **Key** column this is what we will use to loop through the PMC bucket and copy the first 100 files to our bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ff77b2aa-ed1b-4d27-8163-fdaa7a304582",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "first_100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "84e5f36a-239c-4c15-80ab-f896d45849d3",
+ "metadata": {},
+ "source": [
+ "The following commands will gather the location of each document with in AWS s3 bucket, output the text from the docs as bytes and save the bytes to our bucket in the form of a text file in a directory named \"docs\". This will all be done using curl."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7d63a7e2-dbf1-49ec-bc84-b8c2c8bde62d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "from io import BytesIO\n",
+ "#gather path to files in bucket\n",
+ "for i in first_100['Key']:\n",
+ " doc_name=i.split(r'/')[-1]\n",
+ " os.system(f'curl http://pmc-oa-opendata.s3.amazonaws.com/{i} | curl -T - -v -H \"Authorization: Bearer `gcloud auth print-access-token`\" \"https://storage.googleapis.com/{bucket}/docs/{doc_name} \"')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c1b396c8-baa9-44d6-948c-2326dc514839",
+ "metadata": {},
+ "source": [
+ "### Creating an Index"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bb6fa941-bf59-4cae-9aa8-2f2741f3a1b1",
+ "metadata": {},
+ "source": [
+ "To create our vector store index, we will first start by creating a dummy embeddings file. An index holds a set of records so our dummy data will be the first record and then later we will add our PubMed docs to the same index. Inorder for Vector Search to find our dummy embeddings file it too must be in our bucket and we will add it to the subdirectory 'init_index'."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6cf5092c-23f3-4f28-9308-f34b8d90c62b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import uuid\n",
+ "import numpy as np\n",
+ "import json\n",
+ "init_embedding = {\"id\": str(uuid.uuid4()), \"embedding\": list(np.zeros(768))}\n",
+ "\n",
+ "# dump embedding to a local file\n",
+ "with open(\"embeddings_0.json\", \"w\") as f:\n",
+ " json.dump(init_embedding, f)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8e8a4c42-dc17-48a3-a0bb-0cbea527ee7f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#move inital embeddings file to bucket\n",
+ "!gsutil cp embeddings_0.json gs://{bucket}/init_index/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f4d1a3cd-4f89-4271-b025-71af2bf25095",
+ "metadata": {},
+ "source": [
+ "Now we can make our index, this can take up to 30min to 1hr. \n",
+ "\n",
+ "Please note that the dimensions depend on what text embedding model you are using for this tutorial we are using **Vertex AI's embedding model** which uses 768 dimensions. If you chose to change your model choose a embedding model that is compatible with it or you can use Tensorflow's Universal Sentence Encoder. For more information see [here](https://python.langchain.com/docs/integrations/vectorstores/matchingengine#using-tensorflow-universal-sentence-encoder-as-an-embedder)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "39aa7bba-3d15-4a3f-86c2-59d2c92a95ef",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from google.cloud import aiplatform\n",
+ "# create Index\n",
+ "index = aiplatform.MatchingEngineIndex.create_tree_ah_index(\n",
+ " display_name = f\"pubmed_vector_index\",\n",
+ " contents_delta_uri = f\"gs://{bucket}/init_index\",\n",
+ " dimensions = 768,\n",
+ " approximate_neighbors_count = 150,\n",
+ " distance_measure_type=\"DOT_PRODUCT_DISTANCE\",\n",
+ " location=location\n",
+ " \n",
+ ")\n",
+ "\n",
+ "#save index id\n",
+ "index_id=index.name"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ce65b0cc-cff3-47d6-af8c-7c39b2418ecb",
+ "metadata": {},
+ "source": [
+ "### Creating a Endpoint and Deploying our Index"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9b3aa4a2-1145-475a-bd04-33bf69551751",
+ "metadata": {},
+ "source": [
+ "We will create a public endpoint for our vector store, you can also create a private one by setting up a VPC and specifying the VPC id for the params 'network'. Documentation for creating a VPC can be found [here](https://python.langchain.com/docs/integrations/vectorstores/matchingengine#imports-constants-and-configs)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "55596202-13b9-4e35-8099-0602a2b13e72",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Create the endpoint\n",
+ "index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(\n",
+ " display_name = \"pubmed_vector_endpoint\",\n",
+ " public_endpoint_enabled = True,\n",
+ " location = location\n",
+ ")\n",
+ "\n",
+ "#save endpoint id\n",
+ "endpoint_id = endpoint.name"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "51412f2f-f32b-44a9-93bc-3e2f6185cada",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#deploy our index to our endpoint\n",
+ "deployed_index_id=\"deployed_pubmed_vector_index\"\n",
+ "index_endpoint = index_endpoint.deploy_index(\n",
+ " index=index, deployed_index_id=deployed_index_id\n",
+ ")\n",
+ "index_endpoint.deployed_indexes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "613cef7d-d0aa-42a8-a46e-7fd1f5c48c3b",
+ "metadata": {},
+ "source": [
+ "### Adding Metadata to Our Data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2fa34e7b-99c7-4a2e-b73b-146636a98285",
+ "metadata": {},
+ "source": [
+ "After we have our documents stored in our bucket we can start to load our files back. This step is necessary though redundant because we will need to embed our docs for our vector store and we can attach metadata for each document. The first step of adding our metadata to the docs will be to remove the 'Key' column because this is no longer the location of our documents. Next, we'll convert the rest of the columns into a dictionary form."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b9016f15-db02-4073-b4c7-288d919bbb55",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "#Remove the Key column to be replaced later\n",
+ "first_100.pop('Key')\n",
+ "#convert the metadata to dict\n",
+ "first_100_dict = first_100.to_dict('records')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "eb80dce6-dc5b-4a73-8591-572be35c092a",
+ "metadata": {},
+ "source": [
+ "Lets look at our metadata now!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "69ce004e-ab8d-4b9c-91d8-9320e1679fcd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "first_100_dict"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2a607a48-31b8-4081-a347-bb1528f8e725",
+ "metadata": {},
+ "source": [
+ "Now we can load in our documents, add in the location of our docs in our bucket and the document name to our metadata, and finally attach that metadata to our documents. At the end we should have 100 documents before splitting the data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "47170e83-3e9e-48e6-ab0f-cabdd39507e1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add metadata\n",
+ "from langchain.document_loaders import GCSDirectoryLoader\n",
+ "print(f\"Processing documents from {bucket}\")\n",
+ "loader = GCSDirectoryLoader(\n",
+ " project_name=project_id, bucket=bucket, prefix='docs'\n",
+ ")\n",
+ "documents = loader.load()\n",
+ "\n",
+ "# loop through docs to add metadata to each one\n",
+ "for i in range(len(documents)):\n",
+ " doc_md = documents[i].metadata\n",
+ " document_name = doc_md[\"source\"].split(\"/\")[-1]\n",
+ " source = f\"{bucket}/docs/{document_name}\"\n",
+ " # Add document name and source to the metadata\n",
+ " documents[i].metadata = {\"source\": source, \"document_name\": document_name}\n",
+ " documents[i].metadata.update(first_100_dict[i])# attached other metadata to doc\n",
+ "print(f\"# of documents loaded (pre-chunking) = {len(documents)}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d2cb96ea-dd0c-47b7-9556-05e25c3efb1d",
+ "metadata": {},
+ "source": [
+ "Lets take a look at our metadata!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8673a445-7c2e-4650-91fa-4b0b38196e2c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "documents[0].metadata"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "613b65c0-fa38-456f-acb3-d406803ef204",
+ "metadata": {},
+ "source": [
+ "### Splitting our Data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6812ecaf-979f-4537-b420-071022a7b917",
+ "metadata": {},
+ "source": [
+ "Splitting our data into chucks will help our vector store parse through our data faster and efficiently. We'll then add the chuck number to our metadata."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6e6503cf-02e5-4352-a6b1-13ef4e01c019",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
+ "# split the documents into chunks\n",
+ "text_splitter = RecursiveCharacterTextSplitter(\n",
+ " chunk_size=1000,\n",
+ " chunk_overlap=50,\n",
+ " separators=[\"\\n\\n\", \"\\n\", \".\", \"!\", \"?\", \",\", \" \", \"\"],\n",
+ ")\n",
+ "doc_splits = text_splitter.split_documents(documents)\n",
+ "\n",
+ "# Add chunk number to metadata\n",
+ "for idx, split in enumerate(doc_splits):\n",
+ " split.metadata[\"chunk\"] = idx\n",
+ "\n",
+ "print(f\"# of documents = {len(doc_splits)}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e1fb202a-6122-4083-81e4-ddcb33499e64",
+ "metadata": {},
+ "source": [
+ "After splitting our data we now have 7620 documents. And looking at our metadata we can see that the chunk number is the last entry."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f1036b8e-6c7f-43be-83b7-5b9e61628003",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_splits[0].metadata"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "055d5b85-950e-4a44-b3fa-a2dcec7df036",
+ "metadata": {},
+ "source": [
+ "### Embedding our Data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9a68b14e-0cf5-4973-90c1-0eee0c8bc8c9",
+ "metadata": {},
+ "source": [
+ "Now we can embed our text into **numerical vectors** that will help our model find similar objects like documents that hold similar texts or find similar photos based on the numbers assigned to the object. Depending on the model you choose you have to find an embedder that is compatible to our model. Since we are using a PaLM2 model (text-bison) we can use the embedding model from Vertex AI that defaults to using **'textembedding-gecko'**."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "50a4a98c-a332-469f-9a24-ce5abff23b15",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langchain.vectorstores import MatchingEngine\n",
+ "from langchain.embeddings import VertexAIEmbeddings\n",
+ "embeddings = VertexAIEmbeddings()\n",
+ "\n",
+ "# initialize vector store\n",
+ "vector_store = MatchingEngine.from_components(\n",
+ " project_id=project_id,\n",
+ " region=location,\n",
+ " gcs_bucket_name=bucket,\n",
+ " embedding=embeddings,\n",
+ " index_id=index_id,\n",
+ " endpoint_id=endpoint_id,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4e3bfb5b-a3a6-4156-bca3-394774a94565",
+ "metadata": {},
+ "source": [
+ "For our split documents to be read by our embedding model we need to make tuple called **Document** that contains **page content** and **metadata**. The code below loops through the split docs and assigns them to the label page_content and the same is done for all parts of our metadata under the label metadata."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9cda4699-5c46-49bb-97e3-059199254bba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Store docs as embeddings in Matching Engine index\n",
+ "# It may take a while since API is rate limited\n",
+ "texts = [doc.page_content for doc in doc_splits]\n",
+ "metadatas = [\n",
+ " [\n",
+ " {\"namespace\": \"source\", \"allow_list\": [doc.metadata[\"source\"]]},\n",
+ " {\"namespace\": \"document_name\", \"allow_list\": [doc.metadata[\"document_name\"]]},\n",
+ " {\"namespace\": \"ETag\", \"allow_list\": [doc.metadata[\"ETag\"]]},\n",
+ " {\"namespace\": \"Article Citation\", \"allow_list\": [doc.metadata[\"Article Citation\"]]},\n",
+ " {\"namespace\": \"AccessionID\", \"allow_list\": [doc.metadata[\"AccessionID\"]]},\n",
+ " {\"namespace\": \"Last Updated UTC (YYYY-MM-DD HH:MM:SS)\", \"allow_list\": [doc.metadata[\"Last Updated UTC (YYYY-MM-DD HH:MM:SS)\"]]},\n",
+ " {\"namespace\": \"PMID\", \"allow_list\": [str(doc.metadata[\"PMID\"])]},\n",
+ " {\"namespace\": \"License\", \"allow_list\": [doc.metadata[\"License\"]]},\n",
+ " {\"namespace\": \"Retracted\", \"allow_list\": [doc.metadata[\"Retracted\"]]},\n",
+ " {\"namespace\": \"chunk\", \"allow_list\": [str(doc.metadata[\"chunk\"])]}\n",
+ " \n",
+ " ]\n",
+ " for doc in doc_splits\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "216f6ef6-b488-45d3-ac4c-2aca0d6eab56",
+ "metadata": {},
+ "source": [
+ "lets look at our Document tuple!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6c1af269-fdbb-4db5-9c1b-41e21d304b9d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_splits[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2aeb0bba-8ccd-4828-a7a2-6f34b03a03b9",
+ "metadata": {},
+ "source": [
+ "Now we can add our split documents and their metadata to our vector store. This is the longest step of the tutorial and can take up 1hr to complete. As you wait you can read up on Creating a Inference Script section of this tutorial."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b3c2f21b-06ab-470e-8807-638548d50f77",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_ids = vector_store.add_texts(texts=texts, metadatas=metadatas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "03b90f92-f223-42e0-9e5b-accd3fdfbeea",
+ "metadata": {},
+ "source": [
+ "Test whether search from vector store is working"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b6cd9aab-7f08-4a69-b7e4-9cd1d8f9110f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results=vector_store.similarity_search_with_score(\"brain\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07b3bc6b-8c43-476f-a662-abda830dc2da",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### Creating a Inference Script "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3ba2291e-109e-4120-ad10-5dbfd341a07b",
+ "metadata": {},
+ "source": [
+ "Inorder for us to fluidly send input and receive outputs from our chatbot we need to create a **inference script** that will format inputs in a way that the chatbot can understand and format outputs in a way we can understand. We will also be supplying instructions to the chatbot through the script.\n",
+ "\n",
+ "Our script will utilize **langchain** tools and packages to enable our model to:\n",
+ "- **Connect to sources of context** (e.g. providing our model with tasks and examples)\n",
+ "- **Rely on reason** (e.g. instruct our model how to answer based on provided context)\n",
+ "\n",
+ "**Warning**: The following tools must be installed via your terminal `pip install \"langchain\" \"xmltodict\"` and the over all inference script must be run on the terminal via the command `python YOUR_SCRIPT.py`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ad374085-c4b1-4083-85a5-90cba35846d6",
+ "metadata": {},
+ "source": [
+ "The first part of our script will be to list all the tools that are required. \n",
+ "- **PubMedRetriever:** Utilizes the langchain retriever tool to specifically retrieve PubMed documents from the PubMed API.\n",
+ "- **MatchingEngine:** Connects to Vertex AI Vector Search to be used as a langchain retriever tool to specifically retrieve embedded documents stored in your bucket. \n",
+ "- **ConversationalRetrievalChain:** Allows the user to construct a conversation with the model and retrieves the outputs while sending inputs to the model.\n",
+ "- **PromptTemplate:** Allows the user to prompt the model to provide instructions, best method for zero and few shot prompting\n",
+ "- **VertexAIEmbeddings:** Text embedding model used before to convert text to numerical vectors.\n",
+ "- **VertexAI**: Package used to import Google PaLM2 LLMs models (e.g. text-bison@001, code-bison). \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f0ad48d-c6c8-421a-a48b-88e979d15b57",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "```python\n",
+ "from langchain.retrievers import PubMedRetriever\n",
+ "from langchain.vectorstores import MatchingEngine\n",
+ "#from langchain.llms import VertexAIModelGarden #uncomment if utilizing models from Model Garden\n",
+ "from langchain.chains import ConversationalRetrievalChain\n",
+ "from langchain.prompts import PromptTemplate\n",
+ "from langchain.embeddings import VertexAIEmbeddings\n",
+ "from langchain.llms import VertexAI\n",
+ "import sys\n",
+ "import json\n",
+ "import os\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "900f4c31-71cd-4f39-8bfc-de098bdbaafc",
+ "metadata": {},
+ "source": [
+ "Second will build a class that will hold the functions we need to send inputs and retrieve outputs from our model. For the beginning of our class we will establish some colors to our text conversation with our chatbot which we will utilize later."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "decbb901-f811-4b8e-a956-4c8c7f914ae2",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "```python\n",
+ "class bcolors:\n",
+ " HEADER = '\\033[95m'\n",
+ " OKBLUE = '\\033[94m'\n",
+ " OKCYAN = '\\033[96m'\n",
+ " OKGREEN = '\\033[92m'\n",
+ " WARNING = '\\033[93m'\n",
+ " FAIL = '\\033[91m'\n",
+ " ENDC = '\\033[0m'\n",
+ " BOLD = '\\033[1m'\n",
+ " UNDERLINE = '\\033[4m'\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ba36d057-5189-4075-a243-18996c6fc932",
+ "metadata": {},
+ "source": [
+ "If you are using Vector Search instead of the PubMed API we need to create a function that will gather the necessary information to connect to our model, which will be the:\n",
+ "- Project ID\n",
+ "- Location of bucket and vector store (they should be in the same location)\n",
+ "- Bucket name\n",
+ "- Vector Store Index ID\n",
+ "- Vector Store Endpoint ID"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3f7a244a-7e71-40d3-ae78-8e166dd3c7ee",
+ "metadata": {},
+ "source": [
+ "```python\n",
+ "def build_chain():\n",
+ " PROJECT_ID = os.environ[\"PROJECT_ID\"]\n",
+ " LOCATION_ID = os.environ[\"LOCATION_ID\"]\n",
+ " #ENDPOINT_ID = os.environ[\"ENDPOINT_ID\"] #uncomment if utilizing model from Model Garden\n",
+ " BUCKET = os.environ[\"BUCKET\"]\n",
+ " VC_INDEX_ID = os.environ[\"VC_INDEX_ID\"]\n",
+ " VC_ENDPOINT_ID = os.environ[\"VC_ENDPOINT_ID\"]\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dab1012f-ed20-47b9-9162-924e03e836d5",
+ "metadata": {},
+ "source": [
+ "Now we can define our Google PaLM2 model being `text-bison@001` and other parameters:\n",
+ "\n",
+ "- Max Output Tokens: Limit of tokens outputted by the model.\n",
+ "- Temperature: Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1, 0 being less unique.\n",
+ "- Top_p (nucleus): The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n",
+ "- Top_k: Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8cadb1af-2c46-4ab1-92f9-6e0861f83324",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "```python\n",
+ "llm = VertexAI(\n",
+ " model_name=\"text-bison@001\",\n",
+ " max_output_tokens=1024,\n",
+ " temperature=0.2,\n",
+ " top_p=0.8,\n",
+ " top_k=40,\n",
+ " verbose=True,\n",
+ " \n",
+ " \n",
+ "#if using a model from the Model Garden uncomment\n",
+ "#llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID)\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c44b4f91-0c64-459b-a6e9-8a955c0797c7",
+ "metadata": {},
+ "source": [
+ "We specify what our retriever both the PubMed and Vector Search retriever are listed, please only add one per script.\n",
+ "\n",
+ "If using Vector Search we need to initialize our vector store as we did before when we added our split documents and metadata to it. Then we set the vector store as a **retriever** with the search type being **'similarity'** meaning it will find texts that are similar to each other depending on the question you ask the model. We also set **'k'** to 3 meaning that our retriever will retrieve 3 documents that are similar."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "21c61724-23d3-4b49-8c72-cbd208bdb5df",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "```python\n",
+ "retriever= PubMedRetriever()\n",
+ "\n",
+ "#only if using Vector Search as a retriever\n",
+ "\n",
+ "embeddings = VertexAIEmbeddings() #Make sure embedding model is compatible with model\n",
+ "\n",
+ " vector_store = MatchingEngine.from_components(\n",
+ " project_id=PROJECT_ID,\n",
+ " region=LOCATION_ID,\n",
+ " gcs_bucket_name=BUCKET,\n",
+ " embedding=embeddings,\n",
+ " index_id=VC_INDEX_ID,\n",
+ " endpoint_id=VC_ENDPOINT_ID\n",
+ " )\n",
+ "retriever = vector_store.as_retriever(\n",
+ " search_type=\"similarity\",\n",
+ " search_kwargs={\"k\":3}\n",
+ " )\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec8e464a-0931-444a-aa58-09ee0c4c9884",
+ "metadata": {},
+ "source": [
+ "Here we are constructing our **prompt_template**, this is where we can try zero-shot or few-shot prompting. Only add one method per script."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4431051e-0e84-408e-9821-f50a9b88c9c1",
+ "metadata": {},
+ "source": [
+ "#### Zero-shot prompting\n",
+ "\n",
+ "Zero-shot prompting does not require any additional training more so it gives a pre-trained language model a task or query to generate text (our output). The model relies on its general language understanding and the patterns it has learned during its training to produce relevant output. In our script we have connect our model to a **retriever** to make sure it gathers information from that retriever (this can be the PubMed API or Vector Search). \n",
+ "\n",
+ "See below that the task is more like instructions notifying our model they will be asked questions which it will answer based on the info of the scientific documents provided from the index provided (this can be the PubMed API or Vector Search index). All of this information is established as a **prompt template** for our model to receive."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c0316dc5-6274-4a5e-92e4-3d266ed6a4df",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "```python\n",
+ "prompt_template = \"\"\"\n",
+ " Ignore everything before.\n",
+ " \n",
+ " Instruction:\n",
+ " Instructions:\n",
+ " I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. \n",
+ " The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. \n",
+ " You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. \n",
+ " Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end.\n",
+ " \n",
+ " {question} Answer \"don't know\" if not present in the document. \n",
+ " {context}\n",
+ " Solution:\"\"\"\n",
+ " PROMPT = PromptTemplate(\n",
+ " template=prompt_template, input_variables=[\"context\", \"question\"],\n",
+ " )\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "edbe7032-8507-4d07-baab-1b3bf0e92074",
+ "metadata": {},
+ "source": [
+ "#### One-shot and Few-shot Prompting"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5614ea04-e1f8-4941-ae16-4359f718f98f",
+ "metadata": {},
+ "source": [
+ "One and few shot prompting are similar to one-shot prompting, in addition to giving our model a task just like before we have also supplied an example of how the our model structure our output.\n",
+ "\n",
+ "See below that we have implemented one-shot prompting to our script. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5ffb9669-5b77-4d9b-9f4e-a0d3a18b0fae",
+ "metadata": {},
+ "source": [
+ "```python\n",
+ "prompt_template = \"\"\"\n",
+ " Instructions:\n",
+ " I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. \n",
+ " The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. \n",
+ " You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. \n",
+ " Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end. \n",
+ " Examples:\n",
+ " Question: What is a cell?\n",
+ " Answer: '''\n",
+ " Cell, in biology, the basic membrane-bound unit that contains the fundamental molecules of life and of which all living things are composed. \n",
+ " Sources: \n",
+ " Chow, Christopher , Laskey, Ronald A. , Cooper, John A. , Alberts, Bruce M. , Staehelin, L. Andrew , \n",
+ " Stein, Wilfred D. , Bernfield, Merton R. , Lodish, Harvey F. , Cuffe, Michael and Slack, Jonathan M.W.. \n",
+ " \"cell\". Encyclopedia Britannica, 26 Sep. 2023, https://www.britannica.com/science/cell-biology. Accessed 9 November 2023.\n",
+ " '''\n",
+ " \n",
+ " {question} Answer \"don't know\" if not present in the document. \n",
+ " {context}\n",
+ " \n",
+ "\n",
+ " \n",
+ " Solution:\"\"\"\n",
+ " PROMPT = PromptTemplate(\n",
+ " template=prompt_template, input_variables=[\"context\", \"question\"],\n",
+ " )\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "82c66d53-97b2-46dc-a466-70a3d3bee4a7",
+ "metadata": {},
+ "source": [
+ "The following set of commands control the chat history essentially telling the model to expect another question after it finishes answering the previous one. Follow up questions can contain references to past chat history so the **ConversationalRetrievalChain** combines the chat history and the followup question into a standalone question, then looks up relevant documents from the retriever, and finally passes those documents and the question to a question-answering chain to return a response.\n",
+ "\n",
+ "All of these pieces such as our conversational chain, prompt, and chat history are passed through a function called **run_chain** so that our model can return is response. We have also set the length of our chat history to one meaning that our model can only refer to the pervious conversation as a reference."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fda4d33b-60f2-4462-a8e6-bbce7f8a7b07",
+ "metadata": {},
+ "source": [
+ "```python\n",
+ "condense_qa_template = \"\"\"\n",
+ " Chat History:\n",
+ " {chat_history}\n",
+ " Here is a new question for you: {question}\n",
+ " Standalone question:\"\"\"\n",
+ " standalone_question_prompt = PromptTemplate.from_template(condense_qa_template)\n",
+ " \n",
+ " qa = ConversationalRetrievalChain.from_llm(\n",
+ " llm=llm, \n",
+ " retriever=retriever, \n",
+ " condense_question_prompt=standalone_question_prompt, \n",
+ " return_source_documents=True, \n",
+ " combine_docs_chain_kwargs={\"prompt\":PROMPT},\n",
+ " )\n",
+ " return qa\n",
+ "\n",
+ "def run_chain(chain, prompt: str, history=[]):\n",
+ " print(prompt)\n",
+ " return chain({\"question\": prompt, \"chat_history\": history})\n",
+ "\n",
+ "MAX_HISTORY_LENGTH = 1 #increase to refer to more pervious chats\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b8f1ef8d-66fe-4f84-933b-af2d730bd114",
+ "metadata": {},
+ "source": [
+ "The final part of our script utilizes our class and incorporates colors to add a bit of flare to our conversation with our model. The model when first initialized should greet the user asking **\"Hello! How can I help you?\"** then instructs the user to ask a question or exit the session **\"Ask a question, start a New search: or CTRL-D to exit.\"**. With every question submitted to the model it is labeled as a **new search** we then run the run_chain function to get the models response or answer and add the response to the **chat history**. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1aa6ef65-ced4-445e-875c-7fee3483b81d",
+ "metadata": {},
+ "source": [
+ "```python\n",
+ "if __name__ == \"__main__\":\n",
+ " chat_history = []\n",
+ " qa = build_chain()\n",
+ " print(bcolors.OKBLUE + \"Hello! How can I help you?\" + bcolors.ENDC)\n",
+ " print(bcolors.OKCYAN + \"Ask a question, start a New search: or CTRL-D to exit.\" + bcolors.ENDC)\n",
+ " print(\">\", end=\" \", flush=True)\n",
+ " for query in sys.stdin:\n",
+ " if (query.strip().lower().startswith(\"new search:\")):\n",
+ " query = query.strip().lower().replace(\"new search:\",\"\")\n",
+ " chat_history = []\n",
+ " elif (len(chat_history) == MAX_HISTORY_LENGTH):\n",
+ " chat_history.pop(0)\n",
+ " result = run_chain(qa, query, chat_history)\n",
+ " chat_history.append((query, result[\"answer\"]))\n",
+ " print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC) \n",
+ " if 'source_documents' in result: \n",
+ " print(bcolors.OKGREEN + 'Sources:')\n",
+ " for idx, ref in enumerate(result[\"source_documents\"]):\n",
+ " print(ref.page_content) #Use this for Vector store\n",
+ " #print(\"PubMed UID: \"+ref.metadata[\"uid\"])#Use this for PubMed retriever\n",
+ " print(bcolors.ENDC)\n",
+ " print(bcolors.OKCYAN + \"Ask a question, start a New search: or CTRL-D to exit.\" + bcolors.ENDC)\n",
+ " print(\">\", end=\" \", flush=True)\n",
+ " print(bcolors.OKBLUE + \"Bye\" + bcolors.ENDC)\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1abcbd48-bb84-4310-b8eb-ad87850a8649",
+ "metadata": {},
+ "source": [
+ "Running our script in the terminal will require us to export the following global variables before using the command `python NAME_OF_SCRIPT.py`. You can also check out our **example inference scripts** for the [Pubmed API](/example_scripts/example_langchain_chat_llama_2_zeroshot.py) and [Vertex AI Vector Search](/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ba97df23-6893-438d-8a67-cb7dbf83e407",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#retreive our index and endpoint id\n",
+ "print(index_id)\n",
+ "print(endpoint_id)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7eab00a3-54ff-4873-8d25-eaf8bd18a2e6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#enter the global variables in your terminal\n",
+ "export PROJECT_ID='' \\\n",
+ "export LOCATION_ID='' \\\n",
+ "#export ENDPOINT_ID='' \\ #Uncomment if using model from Model Garden\n",
+ "export BUCKET='' \\\n",
+ "export VC_INDEX_ID='' \\\n",
+ "export VC_ENDPOINT_ID='VECTOR_SEARCH_ENDPOINT_ID>'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bbe127e6-c0b1-4e07-ad56-38c30a9bf858",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "You should see similar results on the terminal. In this example we ask the chatbot to explain brain cancer!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80c8fb4b-e74f-4e8d-892b-0f913eff747d",
+ "metadata": {},
+ "source": [
+ "![PubMed Chatbot Results](../../../images/GCP_chatbot_results.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a178c1c6-368a-48c5-8beb-278443b685a2",
+ "metadata": {},
+ "source": [
+ "### Clean Up"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7ec06a34-dc47-453f-b519-424804fa2748",
+ "metadata": {},
+ "source": [
+ "**Warning:** Dont forget to delete the resources we just made to avoid accruing additional costs!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c307bb17-757a-4579-a0d8-698eb1bb3f2e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Undeploy index\n",
+ "!gcloud ai index-endpoints undeploy-index {endpoint_id} \\\n",
+ " --deployed-index-id={deployed_index_id} \\\n",
+ " --project={project_id} \\\n",
+ " --region={location}\n",
+ "\n",
+ "\n",
+ "#Delete index and endpoint\n",
+ "!gcloud ai indexes delete {index_id} \\\n",
+ " --project={project_id} \\\n",
+ " --region={location} --quiet\n",
+ "\n",
+ "!gcloud ai index-endpoints delete {endpoint_id} \\\n",
+ " --project={project_id} \\\n",
+ " --region={location} --quiet"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "280cea0a-a8fc-494e-8ce4-afb65847a222",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Delete bucket\n",
+ "!gcloud storage rm --recursive gs://{bucket}/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6928d95d-d7ec-43f6-9135-79fcfc9520d9",
+ "metadata": {},
+ "source": [
+ "If you have imported a model and deployed it don't forget to delete the model from the Model Registry and delete the endpoint."
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m113",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m113"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GenAI/Gemini_Intro.ipynb b/tutorials/notebooks/GenAI/Gemini_Intro.ipynb
new file mode 100644
index 0000000..94b8d7a
--- /dev/null
+++ b/tutorials/notebooks/GenAI/Gemini_Intro.ipynb
@@ -0,0 +1,853 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "c51ed24c-53dd-4239-8be0-0e0422596ba3",
+ "metadata": {},
+ "source": [
+ "# Intro to GCP's Gemini "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "22cc412f-5338-45ba-8b29-9039c19208d9",
+ "metadata": {},
+ "source": [
+ "**Gemini** is a Google multimodal model that has the capability to **summarize, chat, and generate text from images or videos**. Gemini comes in two model versions **Gemini Pro** and **Gemini Pro Vision**, for this tutorial we will be looking into utilizing both models via python packages and GCPs model playground, **Vertex AI Studio**."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28289191-0813-47d1-be6d-8feb0ae708bd",
+ "metadata": {},
+ "source": [
+ "## Gemini in Python"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b8ec6d40-b5b3-434f-adc4-2838b7f49d1d",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "The first step inorder to stat using Gemini is to update the google-cloud-aiplatform python package if you havent already."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "ed9781dd-9764-4e9c-88ba-fcd7bb95842a",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: google-cloud-aiplatform in /opt/conda/lib/python3.10/site-packages (1.37.0)\n",
+ "Collecting google-cloud-aiplatform\n",
+ " Downloading google_cloud_aiplatform-1.39.0-py2.py3-none-any.whl.metadata (28 kB)\n",
+ "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.34.0)\n",
+ "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (1.23.0)\n",
+ "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.19.5 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (3.20.3)\n",
+ "Requirement already satisfied: packaging>=14.3 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (23.2)\n",
+ "Requirement already satisfied: google-cloud-storage<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (2.13.0)\n",
+ "Requirement already satisfied: google-cloud-bigquery<4.0.0dev,>=1.15.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (3.13.0)\n",
+ "Requirement already satisfied: google-cloud-resource-manager<3.0.0dev,>=1.3.3 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (1.11.0)\n",
+ "Requirement already satisfied: shapely<3.0.0dev in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (2.0.2)\n",
+ "Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.56.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.62.0)\n",
+ "Requirement already satisfied: google-auth<3.0dev,>=1.25.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2.25.2)\n",
+ "Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2.31.0)\n",
+ "Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.60.0)\n",
+ "Requirement already satisfied: grpcio-status<2.0dev,>=1.33.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.48.2)\n",
+ "Requirement already satisfied: google-cloud-core<3.0.0dev,>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.4.1)\n",
+ "Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.6.0)\n",
+ "Requirement already satisfied: python-dateutil<3.0dev,>=2.7.2 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.8.2)\n",
+ "Requirement already satisfied: grpc-google-iam-v1<1.0.0dev,>=0.12.4 in /opt/conda/lib/python3.10/site-packages (from google-cloud-resource-manager<3.0.0dev,>=1.3.3->google-cloud-aiplatform) (0.13.0)\n",
+ "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-storage<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.5.0)\n",
+ "Requirement already satisfied: numpy>=1.14 in /opt/conda/lib/python3.10/site-packages (from shapely<3.0.0dev->google-cloud-aiplatform) (1.25.2)\n",
+ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (5.3.2)\n",
+ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (0.3.0)\n",
+ "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (4.9)\n",
+ "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil<3.0dev,>=2.7.2->google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (1.16.0)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (3.3.2)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (3.6)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.26.18)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2023.11.17)\n",
+ "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (0.5.1)\n",
+ "Downloading google_cloud_aiplatform-1.39.0-py2.py3-none-any.whl (3.4 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m13.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: google-cloud-aiplatform\n",
+ " Attempting uninstall: google-cloud-aiplatform\n",
+ " Found existing installation: google-cloud-aiplatform 1.37.0\n",
+ " Uninstalling google-cloud-aiplatform-1.37.0:\n",
+ " Successfully uninstalled google-cloud-aiplatform-1.37.0\n",
+ "Successfully installed google-cloud-aiplatform-1.39.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install --upgrade google-cloud-aiplatform"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "54499594-1d7b-41cc-858b-ffe6f6c2770b",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Collecting langchain\n",
+ " Downloading langchain-0.1.0-py3-none-any.whl.metadata (13 kB)\n",
+ "Requirement already satisfied: PyYAML>=5.3 in /opt/conda/lib/python3.10/site-packages (from langchain) (6.0.1)\n",
+ "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /opt/conda/lib/python3.10/site-packages (from langchain) (2.0.23)\n",
+ "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /opt/conda/lib/python3.10/site-packages (from langchain) (3.9.1)\n",
+ "Requirement already satisfied: async-timeout<5.0.0,>=4.0.0 in /opt/conda/lib/python3.10/site-packages (from langchain) (4.0.3)\n",
+ "Collecting dataclasses-json<0.7,>=0.5.7 (from langchain)\n",
+ " Downloading dataclasses_json-0.6.3-py3-none-any.whl.metadata (25 kB)\n",
+ "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.33)\n",
+ "Collecting langchain-community<0.1,>=0.0.9 (from langchain)\n",
+ " Downloading langchain_community-0.0.11-py3-none-any.whl.metadata (7.3 kB)\n",
+ "Collecting langchain-core<0.2,>=0.1.7 (from langchain)\n",
+ " Downloading langchain_core-0.1.9-py3-none-any.whl.metadata (4.0 kB)\n",
+ "Requirement already satisfied: langsmith<0.1.0,>=0.0.77 in /opt/conda/lib/python3.10/site-packages (from langchain) (0.0.77)\n",
+ "Requirement already satisfied: numpy<2,>=1 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.25.2)\n",
+ "Requirement already satisfied: pydantic<3,>=1 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.10.13)\n",
+ "Requirement already satisfied: requests<3,>=2 in /opt/conda/lib/python3.10/site-packages (from langchain) (2.31.0)\n",
+ "Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /opt/conda/lib/python3.10/site-packages (from langchain) (8.2.3)\n",
+ "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (23.1.0)\n",
+ "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.0.4)\n",
+ "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.9.4)\n",
+ "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.4.0)\n",
+ "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.1)\n",
+ "Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json<0.7,>=0.5.7->langchain)\n",
+ " Downloading marshmallow-3.20.2-py3-none-any.whl.metadata (7.5 kB)\n",
+ "Collecting typing-inspect<1,>=0.4.0 (from dataclasses-json<0.7,>=0.5.7->langchain)\n",
+ " Downloading typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB)\n",
+ "Requirement already satisfied: jsonpointer>=1.9 in /opt/conda/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain) (2.4)\n",
+ "Requirement already satisfied: anyio<5,>=3 in /opt/conda/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (3.7.1)\n",
+ "Requirement already satisfied: packaging<24.0,>=23.2 in /opt/conda/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (23.2)\n",
+ "Requirement already satisfied: typing-extensions>=4.2.0 in /opt/conda/lib/python3.10/site-packages (from pydantic<3,>=1->langchain) (4.8.0)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.3.2)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.6)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (1.26.18)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (2023.11.17)\n",
+ "Requirement already satisfied: greenlet!=0.4.17 in /opt/conda/lib/python3.10/site-packages (from SQLAlchemy<3,>=1.4->langchain) (3.0.2)\n",
+ "Requirement already satisfied: sniffio>=1.1 in /opt/conda/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.3.0)\n",
+ "Requirement already satisfied: exceptiongroup in /opt/conda/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.2.0)\n",
+ "Collecting mypy-extensions>=0.3.0 (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain)\n",
+ " Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n",
+ "Downloading langchain-0.1.0-py3-none-any.whl (797 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m798.0/798.0 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hDownloading dataclasses_json-0.6.3-py3-none-any.whl (28 kB)\n",
+ "Downloading langchain_community-0.0.11-py3-none-any.whl (1.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m26.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hDownloading langchain_core-0.1.9-py3-none-any.whl (216 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m216.5/216.5 kB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading marshmallow-3.20.2-py3-none-any.whl (49 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.4/49.4 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)\n",
+ "Installing collected packages: mypy-extensions, marshmallow, typing-inspect, langchain-core, dataclasses-json, langchain-community, langchain\n",
+ " Attempting uninstall: langchain-core\n",
+ " Found existing installation: langchain-core 0.1.6\n",
+ " Uninstalling langchain-core-0.1.6:\n",
+ " Successfully uninstalled langchain-core-0.1.6\n",
+ "Successfully installed dataclasses-json-0.6.3 langchain-0.1.0 langchain-community-0.0.11 langchain-core-0.1.9 marshmallow-3.20.2 mypy-extensions-1.0.0 typing-inspect-0.9.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install langchain"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7bbbed7-becf-48d0-98c3-6dd9942fd377",
+ "metadata": {},
+ "source": [
+ "Next we initialize the Gemini model by setting out project id and location. We are also pulling in the packages:\n",
+ "- **GenerativeModel:** Allows us to specify and launch the Gemini model we need (e.g. Gemini Pro, Gemini Pro Vision).\n",
+ "- **ChatSession:** Set Gemini Pro in chatbot mode.\n",
+ "- **Part:** Loads in files from buckets.\n",
+ "- **Image:** Loads in image files locally.\n",
+ "- **GenerationConfig:** Allows us to configure the models temperature, top p, top k, and max tokens."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "47dc9232-383f-405b-b1a8-fab64a80492d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from google.cloud import aiplatform\n",
+ "import vertexai.preview\n",
+ "from vertexai.preview.generative_models import GenerativeModel, ChatSession, Part, Image, GenerationConfig\n",
+ "\n",
+ "# TODO(developer): Update and un-comment below lines\n",
+ "project_id = \n",
+ "location = \n",
+ "vertexai.init(project=project_id, location=location)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "022f24ba-4034-4424-91d8-1229682755ab",
+ "metadata": {},
+ "source": [
+ "### Gemini as a Chatbot"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b7dec028-6d30-4078-ac54-62b849ae9ced",
+ "metadata": {},
+ "source": [
+ "For dealing with text, code generation, natural language tasks we can use the **gemini-pro** model and to set our model in **chatbot mode** we need to use the `start_chat()` function. You will see below we also created a function named **get_chat_response** which will send the prompt or message we have for our model using the `send_message()` function and returns only the text of the chats response."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "id": "70bc5b25-c796-4015-82dc-6bc861bb525f",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "model = GenerativeModel(\"gemini-pro\")\n",
+ "chat = model.start_chat()\n",
+ "\n",
+ "def get_chat_response(chat: ChatSession, prompt: str):\n",
+ " response = chat.send_message(prompt)\n",
+ " return response.text"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ae40e87a-76ac-469b-a504-fb903319cbaf",
+ "metadata": {},
+ "source": [
+ "Now that we have our functions lets ask our Gemini chatbot some questions!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9d3277de-ab85-417f-b1d8-b21985a7a21b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "prompt = \"Hello.\"\n",
+ "print(get_chat_response(chat, prompt))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "342a0e3d-fbcb-4562-bb5f-b439a92e80e2",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "**Generative AI use cases that are Life Science or Health Care related:**\n",
+ "\n",
+ "* **Drug discovery and development:** Generative AI can be used to generate new molecules with desired properties, design new drugs, and predict how drugs will interact with biological systems. This can help to accelerate the drug discovery and development process and make it more efficient.\n",
+ "* **Personalized medicine:** Generative AI can be used to generate personalized treatment plans for patients based on their individual genetic and health data. This can help to improve the effectiveness of treatment and reduce side effects.\n",
+ "* **Disease diagnosis and prognosis:** Generative AI can be used to develop new diagnostic tools and methods, and to predict the course of a disease. This can help to improve patient outcomes and reduce healthcare costs.\n",
+ "* **Medical imaging:** Generative AI can be used to generate synthetic medical images, which can be used to train medical students and residents, develop new imaging technologies, and improve the accuracy of diagnosis.\n",
+ "* **Electronic health records (EHRs):** Generative AI can be used to generate synthetic EHRs, which can be used to train machine learning algorithms, develop new clinical decision support tools, and improve the efficiency of healthcare operations.\n",
+ "* **Healthcare chatbots:** Generative AI can be used to develop healthcare chatbots that can provide patients with information and support, answer questions, and schedule appointments. This can help to improve patient access to care and reduce the burden on healthcare providers.\n",
+ "* **Drug repurposing:** Generative AI can be used to identify new uses for existing drugs, which can help to expand treatment options for patients and reduce the cost of drug development.\n",
+ "* **Clinical trial design:** Generative AI can be used to design more efficient and effective clinical trials, which can help to accelerate the development of new treatments and improve patient outcomes.\n",
+ "* **Healthcare fraud detection:** Generative AI can be used to detect fraudulent healthcare claims, which can help to reduce costs and improve the efficiency of healthcare operations.\n",
+ "\n",
+ "These are just a few examples of the many potential use cases for generative AI in the life science and healthcare industries. As generative AI technology continues to develop, we can expect to see even more innovative and groundbreaking applications in the years to come.\n"
+ ]
+ }
+ ],
+ "source": [
+ "prompt = \"List gen ai use cases that are Life Science or Health Care related. \"\n",
+ "print(get_chat_response(chat, prompt))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fcfda59a-c440-4489-8f00-a4316b827292",
+ "metadata": {},
+ "source": [
+ "We can even ask it to **generate code or debug code**!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 106,
+ "id": "f0b917b2-22b5-4011-a9c4-d8a667cf6b1d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Sure, here's a Python script that will replace all null values (empty cells) with zeros within a CSV file:\n",
+ "\n",
+ "\n",
+ "```python\n",
+ "import csv\n",
+ "\n",
+ "# Open the CSV file for reading and writing.\n",
+ "with open('input.csv', 'r+', newline='') as csvfile:\n",
+ " # Create a CSV reader and writer.\n",
+ " reader = csv.reader(csvfile)\n",
+ " writer = csv.writer(csvfile)\n",
+ "\n",
+ " # Read the header row.\n",
+ " header = next(reader)\n",
+ "\n",
+ " # Replace null values with zeros in the remaining rows.\n",
+ " for row in reader:\n",
+ " for i, cell in enumerate(row):\n",
+ " if cell == '':\n",
+ " row[i] = '0'\n",
+ "\n",
+ " # Write the updated row to the CSV file.\n",
+ " writer.writerow(row)\n",
+ "```\n",
+ "\n",
+ "\n",
+ "To use this script, save it as a file (e.g. `replace_nulls.py`) and run it from the command line:\n",
+ "\n",
+ "\n",
+ "```\n",
+ "python replace_nulls.py\n",
+ "```\n",
+ "\n",
+ "\n",
+ "This will replace all null values in the 'input.csv' file with zeros and create a new CSV file called 'output.csv'.\n",
+ "\n",
+ "\n",
+ "**Note:** Make sure to replace `input.csv` with the actual name of your input CSV file. You can also change the output file name by modifying the `output.csv` part of the script.\n"
+ ]
+ }
+ ],
+ "source": [
+ "prompt = \"create a python code that will replace all null values to zero within a csv file\"\n",
+ "print(get_chat_response(chat, prompt))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3a9d57d2-dbe1-434a-9345-fe5ae3315a21",
+ "metadata": {},
+ "source": [
+ "### Gemini as a Summarizer"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4856bd61-3e24-40ea-8da4-1a6edc5f3e1d",
+ "metadata": {},
+ "source": [
+ "We can generate text like asking Gemini Pro to summarize articles we provide locally (using langchain). As of now Gemini does not support loading in documents that are not videos and images directly. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b5d7df19-a625-40dc-b4e5-faff5e7ba241",
+ "metadata": {},
+ "source": [
+ "First we will load in a file using langchains text loader. You can also use langchain to load in files from your bucket following the instructions [here](https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "id": "3becd6c2-daf0-4287-80e5-06cf419287bd",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from langchain_community.document_loaders import TextLoader\n",
+ "\n",
+ "loader = TextLoader(\"./PMC10000003.txt\")\n",
+ "ex_file=loader.load()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4e3d6c19-7d68-49e1-85e9-91bcd6bd1775",
+ "metadata": {},
+ "source": [
+ "We can configure our model to give us the best optimal output by setting the parameters below:\n",
+ "- **Max_Output_Token**: Max number of words to generate.\n",
+ "- **Temperature:** Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1.\n",
+ "- **Top_p (nucleus):** The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n",
+ "- **Top_k:** Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 103,
+ "id": "c4228e44-9639-40da-8f69-343be93b65b0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "generation_config = GenerationConfig(\n",
+ " temperature=0.9,\n",
+ " top_p=1.0,\n",
+ " top_k=32,\n",
+ " candidate_count=1,\n",
+ " max_output_tokens=8192,\n",
+ ")\n",
+ "\n",
+ "def summarizer(file: str) -> str:\n",
+ " \n",
+ " # Query the model\n",
+ " response = model.generate_content(\n",
+ " [\n",
+ " # Add an example query\n",
+ " \"summarize this file.\",\n",
+ " file\n",
+ " ],\n",
+ " generation_config=generation_config,\n",
+ " )\n",
+ " #print(response)\n",
+ " return response.text"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0bb722d6-ef79-4a0b-9327-04811e7f8ffc",
+ "metadata": {},
+ "source": [
+ "Here we are inputting only the page content from our document loader."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "id": "97e7ea82-c58e-42ee-b01e-6aa51e324b05",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The article \"Mechanical Treatment of Inflammation of the Knee Joint\" published in the Chicago Medical Examiner on January 1867, discusses the use of mechanical treatments for inflammation of the knee joint. The author emphasizes the importance of overcoming the reflex contraction of muscles surrounding the joint to prevent or correct deformities. Tenotomy of the flexor tendons may be necessary to achieve this. Additionally, the relief of pressure on the inflamed joint surfaces is crucial for recovery. This can be achieved through various methods such as adhesive strap dressings, application of an air cushion, or evacuation of pus from the joint. The author also introduces a new apparatus for making extension, which allows for optimal counter-extension and can be used in both acute and chronic cases. The advantages of this apparatus include its large counter-extending surface, security, and patient comfort. By utilizing this principle, various instruments can be crafted to address knee deformities.\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(summarizer(ex_file[0].page_content))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77c10bd8-1570-4dfa-9b2a-999e3f149faf",
+ "metadata": {},
+ "source": [
+ "### Gemini as a Image to Text Generator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "476052b3-ff64-4e5a-819c-7a18daf7f413",
+ "metadata": {},
+ "source": [
+ "Gemini Pro Vision can generate text from images and videos. These text can be descriptions or questions about the image or video. You can download an image or retrieve an image from your bucket or locally."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "214ee84f-f058-411a-944d-4e149cd0e9bc",
+ "metadata": {},
+ "source": [
+ "Images can only be in the following formats: \n",
+ "- PNG - image/png\n",
+ "- JPEG - image/jpeg\n",
+ "\n",
+ "Our function below takes in a prompt and the image, we have also included a if statement to recognize if the function should use `Image` to load in a image locally or `Part` to load it from a bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "501efefe-d52f-43b3-b4eb-3d3fe81f4a3e",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def img2text(image_path: str, img_prompt: str) -> str:\n",
+ " multimodal_model = GenerativeModel(\"gemini-pro-vision\")\n",
+ " if \"gs://\" in image_path:\n",
+ " image1=Part.from_uri(image_path, mime_type=\"image/jpeg\")\n",
+ " else: \n",
+ " image1=Image.load_from_file(image_path)\n",
+ " #image1=Image.load_from_file(image_path)\n",
+ " responses = multimodal_model.generate_content(\n",
+ " [image1, img_prompt],\n",
+ " generation_config={\n",
+ " \"max_output_tokens\": 2048,\n",
+ " \"temperature\": 0.4,\n",
+ " \"top_p\": 1,\n",
+ " \"top_k\": 32\n",
+ " },\n",
+ " stream=True,\n",
+ " )\n",
+ " for response in responses:\n",
+ " print(response.text, end=\"\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4cafaaa8-f3c7-472a-8f0b-6595d2112636",
+ "metadata": {},
+ "source": [
+ "Lets look at an image locally, by loading a image first, this a image of a Covid virus from the [CDC Public Health Image Library](https://phil.cdc.gov/details.aspx?pid=23312)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 146,
+ "id": "b939f105-89c2-4c38-80f8-2cddf8dcb0ca",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2024-01-11 05:24:55-- https://phil.cdc.gov//PHIL_Images/23312/23312_lores.jpg\n",
+ "Resolving phil.cdc.gov (phil.cdc.gov)... 198.246.102.26\n",
+ "Connecting to phil.cdc.gov (phil.cdc.gov)|198.246.102.26|:443... connected.\n",
+ "HTTP request sent, awaiting response... 200 OK\n",
+ "Length: 31823 (31K) [image/jpeg]\n",
+ "Saving to: ‘example_image_covid.jpg’\n",
+ "\n",
+ "example_image_covid 100%[===================>] 31.08K --.-KB/s in 0.07s \n",
+ "\n",
+ "2024-01-11 05:24:55 (455 KB/s) - ‘example_image_covid.jpg’ saved [31823/31823]\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "! wget -O example_image_covid.jpg \"https://phil.cdc.gov//PHIL_Images/23312/23312_lores.jpg\" "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "696d9fc7-0ca9-44a7-b431-a9698b1a636c",
+ "metadata": {},
+ "source": [
+ "Now run our function!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 180,
+ "id": "34e81656-4943-439d-9fbe-df439e0e30df",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " The image is a 3D rendering of a coronavirus. The virus is round and has a spiky outer coat. The spikes are made of proteins that help the virus attach to and infect cells. The virus is colored gray and red.None\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(img2text(\"example_image_covid.jpg\", \"describe this image.\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dc152659-7bc4-46bc-9ead-4736b4ad2706",
+ "metadata": {},
+ "source": [
+ "Next we'll look at an image from a bucket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 181,
+ "id": "81197d53-dd3d-4358-9835-ef513ec11d33",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " The image shows a table with a pink peony bouquet, two cups of coffee, a bowl of blueberries, and a silver spoon with the words \"Let's Jam\" on it. There are also five scones with blueberries on them. The table is covered with a white tablecloth with purple stains.None\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(img2text(\"gs://generativeai-downloads/images/scones.jpg\", \"describe this image.\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80e3c48f-66e9-40e1-8623-04f73b672507",
+ "metadata": {},
+ "source": [
+ "We can even ask for more details related to the items in our image!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 182,
+ "id": "d8395784-ea68-4a95-a0bb-b3d618f68054",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Preheat oven to 375 degrees F (190 degrees C). Grease a baking sheet.\n",
+ "\n",
+ "In a large bowl, combine the flour, sugar, baking powder, and salt. Cut in butter until mixture resembles coarse crumbs. Stir in blueberries.\n",
+ "\n",
+ "Turn out onto a lightly floured surface; knead for 10 to 12 times. Pat into a 1/2-in.-thick circle. Cut with a 3-in. floured biscuit cutter. Place 2 in. apart on the prepared baking sheet.\n",
+ "\n",
+ "Bake for 12-15 minutes or until golden brown. Cool for 2 minutes before removing to a wire rack to cool completely.None\n"
+ ]
+ }
+ ],
+ "source": [
+ "img_prompt=\"How do you make whats in this image?\"\n",
+ "image=\"gs://generativeai-downloads/images/scones.jpg\"\n",
+ "print(img2text(image, img_prompt))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "960f7ba6-8236-437a-ba99-ea1d887efd64",
+ "metadata": {},
+ "source": [
+ "### Gemini as a Video to Text Generator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fbdbbd35-f36f-4467-8a1d-48ccd942d7cc",
+ "metadata": {},
+ "source": [
+ "Just like images we will be using the same model Gemini Pro Vision. We can load videos locally and from a bucket just like images. Video files can only be in the following formats:\n",
+ "- MOV - video/mov\n",
+ "- MPEG - video/mpeg\n",
+ "- MP4 - video/mp4\n",
+ "- MPG - video/mpg\n",
+ "- AVI - video/avi\n",
+ "- WMV - video/wmv\n",
+ "- MPEGPS - video/mpegps\n",
+ "- FLS - video/flv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a7f94141-b5ba-49bf-a3d7-d0b68ccdd39a",
+ "metadata": {},
+ "source": [
+ "Our function below takes a video from a public bucket and asks for a prompt and the location of the video file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c18561c6-8f8f-46e4-b3ee-0d5fc96f2d31",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "def video2text(video_path: str, video_prompt: str) -> str:\n",
+ " # Query the model\n",
+ " response = multimodal_model.generate_content(\n",
+ " [\n",
+ " # Add an example image\n",
+ " Part.from_uri(\n",
+ " video_path, mime_type=\"video/mp4\"\n",
+ " ),\n",
+ " # Add an example query\n",
+ " video_prompt,\n",
+ " ],\n",
+ " stream=True\n",
+ " )\n",
+ " for chunk in response :\n",
+ " return print(chunk.text)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "492f9100-b5a4-446c-a03d-dd89a1b4bbde",
+ "metadata": {},
+ "source": [
+ "Run the function!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 191,
+ "id": "55990074-0365-45f5-9fa6-bedbe93c9932",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " This video is about a messy world. It shows a bunch of different things that are messy, like a messy room, a messy desk, and a messy\n",
+ "None\n"
+ ]
+ }
+ ],
+ "source": [
+ "video_prompt=\"What is this video about in detail?\"\n",
+ "video=\"gs://cloud-samples-data/video/Machine Learning Solving Problems Big, Small, and Prickly.mp4\"\n",
+ "print(video2text(video, video_prompt))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c32253b4-d892-4c0c-896e-320c8df479c7",
+ "metadata": {},
+ "source": [
+ "## Gemini on Vertex AI Studio"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "614883f2-e53a-4ba5-855c-209d755a6e6f",
+ "metadata": {},
+ "source": [
+ "You can also use Gemini Pro and Pro Vision in Vertex AI's playground called **Vertex AI Studio**. To locate Vertex AI Studio search Vertex AI and on the left hand side locate Vertex AI Studio as the image below shows. To utilize Gemini Pro Vision locate and click **Multimodal** you will have the option to use your own prompt or explore some of the other set prompts such as Extract text from images, image question answering , etc."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8a634e11-3bd5-4048-b6e4-46d5aac6ce34",
+ "metadata": {},
+ "source": [
+ "![Gemini1](../../../images/Gemini_1.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c3716d9d-49af-40c9-acce-757c53be9a12",
+ "metadata": {},
+ "source": [
+ "For this tutorial we will select Open on the **Prompt Design** option. We will upload the COVID image we downloaded before by clicking **INSERT MEDIA** and selecting our file. Then we will ask it a question, here we asked \"Describe treatments for the item in this image\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec72f9cd-0d06-47e4-b67c-45039372d967",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "![Gemini3](../../../images/Gemini_3.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4a88f06b-770a-43be-b875-b4054c3ccbf3",
+ "metadata": {},
+ "source": [
+ "To utilize Gemini Pro locate and click **Language** on the left side menu. You have the option to use a prompt or chat and if you would like to focus on text or code."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1952cd5c-c93d-428f-8036-ac658eebfba4",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "![Gemini2](../../../images/Gemini_2.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7810c0db-d145-4acd-a2cc-b6ce8231fa14",
+ "metadata": {},
+ "source": [
+ "Here we picked the **TEXT CHAT** option and asked the bot to describe covid and how it works."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "36b4635d-d8f3-42df-959d-dff92259813c",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "![Gemini4](../../../images/Gemini_4.png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "acc53b99-e6ed-45f1-a0e1-9b146e18e46c",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m114",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m114"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb b/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb
new file mode 100644
index 0000000..3366fff
--- /dev/null
+++ b/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb
@@ -0,0 +1,153 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Hny4I-ODTIS6"
+ },
+ "source": [
+ "# Vertex AI Studio on GCP - Article Summary\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-nLS57E2TO5y"
+ },
+ "source": [
+ "## Overview\n",
+ "\n",
+ "In research you often need to read several papers to understand new method or finidings and this can be quite taxing if you only need to get the gist of a article or need to quickly skim the article. In this tutorial we will use generative AI to summarize long documents but with the goal of still perserving the most important information using Generative AI Studio's Article Summary model."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "skXAu__iqks_"
+ },
+ "source": [
+ "### Costs\n",
+ "\n",
+ "This tutorial uses billable components of Google Cloud:\n",
+ "- Vertex AI Generative AI Studio\n",
+ "\n",
+ "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Generative AI pricing](https://cloud.google.com/vertex-ai/pricing#generative_ai_models), and use the [Pricing Calculator](https://cloud.google.com/products/calculator/) to generate a cost estimate based on your projected usage."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "mvKl-BtQTRiQ"
+ },
+ "source": [
+ "## Getting Started"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "x_xMwRLuyDrj"
+ },
+ "source": [
+ "Here you will use LLM via the API to summarize the extracted texts. Please note that LLMs currently have input text limit and stuffing a large input text might not be accepted. You can read more about quotas and limits [here](https://cloud.google.com/vertex-ai/docs/quotas)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Go to the Generative AI Studio console [here](https://console.cloud.google.com/vertex-ai/generative/language?_ga=2.182664366.923116401.1692009977-1042353744.1691708677).\n",
+ "\n",
+ "Scroll down to **Summarization** and click on the model **Article Summary**. You will see a prompt session were you will need to enter in the contents of your article as the console does not allow you to upload files. For this tutorial this article is about how gut microbiota affects Alzeheimer's disease because of the gut-brain-microbiota axis network [here](https://www.aging-us.com/article/102930/pdf).\n",
+ "\n",
+ " \n",
+ "\n",
+ "To the left you can control the parameters that we have been using before this is a great way to test what each parameter does and how they effect each other. Once you are done click **submit**, you should have a similar output as below. For explainations on the parameters **temperature, token limit max, top p, and top k** see the following article [here](https://cloud.google.com/vertex-ai/docs/generative-ai/text/test-text-prompts#generative-ai-test-text-prompt-drest).\n",
+ "\n",
+ " \n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Lets try increasing the temperature parameter and see if we recieve a different output."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As you can see our output becomes shorter and straight to the point this is because the temperature parameter controls the degree of randomness in token selection. Lower temperatures are good for prompts that require a more deterministic and less creative responses, while higher temperatures can lead to more diverse or creative results. A temperature of 0 is deterministic, meaning that the highest probability response is always selected."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "N5aVrDWkJs3Y"
+ },
+ "source": [
+ "### Troubleshooting\n",
+ "\n",
+ "If you model responds with an error its generally because the extracted text is too long for the generative model to process. In order for the model to work best try to not include any abstract or reference sections of your article, if errors still come up try limiting the article even more by removing other sections such as the intro or extracting the first 30,000 words of the article."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Vtp21WX3T7d_"
+ },
+ "source": [
+ "### Recap\n",
+ "\n",
+ "Although full text is too large for the model, you have managed to create a concise, paragraph of the most important information from a portion of the PDF using the model. This method is the most simiplest and is ideal for shorter documents but can still be used when you limit the character number you want the model to read. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "name": "summarization_large_documents.ipynb",
+ "toc_visible": true
+ },
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m108",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m108"
+ },
+ "kernelspec": {
+ "display_name": "Python (Local)",
+ "language": "python",
+ "name": "local-base"
+ },
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py b/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py
new file mode 100644
index 0000000..1756c90
--- /dev/null
+++ b/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py
@@ -0,0 +1,101 @@
+from langchain.retrievers import PubMedRetriever
+from langchain.chains import ConversationalRetrievalChain
+from langchain.prompts import PromptTemplate
+#from langchain.llms import VertexAIModelGarden
+from langchain.llms import VertexAI
+import sys
+import json
+import os
+
+
+class bcolors:
+ HEADER = '\033[95m'
+ OKBLUE = '\033[94m'
+ OKCYAN = '\033[96m'
+ OKGREEN = '\033[92m'
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+MAX_HISTORY_LENGTH = 1
+
+def build_chain():
+ #if using model from uncomment Model Garden
+ #PROJECT_ID = os.environ["PROJECT_ID"]
+ #LOCATION_ID = os.environ["LOCATION_ID"]
+ #ENDPOINT_ID = os.environ["ENDPOINT_ID"]
+
+ #llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID)
+
+ llm = VertexAI(
+ model_name="text-bison@001",
+ max_output_tokens=1024,
+ temperature=0.2,
+ top_p=0.8,
+ top_k=40,
+ verbose=True,
+)
+
+ retriever= PubMedRetriever()
+
+ prompt_template = """
+ Ignore everything before.
+ Instructions:
+ I will provide you with research papers on a specific topic in English, and you will create a cumulative summary.
+ The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic.
+ You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers.
+ Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end.
+ {question} Answer "don't know" if not present in the document.
+ {context}
+ Solution:"""
+
+
+ PROMPT = PromptTemplate(
+ template=prompt_template, input_variables=["context", "question"],
+ )
+
+ condense_qa_template = """
+ Chat History:
+ {chat_history}
+ Here is a new question for you: {question}
+ Standalone question:"""
+ standalone_question_prompt = PromptTemplate.from_template(condense_qa_template)
+
+ qa = ConversationalRetrievalChain.from_llm(
+ llm=llm,
+ retriever=retriever,
+ condense_question_prompt=standalone_question_prompt,
+ return_source_documents=True,
+ combine_docs_chain_kwargs={"prompt":PROMPT},
+ )
+ return qa
+
+def run_chain(chain, prompt: str, history=[]):
+ print(prompt)
+ return chain({"question": prompt, "chat_history": history})
+
+if __name__ == "__main__":
+ chat_history = []
+ qa = build_chain()
+ print(bcolors.OKBLUE + "Hello! How can I help you?" + bcolors.ENDC)
+ print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC)
+ print(">", end=" ", flush=True)
+ for query in sys.stdin:
+ if (query.strip().lower().startswith("new search:")):
+ query = query.strip().lower().replace("new search:","")
+ chat_history = []
+ elif (len(chat_history) == MAX_HISTORY_LENGTH):
+ chat_history.pop(0)
+ result = run_chain(qa, query, chat_history)
+ chat_history.append((query, result["answer"]))
+ print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC)
+ if 'source_documents' in result:
+ print(bcolors.OKGREEN + 'Sources:')
+ for idx, ref in enumerate(result["source_documents"]):
+ print("PubMed UID: "+ref.metadata["uid"])
+ print(bcolors.ENDC)
+ print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC)
+ print(">", end=" ", flush=True)
+ print(bcolors.OKBLUE + "Bye" + bcolors.ENDC)
diff --git a/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py b/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py
new file mode 100644
index 0000000..bcc8acb
--- /dev/null
+++ b/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py
@@ -0,0 +1,120 @@
+from langchain.chains import ConversationalRetrievalChain
+from langchain.prompts import PromptTemplate
+#from langchain.llms import VertexAIModelGarden
+from langchain.embeddings import VertexAIEmbeddings
+from langchain.vectorstores import MatchingEngine
+from langchain.llms import VertexAI
+import sys
+import json
+import os
+
+
+class bcolors:
+ HEADER = '\033[95m'
+ OKBLUE = '\033[94m'
+ OKCYAN = '\033[96m'
+ OKGREEN = '\033[92m'
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+MAX_HISTORY_LENGTH = 1
+
+def build_chain():
+ #if using model from uncomment Model Garden
+
+ PROJECT_ID = os.environ["PROJECT_ID"]
+ LOCATION_ID = os.environ["LOCATION_ID"]
+ #ENDPOINT_ID = os.environ["ENDPOINT_ID"]
+ BUCKET = os.environ["BUCKET"]
+ VC_INDEX_ID = os.environ["VC_INDEX_ID"]
+ VC_ENDPOINT_ID = os.environ["VC_ENDPOINT_ID"]
+
+
+ #llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID)
+ llm = VertexAI(
+ model_name="text-bison@001",
+ max_output_tokens=1024,
+ temperature=0.2,
+ top_p=0.8,
+ top_k=40,
+ verbose=True,
+)
+ embeddings = VertexAIEmbeddings()
+
+ vector_store = MatchingEngine.from_components(
+ project_id=PROJECT_ID,
+ region=LOCATION_ID,
+ gcs_bucket_name=BUCKET,
+ embedding=embeddings,
+ index_id=VC_INDEX_ID,
+ endpoint_id=VC_ENDPOINT_ID
+ )
+
+ retriever = vector_store.as_retriever(
+ search_type="similarity",
+ search_kwargs={"k":3}
+ )
+
+ prompt_template = """
+ Ignore everything before.
+ Instructions:
+ I will provide you with research papers on a specific topic in English, and you will create a cumulative summary.
+ The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic.
+ You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers.
+ Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end.
+ {question} Answer "don't know" if not present in the document.
+ {context}
+ Solution:"""
+
+
+ PROMPT = PromptTemplate(
+ template=prompt_template, input_variables=["context", "question"],
+ )
+
+ condense_qa_template = """
+ Chat History:
+ {chat_history}
+ Here is a new question for you: {question}
+ Standalone question:"""
+ standalone_question_prompt = PromptTemplate.from_template(condense_qa_template)
+
+ #RetrievalQA.from_chain_type(llm=llm, chain_type="stuff"
+ qa = ConversationalRetrievalChain.from_llm(
+ llm=llm,
+ retriever=retriever,
+ condense_question_prompt=standalone_question_prompt,
+ return_source_documents=True,
+ combine_docs_chain_kwargs={"prompt":PROMPT},
+ )
+ return qa
+
+def run_chain(chain, prompt: str, history=[]):
+ print(prompt)
+ return chain({"question": prompt, "chat_history": history})
+
+if __name__ == "__main__":
+ chat_history = []
+ qa = build_chain()
+ print(bcolors.OKBLUE + "Hello! How can I help you?" + bcolors.ENDC)
+ print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC)
+ print(">", end=" ", flush=True)
+ for query in sys.stdin:
+ if (query.strip().lower().startswith("new search:")):
+ query = query.strip().lower().replace("new search:","")
+ chat_history = []
+ elif (len(chat_history) == MAX_HISTORY_LENGTH):
+ chat_history.pop(0)
+ result = run_chain(qa, query, chat_history)
+ chat_history.append((query, result["answer"]))
+ print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC)
+ if 'source_documents' in result:
+ print(bcolors.OKGREEN + 'Sources:')
+ for idx, ref in enumerate(result["source_documents"]):
+ print(ref.page_content)
+ print(bcolors.ENDC)
+ print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC)
+ print(">", end=" ", flush=True)
+ print(bcolors.OKBLUE + "Bye" + bcolors.ENDC)
diff --git a/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb b/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb
new file mode 100644
index 0000000..ebfec60
--- /dev/null
+++ b/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb
@@ -0,0 +1,583 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "b50f6f80-73aa-4a31-9eb5-ac30d5958fe7",
+ "metadata": {},
+ "source": [
+ "## Background\n",
+ "This tutorial is designed to give you the basics of using langchain to work with Large Language Models (LLMs) for document summarization and basic chat bot functionality. You could take what we have here to build a front end application using something like streamlit, or other further iterations."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5ebc47a9-958b-4250-a3bf-688e627f2c6a",
+ "metadata": {},
+ "source": [
+ "**Increase Max Tokens**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d2f0d198-f1cf-40ec-b813-4b1e8d50ab80",
+ "metadata": {},
+ "source": [
+ "### Install packages"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8662e8f8-66ce-4ca6-a121-d087c499390f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!pip install google-cloud-aiplatform==1.34.0 langchain==0.0.310 pypdf faiss-cpu --user"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd534fb6-29c8-4c15-b9cc-88f667ec8127",
+ "metadata": {},
+ "source": [
+ "### Import libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "27e6851a-f15d-4881-8173-9b788a009201",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import langchain\n",
+ "from langchain.llms import VertexAI\n",
+ "from langchain.vectorstores import FAISS\n",
+ "from langchain.prompts import PromptTemplate\n",
+ "from langchain.schema import StrOutputParser\n",
+ "from langchain.document_loaders import PyPDFLoader\n",
+ "from langchain.embeddings import VertexAIEmbeddings\n",
+ "from langchain.document_loaders import WebBaseLoader\n",
+ "from langchain.chains.summarize import load_summarize_chain\n",
+ "from langchain.schema.prompt_template import format_document\n",
+ "from langchain.text_splitter import RecursiveCharacterTextSplitter"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "73b34ed1-4ad0-4ab6-8e9f-148c6ef3f575",
+ "metadata": {},
+ "source": [
+ "## Summarize a scientific article using an LLM"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "46d1b6cc-862e-4a67-a755-fbc4f7595c6f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "loader = WebBaseLoader(\"https://pubmed.ncbi.nlm.nih.gov/37883540/\")\n",
+ "docs = loader.load()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e34bd138-d852-40ba-87bd-ee559483aa20",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "llm = VertexAI()\n",
+ "print('the LLM and default params are : ', llm)\n",
+ "\n",
+ "chain = load_summarize_chain(llm, chain_type=\"stuff\")\n",
+ "\n",
+ "print('\\n''the LLM chain used is ''\\n', chain)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dee2c20d-7678-4f6d-81c7-0b2a2b62d055",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print('the summary of the document in a single paragraph is: ')\n",
+ "\n",
+ "chain.run(docs)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1b1fc982-3d07-4501-8a54-6957100ebaff",
+ "metadata": {},
+ "source": [
+ "**Now try using [a different LLM](https://python.langchain.com/docs/integrations/llms/) and see if you can get the code to run!**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3883dab5-cabd-4eea-bddc-c4c14b2bf5dc",
+ "metadata": {},
+ "source": [
+ "## Ask a general question to an LLM, without the context of a specific source"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0ad234c3-47c4-4aaf-a5b1-a3323555a8a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "template = \"\"\"Question: {question}\n",
+ "\n",
+ "Answer: Let's think step by step.\"\"\"\n",
+ "\n",
+ "prompt = PromptTemplate.from_template(template)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "126cdbda-6446-4bbb-8018-f24fce5a7216",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "chain = prompt | llm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7323a512-5826-4498-baa6-65dca1dc6a6f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "question = \"What evidence do we have for chimpanzees going through menopause?\"\n",
+ "\n",
+ "print(chain.invoke({\"question\": question}))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "813a49df-81f4-4afa-acd6-799e4cfba921",
+ "metadata": {},
+ "source": [
+ "## Build a simple Chat Bot to query specific content"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "31c47bde-210d-46d7-ab3a-43ee000d293e",
+ "metadata": {},
+ "source": [
+ "### Load your PDF file"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8a518c3b-f20c-42df-956c-2f75081c1a6f",
+ "metadata": {},
+ "source": [
+ "Read more about document loaders from langchain [here](https://python.langchain.com/docs/modules/data_connection/document_loaders/pdf). Note that we are both loading, and splitting our document. You can read more about the default document chunking/splitting procedures [here](https://python.langchain.com/docs/modules/data_connection/document_transformers/#get-started-with-text-splitters)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2c5bcbbb-8e24-424d-931d-c9b6c09fb888",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "loader = PyPDFLoader(\"articles/science.add5473.pdf\")\n",
+ "pages = loader.load_and_split()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4a4a30a3-8a71-47ff-b264-83517e2b163a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# you could also load from the web url\n",
+ "# loader = WebBaseLoader(\"https://pubmed.ncbi.nlm.nih.gov/37883540/\")\n",
+ "# docs = loader.load()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "745f2d86-7e59-40f0-bfea-facd6fec226f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pages[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "878675c2-183c-445f-8829-b403ae3d2858",
+ "metadata": {},
+ "source": [
+ "### Create a vector store\n",
+ "One of the usual methods for organizing and searching through unstructured data is to convert it into embedded vectors, which are compact (numerical) representations. These vectors are stored, and when you want to find something similar, you turn your query into an embedded vector as well. A \"vector store\" then manages the stored data and helps you find the most similar vectors to your query. Read more about vector stores in langchain [here](https://python.langchain.com/docs/modules/data_connection/vectorstores/). Here we are going to use a very meta technique using the Facebook AI Similarity Search (FAISS) library. You can explore the various vector store options [here](https://python.langchain.com/docs/integrations/vectorstores/). Here we are using embeddings to downselect the total information we want to feed to the LLM downstream. As token limits go up, we will eventually be able to feed a whole document to the LLM, but for now, you will usually need to use this method to downsample. If your document is small enough, just push it directly to the LLM. Also, use embeddings for when you want to query over many documents (1000's). "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8144b302-d8a5-4c12-9e8a-8bff530c7006",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# index the document using FAISS\n",
+ "faiss_index = FAISS.from_documents(pages, VertexAIEmbeddings())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d88830a-0681-4f0b-9ea1-b0a112d27091",
+ "metadata": {},
+ "source": [
+ "Define the user query, which will also be converted to embeddings"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f394026e-f70e-4528-9f72-b35b87f1af44",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "query = 'What evidence is there that chimpanzees go through menopause'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5d8aab69-2042-4b75-8f5d-f06449daf063",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "docs = faiss_index.similarity_search(query, k=5)\n",
+ "docs[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "aecee51f-2305-4906-bba4-a362ee1c742d",
+ "metadata": {},
+ "source": [
+ "Now we have summaries of our query based on the article. Now we need to pass the summaries to our LLM and generate a single summary. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a6bc812d-bb3d-4d2a-97fc-344b7c120c4e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n",
+ "\n",
+ "chain = (\n",
+ " {\n",
+ " \"content\": lambda docs: \"\\n\\n\".join(\n",
+ " format_document(doc, doc_prompt) for doc in docs\n",
+ " )\n",
+ " }\n",
+ " | PromptTemplate.from_template(\"Summarize the following content in around 200 words:\\n\\n{content}\")\n",
+ " | VertexAI()\n",
+ " | StrOutputParser()\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "79b92df8-33db-45e6-aa67-85e2d8f18f54",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(chain.invoke(docs))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "412cff1c-f70d-4cc6-95ea-047f882de6ec",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n",
+ "\n",
+ "chain = (\n",
+ " {\n",
+ " \"content\": lambda docs: \"\\n\\n\".join(\n",
+ " format_document(doc, doc_prompt) for doc in docs\n",
+ " )\n",
+ " }\n",
+ " | PromptTemplate.from_template(\"Summarize the following content:\\n\\n{content}\")\n",
+ " | VertexAI()\n",
+ " | StrOutputParser()\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e7596948-c752-42f5-a4f7-6d96bf93e20b",
+ "metadata": {},
+ "source": [
+ "Here are a few example prompts, try runnning them in the template and chain below"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e187e188-07f1-4d67-a958-8b7080d725e6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "prompt_str = \"Instructions: You need to summarize text from several documents. \\\n",
+ " Be professional, factual, and succinct in the response. \\\n",
+ " Your answer is ONLY based on information in the documents above. \\\n",
+ " If you can not answer the question, answer \\\n",
+ " I am sorry, I am unable to answer the question based on the information provided \\\n",
+ " ONLY use information that is based on the documents. \\\n",
+ " \\\n",
+ " Document number: \\\n",
+ " Documents: {content}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "193f50a7-f5bb-4384-8326-1074750bcb70",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "prompt_str = \"Instructions: You are about to receive text from several documents. \\\n",
+ " Based on the documents, give me five ideas for follow up studies that could be conducted. \\\n",
+ " Be professional, factual, and succinct in your response. \\\n",
+ " Your answer is ONLY based on information in the documents above. \\\n",
+ " If you can not answer the question, answer \\\n",
+ " I am sorry, I am unable to answer the question based on the information provided \\\n",
+ " ONLY use information that is based on the documents. \\\n",
+ " \\\n",
+ " Documents: {content}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7d1b8228-5af6-400e-b2aa-4448d3334241",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "prompt_str = \"Instructions: You are about to receive text from several documents. \\\n",
+ " Based on the documents, describe to me what materials would be needed to recreate the study in question. \\\n",
+ " Be professional, factual, and succinct in your response. \\\n",
+ " Your answer is ONLY based on information in the documents above. \\\n",
+ " If you can not answer the question, answer \\\n",
+ " I am sorry, I am unable to answer the question based on the information provided \\\n",
+ " ONLY use information that is based on the documents. \\\n",
+ " \\\n",
+ " Documents: {content}\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8f2d6717-d9e2-4365-9607-5b17afd65731",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n",
+ "\n",
+ "chain = (\n",
+ " {\n",
+ " \"content\": lambda docs: \"\\n\\n\".join(\n",
+ " format_document(doc, doc_prompt) for doc in docs\n",
+ " )\n",
+ " }\n",
+ " | PromptTemplate.from_template(prompt_str) \n",
+ " | VertexAI()\n",
+ " | StrOutputParser()\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fde1f59f-4ca6-4ac1-a9d2-6cf9265f7e40",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(chain.invoke(docs))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6e8637cd-36d2-4946-b5f2-051e57a284ea",
+ "metadata": {},
+ "source": [
+ "### Deploy a local Model\n",
+ "If you want to avoid sending data over the internet, you can deploy a model to an endpoint following [these instructions](https://cloud.google.com/vertex-ai/docs/general/deployment)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8f114a47-90db-403f-8b32-0f40dc220877",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#model garden\n",
+ "#https://cloud.google.com/vertex-ai/docs/general/deployment#what_happens_when_you_deploy_a_model\n",
+ "from langchain.llms import VertexAIModelGarden"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2961cf2b-71d9-4ecf-a50b-8a748ba8291c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "llm = VertexAIModelGarden(\n",
+ " project=\"YOUR PROJECT ID\",\n",
+ " endpoint_id=\"YOUR ENDPOINT ID\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "05e6c4c7-e824-417a-a41a-ddd37cb4e393",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(llm(\"What are the greatest questions left to answer in biomedical research?\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "58dd7731-fc36-42e9-b387-5354f7b133b9",
+ "metadata": {},
+ "source": [
+ "You can repeat any of the methods shown above, but using the locally deployed LLM."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1c9acefe-3fa7-4408-a0de-94c370d0560b",
+ "metadata": {},
+ "source": [
+ "## Generate Code"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0db1c313-b0e0-4ff2-8496-aaa9ba8e8891",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "llm = VertexAI(model_name=\"code-bison\", max_output_tokens=1000, temperature=0.3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7c527588-a71c-4719-8856-068b2bc3e7ef",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "question = \"Write a python function that checks if a string is a valid email address\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e591a4d2-dabf-4d2c-a2a6-cd97b882a758",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(llm(question))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3541e5ad-faa4-423c-ba09-ce49a7e10f7e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "question = \"Write a Nextflow module from nf-core to run bwa\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e33ba6a9-ff54-4f58-895e-cc7b8ae9b983",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(llm(question))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "682802fa-1de6-479a-a219-e6b784e74a5c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "question = \"Write a Snakemake module from nf-core to run bwa\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "07198a26-2595-44c7-897a-7b7b9dfcd8d3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(llm(question))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8bc7c91c-0403-4568-9e6b-1d1767e905d3",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python (Local)",
+ "language": "python",
+ "name": "local-base"
+ },
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GoogleBatch/.gitkeep b/tutorials/notebooks/GoogleBatch/.gitkeep
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/tutorials/notebooks/GoogleBatch/.gitkeep
@@ -0,0 +1 @@
+
diff --git a/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb b/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb
new file mode 100644
index 0000000..a2c1d39
--- /dev/null
+++ b/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb
@@ -0,0 +1,686 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "d5cdaee0-cc9d-430a-8d95-6af15b2534a8",
+ "metadata": {},
+ "source": [
+ "# Use Nextflow to run workflows using the Google Batch Part I\n",
+ "\n",
+ "\n",
+ "__What is Google Batch?__ \n",
+ "Batch allows you to schedule, queue, and execute batch processing workloads on a VM instances. Batch provisions resources and manages capacity on your behalf, allowing your batch workloads to run at scale. \n",
+ "\n",
+ "__How does Batch differ from Cloud Life Sciences?__ \n",
+ "You don't need to configure and manage third-party job schedulers, provision and deprovision resources, or request resources one zone at a time. To run a job, you specify parameters for the resources required for your workload, then Batch obtains resources and queues the job for execution. Batch provides native integration with other Google Cloud services to aid in the scheduling, execution, storage, and analysis of batch jobs.\n",
+ "\n",
+ " Warning: Google Life Sciences API is depreciated and will no longer be available on GCP by July 8, 2025.
\n",
+ "\n",
+ "Here we are going to walk through submitting simple jobs directly to Google Batch, then dive into interacting with Google Batch using Nextflow. We will run some basic Hello World jobs, then move to a more complex [nf-core Methylseq workflow](https://nf-co.re/methylseq). "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae",
+ "metadata": {
+ "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae",
+ "tags": []
+ },
+ "source": [
+ "## 1. Setup your environment"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c",
+ "metadata": {
+ "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c"
+ },
+ "source": [
+ "### Create a bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "73c79eb1-6010-4d8a-8725-b92144bab944",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make sure you change this name, it needs to be globally unique\n",
+ "%env BUCKET=gbatch-nextflow"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "44d17e57-86e8-4fce-83fe-3c33c7db9dc8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#will only create the bucket if it doesn't yet exist\n",
+ "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "553761fd-4ce3-4dda-8319-a10cb9cd5314",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set versioning on the bucket so it can overwrite old files\n",
+ "! gsutil versioning set on gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f5d588a5-83b2-42ef-a65f-64b2c80bca3f",
+ "metadata": {},
+ "source": [
+ "### Install dependencies"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2acefde5-3f8a-42cb-aa12-46396eaae644",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#First install java\n",
+ "!sudo apt update\n",
+ "!sudo apt-get install default-jdk -y\n",
+ "!java -version"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d8538e0-49a3-4e61-abf3-a08e1b397fcf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Specify nexflow version and platfrom\n",
+ "! export NXF_VER=21.10.0\n",
+ "! export NXF_MODE=google\n",
+ "#Install nexflow, make it exceutable, and update it\n",
+ "! curl https://get.nextflow.io | bash\n",
+ "! chmod +x nextflow\n",
+ "! ./nextflow self-update"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07d1891a-8338-4592-a3a0-eaab55cd8df0",
+ "metadata": {},
+ "source": [
+ "### Ensure you have APIs enabled and IAM permissions\n",
+ "Make sure that Batch, Compute Engine, and Cloud Storage APIs are all enabled.\n",
+ "\n",
+ "You also want to make sure your Compute Engine Default Service Account has the following Roles:\n",
+ "\n",
+ "- Service Account User\n",
+ "- Batch Agent Reporter \n",
+ "- Storage Admin\n",
+ "- Storage Object Admin\n",
+ "- Batch Job Editor \n",
+ "\n",
+ "Your Service Account should already have these roles assigned, but if not, reach out to Support to have your account updated."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a73b5bf4-3e68-44c2-9874-02c637e730bf",
+ "metadata": {},
+ "source": [
+ "## 2. Submit Hello World to Batch Directly"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "33f6045f-3336-46ae-917c-6528b4c0c0db",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "#### 2.1 Submitting a job through the command line"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "10c12fe3-0635-4e38-8153-51b60ff287ef",
+ "metadata": {},
+ "source": [
+ "To submit a batch job through the command line you first need to create a __json__ file this is your config file. You can use the below hello world script as a template for your batch job. We will name the file hello-world.json.\n",
+ "\n",
+ "```\n",
+ "{\n",
+ " \"taskGroups\": [\n",
+ " {\n",
+ " \"taskSpec\": {\n",
+ " \"runnables\": [\n",
+ " {\n",
+ " \"container\": {\n",
+ " \"imageUri\": \"gcr.io/google-containers/busybox\",\n",
+ " \"entrypoint\": \"/bin/sh\",\n",
+ " \"commands\": [\n",
+ " \"-c\",\n",
+ " \"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks >> /mnt/disks/gbatch-nextflow/hello-world.txt\"\n",
+ " ]\n",
+ " }\n",
+ " }\n",
+ " ]\n",
+ " \"volumes\": [\n",
+ " {\n",
+ " \"gcs\": {\n",
+ " \"remotePath\": \"gbatch-nextflow\"\n",
+ " },\n",
+ " \"mountPath\": \"/mnt/disks/gbatch-nextflow\"\n",
+ " }\n",
+ " ],\n",
+ " \n",
+ " \"computeResource\": {\n",
+ " \"cpuMilli\": 2000,\n",
+ " \"memoryMib\": 16\n",
+ " },\n",
+ " \"maxRetryCount\": 2,\n",
+ " \"maxRunDuration\": \"3600s\"\n",
+ " },\n",
+ " \"taskCount\": 4,\n",
+ " \"parallelism\": 2\n",
+ " }\n",
+ " ],\n",
+ " \"allocationPolicy\": {\n",
+ " \"instances\": [\n",
+ " {\n",
+ " \"policy\": { \"machineType\": \"e2-standard-4\" }\n",
+ " }\n",
+ " ]\n",
+ " },\n",
+ " \"labels\": {\n",
+ " \"department\": \"finance\",\n",
+ " \"env\": \"testing\"\n",
+ " },\n",
+ " \"logsPolicy\": {\n",
+ " \"destination\": \"CLOUD_LOGGING\"\n",
+ " }\n",
+ "}\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "be843007-486a-433d-bdaf-91aa2168c03d",
+ "metadata": {},
+ "source": [
+ "Let break down the script:\n",
+ "- Our image and commands are specified in the block labeled \"container\", imageURI being the theimage busybox and our commands being to echo Hello World.\n",
+ " - You will notice that in the command line we have mounted our bucket this is so our output file hello-world.txt is stored into our bucket __(do not forget to change the mount path to your bucket name)__\n",
+ " - As you noticed there are some variables that we have added these are universal variables that Google has created that dont need to be defined beforehand, they show which task the job is working on presently and how many tasks in total this job has.\n",
+ "- Under the 'volume' block this is where we are specifying our Google bucket and the path we are using to mount or join our bucket to our container. __(do not forget to change the mountPath and remotePath to your bucket name)__ \n",
+ "- 'compute Resources' is where we define how long the script should run, how many tasks it should have and how many of thoes taks should be run in parallel at a time.\n",
+ "- Under 'instances' in our script is where we can specify our machine type.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "67b76fb0-1b4f-4b43-a27f-6046c3052858",
+ "metadata": {},
+ "source": [
+ "Now we can submit our job specifing title of the job (hello-world) the location (us-central1) and the location of our json file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1bec6a71-f279-41c1-8965-882612a4095c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gcloud batch jobs submit hello-world \\\n",
+ " --location us-central1 \\\n",
+ " --config ~/hello-world.json"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1b8f7dfd-5a6a-4d04-8325-88e4210cb2c3",
+ "metadata": {
+ "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48",
+ "outputId": "b0e740fa-dabc-4d45-c95b-15f72d32bffa",
+ "tags": []
+ },
+ "source": [
+ "#### 2.2 Submitting a job through the console"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9cfdaa37-a0d5-44b3-ad4d-dffcd45801f4",
+ "metadata": {},
+ "source": [
+ "Running a batch job through the console allows for a user-friendly view to input data and scripts and view the status of the jobs you created.\n",
+ "\n",
+ "Start by searching __'Batch'__ in the console search bar you should see a similar setting like this \n",
+ " \n",
+ "\n",
+ "Near the upper left corner click "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "82c93eae-5424-4d77-9757-9d6cb342986c",
+ "metadata": {},
+ "source": [
+ "The follow should appear on the screen\n",
+ " \n",
+ " \n",
+ " \n",
+ " This is where you can:\n",
+ " - Label your job\n",
+ " - Select a region and zone to excecute your job\n",
+ " - Select your machine type (e.g. e2-medium)\n",
+ " - Specify tasks by adding a script and/or specifiying a container to run the task in\n",
+ " - Allocating resources for each task\n",
+ " - Add storage volume"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c812865a-6ca1-4900-b93f-1239249d952d",
+ "metadata": {},
+ "source": [
+ "Once you have entered the settings for your batch job you can even view the full script that you would submit through the command line by clicking __'EQUIVALENT COMMAND LINE'__ next to __'CREATE'__. Delete the script that is already there and paste the script we had above.\n",
+ "\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5a8d633d-88d8-4db5-b834-1ce06e8cd91d",
+ "metadata": {},
+ "source": [
+ "Once you run your job by clicking __'CREATE'__. \n",
+ "By clicking the job name you can view more information of the jobs setting, resources applied, and logs by clicking "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72",
+ "metadata": {
+ "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72",
+ "tags": []
+ },
+ "source": [
+ "### Check job status\n",
+ "\n",
+ "You can view the status of your job by looking at the __'Job List'__ in the Google Console. Here you will see your job name, status, region, memory per task, machine type, date started and run time.\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "To check the job status via the command line enter the following changing the job name and location."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "411b0153-aed6-4694-b54d-af6e80db5726",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gcloud batch jobs describe hello-world \\\n",
+ " --location=LOCATION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9f056585-6c10-41b6-b7b6-0c75bebed811",
+ "metadata": {
+ "id": "9f056585-6c10-41b6-b7b6-0c75bebed811"
+ },
+ "source": [
+ "### View your output"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a86e2e14-8efe-4a36-8a5a-9d43407653c1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil ls gs://$BUCKET/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81",
+ "metadata": {
+ "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81",
+ "outputId": "251ad4db-dcea-4d72-ff9a-01b3080acc8e"
+ },
+ "outputs": [],
+ "source": [
+ "! gsutil cp gs://$BUCKET/hello_world.txt .\n",
+ "! cat hello_world.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1",
+ "metadata": {
+ "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1"
+ },
+ "source": [
+ "## 3. Run Nextflow Locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2457d31d-d8b7-42f1-a0be-0d88c95d4fc3",
+ "metadata": {},
+ "source": [
+ "### Nextflow 101"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b709c718-96d0-4925-99dd-525a7e7b6c76",
+ "metadata": {
+ "id": "b709c718-96d0-4925-99dd-525a7e7b6c76"
+ },
+ "source": [
+ "Nextflow interacts with many different files to have a proper working workflow:\n",
+ "\n",
+ "- __Main file__: The main file is a .nf file that holds the processes and channels describing the input, output, a shell script of your commands, workflow which acts like a recipe book for nextflow, and/or conditions. For snakemake users this is equivalent to 'rules'.\n",
+ " - __Process__: Contains channels and scripts that can be executed in a Linux server like bash commands.\n",
+ " - __Channel__: Produces ways through which processes communicate to each other for example input and output are channels of value that point the process to where data is or should be located.\n",
+ "- __Config file__: The .config file contains parameters, and multiple profiles. Each profile can contain a different executor type (e.g. LS API, conda, docker, etc.), memory or machine type, output directory, working directory and more!\n",
+ "- __Docker file__: Contains dependencies and enviroments that is needed for the nextflow workflow to run.\n",
+ "- __Schema file__: Schmema files are optional and are structured json files that contain information about the usage and commands that your workflow will excecute.You might have seen this when you run a command along with the flag '--help'.\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9bea3004-ff40-4918-ac16-83aad9427ad7",
+ "metadata": {
+ "id": "9bea3004-ff40-4918-ac16-83aad9427ad7"
+ },
+ "source": [
+ "### Run a nextflow 'Hello World' process locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf",
+ "metadata": {
+ "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf"
+ },
+ "source": [
+ "We are going to first run Hello World locally using the config file called hello.nf. \n",
+ "\n",
+ "It should look like this:\n",
+ "\n",
+ "```\n",
+ "#!/usr/bin/env nextflow\n",
+ "nextflow.enable.dsl=2 \n",
+ "\n",
+ "params.str = 'Hello World'\n",
+ "\n",
+ "process sayHello {\n",
+ " input:\n",
+ " val str\n",
+ "\n",
+ " output:\n",
+ " stdout\n",
+ "\n",
+ " \"\"\"\n",
+ " echo $str > hello.txt\n",
+ " cat hello.txt\n",
+ " \"\"\"\n",
+ "}\n",
+ "workflow {\n",
+ " sayHello(params.str) | view\n",
+ "}\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4",
+ "metadata": {
+ "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4",
+ "outputId": "9554903e-f8d5-43fa-ffe9-f00ce836bf2d"
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run hello.nf --str 'Hello!'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7",
+ "metadata": {
+ "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7",
+ "tags": []
+ },
+ "source": [
+ "## 4. Submit Nextflow Job to the Google Batch\n",
+ "Create and modify your own config file to include a 'gbatch' profile block to tell Nextflow to submit the job to Google Batch instead of running locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b",
+ "metadata": {
+ "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b"
+ },
+ "source": [
+ "The config file allows nextflow to utilize excecuters like Google Batch. In this tutorial the config files is named __'nextflow.config'__. Make sure you open this file and update the `` that are account specific.\n",
+ "- Make sure that your region is a region included in the Google Batch!\n",
+ "- Specify your working directory bucket and output directory bucket\n",
+ "- Specify the machine type you would like to use, ensuring that there is enough memory and cpus for the workflow\n",
+ " - Otherwise Google Batch will automatically use 1 CPU\n",
+ "\n",
+ "```\n",
+ "profiles{\n",
+ " gbatch{\n",
+ " process.executor = 'google-batch'\n",
+ " workDir = 'gs:///methyl-seq'\n",
+ " google.location = 'us-central1'\n",
+ " google.region = 'us-central1'\n",
+ " google.project = ''\n",
+ " params.outdir = 'gs://methyl-seq/outdir'\n",
+ " process.machineType = 'c2-standard-30'\n",
+ " }\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "__Note:__ Make sure your working directory and output directory are different! Google Batch creates temporary file in the working directory within your bucket that do take up space so once your pipeline has completed succesfully feel free to delete the temporary files."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "340f7300-449a-4a12-bbc5-073547d58cac",
+ "metadata": {
+ "id": "340f7300-449a-4a12-bbc5-073547d58cac",
+ "tags": []
+ },
+ "source": [
+ "### Optional: Listing nf-core tools with docker and viewing their commands\n",
+ "Using the command below you can see all the tools that nfcore holds and their versions/lastes releases"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0",
+ "metadata": {
+ "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0",
+ "outputId": "0530644a-dd9a-4077-dbc8-d1e335788a01",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! docker run nfcore/tools list"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d",
+ "metadata": {
+ "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d"
+ },
+ "source": [
+ "You can view commands for methylseq (or any other specified nf-core tool) by using the [--help] flag"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "05ea2893-60b3-4934-ae86-b07d4bc59728",
+ "metadata": {
+ "id": "05ea2893-60b3-4934-ae86-b07d4bc59728",
+ "outputId": "1e6de26f-0433-4bbd-8a43-119097bb1f41",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run nf-core/methylseq -r 1.6.1 --help"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c",
+ "metadata": {
+ "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c",
+ "tags": []
+ },
+ "source": [
+ "### Run Methylseq with the test profile"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2",
+ "metadata": {
+ "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2"
+ },
+ "source": [
+ "The 'test' profile uses a small dataset allowing you to ensure the workflow works with your config file without long runtimes. Ensure you include:\n",
+ "- Version of the nf-core tool [-r]\n",
+ "- Location of the config file [-c]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9",
+ "metadata": {
+ "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9",
+ "outputId": "0507c847-7f83-40af-ebf0-a1fdef27499b",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run nf-core/methylseq -r 1.6.1 -profile test,gbatch -c nextflow-methyseq.config"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84",
+ "metadata": {
+ "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84"
+ },
+ "source": [
+ "You will notice in the above that to the left of the process within the __[ ]__ is actually a __tag__ you can search in Google Batch and the text before the __/__ corresponds to the __temporary directories__ within your working directory. Feel free to delete the temporary directories once your workflow has succesfully completed.\n",
+ "\n",
+ "Congrats! You are done with Part I. If you want to keep going and learn how to use the Methylseq workflow with real data, then move to Part II. If not, then feel free to clean up your resources. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26d5ad01-cc27-4407-8434-b88d324b9e2c",
+ "metadata": {},
+ "source": [
+ "## 5. Troubleshooting"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c79edcad-7178-4219-b097-e9b21b98bcc7",
+ "metadata": {},
+ "source": [
+ "Some of the nf-core tools require extra parameters:\n",
+ "- If you receive a error of __'quota exceeded'__ error you can increase your boot disk size to the gbatch profile within your config file using the __google.batch.bootDiskSize__ parameter (e.g., google.batch.bootDiskSize = 100.GB)\n",
+ "- Some errors show that a tool could not be used, was not installed, or gives a error that doesn't really explain the reason for why the process stopped you can try to increase the process time on your profile by using the __process.time parameter__ (e.g., process.time = '2h')\n",
+ "- If you receive a error like below using the new release of Nextflow should fix this v23.04.0 or later\n",
+ "```\n",
+ "Caused by:\n",
+ " Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@49b3a025[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@2e0ceb8c[Wrapped task = TrustedListenableFutureTask@25c1396d[status=PENDING, info=[task=[running=[NOT STARTED YET], com.google.api.gax.rpc.AttemptCallable@2db57b9a]]]]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@aa6214[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]\n",
+ "\n",
+ "```\n",
+ "- adding the __-log parameter__ on the command line will help produce a log file that will help to troubleshoot other errors like so: \n",
+ "`./nextflow -log DIRECTORY_NAME/nextflow.log run `"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7bf5cba-995d-4404-94d1-9bc9c4a04482",
+ "metadata": {},
+ "source": [
+ "## 6. Clean up\n",
+ "If you want to clean up all resources associated with this tutorial then \n",
+ "+ delete your bucket with `gsutil rm -r $BUCKET`\n",
+ "+ delete this VM in either Vertex AI or Compute Engine"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c9345ecf-4545-4772-8815-1e7a595ac2ee",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "name": "Workshop_2_updated.ipynb",
+ "provenance": []
+ },
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m93",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93"
+ },
+ "kernelspec": {
+ "display_name": "Python (Local)",
+ "language": "python",
+ "name": "local-base"
+ },
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb b/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb
new file mode 100644
index 0000000..50768e1
--- /dev/null
+++ b/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb
@@ -0,0 +1,375 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "5384eeed-e730-46e9-9e4d-7df526fb44ee",
+ "metadata": {},
+ "source": [
+ "# Use Nextflow to run workflows using the Cloud Google Batch Part II\n",
+ "Here we are going to build on Part I to download some real data using the SRA toolkit and then submit an nf-core Methyseq job to Google Batch."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e30edde9-dcbf-4f74-9d2a-bd4d8c15c9a9",
+ "metadata": {},
+ "source": [
+ "## 1. Optional: Setup the environment\n",
+ "If you did not do part 1, then set up your environment. Otherwise, skip to the next section."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c71c4052-607e-4827-8126-759a6871558c",
+ "metadata": {},
+ "source": [
+ "### Create a bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cf9e21b4-07d3-4e79-9c94-067b70e78ff6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make sure you change this name, it needs to be globally unique\n",
+ "%env BUCKET=gbatch-api-nextflow"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e47789f2-e38d-46ec-8750-0a235b0c4337",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#will only create the bucket if it doesn't yet exist\n",
+ "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5a4ccc7d-b258-410a-85fb-f261fa0dcade",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set versioning on the bucket so it can overwrite old files\n",
+ "! gsutil versioning set on gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00dc1fb0-784f-46c7-8905-817fa3fbccb1",
+ "metadata": {},
+ "source": [
+ "### Install mambaforge\n",
+ "You can also use the default installed conda, but mamba is so much faster! "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0b97b0e6-d44c-40e4-a32a-33708e4ed596",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "08e99d91-e356-456e-8cde-7f2819114ee2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80eb36f1-62c1-46f0-b297-6d8bc1d2e034",
+ "metadata": {},
+ "source": [
+ "### Install other dependencies "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2619673e-9645-4460-aa07-323d01bcd9ba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#First install java\n",
+ "!sudo apt update\n",
+ "!sudo apt-get install default-jdk -y\n",
+ "!java -version"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c24cb2d9-6260-45fc-a4c0-f55688c43e11",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Specify nexflow version and platfrom\n",
+ "! export NXF_VER=21.10.0\n",
+ "! export NXF_MODE=google\n",
+ "#Install nexflow, make it exceutable, and update it\n",
+ "! curl https://get.nextflow.io | bash\n",
+ "! chmod +x nextflow\n",
+ "! ./nextflow self-update"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "581f3b6a-b0b8-4309-a54b-ffff14450f41",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Install SRAtools to download data\n",
+ "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1bc477a9-7b3f-431e-93b7-50e96809bfc5",
+ "metadata": {},
+ "source": [
+ "## 2. Download data with SRA tools\n",
+ "If you want more work with SRA tools, check out our [SRA-focused notebook](https://github.com/STRIDES/NIHCloudLabGCP/blob/main/tutorials/notebooks/SRADownload/SRA-Download.ipynb)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "facdbaea-d6ca-4270-9ddc-7c5d042b7373",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set up directory structure\n",
+ "!mkdir -p data data/fasterqdump"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e0c5eb64-8628-4849-b077-6a3b23aaf934",
+ "metadata": {},
+ "source": [
+ "First bring in the compressed .sra file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b8ca1c0f-3844-42f8-a9e2-546178a6d961",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! prefetch -O data/raw_fastq -f yes SRR067701 --location GCP -v "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6ea6f3fa-1ce5-4c1a-b077-a5cb539e33b2",
+ "metadata": {},
+ "source": [
+ "Now convert the compressed .sra file to fastq. It will take about two minutes, so be patient. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6d7c1f2f-6d52-4f2f-b308-62d42c95ec1b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! fasterq-dump -f -e 8 -m 24G SRR067701.sra"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "282c31da-0ce9-4e21-ab3e-07e550bc5ceb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#compress the fastq files\n",
+ "! gzip data/raw_fastq/SRR067701.fastq"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "805294b9-81cc-455c-9181-20fb048fb57c",
+ "metadata": {},
+ "source": [
+ "## 3. Run methylseq with Google Batch"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b7c45f87-e0b6-43c5-aa55-3ee3e33978a3",
+ "metadata": {},
+ "source": [
+ "Ensure you include the following in your command:\n",
+ "- nf-core tool version [-r]\n",
+ "- Add fastq.gz file input [--input]\n",
+ "- Reference Genome [--genome] (no need to have it on hand nf-core uses iGenomes and will pull in the correct reference file)\n",
+ "- Confile file location [-c]\n",
+ "- Wanted profile [-profile]\n",
+ "- Other flags such as:\n",
+ " - If the fastq file is single-ended or not\n",
+ " - The max cpus and memory wanted\n",
+ "\n",
+ "You can recycle the nextflow.config from Part I. Since our fastq file is pretty big, it may take some time to finish."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a24cab67-be41-4b2d-a545-7e14af554022",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!./nextflow run nf-core/methylseq -r 1.6.1 \\\n",
+ " --input 'data/raw_fastq/SRR067701.fastq.gz' \\\n",
+ " --genome GRCh38 \\\n",
+ " --single_end \\\n",
+ " -c nextflow-methyseq.config \\\n",
+ " -profile gbatch \\\n",
+ " --max_cpus 32 \\\n",
+ " --max_memory '110.GB'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ab826f3b-391e-44fb-8197-e81fa8a9a614",
+ "metadata": {},
+ "source": [
+ "#### Check to see if files are in your output directory bucket\n",
+ "If you skipped part one, go run the first cell where you assign your bucket name to a variable. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b7484fdc-eabb-47d6-99ea-609a1574651b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil ls gs://$BUCKET/methyl-seq/outdir"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "438e8f65-e7fe-48e3-a615-e966b138c1e3",
+ "metadata": {},
+ "source": [
+ "__Optional__: View your MultiQC HTML file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "15b74ca3-c7c7-499d-af53-ffaccc9e2157",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil cp -r gs://$BUCKET/methyl-seq/outdir/MultiQC/multiqc_report.html ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "31c89604-b9a4-4f77-aa0c-67273a161130",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from IPython.display import IFrame\n",
+ "\n",
+ "IFrame(src='multiqc_report.html', width=900, height=600)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fb9abdb6-6815-4d6f-89d5-6a291e2928df",
+ "metadata": {},
+ "source": [
+ "## 4. Troubleshooting"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d44785d0-1e98-49b2-b894-79a731cab057",
+ "metadata": {},
+ "source": [
+ "Some of the nf-core tools require extra parameters:\n",
+ "- If you receive a error of __'quota exceeded'__ error you can increase your boot disk size to the gbatch profile within your config file using the __google.batch.bootDiskSize__ parameter (e.g., google.batch.bootDiskSize = 100.GB)\n",
+ "- Some errors show that a tool could not be used, was not installed, or gives a error that doesn't really explain the reason for why the process stopped you can try to increase the process time on your profile by using the __process.time parameter__ (e.g., process.time = '2h')\n",
+ "- If you receive a error like below using the new release of Nextflow should fix this v23.04.0 or later\n",
+ "```\n",
+ "Caused by:\n",
+ " Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@49b3a025[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@2e0ceb8c[Wrapped task = TrustedListenableFutureTask@25c1396d[status=PENDING, info=[task=[running=[NOT STARTED YET], com.google.api.gax.rpc.AttemptCallable@2db57b9a]]]]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@aa6214[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]\n",
+ "\n",
+ "```\n",
+ "- adding the __-log parameter__ on the command line will help produce a log file that will help to troubleshoot other errors like so: \n",
+ "`./nextflow -log DIRECTORY_NAME/nextflow.log run `"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5a9d0590-c4dd-48de-822f-3de5b47af4e1",
+ "metadata": {},
+ "source": [
+ "## 5. Clean Up"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4fc86196-86dc-4b8c-a86c-b4354e58d05f",
+ "metadata": {},
+ "source": [
+ "If you want to clean up all resources associated with this tutorial then \n",
+ "+ delete your bucket with `gsutil rm -r $BUCKET`\n",
+ "+ delete this VM in either Vertex AI or Compute Engine"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m93",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93"
+ },
+ "kernelspec": {
+ "display_name": "Python (Local)",
+ "language": "python",
+ "name": "local-base"
+ },
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb
new file mode 100644
index 0000000..cc6a0c2
--- /dev/null
+++ b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb
@@ -0,0 +1,509 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "d5cdaee0-cc9d-430a-8d95-6af15b2534a8",
+ "metadata": {},
+ "source": [
+ "# Use Nextflow to run workflows using the Cloud Life Sciences API Part I\n",
+ "Here we are going to walk through submitting simple jobs directly to the Life Sciences API, then dive into interacting with the API using Nextflow. We will run some basic Hello World jobs, then move to a more complex [nf-core Methylseq workflow](https://nf-co.re/methylseq). "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d5aa78f4-b8f7-4fbd-846c-09142ac36891",
+ "metadata": {},
+ "source": [
+ " Warning: Google Life Sciences API is depreciated and will no longer be avaible by July 8, 2025 on the platform. Please switch to the
Google Batch Nextflow tutorials .
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae",
+ "metadata": {
+ "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae",
+ "tags": []
+ },
+ "source": [
+ "## 1. Setup your environment"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c",
+ "metadata": {
+ "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c"
+ },
+ "source": [
+ "### Create a bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "73c79eb1-6010-4d8a-8725-b92144bab944",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make sure you change this name, it needs to be globally unique\n",
+ "%env BUCKET=gls-api-nextflow"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "44d17e57-86e8-4fce-83fe-3c33c7db9dc8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#will only create the bucket if it doesn't yet exist\n",
+ "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "553761fd-4ce3-4dda-8319-a10cb9cd5314",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set versioning on the bucket so it can overwrite old files\n",
+ "! gsutil versioning set on gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f5d588a5-83b2-42ef-a65f-64b2c80bca3f",
+ "metadata": {},
+ "source": [
+ "### Install dependencies"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2acefde5-3f8a-42cb-aa12-46396eaae644",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#First install java\n",
+ "!sudo apt update\n",
+ "!sudo apt-get install default-jdk -y\n",
+ "!java -version"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d8538e0-49a3-4e61-abf3-a08e1b397fcf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Specify nexflow version and platfrom\n",
+ "! export NXF_VER=21.10.0\n",
+ "! export NXF_MODE=google\n",
+ "#Install nexflow, make it exceutable, and update it\n",
+ "! curl https://get.nextflow.io | bash\n",
+ "! chmod +x nextflow\n",
+ "! ./nextflow self-update"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07d1891a-8338-4592-a3a0-eaab55cd8df0",
+ "metadata": {},
+ "source": [
+ "### Ensure you have APIs enabled and IAM permissions\n",
+ "Make sure that Cloud Life Sciences, Compute Engine, and Cloud Storage APIs are all enabled.\n",
+ "\n",
+ "You also want to make sure your Compute Engine Default Service Account has the following Roles:\n",
+ "\n",
+ " - lifesciences.workflowsRunner\n",
+ " - iam.serviceAccountUser\n",
+ " - serviceusage.serviceUsageConsumer\n",
+ " - storage.objectAdmin\n",
+ "Your Service Account should already have these roles assigned, but if not, reach out to Support to have your account updated."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a73b5bf4-3e68-44c2-9874-02c637e730bf",
+ "metadata": {},
+ "source": [
+ "## 2. Submit Hello World to the API"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48",
+ "metadata": {
+ "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48",
+ "outputId": "b0e740fa-dabc-4d45-c95b-15f72d32bffa"
+ },
+ "outputs": [],
+ "source": [
+ "! gcloud beta lifesciences pipelines run \\\n",
+ " --location us-central1 \\\n",
+ " --regions us-east1 \\\n",
+ " --logging gs://$BUCKET/hello_world.log \\\n",
+ " --command-line 'echo \"hello world!\"'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72",
+ "metadata": {
+ "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72",
+ "tags": []
+ },
+ "source": [
+ "### Check job status\n",
+ "To check the job status enter operation ID from the gcloud output\n",
+ "\n",
+ "Running [projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID]\n",
+ "The output is kind of hard to parse, but it starts at the bottom, the top is the most recent action. If you have an error, it should be towards the top. Even for this simple job, it may take a few minutes to finish all operations, so keep checking until it says `done: true` at the top. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "aa92ba73-13c8-4e90-9c41-61a6fb84bf71",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set your operation ID here\n",
+ "%env ID=10485099716669037373"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9cba7c4e-4b8c-4e4c-80e4-8de1f11b5790",
+ "metadata": {
+ "id": "9cba7c4e-4b8c-4e4c-80e4-8de1f11b5790",
+ "outputId": "47886ae8-869f-46d3-a6fa-a2b56242be9b",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "!gcloud beta lifesciences operations describe $ID"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9f056585-6c10-41b6-b7b6-0c75bebed811",
+ "metadata": {
+ "id": "9f056585-6c10-41b6-b7b6-0c75bebed811"
+ },
+ "source": [
+ "### View your output"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a86e2e14-8efe-4a36-8a5a-9d43407653c1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil ls gs://$BUCKET/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81",
+ "metadata": {
+ "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81",
+ "outputId": "251ad4db-dcea-4d72-ff9a-01b3080acc8e"
+ },
+ "outputs": [],
+ "source": [
+ "! gsutil cp gs://$BUCKET/hello_world.log .\n",
+ "! cat hello_world.log"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1",
+ "metadata": {
+ "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1"
+ },
+ "source": [
+ "## 3. Run Nextflow Locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2457d31d-d8b7-42f1-a0be-0d88c95d4fc3",
+ "metadata": {},
+ "source": [
+ "### Nextflow 101"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b709c718-96d0-4925-99dd-525a7e7b6c76",
+ "metadata": {
+ "id": "b709c718-96d0-4925-99dd-525a7e7b6c76"
+ },
+ "source": [
+ "Nextflow interacts with many different files to have a proper working workflow:\n",
+ "\n",
+ "- __Main file__: The main file is a .nf file that holds the processes and channels describing the input, output, a shell script of your commands, workflow which acts like a recipe book for nextflow, and/or conditions. For snakemake users this is equivalent to 'rules'.\n",
+ " - __Process__: Contains channels and scripts that can be executed in a Linux server like bash commands.\n",
+ " - __Channel__: Produces ways through which processes communicate to each other for example input and output are channels of value that point the process to where data is or should be located.\n",
+ "- __Config file__: The .config file contains parameters, and multiple profiles. Each profile can contain a different executor type (e.g. LS API, conda, docker, etc.), memory or machine type, output directory, working directory and more!\n",
+ "- __Docker file__: Contains dependencies and enviroments that is needed for the nextflow workflow to run.\n",
+ "- __Schema file__: Schmema files are optional and are structured json files that contain information about the usage and commands that your workflow will excecute.You might have seen this when you run a command along with the flag '--help'.\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9bea3004-ff40-4918-ac16-83aad9427ad7",
+ "metadata": {
+ "id": "9bea3004-ff40-4918-ac16-83aad9427ad7"
+ },
+ "source": [
+ "### Run a nextflow 'Hello World' process locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf",
+ "metadata": {
+ "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf"
+ },
+ "source": [
+ "We are going to first run Hello World locally using the config file called hello.nf. \n",
+ "\n",
+ "It should look like this:\n",
+ "\n",
+ "```\n",
+ "#!/usr/bin/env nextflow\n",
+ "nextflow.enable.dsl=2 \n",
+ "\n",
+ "params.str = 'Hello World'\n",
+ "\n",
+ "process sayHello {\n",
+ " input:\n",
+ " val str\n",
+ "\n",
+ " output:\n",
+ " stdout\n",
+ "\n",
+ " \"\"\"\n",
+ " echo $str > hello.txt\n",
+ " cat hello.txt\n",
+ " \"\"\"\n",
+ "}\n",
+ "workflow {\n",
+ " sayHello(params.str) | view\n",
+ "}\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4",
+ "metadata": {
+ "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4",
+ "outputId": "9554903e-f8d5-43fa-ffe9-f00ce836bf2d"
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run hello.nf --str 'Hello!'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7",
+ "metadata": {
+ "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7",
+ "tags": []
+ },
+ "source": [
+ "## 4. Submit Nextflow Job to the Life Sciences API\n",
+ "Create and modify your own config file to include a 'gls' profile block to tell Nextflow to submit the job to the API instead of running locally"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b",
+ "metadata": {
+ "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b"
+ },
+ "source": [
+ "The config file allows nextflow to utilize excecuters like Life Science API. In this tutorial the config files is named __'nextflow.config'__. Make sure you open this file and update the `` that are account specific.\n",
+ "- Make sure that your region is a region included in the LS API!\n",
+ "- Specify your working directory bucket and output directory bucket\n",
+ "- Specify the machine type you would like to use, ensuring that there is enough memory and cpus for the workflow\n",
+ " - Otherwise LS API will automatically use 1 CPU\n",
+ "\n",
+ "```\n",
+ "profiles{\n",
+ " gls{\n",
+ " process.executor = 'google-lifesciences'\n",
+ " workDir = 'gs:///methyl-seq'\n",
+ " google.location = 'us-central1'\n",
+ " google.region = 'us-central1'\n",
+ " google.project = ''\n",
+ " params.outdir = 'gs://methyl-seq/outdir'\n",
+ " process.machineType = 'c2-standard-30'\n",
+ " }\n",
+ "}\n",
+ "```\n",
+ "\n",
+ "__Note:__ Make sure your working directory and output directory are different! Life Sciences creates temporary file in the working directory within your bucket that do take up space so once your pipeline has completed succesfully feel free to delete the temporary files."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "340f7300-449a-4a12-bbc5-073547d58cac",
+ "metadata": {
+ "id": "340f7300-449a-4a12-bbc5-073547d58cac",
+ "tags": []
+ },
+ "source": [
+ "### Optional: Listing nf-core tools with docker and viewing their commands\n",
+ "Using the command below you can see all the tools that nfcore holds and their versions/lastes releases"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0",
+ "metadata": {
+ "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0",
+ "outputId": "0530644a-dd9a-4077-dbc8-d1e335788a01",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! docker run nfcore/tools list"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d",
+ "metadata": {
+ "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d"
+ },
+ "source": [
+ "You can view commands for methylseq (or any other specified nf-core tool) by using the [--help] flag"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "05ea2893-60b3-4934-ae86-b07d4bc59728",
+ "metadata": {
+ "id": "05ea2893-60b3-4934-ae86-b07d4bc59728",
+ "outputId": "1e6de26f-0433-4bbd-8a43-119097bb1f41",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run nf-core/methylseq -r 1.6.1 --help"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c",
+ "metadata": {
+ "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c",
+ "tags": []
+ },
+ "source": [
+ "### Run Methylseq with the test profile"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2",
+ "metadata": {
+ "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2"
+ },
+ "source": [
+ "The 'test' profile uses a small dataset allowing you to ensure the workflow works with your config file without long runtimes. Ensure you include:\n",
+ "- Version of the nf-core tool [-r]\n",
+ "- Location of the config file [-c]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9",
+ "metadata": {
+ "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9",
+ "outputId": "0507c847-7f83-40af-ebf0-a1fdef27499b",
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! ./nextflow run nf-core/methylseq -r 1.6.1 -profile test,gls -c nextflow-methyseq.config"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84",
+ "metadata": {
+ "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84"
+ },
+ "source": [
+ "You will notice in the above that to the left of the process within the __[ ]__ is actually a __tag__ you can search in Life Sciences and the text before the __/__ corresponds to the __temporary directories__ within your working directory. Feel free to delete the temporary directories once your workflow has succesfully completed.\n",
+ "\n",
+ "Congrats! You are done with Part I. If you want to keep going and learn how to use the Methylseq workflow with real data, then move to Part II. If not, then feel free to clean up your resources. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7bf5cba-995d-4404-94d1-9bc9c4a04482",
+ "metadata": {},
+ "source": [
+ "## 5. Clean up\n",
+ "If you want to clean up all resources associated with this tutorial then \n",
+ "+ delete your bucket with `gsutil rm -r $BUCKET`\n",
+ "+ delete this VM in either Vertex AI or Compute Engine"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "name": "Workshop_2_updated.ipynb",
+ "provenance": []
+ },
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m93",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb
new file mode 100644
index 0000000..3a24206
--- /dev/null
+++ b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb
@@ -0,0 +1,357 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "5384eeed-e730-46e9-9e4d-7df526fb44ee",
+ "metadata": {},
+ "source": [
+ "# Use Nextflow to run workflows using the Cloud Life Sciences API Part II\n",
+ "Here we are going to build on Part I to download some real data using the SRA toolkit and then submit an nf-core Methyseq job to the Cloud Life Sciences API."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9eab068b-fed8-4f80-b80f-32d538cb41c7",
+ "metadata": {},
+ "source": [
+ " Warning: Google Life Sciences API is depreciated and will no longer be available by July 8, 2025 on the platform. Please switch to the
Google Batch Nextflow tutorials .
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e30edde9-dcbf-4f74-9d2a-bd4d8c15c9a9",
+ "metadata": {},
+ "source": [
+ "## 1. Optional: Setup the environment\n",
+ "If you did not do part 1, then set up your environment. Otherwise, skip to the next section."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c71c4052-607e-4827-8126-759a6871558c",
+ "metadata": {},
+ "source": [
+ "### Create a bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cf9e21b4-07d3-4e79-9c94-067b70e78ff6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#make sure you change this name, it needs to be globally unique\n",
+ "%env BUCKET=gls-api-nextflow"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e47789f2-e38d-46ec-8750-0a235b0c4337",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#will only create the bucket if it doesn't yet exist\n",
+ "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5a4ccc7d-b258-410a-85fb-f261fa0dcade",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set versioning on the bucket so it can overwrite old files\n",
+ "! gsutil versioning set on gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00dc1fb0-784f-46c7-8905-817fa3fbccb1",
+ "metadata": {},
+ "source": [
+ "### Install mambaforge\n",
+ "You can also use the default installed conda, but mamba is so much faster! "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0b97b0e6-d44c-40e4-a32a-33708e4ed596",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "08e99d91-e356-456e-8cde-7f2819114ee2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80eb36f1-62c1-46f0-b297-6d8bc1d2e034",
+ "metadata": {},
+ "source": [
+ "### Install other dependencies "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2619673e-9645-4460-aa07-323d01bcd9ba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#First install java\n",
+ "!sudo apt update\n",
+ "!sudo apt-get install default-jdk -y\n",
+ "!java -version"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c24cb2d9-6260-45fc-a4c0-f55688c43e11",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Specify nexflow version and platfrom\n",
+ "! export NXF_VER=21.10.0\n",
+ "! export NXF_MODE=google\n",
+ "#Install nexflow, make it exceutable, and update it\n",
+ "! curl https://get.nextflow.io | bash\n",
+ "! chmod +x nextflow\n",
+ "! ./nextflow self-update"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "581f3b6a-b0b8-4309-a54b-ffff14450f41",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Install SRAtools to download data\n",
+ "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1bc477a9-7b3f-431e-93b7-50e96809bfc5",
+ "metadata": {},
+ "source": [
+ "## 2. Download data with SRA tools\n",
+ "If you want more work with SRA tools, check out our [SRA-focused notebook](https://github.com/STRIDES/NIHCloudLabGCP/blob/main/tutorials/notebooks/SRADownload/SRA-Download.ipynb)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "facdbaea-d6ca-4270-9ddc-7c5d042b7373",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set up directory structure\n",
+ "!mkdir -p data data/fasterqdump"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e0c5eb64-8628-4849-b077-6a3b23aaf934",
+ "metadata": {},
+ "source": [
+ "First bring in the compressed .sra file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b8ca1c0f-3844-42f8-a9e2-546178a6d961",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! prefetch -O data/raw_fastq -f yes SRR067701 --location GCP -v "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6ea6f3fa-1ce5-4c1a-b077-a5cb539e33b2",
+ "metadata": {},
+ "source": [
+ "Now convert the compressed .sra file to fastq. It will take about two minutes, so be patient. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6d7c1f2f-6d52-4f2f-b308-62d42c95ec1b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! fasterq-dump -f -e 8 -m 24G SRR067701.sra"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "282c31da-0ce9-4e21-ab3e-07e550bc5ceb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#compress the fastq files\n",
+ "! gzip data/raw_fastq/SRR067701.fastq"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "805294b9-81cc-455c-9181-20fb048fb57c",
+ "metadata": {},
+ "source": [
+ "## 3. Run methylseq with Life Sciences API"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b7c45f87-e0b6-43c5-aa55-3ee3e33978a3",
+ "metadata": {},
+ "source": [
+ "Ensure you include the following in your command:\n",
+ "- nf-core tool version [-r]\n",
+ "- Add fastq.gz file input [--input]\n",
+ "- Reference Genome [--genome] (no need to have it on hand nf-core uses iGenomes and will pull in the correct reference file)\n",
+ "- Confile file location [-c]\n",
+ "- Wanted profile [-profile]\n",
+ "- Other flags such as:\n",
+ " - If the fastq file is single-ended or not\n",
+ " - The max cpus and memory wanted\n",
+ "\n",
+ "You can recycle the nextflow.config from Part I. Since our fastq file is pretty big, it may take some time to finish."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a24cab67-be41-4b2d-a545-7e14af554022",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!./nextflow run nf-core/methylseq -r 1.6.1 \\\n",
+ " --input 'data/raw_fastq/SRR067701.fastq.gz' \\\n",
+ " --genome GRCh38 \\\n",
+ " --single_end \\\n",
+ " -c nextflow-methyseq.config \\\n",
+ " -profile gls \\\n",
+ " --max_cpus 32 \\\n",
+ " --max_memory '110.GB'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ab826f3b-391e-44fb-8197-e81fa8a9a614",
+ "metadata": {},
+ "source": [
+ "#### Check to see if files are in your output directory bucket\n",
+ "If you skipped part one, go run the first cell where you assign your bucket name to a variable. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b7484fdc-eabb-47d6-99ea-609a1574651b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil ls gs://$BUCKET/methyl-seq/outdir"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "438e8f65-e7fe-48e3-a615-e966b138c1e3",
+ "metadata": {},
+ "source": [
+ "__Optional__: View your MultiQC HTML file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "15b74ca3-c7c7-499d-af53-ffaccc9e2157",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil cp -r gs://$BUCKET/methyl-seq/outdir/MultiQC/multiqc_report.html ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "31c89604-b9a4-4f77-aa0c-67273a161130",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from IPython.display import IFrame\n",
+ "\n",
+ "IFrame(src='multiqc_report.html', width=900, height=600)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5a9d0590-c4dd-48de-822f-3de5b47af4e1",
+ "metadata": {},
+ "source": [
+ "## 4. Clean Up"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4fc86196-86dc-4b8c-a86c-b4354e58d05f",
+ "metadata": {},
+ "source": [
+ "If you want to clean up all resources associated with this tutorial then \n",
+ "+ delete your bucket with `gsutil rm -r $BUCKET`\n",
+ "+ delete this VM in either Vertex AI or Compute Engine"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m93",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb b/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb
new file mode 100644
index 0000000..70d0ebf
--- /dev/null
+++ b/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb
@@ -0,0 +1,547 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "99cfa998-06b6-4b42-ae3a-b4e011750d31",
+ "metadata": {},
+ "source": [
+ "# RNA-Seq Analysis using Snakemake and Google Cloud Life Sciences API"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4126cb07-34ee-4780-838f-872015a882b3",
+ "metadata": {},
+ "source": [
+ "## Overview"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f15ea992-faa6-4705-8384-eb5d81f5daff",
+ "metadata": {},
+ "source": [
+ "This short tutorial demonstrates how to run an RNA-Seq workflow using a prokaryotic data set. Steps in the workflow include read trimming, read QC, read mapping, and counting mapped reads per gene to quantitate gene expression. This tutorial uses a popular workflow manager called [Snakemake](https://snakemake.readthedocs.io/en/stable/) run via the [Google Cloud Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest).\n",
+ "\n",
+ " Warning: Google Life Sciences API is depreciated and has been replaced by Google Batch. Currently Snakemake only supports Google Life Sciences API which will no longer be available by July 8, 2025, visit
Snakemake Cloud Execution for updates and instruction for utilizing Google Batch.
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0b6d0785-2d13-476c-b16a-196f74ea277d",
+ "metadata": {},
+ "source": [
+ "### Step 1: Create a new GS Bucket to store input and output files\n",
+ "Note that your bucket has to be globally unique, so make sure you don't just copy the example here or it won't work"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4d3dc88f-fa0c-4e7e-972b-055321d3cdbb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#change this bucket name\n",
+ "%env BUCKET="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "17ce680c-4b8c-419c-a6c4-b6caec32d9ba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#will only create the bucket if it doesn't yet exist\n",
+ "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "91292c6d-d5a4-407d-9816-51ca52876fba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#set versioning on the bucket so it can overwrite old files\n",
+ "! gsutil versioning set on gs://$BUCKET"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd7ab630-955d-43d1-bc43-c7b3e701ed04",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### STEP 2: Install mambaforge and snakemake\n",
+ "First install mambaforge, then use mamba to install snakemake."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "682ddf88-e1d9-443f-a423-e1f85ff604a2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "de5d0630-1d85-4625-bc04-036aae11ce4a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bd5c221b-45ce-47fb-a8e2-29ceee0e296a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#install snakemake\n",
+ "! mamba install -y -c conda-forge -c bioconda snakemake"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bb0ce8d5-4b96-4e97-88ed-44e8e85f4fc0",
+ "metadata": {},
+ "source": [
+ "### STEP 3: Copy FASTQ Files\n",
+ "In order for this tutorial to run quickly, we will only analyze 50,000 reads from a sample from both sample groups instead of analyzing all the reads from all six samples. These files have been posted on a Google Storage Bucket that we made publicly accessible."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5f3795fd-3e03-476d-9abf-49705a72cc15",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/raw_fastqSub/ gs://$BUCKET/data/raw_fastq"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a2bc4563-951a-45d4-8f01-0accd6b80ea8",
+ "metadata": {},
+ "source": [
+ "Create a fake path to data/fastqc so that snakemake can write files to that bucket path, otherwise the pipeline crashes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cd2c03dd-2248-4068-8842-ba130f29adc9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! touch blank.txt\n",
+ "! gsutil cp blank.txt gs://$BUCKET/data/fastqc/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec692c28-f549-43af-bbdf-3c4266fb59ae",
+ "metadata": {},
+ "source": [
+ "### STEP 4: Copy reference files that will be used by Salmon\n",
+ "Salmon is a tool that aligns RNA-Seq reads to a set of transcripts rather than the entire genome."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "290238d6-39e0-4575-87e4-880b316ca1f6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/reference/M_chelonae_transcripts.fasta gs://$BUCKET/data/reference/M_chelonae_transcripts.fasta\n",
+ "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/reference/decoys.txt gs://$BUCKET/data/reference/decoys.txt\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ea2d17cb-dff6-45d3-9aef-3ec6203508f6",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### STEP 5: Copy data file for Trimmomatic"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0be371d5-382e-4a22-a300-2c5249eff825",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/config/TruSeq3-PE.fa gs://$BUCKET/TruSeq3-PE.fa"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5ac668db-7851-418e-9b1e-0a2c4abbab6e",
+ "metadata": {},
+ "source": [
+ "### STEP 6: Copy data and config files that will be used in our snakemake environment\n",
+ "\n",
+ "Next download config files for our snakemake environment."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1dbc460c-50af-4458-8056-c0f6146fff23",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/envs/ .\n",
+ "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/config.yaml .\n",
+ "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/snakefile_ls_api ."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ab3739b6-aa4e-439e-bd73-2ea43be1801b",
+ "metadata": {},
+ "source": [
+ "Add the bucket path to the end of your config file. Since this file was written for running snakemake locally we have to make a few edits to run on the LS API."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "737c0634-171e-489b-8cfb-e93a025cbd01",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! echo 'bucket:' >> config.yaml"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4fd4c713-8882-4833-a117-706a4b239374",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! echo ' '$BUCKET >>config.yaml"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e45fe428-b9fa-46cb-a69d-2a0e989292e1",
+ "metadata": {},
+ "source": [
+ "Add bucket path to the snakefile"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3bba277a-704a-41ab-8853-7cf324dde727",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! sed -i 's/print(SAMPLES)/BUCKET=config[\"bucket\"]/' snakefile_ls_api"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cfc635b4-ed50-4a92-8018-f402fdd563b9",
+ "metadata": {},
+ "source": [
+ "### Step 7: Set up your local environment\n",
+ "You need to generate a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) for the compute engine default service account to interact with the Life Sciences API using Snakemake. Download the key and copy it to this VM. Then assign the path of the json file to an environment variable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0e93d6ca-5afe-4f12-9401-be44ce7ac7d9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%env GOOGLE_APPLICATION_CREDENTIALS=cloud_creds.json"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e629d7a5-4ef7-408b-88ff-3c52201879a1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "os.environ[\"GOOGLE_APPLICATION_CREDENTIALS\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a04afc6c-41cc-46c9-b048-08a7677699c8",
+ "metadata": {},
+ "source": [
+ "Set your project (make sure to replace $Project with your project name)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "10f587c6-9d51-4433-bf13-bec6dabcb9d8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gcloud config set project $PROJECT"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7d3b561-7213-4b60-9f8f-c511c6fdc067",
+ "metadata": {},
+ "source": [
+ "Initialize a local git repo"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6d56605b-04bd-48fa-94c0-ba7fffdf08a2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! git init"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f56458ef-e475-4a48-b24b-e903f82eb996",
+ "metadata": {},
+ "source": [
+ "Configure conda"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f72b8fce-be20-4158-8bd5-00b2ad122414",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "conda config --set channel_priority strict"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec2c0273-c7f1-4aee-bdf3-43d5773cf2fa",
+ "metadata": {},
+ "source": [
+ "### STEP 8: Run snakemake using the Life Sciences API\n",
+ "\n",
+ "Aside from the .yaml config files which information about software, dependencies, and versions -- snakemake uses a snakefile which contains information about a workflow.\n",
+ "\n",
+ "This can be a powerful tool as it allows one to operate and think in terms of workflows instead of individual steps. You should open the snakefile to look at it further. It is composed of 'rules' we have created. Snakefiles work largely based on inputs. For a given input/output, there is an associated 'rule' that runs. Snakefiles may take a while to get the idea of what's going on, but in simplest terms here we take an input of .fastq files, and based on the snakefile rules we created, those fastq files are run through the entire workflow. The rule_all at the top determines which rules are run based on the input files for rule_all (which are outputs from the target rules. Comment out rules you don't want to run. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d8bf3f71-e394-41c6-9694-b5d4b24cb265",
+ "metadata": {},
+ "source": [
+ "Snakemake requires that you have a service account key to authenticate with the Life Sciences API. This actually is not necessary to use the API from within a notebook, but Snakemake does require it since Snakemake is expecting you to run the command from your own terminal using the SDK. To see all the commands you can run with Snakemake via the Life Sciences API, check out the [docs](https://snakemake.readthedocs.io/en/stable/executor_tutorial/google_lifesciences.html)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "67c95e75-1619-4694-9411-95edc9f4cee4",
+ "metadata": {},
+ "source": [
+ "Now we can run the Life Sciences APi. You will see that each rule is submitted as a separate job. If the pipeline crashes, the way to troubleshoot is by reading the API logs, or the snakemake rule logs (same info). You can find the Life Sciences API logs by pasting in the gcloud command given in yellow.\n",
+ "\n",
+ "For example: \n",
+ "```\n",
+ "gcloud beta lifesciences operations describe \n",
+ "```\n",
+ "Or you can view the logs by finding the path given for logs, and then use gsutil to copy that file locally, or go to the bucket and double click the file. You can get the job ID for the output file in the green section of the rule print out."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bee32318-33df-43b2-98bc-5eb091ceae59",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! snakemake --forceall --snakefile snakefile_ls_api --google-lifesciences --default-remote-prefix $BUCKET --use-conda --google-lifesciences-region us-central1 -j 24 --rerun-incomplete --default-resources \"machine_type=n2-standard\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "df9deb0a-1030-4839-aa16-37c3b32a2c87",
+ "metadata": {},
+ "source": [
+ "### STEP 9: Report the top 10 most highly expressed genes in the samples."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d50f9bd2-dbd2-467f-a9b6-313e63ad304b",
+ "metadata": {},
+ "source": [
+ "Top 10 most highly expressed genes in the wild-type sample. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n",
+ "`Name Length EffectiveLength TPM NumReads`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0676cbbc-9392-41d1-ab57-e2b4f3cc9aad",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil rm gs://$BUCKET/data/quants/SRR13349122_quant\n",
+ "! gsutil rm gs://$BUCKET/data/quants/SRR13349128_quant"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b032ce69-f62d-4f5f-90a3-68c2979d9a85",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil ls gs://$BUCKET/data/quants/*"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c98fd827-6829-400d-af8c-969ad196c3d2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil cp -r gs://$BUCKET/data/quants/SRR13349122_quant/ .\n",
+ "! gsutil cp -r gs://$BUCKET/data/quants/SRR13349128_quant/ ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7776f671-30a0-4ba8-a9cc-e3434d40cc48",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! sort -nrk 5,5 SRR13349122_quant/quant.sf | head -10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "678efdde-1782-4481-9240-054c34528163",
+ "metadata": {},
+ "source": [
+ "Top 10 most highly expressed genes in the double lysogen sample.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1ceee200-b741-4954-b950-85edec98eb90",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! sort -nrk 5,5 SRR13349128_quant/quant.sf | head -10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "50169f62-e707-4d84-b301-ded51a704130",
+ "metadata": {},
+ "source": [
+ "### STEP 10: Report the expression of a putative acyl-ACP desaturase (BB28_RS16545) that was downregulated in the double lysogen relative to wild-type\n",
+ "A acyl-transferase was reported to be downregulated in the double lysogen as shown in the table of the top 20 upregulated and downregulated genes from the paper describing the study.\n",
+ "![RNA-Seq workflow](images/table-cushman.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5b3794b0-a477-45fa-aa51-4414d7671441",
+ "metadata": {},
+ "source": [
+ "Use `grep` to report the expression in the wild-type sample. The fields in the Salmon `quant.sf` file are as follows. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n",
+ "`Name Length EffectiveLength TPM NumReads`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a3cb9340-682b-4177-837d-7d803a9775a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! grep 'BB28_RS16545' SRR13349122_quant/quant.sf"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "79ba6401-261d-43e9-b831-ef76122da623",
+ "metadata": {},
+ "source": [
+ "Use `grep` to report the expression in the double lysogen sample. The fields in the Salmon `quant.sf` file are as follows. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n",
+ "`Name Length EffectiveLength TPM NumReads`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "745ea1c5-79d3-481c-9359-6e0a93b9a286",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! grep 'BB28_RS16545' SRR13349128_quant/quant.sf"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m110",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/README.md b/tutorials/notebooks/README.md
new file mode 100644
index 0000000..415ded9
--- /dev/null
+++ b/tutorials/notebooks/README.md
@@ -0,0 +1,128 @@
+# GCP Tutorial Resources
+
+_We have pulled together a variety of tutorials here from disparate sources. Some use Compute Engine, others use Vertex AI notebooks and others use only managed services. Tutorials are organized by research method, but we try to designate what GCP services are used as well to help you navigate._
+---------------------------------
+## Overview of Page Contents
+
++ [Biomedical Workflows on GCP](#bds)
++ [Artificial Intelligence and Machine Learning](#ml)
++ [Medical Imaging](#mi)
++ [Download SRA Data](#sra)
++ [Variant Calling](#vc)
++ [VCF Query](#vcf)
++ [GWAS](#gwas)
++ [Proteomics](#pro)
++ [RNAseq and Transcriptome Assembly](#rna)
++ [scRNAseq](#sc)
++ [ATACseq and scATACseq](#atac)
++ [Methylseq](#ms)
++ [Metagenomics](#meta)
++ [Multiomics and Biomarker Analysis](#mo)
++ [BLAST+](#bl)
++ [Long Read Sequencing Analysis](#long)
++ [Drug Discovery](#atom)
++ [Using Google Batch](#gbatch)
++ [Using the Life Sciences API (depreciated)](#lsapi)
++ [Public Data Sets](#pub)
+
+## **Biomedical Workflows on GCP**
+There are a lot of ways to run workflows on GCP. Here we list a few possibilities each of which may work for different research aims. As you walk through the various tutorials below, think about how you could possibly run that workflow more efficiently using one of the other methods listed here.
+
+- The simplest method is probably to spin up a Compute Engine instance, and run your command interactively, or using `screen` or, as a [startup script](https://cloud.google.com/compute/docs/instances/startup-scripts/linux) attached as metadata.
+- You could also run your pipeline via a Vertex AI notebook, either by splitting out each command as a different block, or by running a workflow manager (Nextflow etc.). [Schedule notebooks](https://codelabs.developers.google.com/vertex_notebook_executor#0) to let them run longer.
+You can find a nice tutorial for using managed notebooks [here](https://codelabs.developers.google.com/vertex_notebook_executor#0). Note that there is now a difference between `managed notebooks` and `user managed notebooks`. The `managed notebooks` have more features and can be scheduled, but give you less control about conda environments/install.
+- You can interact with [Google Batch](https://cloud.google.com/batch/docs/get-started), or the [Google Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest) using a workflow manager like [Nextflow](https://cloud.google.com/life-sciences/docs/tutorials/Nextflow), [Snakemake](https://snakemake.github.io/snakemake-plugin-catalog/plugins/executor/googlebatch.html), or [Cromwell](https://github.com/GoogleCloudPlatform/rad-lab/tree/main/modules/genomics_cromwell). We currently have example notebooks for both [Nextflow and Snakemake that use the Life Sciences API](/notebooks/LifeSciencesAPI/), as well as [Google Batch with Nextflow](/notebooks/GoogleBatch/Nextflow) as well as a [local version of Snakemake run via Pangolin](/notebooks/pangolin).
+- You may find other APIs better suite your needs such as the [Google Cloud Healthcare Data Engine](https://cloud.google.com/healthcare).
+- Most of the notebooks below require just a few CPUs. Start small (maybe 4 CPUs), then scale up as needed. Likewise, when you need a GPU, start with a smaller or older generation GPU (e.g. T4) for testing, then switch to a newer GPU (A100/V100) once you know things will work or you need more compute power.
+
+## **Artificial Intelligence and Machine Learning**
+Machine learning is a subfield of artificial intelligence that focuses on the development of algorithms and models that enable computers to learn from and make predictions or decisions based on data, without being explicitly programmed. Machine learning on GCP generally occurs within VertexAI. You can learn more about machine learning on GCP at this [Google Crash Course](https://developers.google.com/machine-learning/crash-course). For hands-on examples, try out [this module](https://github.com/NIGMS/COVIDMachineLearningSFSU) developed by San Francisco State University or [this one from the University of Arkasas](https://github.com/NIGMS/MachineLearningUA) developed for the NIGMS Sandbox Project.
+
+Now that the age of **Generative AI** (Gen AI) has arrived, Google has released a host of Gen AI offerings within the Vertex AI suite. Some examples of what generative AI models are capable of are extracting wanted information from text, transforming speech into text, generating images from descriptions and vice versa, and much more. Vertex AI's [Vertex AI Studio](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/generative-ai-studio) console allows the user to rapidly create, test, and train generative AI models on the cloud in a safe and secure setting, see our overview in [this tutorial](/notebooks/GenAI/VertexAIStudioGCP.ipynb). The studio also has ready-to-use models all contained within the [Model Garden](https://cloud.google.com/vertex-ai/docs/start/explore-models). These models range from foundation models, fine-tunable models, and task-specific solutions.
+- To learn more about Gen AI on GCP take a look at our [GenAI tutorials](/notebooks/GenAI) that go over several GCP products such as [Gemini](/notebooks/GenAI/Gemini_Intro.ipynb) and [Vector Search](/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb) and other tools like [Langchain](/notebooks/GenAI/langchain_on_vertex.ipynb) and [Huggingface](/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb) to deploy, train, prompt, and implement techniques like [Retrieval-Augmented Generation (RAG)](/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb) to GenAI models.
+- Google also provides many generative AI tutorials hosted on [GitHub](https://github.com/GoogleCloudPlatform/generative-ai/tree/main). Some example they provide are under [language here](https://github.com/GoogleCloudPlatform/generative-ai/tree/main/language).
+
+## **Medical Image Segmentation**
+Medical image analysis is the application of computational algorithms and techniques to extract meaningful information from medical images for diagnosis, treatment planning, and research purposes. Medical image analysis requires large image files and often elastic storage and accelerated computing.
+- Most medical imaging analyses are done in notebooks, so we would recommend downloading the Jupyter Notebook from [here](/notebooks/SpleenLiverSegmentation) and then importing or cloning it into VertexAI. The tutorial walks through image segmentation using the Monai framework.
+- You can also request early access to the new [Google Medical Imaging Suite](https://cloud.google.com/medical-imaging) to see if it would fit your use case.
+
+## **Download Data From the Sequence Read Archive (SRA)**
+Next Generation genetic sequence data is housed in the NCBI Sequence Read Archive (SRA). You can access these data using the SRA Toolkit. We walk you through this using [this notebook](/notebooks/SRADownload), including how to use BigQuery to generate your list of Accessions. You can also use BigQuery to create a list of accessions for download using [this setup guide](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery/) and this [query guide](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery-examples/). Additional example notebooks can be found at this [NCBI repo](https://github.com/ncbi/ASHG-Workshop-2021). In particular, we recommend this notebook(https://github.com/ncbi/ASHG-Workshop-2021/blob/main/1_Basic_BigQuery_Examples.ipynb), which goes into more detail on using BigQuery to access the results of the SRA Taxonomic Analysis Tool, which often differ from the user input species name due to contamination, error, or due to samples being metagenomic in nature. Further, [this notebook](https://github.com/ncbi/ASHG-Workshop-2021/blob/main/2_Array_Examples.ipynb) does a deep dive on parsing the BigQuery results and may give you some good ideas on how to search for samples from SRA. The SRA metadata and taxonomy analyses are in separate BigQuery tables, you can learn how to join those two tables using SQL from [this Powerpoint](https://github.com/NCBI-Codeathons/NCGAS-cloud-workshop/blob/main/5_BigQuery.pptx) or from our tutorial [here](/notebooks/ncbi-stat-tutorial/). Finally, NCBI released [this workshop](https://github.com/ncbi/workshop-asm-ngs-2022/wiki) that walks through a wide variety of BigQuery applications with NCBI datasets.
+
+## **Variant Calling**
+Genomic variant calling is the process of identifying and characterizing genetic variations from DNA sequencing data to understand differences in an individual's genetic makeup.
+- This [Google tutorial](https://cloud.google.com/life-sciences/docs/tutorials/gatk) shows you how to run the GATK Best Practices pipeline for genomic variant calling using the Life Sciences API. There is a section about increasing your account quotas, you can skip that. You could also run GATK using any of the workflow managers and submitting to the Life Sciences API.
+- One tutorial specific to somatic variant calling comes from the Sheffield Bioinformatics Core [here](https://sbc.shef.ac.uk/somatic-variants/index.nb.html). It runs on Galaxy, but can be adapted to run in GCP. At the very least, the [data](https://drive.google.com/drive/folders/1RhrmfW3vMhPwAiBGdFIKfINWMsdvIG6E) may prove useful to you.
+
+## **Query a VCF file in Big Query**
+The output of genomic variant calling workflows is a file in the variant call format (VCF). These are often large, structured data files that can be searched using database query tools such as Big Query.
+- Learn how to use Big Query to run queries against large VCF files from Gnomad data using [this notebook](https://github.com/GoogleCloudPlatform/rad-lab/blob/main/modules/data_science/scripts/build/notebooks/Exploring_gnomad_on_BigQuery.ipynb). If any cells give you errors, try running that cell again and it should work, there seems to be some lag time between cells.
+
+## **Genome Wide Association Studies**
+Genome-wide association studies (GWAS) are large-scale investigations that analyze the genomes of many individuals to identify common genetic variants associated with traits, diseases, or other phenotypes.
+- This [NIH CFDE written tutorial](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud
+) walks you through running a simple GWAS using AWS, thus we have rewritten it as a notebook to work on GCP [here](/notebooks/GWASCoatColor). Make sure you select R as your kernel when you spin up your notebook so that you can switch between R and Python (this only applies to 'User Managed Notebooks') but note that our team experienced conda permission issues with the new Managed Notebooks for this tutorial, so we recommend using the 'User Managed Notebooks'. Also, if the imported notebook has cells already printed out, just go to Kernel > Restart Kernel and Clear all Outputs.
+- [This tutorial](https://github.com/david-thrower-nih/DL-gwas-gcp-example) from NIH NIEHS (credit to David Thrower) builds on a published deep learning method for GWAS of soybeans and users Kubeflow and AutoML on a Kubernetes instance.
+
+## **Proteomics**
+Proteomics is the study of the entire set of proteins in a cell, tissue, or organism, aiming to understand their structure, function, and interactions to uncover insights into biological processes and diseases. Although most primary proteomic analyses occur in proprietary software platforms, a lot of secondary analysis happens in Jupyter or R notebooks, we give several examples here:
+- Use Big Query to run a Kruskal Wallis Test on Proteomics data using [these notebooks](https://github.com/isb-cgc/Community-Notebooks/tree/master/FeaturedNotebooks). Clone the repo into Vertex AI, or just drag the notebooks into a Vertex AI Workbench instance. In the notebook titled 'ACM_BCB_2020_POSTER_KruskalWallisTest_ProteinGeneExpression_vs_ClinicalFeatures.ipyng', the first BigQuery cell may throw an error, but ignore this and keep going, the rest of the notebook should run fine. Also, in that first big cell, make sure you add your Project ID. See this [doc](/docs/protein_setup.md) for environment setup instructions.
+- Run AlphaFold in Vertex AI using [this notebook](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/community-content/alphafold_on_workbench/AlphaFold.ipynb). Make sure you have a GPU for your notebook instance, and follow [these instructures](https://cloud.google.com/blog/products/ai-machine-learning/running-alphafold-on-vertexai) for setting up your environment. Namely, under Environment, select `Custom container`, and then for `Docker container image` paste in the following: `west1-docker.pkg.dev/cloud-devrel-public-resources/alphafold/alphafold-on-gcp:latest`.
+- Conduct secondary analysis of Proteomic data using this [NIGMS Sandbox notebook](https://github.com/NIGMS/ProteomicsUAMS), developed by the University of Arkansas for Medical Sciences.
+
+## **RNAseq and Transcriptome Assembly**
+RNA-seq analysis is a high-throughput sequencing method that allows the measurement and characterization of gene expression levels and transcriptome dynamics. Workflows are typically run using workflow managers, and final results can often be visualized in notebooks.
+- You can run this [Nextflow tutorial](https://nf-co.re/rnaseq/3.7) for RNAseq a variety of ways on GCP. Following the instructions outlined above, you could use Compute Engine, [Life Sciences API](https://cloud.google.com/life-sciences/docs/tutorials/Nextflow), or a Vertex AI notebook.
+- For a notebook version of a complete RNAseq pipeline from Fastq to Salmon quantification go through these tutorials from the [NIGMS Sandbox Project](https://github.com/NIGMS/RNAseqUM) developed by The University of Maine.
+- Likewise, [This multi-omics module](https://github.com/NIGMS/MultiomicsUND) from the University of North Dakota includes an RNAseq component.
+
+Transcriptome assembly is the process of reconstructing the complete set of RNA transcripts in a cell or tissue from fragmented sequencing data, providing valuable insights into gene expression and functional analysis.
+- [This module](https://github.com/NIGMS/rnaAssemblyMDI) developed by the MDI Biological Laboratory for the NIGMS Sandbox Project walks you through transcriptome assembly using Nextflow.
+
+## **Single Cell RNAseq**
+Single-cell RNA sequencing (scRNA-seq) is a technique that enables the analysis of gene expression at the individual cell level, providing insights into cellular heterogeneity, identifying rare cell types, and revealing cellular dynamics and functional states within complex biological systems.
+- This [NVIDIA blog](https://developer.nvidia.com/blog/accelerating-single-cell-genomic-analysis-using-rapids/) details how to run an accelerated scRNAseq pipeline using RAPIDS. You can find a link to the GitHub repository that has lots of example notebooks [here](https://github.com/clara-parabricks/rapids-single-cell-examples). For each example use case they show some nice benchmarking data with time and cost for each machine type. You will see that most runs cost less than $1.00 with GPU machines. Pay careful attention to the environment setup as there are a lot of dependencies for these notebooks.
+- The [Scanpy tutorials](https://scanpy.readthedocs.io/en/stable/tutorials.html) page has a lot of good CPU-based examples you could run in Vertex AI. Clone this [GitHub repo](https://github.com/scverse/scanpy-tutorials) to get the notebooks directly.
+- Alternatively, here is a [GitHub repository](https://github.com/mdozmorov/scRNA-seq_notes) with a curated list of scRNAseq resources and tutorials. We did not test these in Cloud Lab, but wanted to make them available in case you needed additional resources.
+
+## **ATACseq and Single Cell ATACseq**
+ATAC-seq is a technique that allows scientists to understand how DNA is packaged in cells by identifying the regions of DNA that are accessible and potentially involved in gene regulation.
+-[This module](https://github.com/NIGMS/atacseqUNMC) walks you through how to work through an ATACseq and single-cell ATACseq workflow on Google Cloud. The module was developed by the University of Nebraska Medical Center for the NIGMS Sandbox Project.
+
+## **Methylseq**
+As one of the most abundant and well-studied epigenetic modifications, DNA methylation plays an essential role in normal cell development and has various effects on transcription, genome stability, and DNA packaging within cells. Methylseq is a technique to identify methylated regions of the genome.
+- The University of Hawai'i at Manoa developed [this set of notebooks](https://github.com/NIGMS/MethylSeqUH) that walk you through a Methylseq analysis as part of the NIGMS Sandbox Program.
+
+## **Metagenomics**
+Metagenomics is the study of genetic material collected directly from environmental samples, enabling the exploration of microbial communities, their diversity, and their functional potential, without the need for laboratory culturing.
+-[This module](https://github.com/NIGMS/MetagenomicsUSD) walks you through conducting a metagenomic analysis using command line and Nextflow. The module was developed by the University of South Dakota as part of the NIGMS Sandbox Project.
+
+## **Multiomic Analysis and Biomarker Discovery**
+Multiomic analysis involves integrating data across modalities (e. g. genomic, transcriptomic, phenotypic) to generate additive insights.
+- [This set of notebooks](https://github.com/NIGMS/MultiomicsUND) gives you an example of conducting multiomic analysis in Jupyter notebooks and was developed by the University of North Dakota as part of the NIGMS Sandbox Project.
+
+Biomarker discovery is the process of identifying specific molecules or characteristics that can serve as indicators of biological processes, diseases, or treatment responses, aiding in diagnosis, prognosis, and personalized medicine. Biomarker discovery is typically conducted through comprehensive analysis of various types of data, such as genomics, proteomics, metabolomics, and clinical data, using advanced techniques including high-throughput screening, bioinformatics, and statistical analysis to identify patterns or signatures that differentiate between healthy and diseased individuals, or responders and non-responders to specific treatments.
+- [This module](https://github.com/NIGMS/BiomarkersURI), developed by the University of Rhode Island for the NIGMS Sandbox Project, walks you through conducting some common biomarker discovery analyses in R.
+
+## **BLAST+**
+NCBI BLAST (Basic Local Alignment Search Tool) is a widely used bioinformatics program provided by the National Center for Biotechnology Information (NCBI) that compares nucleotide or protein sequences against a large database to identify similar sequences and infer evolutionary relationships, functional annotations, and structural information.
+- This [Common Data Fund](https://training.nih-cfde.org/en/latest/Cloud-Platforms/Introduction-to-GCP/gcp3/) tutorial explains how to use basic BLAST on GCP.
+- We also rewrote [this ElastBLAST tutorial](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/quickstart-gcp.html) as a [notebook](/notebooks/elasticBLAST) that will work in VertexAI.
+
+## **Long Read Sequence Analysis**
+Long read DNA sequence analysis involves analyzing sequencing reads typically longer than 10 thousand base pairs (bp) in length, compared with short read sequencing where reads are about 150 bp in length. Oxford Nanopore has a pretty complete offering of notebook tutorials for handling long read data to do a variety of things including variant calling, RNAseq, Sars-Cov-2 analysis and much more. You can find a list and description of notebooks [here](https://labs.epi2me.io/nbindex/), or clone the [GitHub repo](https://github.com/epi2me-labs). Note that these notebooks expect you are running locally and accessing the epi2me notebook server. To run them in Cloud Lab, skip the first cell that connects to the server and then the rest of the notebook should run correctly, with a few tweaks.
+
+## **Drug Discovery**
+The [Accelerating Therapeutics for Opportunities in Medicine (ATOM) Consortium](https://atomscience.org/) created a series of [Jupyter notebooks](https://github.com/ATOMScience-org/AMPL/tree/master/atomsci/ddm/examples/tutorials) that walk you through the ATOM approach to Drug Discovery.
+
+These notebooks were created to run in Google Colab, so if you run them in Google Cloud, you will need to make a few modification. First, we recommend you use a [Google Managed Notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/introduction) rather than a User-Managed notebook simply because the Google Managed notebooks already have Tensorflow and other dependencies installed. Be sure to attach a GPU to your instance (T4 is fine). Also, you will need to comment out `%tensorflow_version 2.x` since that is a Colab-specific command. You will also need to `pip install` a few packages as needed. If you get errors with `deepchem`, try running `pip install --pre deepchem[tensorflow]` and/or `pip install --pre deepchem[torch]`. Also, some notebooks will require a Tensorflow kernel, while others require Pytorch. You may also run into a Pandas error, reach out to the ATOM GitHub developers for the best solution to this issue.
+
+## **Using Google Batch**
+You can interact with Google Batch directly to submit commands, or more commonly you can interact with it through orchestration engines like [Nextflow](https://www.Nextflow.io/docs/latest/google.html) and [Cromwell](https://cromwell.readthedocs.io/en/latest/backends/GCPBatch/), etc. We have tutorials that utilize Google Batch using [Nextflow](/notebooks/GoogleBatch/Nextflow) where we run the nf-core Methylseq pipeline, as well as several from the NIGMS Sandbox including [transcriptome assembly](https://github.com/NIGMS/rnaAssemblyMDI), [multiomics](https://github.com/NIGMS/MultiomicsUND), [methylseq](https://github.com/NIGMS/MethylSeqUH), and [metagenomics](https://github.com/NIGMS/MetagenomicsUSD).
+
+## **Using the Life Sciences API (depreciated)**
+__Life Science API is depreciated on GCP and will no longer be available by July 8, 2025 on the platform,__ we recommend using Google Batch instead. For now you can still interact with the Life Sciences API directly to submit commands, or more commonly you can interact with it through orchestration engines like [Snakemake](https://snakemake.readthedocs.io/en/v7.0.0/executor_tutorial/google_lifesciences.html), as of now this workflow manager only supports Life Sciences API.
+
+## **Public Data Sets**
+Google has a lot of public datasets available that you can use for your testing. These can be viewed [here](https://cloud.google.com/life-sciences/docs/resources/public-datasets) and can be accessed via [BigQuery](https://cloud.google.com/bigquery/public-data) or directly from the cloud bucket. For example, to view Phase 3 1k Genomes at the command line type `gsutil ls gs://genomics-public-data/1000-genomes-phase-3`.
diff --git a/tutorials/notebooks/SRADownload/SRA-Download.ipynb b/tutorials/notebooks/SRADownload/SRA-Download.ipynb
new file mode 100644
index 0000000..3e6435e
--- /dev/null
+++ b/tutorials/notebooks/SRADownload/SRA-Download.ipynb
@@ -0,0 +1,455 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1651316c",
+ "metadata": {},
+ "source": [
+ "# Download sequence data from the NCBI Sequence Read Archive (SRA)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15022f97",
+ "metadata": {},
+ "source": [
+ "## Overview\n",
+ "\n",
+ "DNA sequence data are typically deposited into the NCBI Sequence Read Archive, and can be accessed through the SRA website, or via a collection of command line tools called SRA Toolkit. Individual sequence entries are assigned an Accession ID, which can be used to find and download a particular file. For example, if you go to the [SRA database](https://www.ncbi.nlm.nih.gov/sra) in a browser window, and search for `SRX15695630`, you should see an entry for _C. elegans_. Alternatively, you can search the SRA metadata dataset in BigQuery to generate a list of accession numbers. Here we are going to generate a list of accessions using Big Query, use tools from the SRA Toolkit to download a few fastq files, then copy those fastq files to a cloud bucket."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3b500763",
+ "metadata": {},
+ "source": [
+ "### 1) Install Dependencies"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "01213dae",
+ "metadata": {},
+ "source": [
+ "Install dependencies, including mamba (you could also use conda). At the time of writing, the version of SRA tools available with the Anaconda distribution was v.2.11.0. If you want to install the latest version, download and install from [here](https://github.com/ncbi/sra-tools/wiki/01.-Downloading-SRA-Toolkit). If you do the direct install, you will also need to configure interactively following [this guide](https://github.com/ncbi/sra-tools/wiki/05.-Toolkit-Configuration), you can do that by opening a terminal and running the commands there."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2fd7a16a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "!bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ada33d36-b24a-4a9b-837e-ec42075ac440",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8f7e349b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b8c010c2",
+ "metadata": {},
+ "source": [
+ "Test that your install works and that fasterq-dump is available in your path"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6e507538",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!fasterq-dump -h"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7d8d3512-5307-42f7-9405-495fe1ca5be2",
+ "metadata": {},
+ "source": [
+ "### 2) Setup Directory Structure"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e3265f75-ebf7-4d90-8f4d-a486df5cb693",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pwd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f94e4215",
+ "metadata": {},
+ "source": [
+ "Set up your directory structure for the raw fastq data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9aa93698-a082-4c11-9d48-0abe775fbcc5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! mkdir -p data data/fasterqdump/raw_fastq data/prefetch_fasterqdump/raw_fastq"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b068c9da-7814-4b24-9ff8-12473048bdcf",
+ "metadata": {},
+ "source": [
+ "### 3) Create Accession List using BigQuery"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bc30c134-c903-4605-82d4-babdaaae30c0",
+ "metadata": {},
+ "source": [
+ "Here we use BigQuery to generate a list of accessions. You can also generate a manual list by searching the [SRA Database](https://www.ncbi.nlm.nih.gov/sra) and saving to a file or list."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d2c3ec94-16cd-43b6-a4c9-d56aa593382e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import the biquery api\n",
+ "from google.cloud import bigquery\n",
+ "import pandas"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "243fb23b-ec7e-423f-a531-9f39a1954087",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Designate the client for the API\n",
+ "client = bigquery.Client(location=\"US\")\n",
+ "print(\"Client creating using default project: {}\".format(client.project))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "df380099-d6ee-43b5-8719-66b7a7b41916",
+ "metadata": {},
+ "source": [
+ "Let's download bacterial samples, one of which happens to come from a swab of a sea horse. You could change the SQL query as you like, feel free to take a look at the generated df, and then play with different parameters. For more inspiration, look at this [SRA tutorial](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery-examples/) or our other [BigQuery notebook](https://github.com/STRIDES/NIHCloudLabGCP/tree/main/tutorials/notebooks/SRA_and_BigQuery)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2eb8d3f3-6a18-40a0-b9fe-7ab4c285b7db",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "query = \"\"\"\n",
+ "#standardSQL\n",
+ "SELECT *\n",
+ "FROM `nih-sra-datastore.sra.metadata`\n",
+ "WHERE organism = 'Mycobacteroides chelonae' \n",
+ "limit 3\n",
+ "\"\"\"\n",
+ "query_job = client.query(\n",
+ " query,\n",
+ " # Location must match that of the dataset(s) referenced in the query.\n",
+ " location=\"US\",\n",
+ ") # API request - starts the query\n",
+ "\n",
+ "df = query_job.to_dataframe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e049fdce-7ed7-43f4-a4d5-6811dd590dd5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4dfe9c32-817b-4e9c-901f-d27b98b95db2",
+ "metadata": {},
+ "source": [
+ "As you can see, most of what you need to know is shown in this data frame. If you wanted to just show the accession, you could replace the * for acc in the SELECT command. One other thing to think about, is how large are these files, and do you have space on your VM to download them? You can figure this out by looking at the 'jattr' column, and then converting the number of bites to GB, then add that for a few samples to get a ballpark figure. If you need more space, stop the VM, go Compute Engine and either [resize your disk](https://cloud.google.com/compute/docs/disks/resize-persistent-disk) or add a disk. You can see the amount of space on your disk from the command line using `!df -h .`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b7ca8b00-a467-4e70-a63e-faf6c53f6b6f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df['jattr'][0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ab7d464a-ea2d-42d8-bb01-ee601e7a68cb",
+ "metadata": {},
+ "source": [
+ "You can also get the same info using `vdb-dump --info ` although that command does not always work as expected. You can also get the path for the sra compressed file in a bucket using `srapath `."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f98a04b7-4bd5-40e5-9860-65c0c0d48283",
+ "metadata": {},
+ "source": [
+ "Save our accession list to a text file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2693f4f3-4ebf-41d7-95d6-8a23456897d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "with open('list_of_accessionIDS.txt', 'w') as f:\n",
+ " accs = df['acc'].to_string(header=False, index=False)\n",
+ " f.write(accs)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d5bda88c-1263-497f-bb9c-b949a8ff5272",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cat list_of_accessionIDS.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a53f13c3-6b62-4408-84d8-ebad27c2eedb",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### 4) Download FASTQ Files with fasterq dump"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c5e261a3-54f4-4c30-8aee-4808afdc6251",
+ "metadata": {},
+ "source": [
+ "Fasterq-dump is the replacement for the legacy fastq-dump tool. You can read [this guide](https://github.com/ncbi/sra-tools/wiki/HowTo:-fasterq-dump) to see the full details on this tool. You can also run `fasterq-dump -h` to see most of the options"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ea5f7b67",
+ "metadata": {},
+ "source": [
+ "Fasterq dump doesn't run in batch mode, so one way to run a command on multiple samples is by using a for loop. There are many options you can explore, but here we are running -O for outdir, -e for the number of threads, -m for memory (4GB), and --location for the location we want to retrieve the file from. Depending on the type of cloud storage, it may be faster to select `NCBI` for the location. You may consider running a few tests with one or two of your accession numbers before downloading a whole batch. The default number of threads = 6, so adjust -e based on your machine size. For large files, you may also benefit from a machine type with more memory and/or threads. You may need to stop this VM, resize it, then restart and come back. There are also a bunch of ways to split your fastq files (defined [here](https://github.com/ncbi/sra-tools/wiki/HowTo:-fasterq-dump)) but the default of `split 3` will split into forward, reverse, and unpaired reads."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "96307376",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! for x in `cat list_of_accessionIDS.txt`; do fasterq-dump -f -O data/raw_fastq -e 8 -m 4G $x ; done"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2e26c03-eeb9-4340-89e7-1eb82c9e32bb",
+ "metadata": {},
+ "source": [
+ "### 5) Download FASTQ files with prefetch + fasterq dump"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00ef5310-539e-4d21-bd5d-05bf41986c47",
+ "metadata": {},
+ "source": [
+ "Using the example bacterial data, fasterq dump takes about 3.5 min to download the files. Under the hood, fasterq dump is pulling the compressed sra files from the database and converting them on the fly, which is slow (ish) because it has to do a lot over the network. A better, though less advertised method, is to disaggregate these functions using prefetch to pull the compressed files, then fasterq-dump to convert them locally, rather than over the network. For this to work, you need to either give the path to the prefetch directories in your text file, or make sure you cd into the raw_fastq dir so that it can find those directories with the .sra files. In this case, --location GCP is a lot faster than NCBI, but feel free to run your own tests with different locations."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "81e5fd57-2cb0-42f7-88c5-4f2f7ea4a1ea",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! prefetch --option-file list_of_accessionIDS.txt -O data/prefetch_fasterqdump/raw_fastq/ -f yes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2dafb175-67ea-4b70-a4f5-5e98737cece2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ls data/prefetch_fasterqdump/raw_fastq/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fe02bb95-c9b0-494a-a187-c1b955f2788e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%time\n",
+ "! for x in `cat list_of_accessionIDS.txt`; do fasterq-dump -f -O data/prefetch_fasterqdump/raw_fastq/ -e 8 -m 4G data/prefetch_fasterqdump/raw_fastq/$x; done"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d1b5b0c8-ffb0-4e44-9178-f80e701d16cb",
+ "metadata": {},
+ "source": [
+ "Comparing the two methods, we can see that fasterq-dump on its own took 3.5 min, whereas prefetch + fasterq-dump takes less than 40 seconds."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "22d262cb-d49f-4e33-b461-e4f5b9c778b7",
+ "metadata": {},
+ "source": [
+ "### Step 6) Copy Files to a Bucket"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1db9e5a6-db09-4923-a9df-feb2cd6d5e13",
+ "metadata": {},
+ "source": [
+ "Create a new bucket, or give the path to an existing bucket"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a6703fae-2752-4717-93be-fd8d3e0b41d6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil mb gs://cloud-lab-tutorials_sra/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6c8d5b92-80dc-4d99-8f6f-88200eb98815",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ls data/prefetch_fasterqdump/raw_fastq/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9ec2ea15-b0fb-4ce2-8093-972d348c988c",
+ "metadata": {},
+ "source": [
+ "Using `-m` allows multithreading, `-r` would allow for recursive copy of a directory, but here we are just giving the path to fastq files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a17ff514-bbac-4974-afeb-9eb847ba857f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil -m cp data/prefetch_fasterqdump/raw_fastq/*.fastq gs://cloud-lab-tutorials_sra/raw_fastq/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d97b47b-830d-49ee-8add-c2c9fd4e41d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! gsutil ls gs://cloud-lab-tutorials_sra/raw_fastq/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e8979484-117f-465d-b134-36372a8c8bfc",
+ "metadata": {},
+ "source": [
+ "### Step 7) Clean up\n",
+ "Make sure you shut down this VM, or delete it if you don't plan to use if further."
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m110",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/SpleenLiverSegmentation/README.md b/tutorials/notebooks/SpleenLiverSegmentation/README.md
new file mode 100644
index 0000000..976552f
--- /dev/null
+++ b/tutorials/notebooks/SpleenLiverSegmentation/README.md
@@ -0,0 +1,49 @@
+# Spleen Segmentation with Liver Example using NVIDIA Models and MONAI
+_We have put together a training example that segments the Spleen in 3D CT Images. At the end is an example of combining both the Spleen model and the Liver model._
+
+*Nvidia has changed some of the models used in this tutorial and it may crash, if you have issues, try commenting out the liver model, we are working on a patch*
+
+## Introduction
+Two pre-trained models from NVIDIA are used in this training, a Spleen model and Liver.
+The Spleen model is additionally retrained on the medical decathlon spleen dataset: [http://medicaldecathlon.com/](http://medicaldecathlon.com/)
+Data is not necessary to be downloaded to run the notebook. The notebook downloads the data during it's run.
+The notebook uses the Python package [MONAI](https://monai.io/), the Medical Open Network for Artificial Intelligence.
+
+- Spleen Model - [clara_pt_spleen_ct_segmentation_V2](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/monaitoolkit/models/monai_spleen_ct_segmentation)
+- Liver Model - [clara_pt_liver_and_tumor_ct_segmentation_V1]()
+
+## Outcomes
+After following along with this notebook the user will be familiar with:
+- Downloading public datasets using MONAI
+- Using MONAI transformations for training
+- Downloading a pretrained NVIDIA Clara model using MONAI
+- Retrain model using MONAI
+- Visualizing medical images in python/matplotlib
+
+## Installing MONAI
+Please follow the [instructions](https://monai.io/started.html#installation) on MONAI's website for up to date install.
+Installing MONAI in a notebook environment can be completed with the commands:
+- !python -c "import monai" || pip install -q 'monai[all]'
+- !python -c "import matplotlib" || pip install -q matplotlib
+
+## Dependencies
+_It is recommended to use an NVIDIA GPU for training. If the user does not have access to a NVIDIA GPU then it is recommended to skip the training cells._
+
+The following packages and versions were installed during the testing of this notebook:
+- MONAI version: 0.8.1
+- Numpy version: 1.21.1
+- Pytorch version: 1.9.0
+- Pytorch Ignite version: 0.4.8
+- Nibabel version: 3.2.1
+- scikit-image version: 0.18.2
+- Pillow version: 8.3.1
+- Tensorboard version: 2.5.0
+- gdown version: 3.13.0
+- TorchVision version: 0.10.0+cu111
+- tqdm version: 4.61.2
+- lmdb version: 1.2.1
+- psutil version: 5.8.0
+- pandas version: 1.3.0
+- einops version: 0.3.0
+- transformers version: 4.18.0
+- mlflow version: 1.25.1
diff --git a/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb b/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb
new file mode 100644
index 0000000..48b8141
--- /dev/null
+++ b/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb
@@ -0,0 +1,2002 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1452463e",
+ "metadata": {},
+ "source": [
+ "## Spleen Model With NVIDIA Pretrain\n",
+ "- Uses Unet architecture\n",
+ "- Pretrained model at: https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_spleen_ct_segmentation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f59ba435",
+ "metadata": {},
+ "source": [
+ "##### Uncomment below to install all dependencies"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "82db674f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#!pip install 'monai[all]'\n",
+ "#!pip install matplotlib "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "bb1228b3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "540e5d47",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# MONAI version: 0.6.0+38.gf6ad4ba5\n",
+ "# Numpy version: 1.21.1\n",
+ "# Pytorch version: 1.9.0\n",
+ "# Pytorch Ignite version: 0.4.5\n",
+ "# Nibabel version: 3.2.1\n",
+ "# scikit-image version: 0.18.2\n",
+ "# Pillow version: 8.3.1\n",
+ "# Tensorboard version: 2.5.0\n",
+ "# gdown version: 3.13.0\n",
+ "# TorchVision version: 0.10.0+cu111\n",
+ "# tqdm version: 4.61.2\n",
+ "# lmdb version: 1.2.1\n",
+ "# psutil version: 5.8.0\n",
+ "# pandas version: 1.3.0\n",
+ "# einops version: 0.3.0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "07510582",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "MONAI version: 0.8.1\n",
+ "Numpy version: 1.21.1\n",
+ "Pytorch version: 1.9.0\n",
+ "MONAI flags: HAS_EXT = False, USE_COMPILED = False\n",
+ "MONAI rev id: 71ff399a3ea07aef667b23653620a290364095b1\n",
+ "\n",
+ "Optional dependencies:\n",
+ "Pytorch Ignite version: 0.4.8\n",
+ "Nibabel version: 3.2.1\n",
+ "scikit-image version: 0.18.2\n",
+ "Pillow version: 8.3.1\n",
+ "Tensorboard version: 2.5.0\n",
+ "gdown version: 3.13.0\n",
+ "TorchVision version: 0.10.0+cu111\n",
+ "tqdm version: 4.61.2\n",
+ "lmdb version: 1.2.1\n",
+ "psutil version: 5.8.0\n",
+ "pandas version: 1.3.0\n",
+ "einops version: 0.3.0\n",
+ "transformers version: 4.18.0\n",
+ "mlflow version: 1.25.1\n",
+ "\n",
+ "For details about installing the optional dependencies, please visit:\n",
+ " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "import os\n",
+ "import tempfile\n",
+ "import glob\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "#import plotly.graph_objects as go\n",
+ "import torch\n",
+ "import numpy as np\n",
+ "\n",
+ "from monai.apps import download_and_extract\n",
+ "from monai.networks.nets import UNet\n",
+ "from monai.networks.layers import Norm\n",
+ "from monai.losses import DiceFocalLoss\n",
+ "from monai.metrics import DiceMetric\n",
+ "from monai.inferers import sliding_window_inference\n",
+ "from monai.data import (\n",
+ " LMDBDataset,\n",
+ " DataLoader,\n",
+ " decollate_batch,\n",
+ " ImageDataset,\n",
+ " Dataset\n",
+ ")\n",
+ "from monai.apps import load_from_mmar\n",
+ "from monai.transforms import (\n",
+ " AsDiscrete,\n",
+ " EnsureChannelFirstd,\n",
+ " Compose,\n",
+ " LoadImaged,\n",
+ " ScaleIntensityRanged,\n",
+ " Spacingd,\n",
+ " Orientationd,\n",
+ " CropForegroundd,\n",
+ " RandCropByPosNegLabeld,\n",
+ " RandAffined,\n",
+ " RandRotated,\n",
+ " EnsureType,\n",
+ " EnsureTyped,\n",
+ ")\n",
+ "from monai.utils import first, set_determinism\n",
+ "from monai.apps.mmars import RemoteMMARKeys\n",
+ "from monai.config import print_config\n",
+ "\n",
+ "print_config()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f523cbf",
+ "metadata": {},
+ "source": [
+ "#### Running a pretrained model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "0be7401d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "PRETRAINED = True"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e9f3e5f3",
+ "metadata": {},
+ "source": [
+ "#### Create the directory for storing data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "311c3282",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "monai_data/\n"
+ ]
+ }
+ ],
+ "source": [
+ "directory = \"monai_data/\"\n",
+ "root_dir = tempfile.mkdtemp() if directory is None else directory\n",
+ "print(root_dir)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "38463a18",
+ "metadata": {},
+ "source": [
+ "#### Download the public dataset"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "da7cfede",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2022-04-27 14:49:41,401 - INFO - Verified 'Task09_Spleen.tar', md5: 410d4a301da4e5b2f6f86ec3ddba524e.\n",
+ "2022-04-27 14:49:41,402 - INFO - File exists: monai_data/Task09_Spleen.tar, skipped downloading.\n",
+ "2022-04-27 14:49:41,403 - INFO - Non-empty folder exists in monai_data/Task09_Spleen, skipped extracting.\n"
+ ]
+ }
+ ],
+ "source": [
+ "resource = \"https://msd-for-monai.s3-us-west-2.amazonaws.com/Task09_Spleen.tar\"\n",
+ "md5 = \"410d4a301da4e5b2f6f86ec3ddba524e\"\n",
+ "\n",
+ "compressed_file = os.path.join(root_dir, \"Task09_Spleen.tar\")\n",
+ "download_and_extract(resource, compressed_file, root_dir, md5)\n",
+ "data_dir = os.path.join(root_dir, \"Task09_Spleen\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fae7c51b",
+ "metadata": {},
+ "source": [
+ "#### Create Date Dictionaries and separate files from training and validation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "2515b177",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train_images = sorted(\n",
+ " glob.glob(os.path.join(data_dir, \"imagesTr\", \"*.nii.gz\")))\n",
+ "train_labels = sorted(\n",
+ " glob.glob(os.path.join(data_dir, \"labelsTr\", \"*.nii.gz\")))\n",
+ "data_dicts = [\n",
+ " {\"image\": image_name, \"label\": label_name}\n",
+ " for image_name, label_name in zip(train_images, train_labels)\n",
+ "]\n",
+ "train_files, val_files = data_dicts[:-9], data_dicts[-9:]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "974fc5aa",
+ "metadata": {},
+ "source": [
+ "#### Define your transformations for training and validation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "2357d35d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train_transforms = Compose( #Transformations for training dataset\n",
+ " [\n",
+ " LoadImaged(keys=[\"image\", \"label\"]), #Load dictionary based images and labels\n",
+ " EnsureChannelFirstd(keys=[\"image\", \"label\"]), #Ensures the first channel of each image is the channel dimension\n",
+ " Spacingd(keys=[\"image\", \"label\"], pixdim=( #Change spacing of voxels to be same across images\n",
+ " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n",
+ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"), #Correct the orientation of images (Right, Anterior, Superior)\n",
+ " ScaleIntensityRanged( #Scale intensity of all images (For images only and not labels)\n",
+ " keys=[\"image\"], a_min=-57, a_max=164,\n",
+ " b_min=0.0, b_max=1.0, clip=True,\n",
+ " ),\n",
+ " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"), #Crop foreground of image\n",
+ " RandCropByPosNegLabeld( #Randomly crop fixed sized region\n",
+ " keys=[\"image\", \"label\"],\n",
+ " label_key=\"label\",\n",
+ " spatial_size=(96, 96, 96),\n",
+ " pos=1,\n",
+ " neg=1,\n",
+ " num_samples=4,\n",
+ " image_key=\"image\",\n",
+ " image_threshold=0,\n",
+ " ),\n",
+ " RandAffined( #Do a random affine transformation with some probability\n",
+ " keys=['image', 'label'],\n",
+ " mode=('bilinear', 'nearest'),\n",
+ " prob=0.5,\n",
+ " spatial_size=(96, 96, 96),\n",
+ " rotate_range=(np.pi/18, np.pi/18, np.pi/5),\n",
+ " scale_range=(0.05, 0.05, 0.05)\n",
+ " ),\n",
+ " EnsureTyped(keys=[\"image\", \"label\"]),\n",
+ " ]\n",
+ ")\n",
+ "val_transforms = Compose( #Transformations for testing dataset\n",
+ " [\n",
+ " LoadImaged(keys=[\"image\", \"label\"]),\n",
+ " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n",
+ " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n",
+ " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n",
+ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n",
+ " ScaleIntensityRanged(\n",
+ " keys=[\"image\"], a_min=-57, a_max=164,\n",
+ " b_min=0.0, b_max=1.0, clip=True,\n",
+ " ),\n",
+ " RandRotated(\n",
+ " keys=['image', 'label'],\n",
+ " mode=('bilinear', 'nearest'),\n",
+ " range_x=np.pi/18,\n",
+ " range_y=np.pi/18,\n",
+ " range_z=np.pi/5,\n",
+ " prob=1.0,\n",
+ " padding_mode=('reflection', 'reflection'),\n",
+ " ),\n",
+ " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"),\n",
+ " EnsureTyped(keys=[\"image\", \"label\"]),\n",
+ " ]\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ada5757a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[{'image': 'monai_data/Task09_Spleen/imagesTr/spleen_56.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_56.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_59.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_59.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_6.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_6.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_60.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_60.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_61.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_61.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_62.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_62.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_63.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_63.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_8.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_8.nii.gz'},\n",
+ " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_9.nii.gz',\n",
+ " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_9.nii.gz'}]"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "val_files"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ba3c7695",
+ "metadata": {},
+ "source": [
+ "#### Visualize Image and Label (example)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "689eea4e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "image shape: torch.Size([239, 239, 113]), label shape: torch.Size([239, 239, 113])\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "check_ds = Dataset(data=val_files, transform=val_transforms)\n",
+ "check_loader = DataLoader(check_ds, batch_size=1)\n",
+ "check_data = first(check_loader)\n",
+ "image, label = (check_data[\"image\"][0][0], check_data[\"label\"][0][0])\n",
+ "print(f\"image shape: {image.shape}, label shape: {label.shape}\")\n",
+ "# plot the slice [:, :, 80]\n",
+ "plt.figure(\"check\", (12, 6))\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.title(\"image\")\n",
+ "plt.imshow(image[:, :, 80], cmap=\"gray\")\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.title(\"label\")\n",
+ "plt.imshow(label[:, :, 80])\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f45ba707",
+ "metadata": {},
+ "source": [
+ "#### Use a dataloader to load files\n",
+ " - Ability to use LMDB (Lightning Memory-Mapped Database)\n",
+ " - Here is where transforms take place and they happen on both images and labels"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "fe3285d0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 32/32 [00:00<00:00, 57113.93it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 32/32 [00:00<00:00, 47679.48it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 32, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 9/9 [00:00<00:00, 10999.05it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 9/9 [00:00<00:00, 17739.07it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 9, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "train_ds = LMDBDataset(data=train_files, transform=train_transforms, cache_dir=root_dir)\n",
+ "# initialize cache and print meta information\n",
+ "print(train_ds.info())\n",
+ "\n",
+ "# use batch_size=2 to load images and use RandCropByPosNegLabeld\n",
+ "# to generate 2 x 4 images for network training\n",
+ "train_loader = DataLoader(train_ds, batch_size=2, shuffle=True, num_workers=2)\n",
+ "\n",
+ "# the validation data loader will be created on the fly to ensure \n",
+ "# a deterministic validation set for demo purpose.\n",
+ "val_ds = LMDBDataset(data=val_files, transform=val_transforms, cache_dir=root_dir)\n",
+ "# initialize cache and print meta information\n",
+ "print(val_ds.info())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "455cbcdc",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 32, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(train_ds.info())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a77e7856",
+ "metadata": {},
+ "source": [
+ "#### Now we want to download the pretrained model from NVIDIA"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "8539fb7d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mmar = {\n",
+ " RemoteMMARKeys.ID: \"clara_pt_spleen_ct_segmentation_1\",\n",
+ " RemoteMMARKeys.NAME: \"clara_pt_spleen_ct_segmentation\",\n",
+ " RemoteMMARKeys.FILE_TYPE: \"zip\",\n",
+ " RemoteMMARKeys.HASH_TYPE: \"md5\",\n",
+ " RemoteMMARKeys.HASH_VAL: None,\n",
+ " RemoteMMARKeys.MODEL_FILE: os.path.join(\"models\", \"model.pt\"),\n",
+ " RemoteMMARKeys.CONFIG_FILE: os.path.join(\"config\", \"config_train.json\"),\n",
+ " RemoteMMARKeys.VERSION: 2,\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "de7fb262",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'clara_pt_spleen_ct_segmentation'"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mmar['name']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "bf96f9f9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "using a pretrained model.\n",
+ "2022-04-27 14:49:45,704 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_spleen_ct_segmentation_2.zip.\n",
+ "2022-04-27 14:49:45,705 - INFO - File exists: monai_data/clara_pt_spleen_ct_segmentation_2.zip, skipped downloading.\n",
+ "2022-04-27 14:49:45,706 - INFO - Non-empty folder exists in monai_data/clara_pt_spleen_ct_segmentation, skipped extracting.\n",
+ "2022-04-27 14:49:45,707 - INFO - \n",
+ "*** \"clara_pt_spleen_ct_segmentation\" available at monai_data/clara_pt_spleen_ct_segmentation.\n",
+ "2022-04-27 14:49:49,353 - INFO - *** Model: \n",
+ "2022-04-27 14:49:49,400 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 2, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n",
+ "2022-04-27 14:49:49,411 - INFO - \n",
+ "---\n",
+ "2022-04-27 14:49:49,412 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_spleen_ct_segmentation\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\") #torch.device(\"cpu\")\n",
+ "if PRETRAINED:\n",
+ " print(\"using a pretrained model.\")\n",
+ " try: #MONAI=0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " item = mmar['name'], \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " version=mmar['version'],\n",
+ " pretrained=True)\n",
+ " except: #MONAI<0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " mmar, \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " pretrained=True)\n",
+ " model = unet_model\n",
+ "else: \n",
+ " print(\"using a randomly init. model.\")\n",
+ " model = UNet(\n",
+ " dimensions=3,\n",
+ " in_channels=1,\n",
+ " out_channels=2,\n",
+ " channels=(16, 32, 64, 128, 256),\n",
+ " strides=(2, 2, 2, 2),\n",
+ " num_res_units=2,\n",
+ " norm=Norm.BATCH,\n",
+ " )\n",
+ "\n",
+ "model = model.to(device)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "39910557",
+ "metadata": {},
+ "source": [
+ "### This will be our test file we will view for reference\n",
+ " - Here we see how our initial model appears to perform"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "4be7eb8f",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 1/1 [00:00<00:00, 4639.72it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "test_file = data_dicts[20:21]\n",
+ "test_ds = LMDBDataset(data=test_file, transform=None, cache_dir=root_dir)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2544a774",
+ "metadata": {},
+ "source": [
+ "#### We use a sliding window technique to search the image"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "16fd4e94",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "num_classes=2\n",
+ "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n",
+ "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n",
+ "model.eval()\n",
+ "with torch.no_grad():\n",
+ " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n",
+ " test_inputs, test_labels = (\n",
+ " data[\"image\"].to(device),\n",
+ " data[\"label\"].to(device),\n",
+ " )\n",
+ " roi_size = (160, 160, 160)\n",
+ " sw_batch_size = 4\n",
+ " test_outputs = sliding_window_inference(\n",
+ " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n",
+ " test_outputspre = [post_pred(i) for i in decollate_batch(test_outputs)] # Decollate our results\n",
+ " test_labelspre = [post_label(i) for i in decollate_batch(test_labels)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "9782ec96",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Actual Spleen')\n",
+ "plt.imshow(test_labelspre[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Actual spleen"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "76cd38e6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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TZchOeaq3xo/fjw777xz02UMSmZyzjnncOWVV7Ju3bqmy5EMV3W+TZs2sXTpUr761a8arGobhquA6k9id+JwwObNm+nu7naMVW3HMVcB8OMf/5gFCxY0XcY2O++883jjG9/YdBnSy3jkOsqNGTOG66+/nlmzZnXkHxp85plnePrpp5suQ3qZzvvXpCEVERx66KHstNNOTZeyzW677TbuvffepsuQeuV9rqPYmDFj2G233VixYkVHhuuMGTNYtmxZ02VolPM+V73M29/+dh599NGODFap3Rmuo9S5557Lt771LcaM6bxdYP369ZxwwgmsXLmy6VKkPjnmOkodcMABTJs2rekyBuWZZ55h4cKFTZch9avzDls0qj377LNs2LCh6TKkARmu6igXXngh++23X9NlSAMyXNVR2uHuFmlrGK7qGFdffTU/+9nPmi5D2ipe0FLb27x5M+vXr+eTn/ykXxpQxzBc1faeeOIJpk6d2nQZ0jZxWEBtbdGiRRx88MFNlyFtM8NVbW3NmjX+gUF1JMNVbeuxxx7jwQcfbLoMaVAcc1Vbykze8573cMMNNzRdijQohqvaztNPP81rX/taVq1a1XQp0qAZrmo7mUl3d7dfGFBHM1zVVp566imWLFnSdBnSdvOCltrKTTfdxJvf/GaPWtXxDFdJKsBwVVs59NBDWbRoERG9/uUMqWMYrmoru+22G0cccQTz5s1jypQpTZcjDZrhqq3y/PPP89xzz/X5GMox0h133JGLL76Yt771rYwfP37I1isNJ8NVW+X9738/EydO7POxdu3aIf/MhQsXcuGFFw75eqXh4J/WHqUOPPBATjzxRL7whS/0Ov1rX/saP//5z198f9111/UboLNnz+ass87iyCOPHNI6169fz+23385RRx01pOuVhkpff1rb+1xHqdtvv51NmzZxxBFH9Dr9O9/5DjfeeONWr+/qq69m7733ZpddduGQQw4ZqjKZPHkyhx56KJ/+9KdZsGAB69atG7J1SyV55KohdeCBB/KLX/yCnXbaaciv+B977LHceOONbNy4cUjXK22Pvo5cDVcNuTFjxrBu3TomTZo0pOvNTL7xjW9w+umnD+l6pe3RV7h6QUtDbvPmzcyePZubbrppSNcbEd7/qo7hmKuKuOmmm7j44otZvnz5i23HHHMMe+yxR4NVScMoMxt/AOlj5D+u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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Pretrained CalculatedSpleen')\n",
+ "plt.imshow(test_outputspre[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Pretrained model spleen"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "65c68242",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Differences Between Actual and Model')\n",
+ "pretraineddif = test_labelspre[0].cpu().numpy()[1][:,:,200] - test_outputspre[0].cpu().numpy()[1][:,:,200]\n",
+ "plt.imshow(pretraineddif, cmap='Greys_r') #Differences"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2f60e5b5",
+ "metadata": {},
+ "source": [
+ "#### Using just the pretrained model, it appears we are performing pretty well\n",
+ " - We can now continue to train with our data using the NVIDIA models initial weights"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c3e40010",
+ "metadata": {},
+ "source": [
+ "## Training\n",
+ "#### Without a GPU, training can take a while\n",
+ "#### Recommend skipping next three cells and load in model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "a8ad6aee",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "loss_function = DiceFocalLoss(to_onehot_y=True, softmax=True)\n",
+ "optimizer = torch.optim.Adam(model.parameters(), 5e-4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "d91d340c",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "----------\n",
+ "epoch 1/25\n",
+ "1/16, train_loss: 0.8680\n",
+ "2/16, train_loss: 0.3699\n",
+ "3/16, train_loss: 0.3849\n",
+ "4/16, train_loss: 0.1306\n",
+ "5/16, train_loss: 0.2781\n",
+ "6/16, train_loss: 0.3628\n",
+ "7/16, train_loss: 0.3609\n",
+ "8/16, train_loss: 0.1828\n",
+ "9/16, train_loss: 0.1493\n",
+ "10/16, train_loss: 0.5063\n",
+ "11/16, train_loss: 0.2929\n",
+ "12/16, train_loss: 0.2826\n",
+ "13/16, train_loss: 0.2017\n",
+ "14/16, train_loss: 0.2591\n",
+ "15/16, train_loss: 0.2568\n",
+ "16/16, train_loss: 0.2385\n",
+ "epoch 1 average loss: 0.3203\n",
+ "----------\n",
+ "epoch 2/25\n",
+ "1/16, train_loss: 0.3457\n",
+ "2/16, train_loss: 0.2234\n",
+ "3/16, train_loss: 0.3443\n",
+ "4/16, train_loss: 0.0816\n",
+ "5/16, train_loss: 0.2259\n",
+ "6/16, train_loss: 0.1580\n",
+ "7/16, train_loss: 0.2593\n",
+ "8/16, train_loss: 0.1651\n",
+ "9/16, train_loss: 0.1124\n",
+ "10/16, train_loss: 0.4822\n",
+ "11/16, train_loss: 0.2900\n",
+ "12/16, train_loss: 0.2571\n",
+ "13/16, train_loss: 0.1799\n",
+ "14/16, train_loss: 0.1984\n",
+ "15/16, train_loss: 0.2286\n",
+ "16/16, train_loss: 0.2216\n",
+ "epoch 2 average loss: 0.2359\n",
+ "saved new best metric model\n",
+ "current epoch: 2 current mean dice: 0.8615\n",
+ "best mean dice: 0.8615 at epoch: 2\n",
+ "----------\n",
+ "epoch 3/25\n",
+ "1/16, train_loss: 0.3400\n",
+ "2/16, train_loss: 0.2297\n",
+ "3/16, train_loss: 0.3453\n",
+ "4/16, train_loss: 0.0822\n",
+ "5/16, train_loss: 0.2285\n",
+ "6/16, train_loss: 0.1213\n",
+ "7/16, train_loss: 0.2370\n",
+ "8/16, train_loss: 0.1607\n",
+ "9/16, train_loss: 0.1065\n",
+ "10/16, train_loss: 0.4543\n",
+ "11/16, train_loss: 0.2848\n",
+ "12/16, train_loss: 0.2848\n",
+ "13/16, train_loss: 0.1763\n",
+ "14/16, train_loss: 0.1748\n",
+ "15/16, train_loss: 0.4361\n",
+ "16/16, train_loss: 0.2234\n",
+ "epoch 3 average loss: 0.2429\n",
+ "----------\n",
+ "epoch 4/25\n",
+ "1/16, train_loss: 0.3328\n",
+ "2/16, train_loss: 0.2447\n",
+ "3/16, train_loss: 0.3436\n",
+ "4/16, train_loss: 0.0723\n",
+ "5/16, train_loss: 0.2213\n",
+ "6/16, train_loss: 0.1676\n",
+ "7/16, train_loss: 0.2672\n",
+ "8/16, train_loss: 0.2121\n",
+ "9/16, train_loss: 0.1122\n",
+ "10/16, train_loss: 0.5265\n",
+ "11/16, train_loss: 0.2810\n",
+ "12/16, train_loss: 0.2688\n",
+ "13/16, train_loss: 0.1795\n",
+ "14/16, train_loss: 0.1853\n",
+ "15/16, train_loss: 0.2458\n",
+ "16/16, train_loss: 0.2314\n",
+ "epoch 4 average loss: 0.2433\n",
+ "saved new best metric model\n",
+ "current epoch: 4 current mean dice: 0.8744\n",
+ "best mean dice: 0.8744 at epoch: 4\n",
+ "----------\n",
+ "epoch 5/25\n",
+ "1/16, train_loss: 0.3378\n",
+ "2/16, train_loss: 0.2047\n",
+ "3/16, train_loss: 0.3350\n",
+ "4/16, train_loss: 0.0583\n",
+ "5/16, train_loss: 0.2161\n",
+ "6/16, train_loss: 0.1008\n",
+ "7/16, train_loss: 0.2325\n",
+ "8/16, train_loss: 0.1629\n",
+ "9/16, train_loss: 0.1037\n",
+ "10/16, train_loss: 0.4499\n",
+ "11/16, train_loss: 0.2763\n",
+ "12/16, train_loss: 0.2321\n",
+ "13/16, train_loss: 0.1702\n",
+ "14/16, train_loss: 0.1652\n",
+ "15/16, train_loss: 0.2206\n",
+ "16/16, train_loss: 0.2169\n",
+ "epoch 5 average loss: 0.2177\n",
+ "----------\n",
+ "epoch 6/25\n",
+ "1/16, train_loss: 0.3303\n",
+ "2/16, train_loss: 0.1888\n",
+ "3/16, train_loss: 0.3331\n",
+ "4/16, train_loss: 0.0535\n",
+ "5/16, train_loss: 0.2149\n",
+ "6/16, train_loss: 0.0962\n",
+ "7/16, train_loss: 0.2267\n",
+ "8/16, train_loss: 0.1555\n",
+ "9/16, train_loss: 0.0995\n",
+ "10/16, train_loss: 0.4476\n",
+ "11/16, train_loss: 0.2751\n",
+ "12/16, train_loss: 0.2215\n",
+ "13/16, train_loss: 0.1644\n",
+ "14/16, train_loss: 0.1603\n",
+ "15/16, train_loss: 0.2159\n",
+ "16/16, train_loss: 0.2141\n",
+ "epoch 6 average loss: 0.2123\n",
+ "saved new best metric model\n",
+ "current epoch: 6 current mean dice: 0.8952\n",
+ "best mean dice: 0.8952 at epoch: 6\n",
+ "----------\n",
+ "epoch 7/25\n",
+ "1/16, train_loss: 0.3286\n",
+ "2/16, train_loss: 0.1815\n",
+ "3/16, train_loss: 0.3317\n",
+ "4/16, train_loss: 0.0487\n",
+ "5/16, train_loss: 0.2127\n",
+ "6/16, train_loss: 0.0926\n",
+ "7/16, train_loss: 0.2236\n",
+ "8/16, train_loss: 0.1536\n",
+ "9/16, train_loss: 0.0955\n",
+ "10/16, train_loss: 0.4468\n",
+ "11/16, train_loss: 0.2730\n",
+ "12/16, train_loss: 0.2171\n",
+ "13/16, train_loss: 0.1616\n",
+ "14/16, train_loss: 0.1565\n",
+ "15/16, train_loss: 0.2147\n",
+ "16/16, train_loss: 0.2123\n",
+ "epoch 7 average loss: 0.2094\n",
+ "----------\n",
+ "epoch 8/25\n",
+ "1/16, train_loss: 0.3276\n",
+ "2/16, train_loss: 0.1800\n",
+ "3/16, train_loss: 0.3311\n",
+ "4/16, train_loss: 0.0459\n",
+ "5/16, train_loss: 0.2114\n",
+ "6/16, train_loss: 0.0853\n",
+ "7/16, train_loss: 0.2206\n",
+ "8/16, train_loss: 0.1529\n",
+ "9/16, train_loss: 0.0939\n",
+ "10/16, train_loss: 0.4467\n",
+ "11/16, train_loss: 0.2725\n",
+ "12/16, train_loss: 0.2171\n",
+ "13/16, train_loss: 0.1600\n",
+ "14/16, train_loss: 0.1502\n",
+ "15/16, train_loss: 0.2140\n",
+ "16/16, train_loss: 0.2115\n",
+ "epoch 8 average loss: 0.2075\n",
+ "saved new best metric model\n",
+ "current epoch: 8 current mean dice: 0.8957\n",
+ "best mean dice: 0.8957 at epoch: 8\n",
+ "----------\n",
+ "epoch 9/25\n",
+ "1/16, train_loss: 0.3275\n",
+ "2/16, train_loss: 0.1822\n",
+ "3/16, train_loss: 0.3309\n",
+ "4/16, train_loss: 0.0455\n",
+ "5/16, train_loss: 0.2110\n",
+ "6/16, train_loss: 0.0818\n",
+ "7/16, train_loss: 0.2194\n",
+ "8/16, train_loss: 0.1520\n",
+ "9/16, train_loss: 0.0917\n",
+ "10/16, train_loss: 0.4467\n",
+ "11/16, train_loss: 0.2723\n",
+ "12/16, train_loss: 0.2165\n",
+ "13/16, train_loss: 0.1593\n",
+ "14/16, train_loss: 0.1236\n",
+ "15/16, train_loss: 0.2136\n",
+ "16/16, train_loss: 0.2107\n",
+ "epoch 9 average loss: 0.2053\n",
+ "----------\n",
+ "epoch 10/25\n",
+ "1/16, train_loss: 0.3271\n",
+ "2/16, train_loss: 0.1726\n",
+ "3/16, train_loss: 0.3308\n",
+ "4/16, train_loss: 0.0439\n",
+ "5/16, train_loss: 0.2106\n",
+ "6/16, train_loss: 0.0886\n",
+ "7/16, train_loss: 0.2209\n",
+ "8/16, train_loss: 0.1518\n",
+ "9/16, train_loss: 0.0860\n",
+ "10/16, train_loss: 0.4452\n",
+ "11/16, train_loss: 0.2715\n",
+ "12/16, train_loss: 0.2150\n",
+ "13/16, train_loss: 0.1589\n",
+ "14/16, train_loss: 0.1150\n",
+ "15/16, train_loss: 0.2142\n",
+ "16/16, train_loss: 0.2095\n",
+ "epoch 10 average loss: 0.2038\n",
+ "saved new best metric model\n",
+ "current epoch: 10 current mean dice: 0.8958\n",
+ "best mean dice: 0.8958 at epoch: 10\n",
+ "----------\n",
+ "epoch 11/25\n",
+ "1/16, train_loss: 0.3271\n",
+ "2/16, train_loss: 0.1735\n",
+ "3/16, train_loss: 0.3314\n",
+ "4/16, train_loss: 0.0430\n",
+ "5/16, train_loss: 0.2099\n",
+ "6/16, train_loss: 0.0801\n",
+ "7/16, train_loss: 0.2201\n",
+ "8/16, train_loss: 0.1508\n",
+ "9/16, train_loss: 0.0721\n",
+ "10/16, train_loss: 0.4451\n",
+ "11/16, train_loss: 0.2714\n",
+ "12/16, train_loss: 0.2155\n",
+ "13/16, train_loss: 0.1592\n",
+ "14/16, train_loss: 0.1247\n",
+ "15/16, train_loss: 0.2139\n",
+ "16/16, train_loss: 0.2107\n",
+ "epoch 11 average loss: 0.2030\n",
+ "----------\n",
+ "epoch 12/25\n",
+ "1/16, train_loss: 0.3268\n",
+ "2/16, train_loss: 0.1712\n",
+ "3/16, train_loss: 0.3305\n",
+ "4/16, train_loss: 0.0453\n",
+ "5/16, train_loss: 0.2103\n",
+ "6/16, train_loss: 0.0783\n",
+ "7/16, train_loss: 0.2179\n",
+ "8/16, train_loss: 0.1529\n",
+ "9/16, train_loss: 0.0912\n",
+ "10/16, train_loss: 0.4469\n",
+ "11/16, train_loss: 0.2724\n",
+ "12/16, train_loss: 0.2162\n",
+ "13/16, train_loss: 0.1588\n",
+ "14/16, train_loss: 0.1072\n",
+ "15/16, train_loss: 0.2129\n",
+ "16/16, train_loss: 0.2091\n",
+ "epoch 12 average loss: 0.2030\n",
+ "saved new best metric model\n",
+ "current epoch: 12 current mean dice: 0.9008\n",
+ "best mean dice: 0.9008 at epoch: 12\n",
+ "----------\n",
+ "epoch 13/25\n",
+ "1/16, train_loss: 0.3266\n",
+ "2/16, train_loss: 0.1666\n",
+ "3/16, train_loss: 0.3304\n",
+ "4/16, train_loss: 0.0419\n",
+ "5/16, train_loss: 0.2105\n",
+ "6/16, train_loss: 0.0826\n",
+ "7/16, train_loss: 0.2195\n",
+ "8/16, train_loss: 0.1506\n",
+ "9/16, train_loss: 0.0553\n",
+ "10/16, train_loss: 0.4447\n",
+ "11/16, train_loss: 0.2715\n",
+ "12/16, train_loss: 0.2125\n",
+ "13/16, train_loss: 0.1575\n",
+ "14/16, train_loss: 0.1083\n",
+ "15/16, train_loss: 0.2135\n",
+ "16/16, train_loss: 0.2085\n",
+ "epoch 13 average loss: 0.2000\n",
+ "----------\n",
+ "epoch 14/25\n",
+ "1/16, train_loss: 0.3270\n",
+ "2/16, train_loss: 0.1647\n",
+ "3/16, train_loss: 0.3316\n",
+ "4/16, train_loss: 0.0405\n",
+ "5/16, train_loss: 0.2091\n",
+ "6/16, train_loss: 0.0686\n",
+ "7/16, train_loss: 0.2185\n",
+ "8/16, train_loss: 0.1499\n",
+ "9/16, train_loss: 0.0482\n",
+ "10/16, train_loss: 0.4443\n",
+ "11/16, train_loss: 0.2708\n",
+ "12/16, train_loss: 0.2106\n",
+ "13/16, train_loss: 0.1568\n",
+ "14/16, train_loss: 0.1043\n",
+ "15/16, train_loss: 0.2121\n",
+ "16/16, train_loss: 0.2079\n",
+ "epoch 14 average loss: 0.1978\n",
+ "saved new best metric model\n",
+ "current epoch: 14 current mean dice: 0.9015\n",
+ "best mean dice: 0.9015 at epoch: 14\n",
+ "----------\n",
+ "epoch 15/25\n",
+ "1/16, train_loss: 0.3259\n",
+ "2/16, train_loss: 0.1630\n",
+ "3/16, train_loss: 0.3303\n",
+ "4/16, train_loss: 0.0399\n",
+ "5/16, train_loss: 0.2085\n",
+ "6/16, train_loss: 0.0579\n",
+ "7/16, train_loss: 0.2165\n",
+ "8/16, train_loss: 0.1509\n",
+ "9/16, train_loss: 0.0487\n",
+ "10/16, train_loss: 0.4449\n",
+ "11/16, train_loss: 0.2704\n",
+ "12/16, train_loss: 0.2090\n",
+ "13/16, train_loss: 0.1557\n",
+ "14/16, train_loss: 0.1021\n",
+ "15/16, train_loss: 0.2118\n",
+ "16/16, train_loss: 0.2084\n",
+ "epoch 15 average loss: 0.1965\n",
+ "----------\n",
+ "epoch 16/25\n",
+ "1/16, train_loss: 0.3258\n",
+ "2/16, train_loss: 0.1620\n",
+ "3/16, train_loss: 0.3307\n",
+ "4/16, train_loss: 0.0394\n",
+ "5/16, train_loss: 0.2086\n",
+ "6/16, train_loss: 0.0699\n",
+ "7/16, train_loss: 0.2170\n",
+ "8/16, train_loss: 0.1516\n",
+ "9/16, train_loss: 0.0540\n",
+ "10/16, train_loss: 0.4444\n",
+ "11/16, train_loss: 0.2698\n",
+ "12/16, train_loss: 0.2102\n",
+ "13/16, train_loss: 0.1548\n",
+ "14/16, train_loss: 0.1016\n",
+ "15/16, train_loss: 0.2114\n",
+ "16/16, train_loss: 0.2078\n",
+ "epoch 16 average loss: 0.1974\n",
+ "current epoch: 16 current mean dice: 0.8994\n",
+ "best mean dice: 0.9015 at epoch: 14\n",
+ "----------\n",
+ "epoch 17/25\n",
+ "1/16, train_loss: 0.3255\n",
+ "2/16, train_loss: 0.1636\n",
+ "3/16, train_loss: 0.3300\n",
+ "4/16, train_loss: 0.0399\n",
+ "5/16, train_loss: 0.2085\n",
+ "6/16, train_loss: 0.0483\n",
+ "7/16, train_loss: 0.2150\n",
+ "8/16, train_loss: 0.1506\n",
+ "9/16, train_loss: 0.0446\n",
+ "10/16, train_loss: 0.4445\n",
+ "11/16, train_loss: 0.2692\n",
+ "12/16, train_loss: 0.2077\n",
+ "13/16, train_loss: 0.1515\n",
+ "14/16, train_loss: 0.0980\n",
+ "15/16, train_loss: 0.2110\n",
+ "16/16, train_loss: 0.2076\n",
+ "epoch 17 average loss: 0.1947\n",
+ "----------\n",
+ "epoch 18/25\n",
+ "1/16, train_loss: 0.3255\n",
+ "2/16, train_loss: 0.1614\n",
+ "3/16, train_loss: 0.3297\n",
+ "4/16, train_loss: 0.0381\n",
+ "5/16, train_loss: 0.2081\n",
+ "6/16, train_loss: 0.0422\n",
+ "7/16, train_loss: 0.2152\n",
+ "8/16, train_loss: 0.1485\n",
+ "9/16, train_loss: 0.0415\n",
+ "10/16, train_loss: 0.4442\n",
+ "11/16, train_loss: 0.2690\n",
+ "12/16, train_loss: 0.2070\n",
+ "13/16, train_loss: 0.1515\n",
+ "14/16, train_loss: 0.0980\n",
+ "15/16, train_loss: 0.2112\n",
+ "16/16, train_loss: 0.2068\n",
+ "epoch 18 average loss: 0.1936\n",
+ "current epoch: 18 current mean dice: 0.8991\n",
+ "best mean dice: 0.9015 at epoch: 14\n",
+ "----------\n",
+ "epoch 19/25\n",
+ "1/16, train_loss: 0.3254\n",
+ "2/16, train_loss: 0.1635\n",
+ "3/16, train_loss: 0.3297\n",
+ "4/16, train_loss: 0.0372\n",
+ "5/16, train_loss: 0.2078\n",
+ "6/16, train_loss: 0.0424\n",
+ "7/16, train_loss: 0.2145\n",
+ "8/16, train_loss: 0.1483\n",
+ "9/16, train_loss: 0.0402\n",
+ "10/16, train_loss: 0.4436\n",
+ "11/16, train_loss: 0.2695\n",
+ "12/16, train_loss: 0.2076\n",
+ "13/16, train_loss: 0.1514\n",
+ "14/16, train_loss: 0.1009\n",
+ "15/16, train_loss: 0.2116\n",
+ "16/16, train_loss: 0.2071\n",
+ "epoch 19 average loss: 0.1938\n",
+ "----------\n",
+ "epoch 20/25\n",
+ "1/16, train_loss: 0.3256\n",
+ "2/16, train_loss: 0.1616\n",
+ "3/16, train_loss: 0.3302\n",
+ "4/16, train_loss: 0.0376\n",
+ "5/16, train_loss: 0.2080\n",
+ "6/16, train_loss: 0.0756\n",
+ "7/16, train_loss: 0.2150\n",
+ "8/16, train_loss: 0.1476\n",
+ "9/16, train_loss: 0.0400\n",
+ "10/16, train_loss: 0.4440\n",
+ "11/16, train_loss: 0.2686\n",
+ "12/16, train_loss: 0.2071\n",
+ "13/16, train_loss: 0.1512\n",
+ "14/16, train_loss: 0.0990\n",
+ "15/16, train_loss: 0.2103\n",
+ "16/16, train_loss: 0.2066\n",
+ "epoch 20 average loss: 0.1955\n",
+ "current epoch: 20 current mean dice: 0.8984\n",
+ "best mean dice: 0.9015 at epoch: 14\n",
+ "----------\n",
+ "epoch 21/25\n",
+ "1/16, train_loss: 0.3253\n",
+ "2/16, train_loss: 0.1599\n",
+ "3/16, train_loss: 0.3295\n",
+ "4/16, train_loss: 0.0370\n",
+ "5/16, train_loss: 0.2074\n",
+ "6/16, train_loss: 0.0587\n",
+ "7/16, train_loss: 0.2138\n",
+ "8/16, train_loss: 0.1483\n",
+ "9/16, train_loss: 0.0479\n",
+ "10/16, train_loss: 0.4449\n",
+ "11/16, train_loss: 0.2684\n",
+ "12/16, train_loss: 0.2082\n",
+ "13/16, train_loss: 0.1520\n",
+ "14/16, train_loss: 0.1122\n",
+ "15/16, train_loss: 0.2110\n",
+ "16/16, train_loss: 0.2088\n",
+ "epoch 21 average loss: 0.1958\n",
+ "----------\n",
+ "epoch 22/25\n",
+ "1/16, train_loss: 0.3258\n",
+ "2/16, train_loss: 0.1628\n",
+ "3/16, train_loss: 0.3298\n",
+ "4/16, train_loss: 0.0395\n",
+ "5/16, train_loss: 0.2082\n",
+ "6/16, train_loss: 0.0614\n",
+ "7/16, train_loss: 0.2181\n",
+ "8/16, train_loss: 0.1566\n",
+ "9/16, train_loss: 0.0650\n",
+ "10/16, train_loss: 0.4442\n",
+ "11/16, train_loss: 0.2693\n",
+ "12/16, train_loss: 0.2118\n",
+ "13/16, train_loss: 0.1532\n",
+ "14/16, train_loss: 0.0998\n",
+ "15/16, train_loss: 0.2121\n",
+ "16/16, train_loss: 0.2076\n",
+ "epoch 22 average loss: 0.1978\n",
+ "saved new best metric model\n",
+ "current epoch: 22 current mean dice: 0.9054\n",
+ "best mean dice: 0.9054 at epoch: 22\n",
+ "----------\n",
+ "epoch 23/25\n",
+ "1/16, train_loss: 0.3266\n",
+ "2/16, train_loss: 0.1723\n",
+ "3/16, train_loss: 0.3315\n",
+ "4/16, train_loss: 0.0413\n",
+ "5/16, train_loss: 0.2091\n",
+ "6/16, train_loss: 0.0807\n",
+ "7/16, train_loss: 0.2143\n",
+ "8/16, train_loss: 0.1514\n",
+ "9/16, train_loss: 0.0432\n",
+ "10/16, train_loss: 0.4441\n",
+ "11/16, train_loss: 0.2704\n",
+ "12/16, train_loss: 0.2081\n",
+ "13/16, train_loss: 0.1532\n",
+ "14/16, train_loss: 0.0983\n",
+ "15/16, train_loss: 0.2106\n",
+ "16/16, train_loss: 0.2072\n",
+ "epoch 23 average loss: 0.1976\n",
+ "----------\n",
+ "epoch 24/25\n",
+ "1/16, train_loss: 0.3257\n",
+ "2/16, train_loss: 0.1711\n",
+ "3/16, train_loss: 0.3307\n",
+ "4/16, train_loss: 0.0376\n",
+ "5/16, train_loss: 0.2077\n",
+ "6/16, train_loss: 0.0705\n",
+ "7/16, train_loss: 0.2141\n",
+ "8/16, train_loss: 0.1482\n",
+ "9/16, train_loss: 0.0392\n",
+ "10/16, train_loss: 0.4439\n",
+ "11/16, train_loss: 0.2688\n",
+ "12/16, train_loss: 0.2070\n",
+ "13/16, train_loss: 0.1512\n",
+ "14/16, train_loss: 0.0969\n",
+ "15/16, train_loss: 0.2098\n",
+ "16/16, train_loss: 0.2062\n",
+ "epoch 24 average loss: 0.1955\n",
+ "saved new best metric model\n",
+ "current epoch: 24 current mean dice: 0.9060\n",
+ "best mean dice: 0.9060 at epoch: 24\n",
+ "----------\n",
+ "epoch 25/25\n",
+ "1/16, train_loss: 0.3251\n",
+ "2/16, train_loss: 0.1621\n",
+ "3/16, train_loss: 0.3298\n",
+ "4/16, train_loss: 0.0367\n",
+ "5/16, train_loss: 0.2075\n",
+ "6/16, train_loss: 0.0430\n",
+ "7/16, train_loss: 0.2132\n",
+ "8/16, train_loss: 0.1490\n",
+ "9/16, train_loss: 0.0390\n",
+ "10/16, train_loss: 0.4432\n",
+ "11/16, train_loss: 0.2699\n",
+ "12/16, train_loss: 0.2080\n",
+ "13/16, train_loss: 0.1520\n",
+ "14/16, train_loss: 0.0959\n",
+ "15/16, train_loss: 0.2101\n",
+ "16/16, train_loss: 0.2057\n",
+ "epoch 25 average loss: 0.1931\n",
+ "train completed, best_metric: 0.9060 at epoch: 24\n"
+ ]
+ }
+ ],
+ "source": [
+ "max_epochs = 25\n",
+ "val_interval = 2\n",
+ "num_classes = 2\n",
+ "best_metric = -1\n",
+ "best_metric_epoch = -1\n",
+ "epoch_loss_values = []\n",
+ "metric_values = []\n",
+ "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n",
+ "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n",
+ "dice_metric = DiceMetric(include_background=False, reduction=\"mean\", get_not_nans=False)\n",
+ "\n",
+ "for epoch in range(max_epochs):\n",
+ " print(\"-\" * 10)\n",
+ " print(f\"epoch {epoch + 1}/{max_epochs}\")\n",
+ " model.train()\n",
+ " epoch_loss = 0\n",
+ " step = 0\n",
+ " set_determinism(seed=42)\n",
+ " for batch_data in train_loader:\n",
+ " step += 1\n",
+ " inputs, labels = (\n",
+ " batch_data[\"image\"].to(device),\n",
+ " batch_data[\"label\"].to(device),\n",
+ " )\n",
+ " optimizer.zero_grad()\n",
+ " outputs = model(inputs)\n",
+ " loss = loss_function(outputs, labels)\n",
+ " loss.backward()\n",
+ " optimizer.step()\n",
+ " epoch_loss += loss.item()\n",
+ " print(\n",
+ " f\"{step}/{len(train_ds) // train_loader.batch_size}, \"\n",
+ " f\"train_loss: {loss.item():.4f}\")\n",
+ " epoch_loss /= step\n",
+ " epoch_loss_values.append(epoch_loss)\n",
+ " print(f\"epoch {epoch + 1} average loss: {epoch_loss:.4f}\")\n",
+ "\n",
+ " if (epoch + 1) % val_interval == 0:\n",
+ " model.eval()\n",
+ " with torch.no_grad():\n",
+ " set_determinism(seed=42)\n",
+ " for val_data in DataLoader(val_ds, batch_size=1, num_workers=2):\n",
+ " val_inputs, val_labels = (\n",
+ " val_data[\"image\"].to(device),\n",
+ " val_data[\"label\"].to(device),\n",
+ " )\n",
+ " roi_size = (160, 160, 160)\n",
+ " sw_batch_size = 4\n",
+ " val_outputs = sliding_window_inference(\n",
+ " val_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n",
+ " val_outputs = [post_pred(i) for i in decollate_batch(val_outputs)]\n",
+ " val_labels = [post_label(i) for i in decollate_batch(val_labels)]\n",
+ " dice_metric(y_pred=val_outputs, y=val_labels)\n",
+ " metric = dice_metric.aggregate().item()\n",
+ " dice_metric.reset()\n",
+ " metric_values.append(metric)\n",
+ " if metric > best_metric:\n",
+ " best_metric = metric\n",
+ " best_metric_epoch = epoch + 1\n",
+ " torch.save(model.state_dict(), os.path.join(\n",
+ " root_dir, \"Spleen_best_metric_model_pretrained.pth\"))\n",
+ " print(\"saved new best metric model\")\n",
+ " print(\n",
+ " f\"current epoch: {epoch + 1} current mean dice: {metric:.4f}\"\n",
+ " f\"\\nbest mean dice: {best_metric:.4f} \"\n",
+ " f\"at epoch: {best_metric_epoch}\"\n",
+ " )\n",
+ "print(\n",
+ " f\"train completed, best_metric: {best_metric:.4f} \"\n",
+ " f\"at epoch: {best_metric_epoch}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "5cf1fd04",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure(\"train\", (12, 6))\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.title(\"Epoch Average Loss\")\n",
+ "x = [i + 1 for i in range(len(epoch_loss_values))]\n",
+ "y = epoch_loss_values\n",
+ "plt.xlabel(\"epoch\")\n",
+ "plt.ylim([0.1, 0.7])\n",
+ "plt.plot(x, y)\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.title(\"Val Mean Dice\")\n",
+ "x = [val_interval * (i + 1) for i in range(len(metric_values))]\n",
+ "y = metric_values\n",
+ "plt.xlabel(\"epoch\")\n",
+ "plt.ylim([0, 1.0])\n",
+ "plt.plot(x, y)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4ff0035d",
+ "metadata": {},
+ "source": [
+ "#### The model shows that it has improved fairly quickly over just 25 epochs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0499fa93",
+ "metadata": {},
+ "source": [
+ "## Inference\n",
+ "#### Without GPU skip to here to load previously trained best model (without a gpu the training will take a while)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "29441405",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model.load_state_dict(torch.load('monai_data/best_metric_model_pretrained.pth'))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fab5b4b9",
+ "metadata": {},
+ "source": [
+ "#### With the model loaded let's see if much has changed for our example image"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "94615f38",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "num_classes = 2\n",
+ "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n",
+ "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n",
+ "model.eval()\n",
+ "with torch.no_grad():\n",
+ " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n",
+ " test_inputs, test_labels = (\n",
+ " data[\"image\"].to(device),\n",
+ " data[\"label\"].to(device),\n",
+ " )\n",
+ " roi_size = (160, 160, 160)\n",
+ " sw_batch_size = 4\n",
+ " test_outputs = sliding_window_inference(\n",
+ " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n",
+ " test_outputsSpl = [post_pred(i) for i in decollate_batch(test_outputs)]\n",
+ " test_labelsSpl = [post_label(i) for i in decollate_batch(test_labels)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "a3f78dd4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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4sWLWbx4McceeyydnZ10dnbWXVaf7r77bj70oQ/VXYbaXIkx17nA8dX0QmARcF6B/aiFvfvd76azs5Pf/u3f5thjj627nH659957ueqqq+ouQ21usOGawK3VmOn/zszLgT0zcx1AZq6LCAeuRpGIYPz48Vx55ZVe9deoNthwPToz11YBeltE/PvOrhgR84H5g9y/Wszs2bO55557GDvWG1E0ug1qzDUz11bPTwE3AkcAT0bE3gDV81O9rHt5Zs5pGqtVm/vgBz/Idddd19bBev755/OFL3yh7jI0Agw4XCPidRExcds0cCLwIHALcFa12FnAzYMtUq3vve99L/PmzePAAw+su5RB+cEPfsCyZcvqLkMjwGC6GHsCN0bEtu18JzN/EBFLgGsj4n3AKuD0wZepVtTZ2cluu+0GwOc+9zmmTJlSc0UDl5ls3LiRLVu21F2KRgi/RKAB+8QnPsF55zVuBOnoaO9fU9Hd3c2UKVMMV/Vbb18iaN/BMdXq9ttvZ86cOW0fqgB33nknF154ocGqIdX+/zNUi4MOOohJkybVXcag3XXXXSxcuJDFixfXXYpGGHuu6peOjg5mzJjR1ncENLvwwgtZtGhR3WVoBBoZ/0M0bKZNm8bKlSupLmRK6oXDAtppZ599NkuXLm37YF2yZAmHH344hx9+OHfffXfd5WiEsueqnbJgwQLe8573sMcee9RdyqB1d3fT1dVVdxka4QxX9amjo4NZs2axYMEC9ttvv7rLGbDM5JlnniEzWb16dd3laBTwPlf1adKkSfziF79gzJgxdZcyKBs3bmTixIls2rSp7lI0wvgHCjVqLV26lEMOOcRg1bAyXNWro446ioULF7b1FwVuu+02LrvsMlauXFl3KRplHHNVj2bNmsW73/3utvzjgRs3buSJJ54A4Mtf/jI33XRTvQVpVHLMVa/R0dFBV1cXhx12WN2l9Ftm8vDDD3PooYfWXYpGCcdctVN22WUXnn32Wd74xjfWXcqAXHzxxRxzzDF1lyE5LKBX6+joYPz48W13d0BmcvHFF3PttdeyYcOGusuRHBbQq3V2dtLd3d12f/o6M9lrr7146qke//CFVIzDAhqxMpPNmzezdevWukuRXmG4qu2tWbOGyZMns379+rpLkV5huOoVxx57LHfddVdbjbd+//vf59xzz+WXv/xl3aVIr+IFLQHw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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Trained Calculated Spleen')\n",
+ "plt.imshow(test_outputsSpl[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Pretrained model spleen"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "a67f89f2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Differences Between Actual and Model')\n",
+ "traineddif = test_labelsSpl[0].cpu().numpy()[1][:,:,200] - test_outputsSpl[0].cpu().numpy()[1][:,:,200]\n",
+ "plt.imshow(traineddif, cmap='Greys_r') #Differences"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "382c7285",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Differences Between The Models')\n",
+ "modelsdif = test_outputspre[0].cpu().numpy()[1][:,:,200] - test_outputsSpl[0].cpu().numpy()[1][:,:,200]\n",
+ "plt.imshow(traineddif, cmap='Greys_r') #Differences"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6606bce2",
+ "metadata": {},
+ "source": [
+ "#### We see not much has changed, which is a good sign for how well the NVIDIA model performs out of the box."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5cfd20c6",
+ "metadata": {},
+ "source": [
+ "#### Here is the final image of our Spleen"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "91e83d40",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,:,200] == 0, test_outputsSpl[0].cpu().numpy()[1][:,:,200])\n",
+ "fig = plt.figure(frameon=False, figsize=(10,10))\n",
+ "plt.imshow(np.rot90(test_ds[0]['image'][0][:,:,200]), cmap='Greys_r')\n",
+ "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=1.0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6030d210",
+ "metadata": {},
+ "source": [
+ "#### Feel free to play around in this notebook or download it and use it where a GPU is accessible"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "896388a1",
+ "metadata": {},
+ "source": [
+ "## Additional Exercise: Use liver segmentation in addition to spleen\n",
+ " - Just need to load liver segmentation from NVIDIA\n",
+ " - While we can't train this model, since we don't have training data, we can use it as a rough estimate"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "657e44a0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mmarliver = {\n",
+ " RemoteMMARKeys.ID: \"clara_pt_liver_and_tumor_ct_segmentation_1\",\n",
+ " RemoteMMARKeys.NAME: \"clara_pt_liver_and_tumor_ct_segmentation\",\n",
+ " RemoteMMARKeys.FILE_TYPE: \"zip\",\n",
+ " RemoteMMARKeys.HASH_TYPE: \"md5\",\n",
+ " RemoteMMARKeys.HASH_VAL: None,\n",
+ " RemoteMMARKeys.MODEL_FILE: os.path.join(\"models\", \"model.pt\"),\n",
+ " RemoteMMARKeys.CONFIG_FILE: os.path.join(\"config\", \"config_train.json\"),\n",
+ " RemoteMMARKeys.VERSION: 1,\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "a6fb0da7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2022-04-27 15:06:54,404 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip.\n",
+ "2022-04-27 15:06:54,405 - INFO - File exists: monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip, skipped downloading.\n",
+ "2022-04-27 15:06:54,425 - INFO - Non-empty folder exists in monai_data/clara_pt_liver_and_tumor_ct_segmentation, skipped extracting.\n",
+ "2022-04-27 15:06:54,426 - INFO - \n",
+ "*** \"clara_pt_liver_and_tumor_ct_segmentation\" available at monai_data/clara_pt_liver_and_tumor_ct_segmentation.\n",
+ "2022-04-27 15:06:54,889 - INFO - *** Model: \n",
+ "2022-04-27 15:06:54,938 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 3, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n",
+ "2022-04-27 15:06:54,950 - INFO - \n",
+ "---\n",
+ "2022-04-27 15:06:54,951 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_liver_and_tumor_ct_segmentation\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ " try: #MONAI=0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " item = mmarliver['name'], \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " version=mmarliver['version'],\n",
+ " pretrained=True)\n",
+ " except: #MONAI<0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " mmarliver, \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " pretrained=True)\n",
+ " model = unet_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "55034354",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "using a pretrained model.\n",
+ "2022-04-27 15:06:55,931 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip.\n",
+ "2022-04-27 15:06:55,931 - INFO - File exists: monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip, skipped downloading.\n",
+ "2022-04-27 15:06:55,932 - INFO - Non-empty folder exists in monai_data/clara_pt_liver_and_tumor_ct_segmentation, skipped extracting.\n",
+ "2022-04-27 15:06:55,933 - INFO - \n",
+ "*** \"clara_pt_liver_and_tumor_ct_segmentation\" available at monai_data/clara_pt_liver_and_tumor_ct_segmentation.\n",
+ "2022-04-27 15:06:55,962 - INFO - *** Model: \n",
+ "2022-04-27 15:06:56,010 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 3, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n",
+ "2022-04-27 15:06:56,023 - INFO - \n",
+ "---\n",
+ "2022-04-27 15:06:56,024 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_liver_and_tumor_ct_segmentation\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
+ "\n",
+ "print(\"using a pretrained model.\")\n",
+ "try: #MONAI=0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " item = mmarliver['name'], \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " version=mmarliver['version'],\n",
+ " pretrained=True)\n",
+ "except: #MONAI<0.8\n",
+ " unet_model = load_from_mmar(\n",
+ " mmarliver, \n",
+ " mmar_dir=root_dir,\n",
+ " map_location=device,\n",
+ " pretrained=True)\n",
+ "model = unet_model.to(device)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "a79c1731",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "num_classesP=3\n",
+ "num_classesL=2\n",
+ "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classesP)])\n",
+ "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classesL)])\n",
+ "model.eval()\n",
+ "with torch.no_grad():\n",
+ " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n",
+ " test_inputs, test_labels = (\n",
+ " data[\"image\"].to(device),\n",
+ " data[\"label\"].to(device),\n",
+ " )\n",
+ " roi_size = (160, 160, 160)\n",
+ " sw_batch_size = 4\n",
+ " test_outputs = sliding_window_inference(\n",
+ " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n",
+ " test_outputsliv = [post_pred(i) for i in decollate_batch(test_outputs)] # Decollate our results\n",
+ " test_labelsliv = [post_label(i) for i in decollate_batch(test_labels)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "c0956706",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sliceval = 215\n",
+ "maskedliv = np.ma.masked_where(test_outputsliv[0].cpu().numpy()[1][:,:,sliceval] == 0, test_outputsliv[0].cpu().numpy()[1][:,:,sliceval])\n",
+ "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,:,sliceval] == 0, test_outputsSpl[0].cpu().numpy()[1][:,:,sliceval])\n",
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Pretrained Calculated Liver and spleen')\n",
+ "plt.imshow(np.rot90(test_ds[0]['image'][0][:,:,sliceval]), cmap='Greys_r')\n",
+ "plt.imshow(np.rot90(maskedliv), cmap='cividis', alpha=0.75)\n",
+ "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=0.75)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "5bdfdbe9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sliceval = 110\n",
+ "maskedliv = np.ma.masked_where(test_outputsliv[0].cpu().numpy()[1][:,sliceval,:] == 0, test_outputsliv[0].cpu().numpy()[1][:,sliceval,:])\n",
+ "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,sliceval,:] == 0, test_outputsSpl[0].cpu().numpy()[1][:,sliceval,:])\n",
+ "fig = plt.figure(frameon=False, figsize=(7,7))\n",
+ "plt.title('Pretrained Calculated Liver and Spleen')\n",
+ "plt.imshow(np.rot90(test_ds[0]['image'][0][:,sliceval,:]), cmap='Greys_r')\n",
+ "plt.imshow(np.rot90(maskedliv), cmap='cividis', alpha=0.75)\n",
+ "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=0.75)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "af1169b6",
+ "metadata": {},
+ "source": [
+ "#### Continue including more models found at the NGC Catalog: \n",
+ "#### https://catalog.ngc.nvidia.com/models\n",
+ "##### - Recommend filtering by 'CT' "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0dce4d55",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e17e6228",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7034135a",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "name": "pytorch-gpu.1-9.m75",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/pytorch-gpu.1-9:m75"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth b/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth
new file mode 100644
index 0000000..61ed04c
Binary files /dev/null and b/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth differ
diff --git a/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb b/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb
new file mode 100644
index 0000000..7c63a6e
--- /dev/null
+++ b/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb
@@ -0,0 +1,229 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "8c3f3bb2",
+ "metadata": {},
+ "source": [
+ "# Run ElasticBLAST on GCP"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "aee3b229",
+ "metadata": {},
+ "source": [
+ "This notebook is based on the [this tutorial](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/quickstart-gcp.html). If at any point, you get an API has not been enabled error, go to [this page](https://cloud.google.com/endpoints/docs/openapi/enable-api#console), click `Go to APIs and Services`, then search for you API and click `Enable`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "38dfb579",
+ "metadata": {},
+ "source": [
+ "### 1) Install elastic blast"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d96bb988",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!pip3 install elastic-blast"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "684e79f6",
+ "metadata": {},
+ "source": [
+ "Test your install, it should print out a version and full help menu."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2aa11ccc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!elastic-blast --version\n",
+ "!elastic-blast --help"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "58b59cb0",
+ "metadata": {},
+ "source": [
+ "### 2) Optionally, create a bucket for this tutorial if one does not yet exist"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "319ff226",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil ls gs://elasticblast-${USER} >& /dev/null || gsutil mb gs://elasticblast-${USER}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "38267c47-029c-4026-8dc1-6020f978e496",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!gsutil ls gs://elasticblast-jupyter"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "449d7511",
+ "metadata": {},
+ "source": [
+ "### 3) Create a config file that defines the job parameters"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d0017943-bbd3-472f-a3f8-30d88777f70a",
+ "metadata": {},
+ "source": [
+ "Confirm your user name to include in the config"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e4bd7452-79ea-4c8b-a13e-b46cff6a5564",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! echo ${USER}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b578c1ea",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!touch BDQA.ini"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a1b0a866",
+ "metadata": {},
+ "source": [
+ "Open the config file and add the following:\n",
+ "```\n",
+ "[cloud-provider]\n",
+ "gcp-project = YOUR_GCP_PROJECT_ID\n",
+ "gcp-region = us-east4\n",
+ "gcp-zone = us-east4-c\n",
+ "\n",
+ "[cluster]\n",
+ "num-nodes = 6\n",
+ "num-cpus = 30\n",
+ "labels = owner=jupyter\n",
+ "\n",
+ "[blast]\n",
+ "program = blastp\n",
+ "db = refseq_protein\n",
+ "queries = gs://elastic-blast-samples/queries/protein/BDQA01.1.fsa_aa\n",
+ "results = gs://elasticblast-jupyter/results/BDQA\n",
+ "options = -task blastp-fast -evalue 0.01 -outfmt \"7 std sskingdoms ssciname\"\n",
+ "```\n",
+ "Replace _YOUR_GCP_PROJECT_ID_ with your actual project ID. The default CPUs for the cluster is 16 CPUs, here we set it to 30 to allow enough CPUs per job.\n",
+ "\n",
+ "You can add additional configuration values from [this guide](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/configuration.html)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9a9f8192",
+ "metadata": {},
+ "source": [
+ "### 4) Submit the job"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "398253e8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!elastic-blast submit --cfg BDQA.ini"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9a8e7716",
+ "metadata": {},
+ "source": [
+ "### 5) Check results and troubleshoot"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "94a43c5e",
+ "metadata": {},
+ "source": [
+ "It should take a about 15-20 min to spin up your cluster and start submitting jobs. You can check the status of your job by opening a terminal within this instance, and paste in `elastic-blast status --cfg BDQA.ini`. You can also go to Kubernetes Engine and monitor the health of your cluster, or interact with the pods via `kubectl`. For example, in the terminal you can type `kubectl get pods`, to see your pods, then use `kubectl describe pods ` to get details of a particular pod, and use `kubectl logs ` to view the status of a particular pod. You can also monitor the cloud bucket with `!gsutil ls gs://elasticblast-jupyter/` to see if results files are being written."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74ce84e2-43db-46b3-b3e5-af401587e28a",
+ "metadata": {},
+ "source": [
+ "### 6) Clean up cloud resources"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3961d577-72b5-4a06-8597-7c724cf278c5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!elastic-blast delete --cfg BDQA.ini"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "common-cpu.m93",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb b/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb
new file mode 100644
index 0000000..4e77b08
--- /dev/null
+++ b/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb
@@ -0,0 +1,268 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1651316c",
+ "metadata": {},
+ "source": [
+ "# Query the NCBI STAT Metadata Tables to Search for Pathogens! "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15022f97",
+ "metadata": {},
+ "source": [
+ "## Overview\n",
+ "\n",
+ "DNA sequence data are typically deposited into the [NCBI Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra). Each FASTQ file is assigned a taxon id (usually a species) defined by [NCBI taxonomy](https://www.ncbi.nlm.nih.gov/taxonomy). So, if you were to search SRA for a particular species, such as _[Mus musculus](https://www.ncbi.nlm.nih.gov/sra/?term=Mus+musculus)_ we can find the files associated with this taxon as defined by the sequence submitter. There are three possible issues with this approach. First, sometime people make mistakes about the taxon id of their sequence. They may have said the sequence was a mouse when it was actually a dog, and you won't know until you have analyzed that sequence. Second, most FASTQ files have mixed DNA sequence due to some level of contamination. If the mouse DNA came from a tail tip, the FASTQ will likely be full of microbial sequence as well as mouse DNA! Finally, many samples in SRA are metagenomic, and so you really have no idea what DNA is in there until you analyze it.\n",
+ "\n",
+ "To address these issues, NCBI came up with a tool called the [SRA Taxonomy Analysis Tool]( https://www.ncbi.nlm.nih.gov/sra/docs/sra-taxonomy-analysis-tool/#:~:text=The%20NCBI%20SRA%20Taxonomy%20Analysis,from%20next%20generation%20sequencing%20runs), or STAT. STAT maps sequencing reads against a precomputed kmer dictionary and assigns reads to the lowest ambiguous taxonomic node (it is based on a known phylogeny). STAT is run for all SRA submissions, and the results are stored in Cloud-based metadata tables that can be queried using BigQuery. This table can then be matched to the SRA metadata tables to get robust information on each Accession. Here we walk through a basic STAT query for MPOX virus and teach you how to create your own queries. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b068c9da-7814-4b24-9ff8-12473048bdcf",
+ "metadata": {},
+ "source": [
+ "### 1) Import libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d2c3ec94-16cd-43b6-a4c9-d56aa593382e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import the biquery api\n",
+ "from google.cloud import bigquery\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "243fb23b-ec7e-423f-a531-9f39a1954087",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Designate the client for the API\n",
+ "client = bigquery.Client(location=\"US\")\n",
+ "print(\"Client creating using default project: {}\".format(client.project))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7ec384ad-732e-4cb9-b0ff-4b6addb6c2a7",
+ "metadata": {},
+ "source": [
+ "### 2) Define and run our query\n",
+ "Note that we are doing a few things here. First, we are going to query the STAT metadata table (nih-sra-datastore.sra_tax_analysis_tool.tax_analysis) and only get accessions that include Monkeypox virus (tax id = 10244). You could also cast a wider net and filter to Orthopox (10242) since many reads will not map unambiguously to Monkeypox and will be assigned to Orthopox. Second, we are going to JOIN this table with the SRA metadata table (nih-sra-datastore.sra.metadata) on the Accession number, this gives us more information about our record. Finally, we are going to only keep samples with at least 50 reads (total_count) assigned to the target tax id. This means that at least 50 reads need to be assigned to Monkeypox or daughter nodes in the phylogeny. Also we are going to look for records submitted anytime in the past 5 years (INTERVAL parameter)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7fb2102a-4f91-4002-a521-db31f7271045",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Define the query\n",
+ "query = \"\"\"\n",
+ "#standardSQL\n",
+ "WITH\n",
+ " span AS (\n",
+ " SELECT\n",
+ " acc,\n",
+ " ileft AS rileft,\n",
+ " iright AS riright\n",
+ " FROM\n",
+ " nih-sra-datastore.sra_tax_analysis_tool.tax_analysis\n",
+ " WHERE\n",
+ " tax_id = 10244 )\n",
+ "SELECT\n",
+ " acc,\n",
+ " name,\n",
+ " total_count,\n",
+ " self_count,\n",
+ " center_name,\n",
+ " librarysource,\n",
+ " organism,\n",
+ " releasedate,\n",
+ " geo_loc_name_sam,\n",
+ " attributes\n",
+ "FROM\n",
+ " nih-sra-datastore.sra_tax_analysis_tool.tax_analysis\n",
+ "JOIN\n",
+ " nih-sra-datastore.sra.metadata\n",
+ "USING\n",
+ " (acc)\n",
+ "JOIN\n",
+ " span\n",
+ "USING\n",
+ " (acc)\n",
+ "WHERE\n",
+ " (ileft>=rileft\n",
+ " AND iright<=riright)\n",
+ " AND (total_count>99\n",
+ " OR organism='wastewater metagenome')\n",
+ " AND CAST(releasedate AS date) > DATE_SUB(CURRENT_DATE(), INTERVAL 120 month)\n",
+ "ORDER BY\n",
+ " releasedate DESC,\n",
+ " acc,\n",
+ " total_count DESC\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "214bdba1-173f-4ea8-9189-b06711de90c3",
+ "metadata": {},
+ "source": [
+ "Execute the query"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9722d4d4-3150-47cf-81fd-141de19488ea",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "query_job = client.query(\n",
+ " query,\n",
+ " # Location must match that of the dataset(s) referenced in the query.\n",
+ " location=\"US\",\n",
+ ") # API request - starts the query\n",
+ "\n",
+ "df = query_job.to_dataframe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f0d15f46-1f59-479a-9ba7-6b1f412188eb",
+ "metadata": {},
+ "source": [
+ "See how many unique accessions are in the df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fcd6b33a-f4ef-452f-b9e8-3b54b86d98b9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "len(df['acc'].unique())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "410acf31-3fc1-4394-98eb-92e0993ca5d9",
+ "metadata": {},
+ "source": [
+ "Now view the data frame. You will see that we first have the STAT metadata and then the SRA metadata such as submitter-assigned organism name, library source, release date etc. In the STAT metadata there are a few things to note. First, each tax id (name) with reads assigned from that accession is listed with the accession. So if the accession SRR12345 had reads assigned to both Monkeypox virus and variola virus, then you would see two records of that accession with both virus' listed under name. Next we have the numbers of reads (in NCBI parlance 'spots') assigned to that taxon id. We see two counts: total_count and self_count. Total count refers to the number of reads assigned to that node in the phylogeny (taxon) and all daughter nodes (decendents in the phylogeny). Self count refers to the number of reads assigned to that particular taxon. For example, if we had filtered more broadly to Orthopox (genus) instead of Monkeypox, we would have seen that Orthopox would have a total count of say 100 reads, which includes all reads assigned to any taxon within Orthopox with a self count of say 50. Then Monkeypox could have a total count of 50 and self count of 50 (assuming it is the terminal taxon in the tree with no daughter taxa). These 50 reads would be included in the total count of Orthopox, but not the self count of Orthopox. You can see all the STAT metadata fields [here](https://www.ncbi.nlm.nih.gov/sra/docs/sra-cloud-based-taxonomy-analysis-table/)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "28f5f9ef-2d19-470d-abaf-ccb4e008b626",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# look at the df\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "197596ef-6bad-439f-bf8d-f9e3f2ae481b",
+ "metadata": {},
+ "source": [
+ "Now we have a pandas data frame and you can filter and manipulate as desired."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b2a264f3-329c-428b-bb58-28826abf444a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(df['organism'].unique())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dd4578f8-354d-44b6-9afb-adb6b6278302",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# for example we can look at just wastewater samples \n",
+ "df_filt = df[df['organism'] == 'wastewater metagenome']\n",
+ "df_filt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cb2f0320-54e4-499c-8925-57b539d20e34",
+ "metadata": {},
+ "source": [
+ "You can also write to an outfile."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bb8698e0-21bd-4282-b2cb-04160a33b6f2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Specify the columns to be written to the text file\n",
+ "columns_to_write = [\"acc\",\"name\",\"total_count\",\"self_count\",\"center_name\",\"librarysource\",\"organism\",\"releasedate\",\"geo_loc_name_sam\"]\n",
+ "\n",
+ "# Write the specified columns to a text file\n",
+ "output_file = 'stat_results_mpox.txt'\n",
+ "df[columns_to_write].to_csv(output_file, sep='\\t', index=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "04eabbd9-24dc-4035-8dee-dd6f049a3270",
+ "metadata": {},
+ "source": [
+ "If you want to experiment a bit, rerun the query with a different tax id, modify the total_count, and modify the time Interval and see how your results change. Or, we can run a few more example queries from the [NCBI STAT page](https://www.ncbi.nlm.nih.gov/sra/docs/sra-cloud-based-taxonomy-analysis-table/). "
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m109",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m109"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb b/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb
new file mode 100644
index 0000000..b46421c
--- /dev/null
+++ b/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb
@@ -0,0 +1,424 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "31e8c3cd",
+ "metadata": {},
+ "source": [
+ "# Pangolin SARS-CoV-2 Pipeline Notebook "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "56a29212",
+ "metadata": {},
+ "source": [
+ "We are going to run a standard covid bioinformatics pipeline using the Pangolin workflow. https://cov-lineages.org/resources/pangolin/usage.html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "03541941",
+ "metadata": {},
+ "source": [
+ "### Required software"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "f994b990",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "env: CPU=4\n"
+ ]
+ }
+ ],
+ "source": [
+ "#change this depending on how many threads are available in your notebook\n",
+ "%env CPU=4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f421805e",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#install biopython to import packages below\n",
+ "! pip install biopython"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "87c08f11-494f-4aa9-9fe9-61790b68567f",
+ "metadata": {},
+ "source": [
+ "### Install mambaforge\n",
+ "You can also use the default installed conda, but mamba is so much faster! "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f9d1e2be-9c4a-4fc0-be33-1f3db8f1dce1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n",
+ "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "cd06e08b-6ba3-49e2-a118-fde1533f89f3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#add to your path\n",
+ "import os\n",
+ "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "fd936fd6",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ " __ __ __ __\n",
+ " / \\ / \\ / \\ / \\\n",
+ " / \\/ \\/ \\/ \\\n",
+ "███████████████/ /██/ /██/ /██/ /████████████████████████\n",
+ " / / \\ / \\ / \\ / \\ \\____\n",
+ " / / \\_/ \\_/ \\_/ \\ o \\__,\n",
+ " / _/ \\_____/ `\n",
+ " |/\n",
+ " ███╗ ███╗ █████╗ ███╗ ███╗██████╗ █████╗\n",
+ " ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗\n",
+ " ██╔████╔██║███████║██╔████╔██║██████╔╝███████║\n",
+ " ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║\n",
+ " ██║ ╚═╝ ██║██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║\n",
+ " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝\n",
+ "\n",
+ " mamba (1.4.2) supported by @QuantStack\n",
+ "\n",
+ " GitHub: https://github.com/mamba-org/mamba\n",
+ " Twitter: https://twitter.com/QuantStack\n",
+ "\n",
+ "█████████████████████████████████████████████████████████████\n",
+ "\n",
+ "\n",
+ "Looking for: ['sra-tools', 'pangolin', 'ete3', 'minimap2']\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "bioconda/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "bioconda/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "etetoolkit/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "bioconda/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "bioconda/noarch \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "etetoolkit/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 No change\n",
+ "bioconda/noarch No change\n",
+ "[+] 0.3s\n",
+ "conda-forge/noarch \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "bioconda/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "etetoolkit/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "etetoolkit/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/r/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch No change\n",
+ "bioconda/linux-64 No change\n",
+ "etetoolkit/noarch No change\n",
+ "etetoolkit/linux-64 No change\n",
+ "pkgs/r/noarch No change\n",
+ "pkgs/main/noarch No change\n",
+ "pkgs/r/linux-64 No change\n",
+ "[+] 0.4s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/linux-64 No change\n",
+ "\u001b[?25h\n",
+ "Pinned packages:\n",
+ " - python 3.10.*\n",
+ "\n",
+ "\n",
+ "Transaction\n",
+ "\n",
+ " Prefix: /opt/conda\n",
+ "\n",
+ " Updating specs:\n",
+ "\n",
+ " - sra-tools\n",
+ " - pangolin\n",
+ " - ete3\n",
+ " - minimap2\n",
+ " - ca-certificates\n",
+ " - certifi\n",
+ " - openssl\n",
+ "\n",
+ "\n",
+ " Package Version Build Channel Size\n",
+ "───────────────────────────────────────────────────────────────\n",
+ " Install:\n",
+ "───────────────────────────────────────────────────────────────\n",
+ "\n",
+ " \u001b[32m+ k8 \u001b[0m 0.2.5 hdcf5f25_4 bioconda/linux-64 2MB\n",
+ " \u001b[32m+ minimap2\u001b[0m 2.26 he4a0461_2 bioconda/linux-64 1MB\n",
+ "\n",
+ " Summary:\n",
+ "\n",
+ " Install: 2 packages\n",
+ "\n",
+ " Total download: 3MB\n",
+ "\n",
+ "───────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "Downloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B 0.0s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "Downloading (2) \u001b[33m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B k8 0.0s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gk8 1.8MB @ 11.4MB/s 0.2s\n",
+ "minimap2 1.1MB @ 6.7MB/s 0.2s\n",
+ "[+] 0.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n",
+ "Extracting (2) \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0 k8 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n",
+ "Extracting (2) \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 0 k8 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n",
+ "Extracting (1) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 1 k8 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25h\n",
+ "Downloading and Extracting Packages\n",
+ "\n",
+ "Preparing transaction: done\n",
+ "Verifying transaction: done\n",
+ "Executing transaction: done\n"
+ ]
+ }
+ ],
+ "source": [
+ "! mamba install -y -c conda-forge -c bioconda -c etetoolkit sra-tools pangolin ete3 minimap2 -y"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5a99cf0d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#import libraries\n",
+ "import os\n",
+ "from Bio import SeqIO\n",
+ "from Bio import Entrez"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dc694629",
+ "metadata": {},
+ "source": [
+ "### Set up your directory structure and remove files from previous runs if they exist"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8f831fca",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "if not os.path.exists('pangolin_analysis'):\n",
+ " os.mkdir('pangolin_analysis')\n",
+ "os.chdir('pangolin_analysis')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6423ca5d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "if os.path.exists('sarscov2_sequences.fasta'):\n",
+ " os.remove('sarscov2_sequences.fasta')\n",
+ "!rm sarscov2_*\n",
+ "!rm lineage_report.csv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d7015e6",
+ "metadata": {},
+ "source": [
+ "### Fetch viral sequences using a list of accession IDs"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "16824bcf",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#give a list of accession number for sars sequences\n",
+ "acc_nums=['NC_045512','LR757995','LR757996','OL698718','OL677199','OL672836','MZ914912','MZ916499','MZ908464','MW580573','MW580574','MW580576','MW991906','MW931310','MW932027','MW424864','MW453109','MW453110']\n",
+ "print('the number of sequences we will analyze = ',len(acc_nums))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9e382d33",
+ "metadata": {},
+ "source": [
+ "Let this block run without going to the next until it finishes, otherwise you may get an error about too many requests. If that happens, reset your kernel and just rerun everything (except installing software)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a28a7122",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#use the bio.entrez toolkit within biopython to download the accession numbers\n",
+ "#save those sequences to a single fasta file\n",
+ "Entrez.email = \"email@example.com\" # ell NCBI who you are\n",
+ "filename = \"sarscov2_seqs.fasta\"\n",
+ "if not os.path.isfile(filename):\n",
+ " # Downloading...\n",
+ " for acc in acc_nums:\n",
+ " net_handle = Entrez.efetch(\n",
+ " db=\"nucleotide\", id=acc, rettype=\"fasta\", retmode=\"text\"\n",
+ " )\n",
+ " out_handle = open(filename, \"a\")\n",
+ " out_handle.write(net_handle.read())\n",
+ " out_handle.close()\n",
+ " net_handle.close()\n",
+ " print(\"Saved\",acc)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "56acb7cc",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#make sure our fasta file has the same number of seqs as the acc_nums list\n",
+ "print('the number of seqs in our fasta file: ')\n",
+ "! grep '>' sarscov2_seqs.fasta | wc -l"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8606c352",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#let's peek at our new fasta file\n",
+ "! head sarscov2_seqs.fasta"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2db37b4e",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "### Run pangolin to identify lineages and output alignment\n",
+ "Here we call pangolin, give it our input sequences and the number of threads. We also tell it to output the alignment. The full list of pangolin parameters can be found in the [docs](https://cov-lineages.org/resources/pangolin/usage.html)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f277c6c4-a286-4020-8e1c-3941f3da9035",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! pangolin --help"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f1a17a74",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "! pangolin sarscov2_seqs.fasta --threads $CPU"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b0e56a4b",
+ "metadata": {},
+ "source": [
+ "You can view the output file from pangolin called lineage_report.csv (within pangolin_analysis folder) by double clicking on the file, or by right clicking and downloading. What lineages are present in the dataset? Is Omicron in there?"
+ ]
+ }
+ ],
+ "metadata": {
+ "environment": {
+ "kernel": "python3",
+ "name": "tf2-gpu.2-11.m110",
+ "type": "gcloud",
+ "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}