1. Quickstart Guide
This section provides a recipe for an end-to-end run of nested-EAGLE on Ursa. At present, Ursa is the only supported platform. Future development will include additional platforms.
Note
GNU make version 3.82 or higher is required.
Complete the following steps from the src/ directory.
Note
The EAGLE runtime software environment currently requires over 50 GB of disk space. Consider available space, quota, etc. when choosing where to clone the EAGLE repository and run the following steps.
1.1. Building and Running EAGLE
Create all environments
make env cudascript=ursa
This step creates the runtime software environment, comprising conda virtual environments to support data preparation, training, inference, and verification. The
conda/subdirectory it creates is self-contained and can be removed and recreated by running themake envcommand again, as long as pipeline steps are not currently running.Developers who will be modifying Python driver code should replace
make envwithmake devenv, which will create the same environments but also install additional code-quality tools for formatting, linting, shellchecking, typechecking, unit testing, and YAML linting.Create the EAGLE YAML config
make config compose=base:ursa >eagle.yaml
The
configtarget operates on.yamlfiles in theconfig/directory, so this command composesconfig/base.yamlandconfig/ursa.yamland redirects the composed config intoeagle.yaml.Set the
app.basevalue ineagle.yamlto the absolute path to the currentsrc/directory.The run directories from subsequent steps, along with the output of those steps, will be created in the
run/<expname>subdirectory ofapp.base, where<expname>is the value ofapp.experiment_name.Verify the
app.accountvalue. The default configuration setsapp.accounttoepic. If you do not have access to theepicaccount on Ursa, update this value to an account you are authorized to use.Create training data
make data config=eagle.yaml
This step provisions data required for training and inference. The
datatarget delegates to targetsgrids-and-meshes,zarr-gfs, andzarr-hrrr, which can also be run individually (e.g.make grids-and-meshes config=eagle.yaml), but note thatgrids-and-meshes, which runs locally, must be run first. Thezarr-gfsandzarr-hrrrtargets can be run in quick succession, as they submit batch jobs: Do not proceed until their batch jobs complete successfully (see the filesrun/<expname>/data/*.out).Train the ML model
make training config=eagle.yaml
This step trains a model using data provisioned by the previous step. It submits a batch job; do not proceed until the batch job completes successfully (see the file
run/<expname>/training/runscript.training.out).Run inference
make inference config=eagle.yaml
This step performs inference, producing a forecast. It submits a batch job. Do not proceed until the batch job completes successfully (see the file
run/<expname>/inference/runscript.inference.out.)Model verification
make vx-grid-global config=eagle.yaml make vx-grid-lam config=eagle.yaml make vx-obs-global config=eagle.yaml make vx-obs-lam config=eagle.yaml
Before running verification, the WXVX driver will run
prewxvxto prepare forecast output from the previous step. See the filesrun/<expname>/vx/prewxvx/{global,lam}/runscript.prewxvx-*.outfor details.These steps perform verification of the
globalor LAM forecasts against gridded analyses (*-grid-*) or PrepBUFR observations (*-obs-*) as truth. Each submits a batch job, so the fourmakecommands can be run in quick succession to get all the batch jobs running in parallel. When each batch job completes, MET.statfiles and.pngplot files can be found under thestats/andplots/subdirectories ofrun/<expname>/vx/grid2{grid,obs}/{global,lam}/run/. The filesrun/<expname>/vx/*.logcontain the logs from each verification run.Make additional visualization outputs
make vis-grid-global config=eagle.yaml make vis-grid-lam config=eagle.yaml make vis-obs-global config=eagle.yaml make vis-obs-lam config=eagle.yaml
These steps will first call
eagle-tools’spostwxvxtool to create and save a series of netCDF files with all relevant statistics in the correspondingwxvxdirectory for each variable. It will then create a series of basic plots (provided by DataArray.plot() from thexarraylibrary) in therun/<expname>/visualization/grid2{grid,obs}/{global,lam}/plots-basicdirectory.For the grid-based
vis-grid-globalandvis-grid-lamtargets, additional error plots (forecast vs truth differences) will be created underrun/<expname>/visualization/grid2grid/{global,lam}/plots-spatial-stats/. These plots depend on 1. The config value at key-pathvx.grid2grid.{global,lam}.wxvx.wxvx.ncdiffsbeing set totrue, which instructs MET to produce netCDF difference files during verification; and 2. The config block at key-pathvisualization.grid2grid.{global,lam}.visualization.spatial_stat_plots, which enables and configures plot generation, being present.Run inference in near-real-time (NRT)
Create the EAGLE NRT config
make config compose=base:ursa:nrt > nrt-composed.yaml
Set the
app.basevalue innrt-composed.yamlto the absolute path to the currentsrc/directory.
This should match the path used when generating the main EAGLE config above.
- Two additional paths may require attention:
inference.anemoi.checkpoint_dir
grids_and_meshes.rundir
If you are following only the quickstart workflow, you do not need to modify these values. The config automatically pulls both paths from the quickstart run. However, if you ran multiple experiments or stored outputs in a different location, update these paths so they point to the correct directories.
Realize the EAGLE NRT config
make realize config=nrt-composed.yaml > nrt.yaml
This creates the final config to begin a NRT run. It is required because it freezes the
NOWenvironment variable across the entire configuration. Since jobs may be submitted at different times, this ensures a consistent timestamp is used throughout the run.Load current initial conditions
make data config=nrt.yaml
Run inference
make inference config=nrt.yaml
Your forecast will save to
path/to/eagle/src/run/default/nrt_inference/YYYY/MM/DD/HH/inference.