Repository navigation
Conversation
…st` and `air get` Multi-task AIR jobs, such as the official DAB example that runs a notebook prep task before its ai_runtime_task, were omitted from `air list` and showed N/A experiment and accelerators in `air get`, because both read tasks[0]. - Discover the first AIR task in task order: an ai_runtime_task, a legacy gen_ai_compute_task with a training script, or a foreach wrapping one. Non-AIR tasks no longer feed status, timing or the MLflow lookup. - A job with several AIR tasks lists one row per task. Rows share the run_id; JSON output gains task_key. Each row reads its own task runs. - `air get` gains --task-key (default: the first AIR task), its JSON gains task_key, and the text view adds a Task line when the run has several. - The list detail pane opens the selected row's task; `cancel --all` cancels a multi-row run once. - The index-path row cache stores one row per AIR task (air-list-runs-v3). Verified against a real run of universe ai-compute/dabs/examples/03_multitask_dag on e2-dogfood (run 47834518189346). CNXT-2622 Co-authored-by: Isaac <[email protected]>
Co-authored-by: Isaac <[email protected]>
Contributor
|
Commit: Regression test reportSelected 7 changed tests (limit=20, 0 not selected) 7 tests: regression=7 unreleased=0 coverage=0 failing=0
TestAccept/air/control-chars: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): TestAccept/air/get: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): TestAccept/air/get-ai-runtime: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): TestAccept/air/get-multitask: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): same output as main (2699068) TestAccept/air/get-pending: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): TestAccept/air/help: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): TestAccept/air/list: branch ✅ | main (2699068) ❌ | latest (v1.26.0) ❌main (2699068): latest (v1.26.0): |
Collaborator
✅ Integration test reportCommit: 52dfc19
Top 3 slowest tests (at least 2 minutes):
|
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Multi-task AIR jobs are supported, and the official DAB example (universe
ai-compute/dabs/examples/03_multitask_dag) runs a notebookpreptask before itsai_runtime_task.air listandair getreadtasks[0], so that run was omitted from the defaultair list, listed with null experiment/accelerators byair list --all-status, and rendered withN/AExperiment and Accelerators inair get.Selection rule (also posted on CNXT-2622):
ai_runtime_task, a legacygen_ai_compute_taskwith a training script, or afor_each_taskwhose inner task is one. A run is an AIR run iff it has at least one such task. Non-AIR tasks (the prep notebook) no longer feed status, timing, experiment, accelerators or the MLflow lookup: the run is narrowed to the selected task's task runs (all attempts) before the display helpers read it.air listshows one row per AIR task. Rows sharerun_id; JSON gainstask_key. Each row's fields and MLflow link come from its own task runs, and the experiment/accelerator filters apply per task. The index-path row cache stores the whole set per run (air-list-runs-v3).cancel --allcancels a multi-row run once.air get. New--task-keyflag; default is the first AIR task. A key that is not one of the run's AIR tasks is anINVALID_ARGSerror listing them. JSON gainstask_key; the text view adds aTaskline only when the run has several AIR tasks. Theair listdetail pane opens the selected row's task.for_each_taskwrapping an AIR task is that AIR task (sweep view /is_sweep). A job mixing a direct AIR task and a foreach AIR task now yields one row (or one selectable task) each, andair listandair getagree on the default (today list inspectedtasks[0]while get picked any foreach).Out of scope:
air logskeeps its last-task behavior.Why
Fixes CNXT-2622. Follows the single-task fix in #7587.
Tests
Unit tests for the five requested shapes (AIR task first, AIR task second, two AIR tasks, foreach AIR task, no AIR task) plus retries sharing a key, run narrowing, per-task list rows and filters,
air get --task-keyselection and error, the detail pane, the legacygen_ai_compute_taskpath and the per-task row cache. New acceptance testacceptance/air/get-multitask; theair listfixture gains the notebook-first DAB shape.Verified against a real run of
03_multitask_dagdeployed to e2-dogfood (run47834518189346) with a build of this branch and a build ofmain:mainair list --all-status -o jsonexperiment_name: null,accelerator_type: nullair-byot-multitask-dag,GPU_1xA10×1,task_key: trainair getN/A, AcceleratorsN/Aair-byot-multitask-dag,1x A10air get --task-key preprun … has no AI Runtime task "prep"; its AI Runtime tasks are: traingo test ./cmd/air,go test ./acceptance -run TestAccept/airandgolangci-lint run ./cmd/air/...pass.This pull request and its description were written by Isaac.