--- a +++ b/notebooks/resource-allocation/102023.1.ipynb @@ -0,0 +1,499 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import seaborn as sns\n", + "from datetime import datetime, timedelta, date\n", + "from humanize import naturalsize\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Qiita's resource allocation - quick update from previous version\n", + "\n", + "After the 2023.10 release we noticed that:\n", + "1. `job-output-folder` `VALIDATE` command didn't have valid request because those jobs do not have sample/column values\n", + "2. The default during a resource allocation for time is minutes and the calculations were done in seconds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Loading data\n", + "\n", + "First you will need to run `generate-allocation-summary.py` in Qiita as the qiita user (or whatever user runs qiita in your system). The resulting file would be: `job_[date].tsv.gz`.\n", + "\n", + "The generated file will have these columns: `['JobID', 'ElapsedRaw', 'MaxRSS', 'Submit', 'Start', 'MaxRSS.1', 'CPUTimeRAW', 'ReqMem', 'AllocCPUS', 'AveVMSize', 'QiitaID', 'external_id', 'sId', 'sName', 'sVersion', 'cId', 'cName', 'samples', 'columns', 'input_size', 'extra_info'],`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "m1g = 2**30\n", + "df = pd.read_csv('jobs_2023-10-04.tsv.gz', sep='\\t', dtype={'extra_info': str})\n", + "df['ElapsedRawTime'] = pd.to_timedelta(df.ElapsedRawTime)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'There are 101147 successful jobs since we moved to barnacle2 and the largest external_id is: 1581986'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# for reference for the next iteration of this notebook\n", + "f'There are {df.shape[0]} successful jobs since we moved to barnacle2 and the largest external_id is: {df.external_id.max()}'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Getting the default values for `job-output-folder` `VALIDATE`" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead tr th {\n", + " text-align: left;\n", + " }\n", + "\n", + " .dataframe thead tr:last-of-type th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr>\n", + " <th></th>\n", + " <th></th>\n", + " <th colspan=\"3\" halign=\"left\">ElapsedRawTime</th>\n", + " <th colspan=\"3\" halign=\"left\">MaxRSSRaw</th>\n", + " </tr>\n", + " <tr>\n", + " <th></th>\n", + " <th></th>\n", + " <th>count</th>\n", + " <th>min</th>\n", + " <th>max</th>\n", + " <th>count</th>\n", + " <th>min</th>\n", + " <th>max</th>\n", + " </tr>\n", + " <tr>\n", + " <th>cName</th>\n", + " <th>sName</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th rowspan=\"12\" valign=\"top\">Validate</th>\n", + " <th>BIOM type - BIOM</th>\n", + " <td>687</td>\n", + " <td>0 days 00:00:55</td>\n", + " <td>0 days 01:03:49</td>\n", + " <td>687</td>\n", + " <td>222.8 MB</td>\n", + " <td>82.0 GB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Diversity types - FeatureData</th>\n", + " <td>6</td>\n", + " <td>0 days 00:01:20</td>\n", + " <td>0 days 00:02:49</td>\n", + " <td>6</td>\n", + " <td>331.4 MB</td>\n", + " <td>384.3 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Diversity types - alpha_vector</th>\n", + " <td>123</td>\n", + " <td>0 days 00:01:12</td>\n", + " <td>3 days 04:36:54</td>\n", + " <td>123</td>\n", + " <td>289.3 MB</td>\n", + " <td>101.5 GB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Diversity types - distance_matrix</th>\n", + " <td>117</td>\n", + " <td>0 days 00:00:37</td>\n", + " <td>0 days 00:03:55</td>\n", + " <td>117</td>\n", + " <td>122.7 MB</td>\n", + " <td>12.5 GB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Diversity types - ordination_results</th>\n", + " <td>107</td>\n", + " <td>0 days 00:00:39</td>\n", + " <td>0 days 00:03:19</td>\n", + " <td>107</td>\n", + " <td>117.2 MB</td>\n", + " <td>2.9 GB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Sequencing Data Type - Demultiplexed</th>\n", + " <td>43</td>\n", + " <td>0 days 00:00:35</td>\n", + " <td>0 days 00:12:23</td>\n", + " <td>43</td>\n", + " <td>83.4 MB</td>\n", + " <td>517.4 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Sequencing Data Type - FASTA</th>\n", + " <td>2</td>\n", + " <td>0 days 00:00:56</td>\n", + " <td>0 days 00:02:23</td>\n", + " <td>2</td>\n", + " <td>79.8 MB</td>\n", + " <td>83.6 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Sequencing Data Type - FASTQ</th>\n", + " <td>32</td>\n", + " <td>0 days 00:00:41</td>\n", + " <td>0 days 01:50:44</td>\n", + " <td>32</td>\n", + " <td>78.7 MB</td>\n", + " <td>84.4 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Sequencing Data Type - SFF</th>\n", + " <td>1</td>\n", + " <td>0 days 00:01:09</td>\n", + " <td>0 days 00:01:09</td>\n", + " <td>1</td>\n", + " <td>79.6 MB</td>\n", + " <td>79.6 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Sequencing Data Type - per_sample_FASTQ</th>\n", + " <td>73</td>\n", + " <td>0 days 00:00:36</td>\n", + " <td>0 days 18:13:21</td>\n", + " <td>73</td>\n", + " <td>77.6 MB</td>\n", + " <td>83.6 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>Visualization types - q2_visualization</th>\n", + " <td>133</td>\n", + " <td>0 days 00:00:36</td>\n", + " <td>0 days 00:24:56</td>\n", + " <td>133</td>\n", + " <td>51.5 MB</td>\n", + " <td>67.5 MB</td>\n", + " </tr>\n", + " <tr>\n", + " <th>qtp-job-output-folder - job-output-folder</th>\n", + " <td>228</td>\n", + " <td>0 days 00:00:31</td>\n", + " <td>0 days 00:04:06</td>\n", + " <td>228</td>\n", + " <td>18.3 MB</td>\n", + " <td>46.7 MB</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " ElapsedRawTime \\\n", + " count \n", + "cName sName \n", + "Validate BIOM type - BIOM 687 \n", + " Diversity types - FeatureData 6 \n", + " Diversity types - alpha_vector 123 \n", + " Diversity types - distance_matrix 117 \n", + " Diversity types - ordination_results 107 \n", + " Sequencing Data Type - Demultiplexed 43 \n", + " Sequencing Data Type - FASTA 2 \n", + " Sequencing Data Type - FASTQ 32 \n", + " Sequencing Data Type - SFF 1 \n", + " Sequencing Data Type - per_sample_FASTQ 73 \n", + " Visualization types - q2_visualization 133 \n", + " qtp-job-output-folder - job-output-folder 228 \n", + "\n", + " \\\n", + " min \n", + "cName sName \n", + "Validate BIOM type - BIOM 0 days 00:00:55 \n", + " Diversity types - FeatureData 0 days 00:01:20 \n", + " Diversity types - alpha_vector 0 days 00:01:12 \n", + " Diversity types - distance_matrix 0 days 00:00:37 \n", + " Diversity types - ordination_results 0 days 00:00:39 \n", + " Sequencing Data Type - Demultiplexed 0 days 00:00:35 \n", + " Sequencing Data Type - FASTA 0 days 00:00:56 \n", + " Sequencing Data Type - FASTQ 0 days 00:00:41 \n", + " Sequencing Data Type - SFF 0 days 00:01:09 \n", + " Sequencing Data Type - per_sample_FASTQ 0 days 00:00:36 \n", + " Visualization types - q2_visualization 0 days 00:00:36 \n", + " qtp-job-output-folder - job-output-folder 0 days 00:00:31 \n", + "\n", + " MaxRSSRaw \\\n", + " max count \n", + "cName sName \n", + "Validate BIOM type - BIOM 0 days 01:03:49 687 \n", + " Diversity types - FeatureData 0 days 00:02:49 6 \n", + " Diversity types - alpha_vector 3 days 04:36:54 123 \n", + " Diversity types - distance_matrix 0 days 00:03:55 117 \n", + " Diversity types - ordination_results 0 days 00:03:19 107 \n", + " Sequencing Data Type - Demultiplexed 0 days 00:12:23 43 \n", + " Sequencing Data Type - FASTA 0 days 00:02:23 2 \n", + " Sequencing Data Type - FASTQ 0 days 01:50:44 32 \n", + " Sequencing Data Type - SFF 0 days 00:01:09 1 \n", + " Sequencing Data Type - per_sample_FASTQ 0 days 18:13:21 73 \n", + " Visualization types - q2_visualization 0 days 00:24:56 133 \n", + " qtp-job-output-folder - job-output-folder 0 days 00:04:06 228 \n", + "\n", + " \n", + " min max \n", + "cName sName \n", + "Validate BIOM type - BIOM 222.8 MB 82.0 GB \n", + " Diversity types - FeatureData 331.4 MB 384.3 MB \n", + " Diversity types - alpha_vector 289.3 MB 101.5 GB \n", + " Diversity types - distance_matrix 122.7 MB 12.5 GB \n", + " Diversity types - ordination_results 117.2 MB 2.9 GB \n", + " Sequencing Data Type - Demultiplexed 83.4 MB 517.4 MB \n", + " Sequencing Data Type - FASTA 79.8 MB 83.6 MB \n", + " Sequencing Data Type - FASTQ 78.7 MB 84.4 MB \n", + " Sequencing Data Type - SFF 79.6 MB 79.6 MB \n", + " Sequencing Data Type - per_sample_FASTQ 77.6 MB 83.6 MB \n", + " Visualization types - q2_visualization 51.5 MB 67.5 MB \n", + " qtp-job-output-folder - job-output-folder 18.3 MB 46.7 MB " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cname = 'Validate'\n", + "_df = df[(df.cName == cname)].copy()\n", + "\n", + "summary = _df[_df['samples'].isnull() & _df['columns'].isnull()].groupby(\n", + " ['cName', 'sName'])[['ElapsedRawTime', 'MaxRSSRaw']].agg(['count', 'min', 'max']).copy()\n", + "\n", + "summary[('MaxRSSRaw', 'min')] = summary[('MaxRSSRaw', 'min')].apply(naturalsize)\n", + "summary[('MaxRSSRaw', 'max')] = summary[('MaxRSSRaw', 'max')].apply(naturalsize)\n", + "\n", + "display(summary)\n", + "\n", + "# New allocation: -p qiita -N 1 -n 1 --mem 100mb --time 00:40:00" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Updates for the seconds to minute confusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**30)+({samples}*150000) '\n", + " || '--time 240'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**30)+({samples}*150000) '\n", + " || '--time 4'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'delete_sample_or_column';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem {samples}*10000000'\n", + " || '--time 61200'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem {samples}*10000000'\n", + " || '--time 1020'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Sequence Processing Pipeline';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 --mem 4g --time 900'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 --mem 4g --time 15'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Filter samples from table [filter_samples]';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**31)+({input_size}*6) if\n", + "(2**31)+({input_size}*6) < 13958643712 else 13958643712 '\n", + " || '--time 2400'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**31)+({input_size}*6) if\n", + "(2**31)+({input_size}*6) < 13958643712 else 13958643712 '\n", + " || '--time 40'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Rarefy table [rarefy]';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem 14g'\n", + " || '--time 360'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem 14g '\n", + " || '--time 6'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Alpha diversity (phylogenetic) [alpha_phylogenetic]';\n", + "\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**33)+(2**30)+(({samples}*{columns}*{input_size})/4500000)'\n", + " || '--time 1800'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem\n", + "(2**33)+(2**30)+(({samples}*{columns}*{input_size})/4500000) '\n", + " || '--time 30'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Visualize and Interact with Principal Coordinates Analysis\n", + "Plots [plot]';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**32)+(({samples}*{columns}*{input_size}')/20000)'\n", + " || '--time 90000'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**32)+(({samples}*{columns}*{input_size})/20000) '\n", + " || '--time 1500'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Alpha rarefaction curves [alpha_rarefaction]';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem 2*(2**30)+{input_size} if 2*(2**30)+{input_size} < 16*(2**30) else 16*(2**30)'\n", + " || '--time 36000'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem 2*(2**30)+{input_size} if 2*(2**30)+{input_size}\n", + "< 16*(2**30) else 16*(2**30) '\n", + " || '--time 600'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'Trimming';\n", + "\n", + "=============\n", + "=============\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**30)+({samples}*{columns}*2000)'\n", + " || '--time 2300'\n", + "\n", + "UPDATE qiita.processing_job_resource_allocation set\n", + " allocation = '-p qiita -N 1 -n 1 '\n", + " || '--mem (2**30)+({samples}*{columns}*2000) '\n", + " || '--time 39'\n", + " WHERE job_type = 'RESOURCE_PARAMS_COMMAND' and\n", + " name = 'update_sample_template';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}