{ "cells": [ { "cell_type": "markdown", "id": "0", "metadata": {}, "source": [ "# A2 – Initial-Conditions Ingestion Benchmark\n", "\n", "Benchmarks end-to-end ingestion time for all IC backends available in `aifs_modal`:\n", "\n", "| # | Backend | Runs | Source | Credentials |\n", "|---|---------|------|--------|-------------|\n", "| 1 | **IFS from open-data** | local | ECMWF open-data S3 (AWS) | none |\n", "| 2 | **ERA5 from CDS** | local | Copernicus CDS API | `~/.cdsapirc` or `CDSAPI_*` env vars |\n", "| 3 | **IFS from Brightband** | Modal (`us-east`) | Brightband ECMWF IFS on ArrayLake (zarr) | `ARRAYLAKE_API_TOKEN` |\n", "| 4 | **ERA5 from ARCO** | Modal (`us-central1`) | Google Cloud Storage zarr (anonymous) | none |\n", "\n", "Local backends (1–2) write to a temporary directory; Modal backends (3–4) write into the shared IC Volume. The comparison covers the full round trip: `fetch → regrid → zarr write`.\n", "\n", "Each benchmark ingests **two timesteps** (t-6h and t) — the minimum needed for a forecast.\n", "\n", "> **Prerequisites:** `~/.cdsapirc` or `CDSAPI_URL`/`CDSAPI_KEY` env vars for ERA5 from CDS; `ARRAYLAKE_API_TOKEN` for Brightband; a Modal workspace for ARCO." ] }, { "cell_type": "code", "execution_count": null, "id": "1", "metadata": {}, "outputs": [], "source": [ "import datetime as dt\n", "import tempfile\n", "import time\n", "\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "\n", "import aifs_modal\n", "from aifs_modal import _ingest_ekd" ] }, { "cell_type": "markdown", "id": "2", "metadata": {}, "source": [ "## Configuration\n", "\n", "Two consecutive 6-hourly analysis dates (t-6h and t). Each backend fetches\n", "~94 global variables, regrids from 0.25° lat/lon to N320, and writes two zarr\n", "groups into the target bucket.\n", "\n", "Set `STORAGE_BUCKET` to a bucket you can write to, and the `PREFIX_*`\n", "values to throwaway key prefixes — this notebook will write and commit real\n", "data there." ] }, { "cell_type": "code", "execution_count": null, "id": "3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IFS dates : 2026-05-11T18:00:00+00:00 → 2026-05-12T00:00:00+00:00\n", "ERA5 dates : 2026-05-06T18:00:00+00:00 → 2026-05-07T00:00:00+00:00\n" ] } ], "source": [ "# Brightband source repo (ECMWF IFS initial conditions on ArrayLake)\n", "SOURCE_AL_REPO = \"martibosch/ecmwf-ifs-hres-ics-open\"\n", "\n", "_today_00z = dt.datetime.now(dt.UTC).replace(hour=0, minute=0, second=0, microsecond=0)\n", "\n", "# IFS sources (ifs-arraylake): 2 days ago — safely within all rolling windows\n", "_ifs_end = _today_00z - dt.timedelta(days=2)\n", "IFS_DATE_START = (_ifs_end - dt.timedelta(hours=6)).isoformat()\n", "IFS_DATE_END = _ifs_end.isoformat()\n", "\n", "# ERA5 sources (era5-arco): 7 days ago — past the ~5-day publication lag\n", "_era5_end = _today_00z - dt.timedelta(days=7)\n", "ERA5_DATE_START = (_era5_end - dt.timedelta(hours=6)).isoformat()\n", "ERA5_DATE_END = _era5_end.isoformat()\n", "\n", "print(f\"IFS dates : {IFS_DATE_START} → {IFS_DATE_END}\")\n", "print(f\"ERA5 dates : {ERA5_DATE_START} → {ERA5_DATE_END}\")" ] }, { "cell_type": "markdown", "id": "4", "metadata": {}, "source": [ "## 1. IFS initial conditions from CDS (local)\n", "\n", "Fetches ECMWF open-data GRIB from AWS, regrids to N320, and writes the\n", "zarr group to the target bucket. No credentials needed." ] }, { "cell_type": "code", "execution_count": null, "id": "5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1/2] ingesting ifs-ekd 2026-05-11T18:00:00+00:00\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "eece1380f2224a94ae21e75383d044bb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "20260511180000-0h-scda-fc.grib2: 0%| | 0.00/854k [00:00: 0%| | 0.00/1.21M [00:00: 0%| | 0.00/5.61M [00:00: 0%| | 0.00/7.74M [00:00: 0%| | 0.00/8.85M [00:00: 0%| | 0.00/9.14M [00:00: 0%| | 0.00/15.1M [00:00: 0%| | 0.00/8.79M [00:00: 0%| | 0.00/1.21M [00:00: 0%| | 0.00/5.61M [00:00: 0%| | 0.00/7.61M [00:00: 0%| | 0.00/8.83M [00:00: 0%| | 0.00/9.13M [00:00: 0%| | 0.00/15.3M [00:00: 0%| | 0.00/8.89M [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 elapsed_sspeedup
backend  
IFS from open-data (local)233.8 s1.1×
ERA5 from CDS (local)252.3 s1.0×
IFS from Brightband (Modal us-east)43.9 s5.7×
ERA5 from ARCO (Modal us-central1)124.2 s2.0×
\n" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = pd.DataFrame(\n", " {\n", " \"backend\": [\n", " \"IFS from open-data (local)\",\n", " \"ERA5 from CDS (local)\",\n", " \"IFS from Brightband (Modal us-east)\",\n", " \"ERA5 from ARCO (Modal us-central1)\",\n", " ],\n", " \"elapsed_s\": [\n", " ifs_ekd_elapsed,\n", " era5_cds_elapsed,\n", " ifs_al_elapsed,\n", " era5_arco_elapsed,\n", " ],\n", " }\n", ").set_index(\"backend\")\n", "results[\"speedup\"] = results[\"elapsed_s\"].max() / results[\"elapsed_s\"]\n", "results.style.format({\"elapsed_s\": \"{:.1f} s\", \"speedup\": \"{:.1f}×\"})" ] }, { "cell_type": "code", "execution_count": null, "id": "14", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABI0AAAHVCAYAAAB8LQsJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAqd9JREFUeJzt3QecE9X6+P+DVLEgYBcs116wYUHsoiJWQMWGwrUrFgQbeu0Fxati99p7v2BDRWzYu1x7xw52Qewl/9fnfP8nv9kku5tddpdl+bxfryibTCaTnJnJnCfPeU6zXC6XC5IkSZIkSVLGbNk/JEmSJEmSJINGkiRJkiRJKslMI0mSJEmSJBUxaCRJkiRJkqQiBo0kSZIkSZJUxKCRJEmSJEmSihg0kiRJkiRJUhGDRpIkSZIkSSpi0EiSJEmSJElFDBpJkhRCuOaaa0KzZs3Ciy++WKvPg+eeeOKJ+b/ffPPN+PdHH31UtOzAgQPD4osvXqvXmZ7nzkh8DnxGfM4Jnw/3ZV188cUVlqnq+Y3JRhttFG8zi59//jl+/o899lilx0Kpfbe+zaztL0lSU9ViRm+AJElNwTPPPBM6depUIWh00kknxUBCYZDnuOOOC4ceemiY1e29995hiy22KAoazDvvvDE4lrXQQgvFz3jJJZcMjRHbPTMhaMT+icJg11ZbbRU/az7zhjaztr8kSU2VQSNJkupAt27dyl7Wju//IciWDbRVpXXr1jX6jBvaCiusEJqK+eabL94ak8be/pIkNVUOT5MkqRJkO8w555zh/fffD1tuuWX8d+fOncPQoUPDb7/9VunwNIbQ7LjjjvHfG2+8cXwsO7Sm1BCziy66KGywwQZh/vnnD3PMMUfo0qVLGDFiRPjjjz+mq31uuummsM4668Rt57bqqquGK6+8ssIyV111VVhllVVCmzZtQocOHUKfPn3CW2+9VevP4osvvgj9+vULc801V2jXrl3YaaedwuTJk4u2rXB4Gp/JG2+8EcaPH5//zNLnVNnwpCeffDL06NEjvlbbtm1D9+7dw5gxY0oOt3r00UfDAQccEDNZOnbsGPr27Ru3NeuRRx6JmTc8Pvvss4dFF100bL/99jEzpybD09L2/vvf/w7nnHNOWGKJJeJnRls8++yzRc+//PLLwzLLLBODIwSgaLdS+8nvv/8eTj311LDccsvFZQnu/POf/wxff/112e+DbUtBIbKN0medsnsqG55W1/tJoZq2f9p/Xn311Xi8sa+xXUOGDAl//vlneOedd2ImG/sG6+F4KjR16tRw+OGHx/Zp1apVWGSRRcLgwYPDTz/9VOW2SpI0qzBoJElSFQjabLvttjEwcdddd4U999wznHvuueHMM8+s9DkM7zn99NPzwSCG1XDj/sp88MEHYddddw3XX399uPfee8Nee+0VzjrrrLDffvvVun2OP/74sNtuu4WFF144drZHjx4dBgwYED7++OP8MsOHD4+vteKKK4ZRo0aF8847L3bCCW689957Nf4sfvnll7DpppuGBx98MK779ttvDwsuuGAMHFWH7fvHP/4RVltttfxnxn2VIbiwySabhClTpsRA2M033xwDBNtss0249dZbSw6Ha9myZQzIEECgnk///v3zjxOYoI0IHhAgeeCBB8IZZ5wRg3gEa2qD9h83blwYOXJkuPHGG2MwgmAK25xcdtllYd999w0rr7xybIN//etfMZhTWG/o77//Dtttt13cJvYVgmP8m/UTIOKzL+d9MNSL+0Dbp8+aYZOVqev9pC7aPyFASTDrv//9b9hnn33iax122GGhd+/e8XNgHewnRx11VNz2hADahhtuGK699tpwyCGHhPvvvz8uw7HC9udyuWpfW5KkJi8nSZJyV199NT3E3AsvvJD/NAYMGBDvu+222yp8QltuuWVu2WWXrXAfy51wwgn5v2+//fZ436OPPlr06bLexRZbrNJP/a+//sr98ccfueuuuy7XvHnz3HfffVf2c5MPP/wwPne33XardJnvv/8+N/vss8f3k/XJJ5/kWrdundt1111r/Flccsklcbm77rqrwnL77LNPvJ/POeHzKrwUWXHFFXMbbrhh0bZOnDix6PndunXLzT///Lkff/wxf9+ff/6ZW2mllXKdOnXK/f333xXa9sADD6ywzhEjRsT7J02aFP++44474t8TJkzI1RTbnN3utL1dunSJ25Q8//zz8f6bb74539YLLrhgbu21166wvo8//jjXsmXLCm3Nc3juf//73wrLss9y/8UXX1z2+/j666+L9tkkfV68h/raTypTk/ZP+8/ZZ59dYdlVV1013j9q1Kj8fRxP8803X65v3775+4YPH56bbbbZKhzz2c/vvvvuq3Z7JUlq6sw0kiSpCgx/IXMli4yQ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Cxy3pY7J/fffv+zX4r0xCxXnQp5bauavcs/HPLecc0b2NXhftBHvk/fL++b9T89xWJmm+lp1tT/V5JhvDK9V2TVMbfGdVdk+m/2OLPy+Zsaz+eabL2yzzTYVrp8KMbMZy1PTiJnMarINW2yxRa3fl+fFmp8XOf44Dml3jkuOT47TUphvhlkT11prrXjtxXcE17/MjFeb8yLfH3vvvXf8nuG1eayy2eWolcV1NtfenJeZiW6vvfaqMCNfdTwvNu3zYm3Qb6MGG+ejBRdcMG4z11Vnnnlm+PXXX2t9vNS0X/fNN9/Emm9pvVzTMdsoQ3zLUe52VdbXpQ1q4qGHHorXilz/c73IMU2/oJzXSjfav6o+YeGtNtfhNTnmS2mqr1WX3ws1OeZn9Gvl5Wrg6quvZqa13AsvvJC/74QTToj3PfDAA7lnnnmmwm3y5MlxmZdffjk3++yz51ZfffW4jkcffTR3++235/71r3/lllpqqdzEiRNztbHwwgvndtttt9yNN96Ye+yxx3L/+c9/cp06dcottNBC+ddObrjhhride++9d+6RRx7JXXrppbl27drlNttsswrL7bDDDrmNN944d/HFF8d1sp3dunXLtWjRIvfwww9XWPbPP//MbbXVVnE9p512Wnxf9957b+6kk07KPfjgg2W9h3K3i3Wz3Omnn170Of/4449lvdY111wTP5stt9wyt80228T1sd5SNt1009xKK62U69+/f2yjxRZbrGiZwu1gvbRz4f1TpkyJyy+77LJxH9hzzz1z8803X27DDTcs+drjxo3LzTbbbLmNNtood+edd8a/Dz744Li9hxxySFnv9dRTT801a9YsN2zYsPgeR4wYkWvVqlVun332qbDcr7/+Gt8n+w1tQbttt912sb1p/8b2WnW1P4H75plnnrgMy/Icnsvx1Nheq64MHTo0t8Yaa+TOOeeceDzffffdcb9lW6699toKy3711VfxHLPiiivm/vvf/+bGjBmTW2+99XJzzTVX7u23384vd8899+Q6d+6cO/bYY+MytOthhx0W9+F//vOfRdvAe+axnXfeOb4+n8fll18ezxvlKHe7wHG77rrrFh2TH374YdmfWdu2beM5cP/994/79YABA2p9Pn7//fcrbMdFF11U8rzGcnjrrbfi+1p//fXj++T98r55LT6H2hyHlWmqr1WX+1NNjvkZ/VpVXcPUFt9Z//jHP4qOJ25c51T2ff3444/nzjvvvFyHDh3i8fTuu++WXP+2224bn8ftlltuqdE2sE/VlufFmp8X2S9bt24dj0fa++ijj47HKdeChfbbb7+4LMs89NBD8Xr5rLPOyt100021Oi+eeOKJ8dzeu3fveJ3EsqWuo7nmWHrppXPzzjtvXCfbyXG0wAIL5BZZZJHc1KlTq32fnheb/nmxNl577bW4X3Gtc9ddd8XrKfbLNm3a5Hr06JH7+++/a3W81KRf9/nnn8dz4TLLLJO74oorcuPHj4+f30EHHZSbNGlSWe+j3O2qrK/73HPPlf2Z8X643ue6n+tE2pLjkH4Bx2ry6aeflvyOYTn6WN9//33sVxU+vuCCC5a83qvpdXhNjvnKNNXXqqv9qSbHfGN4raTOgkZff/11pc/bY489cnPMMUelX1CFJ5dyffnll0X3sW1szymnnFIhuMMJZ/PNN6+wLDsUy953331VrpOgDF+ynAizzj333Nj5yx6UNVGT7UoXoQSxauuvv/7K/5v1VBU0yi5LYKxU0KgQnUnauZzXZ+etLGjEFwYHwrRp0yrcz+c099xzV7sd33zzTfzi2nfffSvcz4HEAfXGG2/k70sXZ08//XT+vj/++CO3wgor5NZaa61G81qp/asKsNZkf+KkwX3pojV78uXkwrqq0pCvVZdKHd+8/sorr5xbcsklK9x/xBFH5Fq2bJn76KOP8vfxRc2FUr9+/fL3fffdd7nff/+9aL2DBg2K7/uTTz7J3/fZZ5/FY+SAAw6o9Xsod7vAccvxOz2yxy3bXlnQqNzzcVZ157Udd9wxvq8UeAbvm/d/5JFH1uo4rExTfC3an+/outifanLMN4bXqq+gEd9d1alsvyYwzf3HH3980XPo5NCh2GSTTWKbV9YJLHcbasLzYs28/vrr8fgjqJNFIJdO3bfffpu/b/To0bHNb7311rLXX915MXtOJvhU2bUBP7jxGB3qLL6LuX/UqFHVbovnxaZ/XqwNrs8Lr9Gz++MTTzxRq+OlJtcRBF8IunANVhs12a5y+rrVWXPNNeP1Ptf9yVNPPRXXS6JCVTi+2VZ+yK9MVdd7NbkOL/eYr0xTfC3af7Fq+sE12Z9qch0/o1+rwYNG7MSc6GobHKoJXqN58+YVLrKffPLJuI0333xzhWXp6M0555xl/WJL9hHR7KzFF188/spTWzXZrroIGmVVFzTKqqugUVZVQaOBAwfGCGj2wgjs3PPPP3+1606/xBQG87744ot4fzYKS0YVGVCFOBBZlk5+Y3itcoJGNdmfiFBzX/bLK3sxyRdZVRrytapDdD0biKsNMoLI3sgiw65nz55Fy3Ju4aRc+H4KpQ5idtv4JY77sifvmqrJdtVF0CirqqBRuefjrKrOa7wP3g+/0hfioplf0GtzHJbSVF+rnKBRuftTXXyPNuRrNcagEUE+7i/V9meccUZ8jMzFXXfdNf4gVeo8UR9Bo8p4XiyN7D/aqjCbgXN94S/cXCNyrVgTNbneqypoRGZDqfUQXCgnyOB5cdY4LyZkRDICZHqQ7VPYia/J8VLudUQKonBNVVs12a7pDRpxfc/zhw8fXvQYfcvqMsWOO+64+PyqRiVUdb1X7nV4TY75yjTF1yonaHRqDfan6e1fNORrZdVZIWxqd/z555/5W7aWB+M3GY+62267hfHjx4dffvml0vWkcZqM6awN1s9rZ6eoff311+P/qYuT1bJlyzgGMD1emSlTpsSxf9l1fvrpp3EMOWN4jznmmDiOtkWLFnGZa6+9tqxtrc12UY+F12FMfM+ePePY9qaGugK///57OOSQQ8IXX3wRfvjhh3D99deH0aNHhyOPPLLk2N9sbab0udE2WQsttFAcQ5z9XPl34eePdB91oGbEa9VGTfYn/r388svHfanUtmSXTXVA+H99v1ZNUffjueeei/U8nnnmmVqtg/PVE088UeH45hz1wQcfVNpePF7dOGjqJPGel1lmmfx9jz/+eOjQoUN4++2347hrHqduF/t8ObXdarNdvCb1m2ibFVZYIZx99tk1qg02PUqdj8vF++T9VPZe33///XzthJoch5y3C+smNYXXqo2a7E81/b4qrFtXn6/V0LLXOun2999/V/u8iRMnxv9nzwnJVVddFduVehzUVWR92XNuFp8j5xHOH0suuWQ49thjS15XUeugVD3Cct+j58XS2P+oUUUtl6q+0/gM+V5abbXVYu1L6glR34r6Qv/+979jraP6tO6668a6R1y7vPDCC7H2B9eyXLNSU4naHonnxf9nVj0vUnuWOkWF19k1kepDFvbByjleanIdwbmJ44c6Nrvsskus00I9Gz7bcq8Fa7NdfBdzDNPn22OPPcquDVZZ26X7qvoM0ncB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GhzBoc033zxssMEGoXXr1gaLJEmSJKkRcniapAb1999/h1NOOSUsssgiYc455wwTJ06M9x933HEOT5MkSZKkRsSgkaQGdeqpp8bp7EeMGBFatWqVv79Lly7hiiuusDUkSZIkqZEwaCSpQV133XXhsssuC7vttlto3rx5/v6VV1451jiSJEmSJDUOBo0kNajPP/88FsMuNWztjz/+sDUkSSrT448/HrbZZpuw8MILx/qAd955Z4XH+V496qijYjbvHHPMEZfbY489whdffFFyfUxO0atXr5LrkiTNmgwaSWpQK664YnjiiSeK7r/99tvDaqutZmtIklSmn376KayyyirhwgsvLPn4zz//HF5++eVYN5D/jxo1Krz77rth2223Lbn8yJEjnZxCklSBs6dJalAnnHBC2H333WPGEdlFXMC+8847cdjavffea2tIklQmsoK4VaZdu3Zh3LhxFe674IILwlprrRU++eSTsOiii+bv/9///hfOOeec8MILL4SFFlqo2te+4447wkknnRTef//90LZt2/jDz1133RUzmiRJTYeZRpIaFGn0t956a7jvvvvir5nHH398eOutt8I999wTNttsM1tDkqR6NGXKlPj9O88881TISNpll11ixtKCCy5Y7TomTZoUl99zzz3jd/hjjz0W+vbtG4e3SZKaFjONJDW4nj17xpskSWo4v/76azj66KPDrrvuGuaee+78/Ycddljo3r172G677cpaD0GjP//8MwaKFltssXgfdZMkSU2PQSNJDerTTz+Nv3B26tQp/v3888+Hm266Kaywwgph3333tTUkSaoHFMXeeeed49Dwiy++OH//3XffHR555JHwyiuvlL0u6ij16NEjBor4EWjzzTcPO+ywQ2jfvr1tJ0lNjMPTJDUoft189NFH478nT54cNt100xg4OuaYY8LJJ59sa0iSVA8Bo379+oWJEyfGGkfZLCMCRh988EEcrtaiRYt4w/bbbx822mijkutr3rx5XM/9998ff/ShTtKyyy4b1y9JaloMGklqUK+//noswInbbrst/kr59NNPx2yja665xtaQJKkeAkbvvfdeeOihh0LHjh0rPM5wtVdffTVMmDAhf8O5554brr766krXS9bwuuuuG4thk6XUqlWrMHr0aNtOkpoYh6dJavCL19atW8d/c/Gapv1dbrnlYo0ESZJU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UaNGhWuuuSbe9/fff8/grVRd+/PPP8OVV14Z2x6zzz57mGuuuWIAYcKECaFZs2Z+6E1UNjDUsWPHMHny5LDrrruGn376yXZvou1dKhg4YsSIsMsuu4S33nprhmyXJGnmZdBIkmYhCy64YNhmm23CM888k79vu+22C1tssUU49thj49+zzeZXQ1M0adKkcPvtt8d/EzDae++9w9Zbbx2OPPLI8OWXX87ozVM9ePbZZ2NwKGnTpk24/PLLYxDxxBNPDN9++62fexORAkUEgLNB4PQjAMf53HPPHU466aTwySefVHiOJElVsWcgSU10GBodwyR1DggWrLnmmuGVV17J3zfHHHOEgw46KPz4449xmJqZRk1DtkPYokWL0L1799CqVavw4osv5u+nI8mQpQsuuGAGbaXqq91p5w033DA8/vjj8W/OBz/88EP899FHHx1eeumlcMMNN8S/PeZnfilQRHsz9PTll1/OP5ba95hjjgl//PFHDBjCoJEkqRwGjSSpCWrevHkMFOC7777LdyjIIlpxxRXj30888US877fffgtt27YNffv2DXfeeWcMImjmDRZmMw6Q/l5sscXCoosuGsaMGRP/pvPI3/vtt1+sbfTuu+/OwC1XbdG+pdp98cUXD6uttlo44YQTwgorrBCWWmqp8NRTT8XHNt9889C1a9eYdZR9jmYO06ZNC4cffngYNmxY/Jv2J0jEcOMddtghBgVTsJC2TdmjXbp0CQMGDAg33XRT+Oijj8wqlSSVxaCRJM2k6ChwK0Qw4P777w+9e/eOQYFevXqFc845J3zxxRfx8U6dOsUO5N13313heXQ23nvvvdiZUONH9kBhhgjBQjqJH3/8cbjrrrvC66+/ng8IzDfffGGNNdYIDzzwQPw73b/zzjvHIUwMZdLMh3ZM7U7A99FHH42BYgreU+j+7bffjsXuH3roobDVVlvF57Rr1y5sueWW4c0334x1zgwazXzIGqONQVCIfYDz+m233RbWW2+9MHHixJhdVti22267bfwOoMaZmUaSpHIYNJKkmRSdBG4EiRiKkoJCdBQpdE3A6KqrropFb2+55ZZw8skn54vhMkTt4Ycfjn+njKSNN944zqrFr9hqvFKgiI5itv4UGWM333xzWGWVVWJGARkmBIRGjhwZH59zzjlDt27dYhCBZWl31jX//PPHrBQKYv/6668z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MGFCbtq0aZWu/9tvv83tu+++ubXWWqtCu3/99de5li1b5vdHnH/++bkNNtggN//88+e22Wab3FNPPVVynexTvKe0b2n6HHvssbmNN944N3HixPznm/0/7bzUUkvlRo4cmX/OZ599ltt2221zO++8c/z7xRdfzHXv3j223ZZbbhnPFwsuuGDugQceKNl+GD9+fG799dfPrb322rn27dvnOnbsmNtrr73iPllKanPbvX59/PHHuaeffjp/XLNf9OjRIzds2LDcO++8k3vmmWfieXyjjTaKj7Mc54obb7yxQvsuvfTS8Tm///577quvvor7wyWXXFLhtS666KLcMssskxszZkz8O/t9VOq7qapzmSRJdcmgkaRZDh39ddddN7fjjjuWvPimg3799dfHznxy+umn59q2bRv/X+jnn3+O9y+55JK5Dh065BZZZJFc165dYwez1Poxbty43EILLRT/n9DhWG+99XLvvvtulQECTb+XX345BmbouNExxOuvvx47fKNGjcov98cff8T/X3bZZbnZZ589d8wxx8S/6dgRXGB52pwgwYorrphbYokl8p3BUm313HPPxecQWEhtilatWuUOPfTQ2KlMfvjhB5t6On300Ue5L7/8ssJ9dMALO+Hp75tvvjkGbgjgZtswtRNBw5122inekt9++y13/PHHx0Bj9r7vv/8+9/zzz8fgQp8+fXJbb7110bYUBrOffPLJuB9WxiBR/eMYPOOMM+J5vF27dvEHgxdeeCE+dsUVV8RgbsK5+sADD4zH9CuvvJIPEA0ePDjuA8mee+4ZzxcEmEFAkOAj+w37xu233x731aFDh+befvvtktvFvuj5X5I0Izg8TdIsgSB5Gl5EsVjqSjBEAAzjYEgY9SIY6kVxYWYyYhhBqj0xbNiwWKuC2XBYFmkoGMVoGb7EsDTqEDG0hP9TtDStvxBD0ag/xDCkNH06w1wYnka9isJtT0WsHXIyffsAU1FTX4bPn2nJGf5HzRmGe1BnhmElqa5UqjkF9gmGEVFHhuFDFJpmCmyKEzMEiZpXDCek5hS1r6hVU9hWabgJQxgZasKwpTSsiPUy21l2liMKYqftqGyojKpGezKUq1RNGnzxxRdx+Ff6e+WVV47H4UsvvRT/Tu2T/k+RefYTil1TxDjVE1p++eXjzIfUsEn3sR6GDTKMDAxhKyxOnsXjFDLP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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "bars = ax.bar(results.index, results[\"elapsed_s\"], width=0.5)\n", "for bar, val in zip(bars, results[\"elapsed_s\"]):\n", " ax.text(\n", " bar.get_x() + bar.get_width() / 2,\n", " bar.get_height() + 1,\n", " f\"{val:.0f} s\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " )\n", "ax.set_ylabel(\"Elapsed time (s)\")\n", "ax.set_title(\n", " f\"Initial-conditions ingestion time\\n\"\n", " f\"IFS: {IFS_DATE_START} → {IFS_DATE_END} | \"\n", " f\"ERA5: {ERA5_DATE_START} → {ERA5_DATE_END}\"\n", ")\n", "ax.set_ylim(0, max(results[\"elapsed_s\"]) * 1.2)\n", "fig.autofmt_xdate(rotation=15, ha=\"right\")\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "15", "metadata": {}, "source": [ "## Summary\n", "\n", "- **IFS from open-data (local)** — fetches ECMWF open-data GRIB from AWS via `earthkit-data`, regrids to N320. No credentials needed. ~2 years of coverage.\n", "- **ERA5 from CDS (local)** — submits CDS API requests (surface, soil, pressure-level), waits for the CDS queue, downloads GRIB, regrids to N320. Covers the full ERA5 archive back to 1940; queue latency dominates.\n", "- **IFS from Brightband (Modal, `us-east`)** — zarr-to-zarr read with variable name mapping and regrid from the Earthmover ArrayLake marketplace. Requires `ARRAYLAKE_API_TOKEN`.\n", "- **ERA5 from ARCO (Modal, `us-central1`)** — one Modal container handles both dates sequentially, co-located with the public GCS bucket. Includes cold-start and volume commit overhead." ] }, { "cell_type": "markdown", "id": "16", "metadata": {}, "source": [ "## Cleanup\n", "\n", "Remove all benchmark data from the bucket." ] }, { "cell_type": "code", "execution_count": null, "id": "17", "metadata": {}, "outputs": [], "source": [ "# IC data is written to the Modal IC Volume and auto-cleaned by run_forecast.\n", "# No S3 objects to delete here." ] } ], "metadata": { "kernelspec": { "display_name": "Python (Pixi)", "language": "python", "name": "pixi-kernel-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.12.13" }, "pixi-kernel": { "environment": "user-guide" } }, "nbformat": 4, "nbformat_minor": 5 }