Skip to content

perf(ui): speed up experiment runs page with many metrics/params#3

Open
vikranth-t wants to merge 6 commits into
instadeep-3-12-0from
fix/mlflow-ui-performance
Open

perf(ui): speed up experiment runs page with many metrics/params#3
vikranth-t wants to merge 6 commits into
instadeep-3-12-0from
fix/mlflow-ui-performance

Conversation

@vikranth-t

Copy link
Copy Markdown
  • Virtualize the runs sort-selector dropdown so only visible options are mounted, eliminating the tab freeze when opening sort on experiments with thousands of metrics/params (full list still available; no cap).
  • Reset the cumulative column-key caches when switching experiments to fix unbounded growth and stale columns leaking across experiments (which could also wrongly trip the large-column-count threshold); anti-flicker behavior within an experiment is preserved.
  • Memoize getVisibleTagKeyList in ExperimentViewRunsControls (an O(runs*tags) scan) so it no longer re-runs on every render, matching the other call sites.

Related Issues/PRs

Closes | Relates to #issue_number

What changes are proposed in this pull request?

How is this PR tested?

  • Existing unit/integration tests
  • New unit/integration tests
  • Manual tests

Does this PR require documentation update?

  • No.
  • Yes. I've updated:
    • Examples
    • API references
    • Instructions

Does this PR require updating the MLflow Skills repository?

  • No.
  • Yes. Please link the corresponding PR or explain how you plan to update it.

Release Notes

Is this a user-facing change?

  • No.
  • Yes. Give a description of this change to be included in the release notes for MLflow users.

What component(s), interfaces, languages, and integrations does this PR affect?

Components

  • area/tracking: Tracking Service, tracking client APIs, autologging
  • area/models: MLmodel format, model serialization/deserialization, flavors
  • area/model-registry: Model Registry service, APIs, and the fluent client calls for Model Registry
  • area/scoring: MLflow Model server, model deployment tools, Spark UDFs
  • area/evaluation: MLflow model evaluation features, evaluation metrics, and evaluation workflows
  • area/gateway: MLflow AI Gateway client APIs, server, and third-party integrations
  • area/prompts: MLflow prompt engineering features, prompt templates, and prompt management
  • area/tracing: MLflow Tracing features, tracing APIs, and LLM tracing functionality
  • area/projects: MLproject format, project running backends
  • area/uiux: Front-end, user experience, plotting, JavaScript, JavaScript dev server
  • area/build: Build and test infrastructure for MLflow
  • area/docs: MLflow documentation pages

How should the PR be classified in the release notes? Choose one:

  • rn/none - No description will be included. The PR will be mentioned only by the PR number in the "Small Bugfixes and Documentation Updates" section
  • rn/breaking-change - The PR will be mentioned in the "Breaking Changes" section
  • rn/feature - A new user-facing feature worth mentioning in the release notes
  • rn/bug-fix - A user-facing bug fix worth mentioning in the release notes
  • rn/documentation - A user-facing documentation change worth mentioning in the release notes

Is this PR a critical bugfix or security fix that should go into the next patch release?

What is a minor/patch release?
  • Minor release: a release that increments the second part of the version number (e.g., 1.2.0 -> 1.3.0).
    Minor releases are expected to contain larger changes, such as new features and improvements. Non-critical bug fixes and doc updates can be included as well. By default, your PR should target the next minor release.
  • Patch release: a release that increments the third part of the version number (e.g., 1.2.0 -> 1.2.1).
    Patch releases are typically only performed when there has been a major regression or bug in the latest release. For the sake of stability, your PR should not be included in a patch release unless it is a critical fix, or if the risk level of your PR is exceedingly low.
  • This PR is critical and needs to be in the next patch release
  • This PR can wait for the next minor release

- Virtualize the runs sort-selector dropdown so only visible options are
  mounted, eliminating the tab freeze when opening sort on experiments
  with thousands of metrics/params (full list still available; no cap).
- Reset the cumulative column-key caches when switching experiments to
  fix unbounded growth and stale columns leaking across experiments
  (which could also wrongly trip the large-column-count threshold);
  anti-flicker behavior within an experiment is preserved.
- Memoize getVisibleTagKeyList in ExperimentViewRunsControls (an
  O(runs*tags) scan) so it no longer re-runs on every render, matching
  the other call sites.

Signed-off-by: Vikranth Tirumuru <v.tirumuru@instadeep.com>
@vikranth-t vikranth-t self-assigned this Jul 7, 2026
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

vikranth-t and others added 5 commits July 7, 2026 08:35
The API Keys side-nav item was half-merged: it referenced a 'api-keys'
tab, KeyIcon, and an api-keys tooltip componentId that were never added
to the type declarations/imports, failing `yarn build` and leaving the
server with no index.html ("landing page not found"). Wire up the
missing type union members and icon import (route and page already exist).
Runs inherit their permission from the parent experiment, so a user who
created a run inside an experiment they don't manage (e.g. one imported or
migrated from another environment) lacked MANAGE and could not delete their
own run. validate_can_delete_run now falls back to run ownership -- matching
the authenticated username against RunInfo.user_id and the mlflow.user tag --
so creators can delete (and restore) runs they own. Covered by new tests in
tests/server/auth/test_auth_workspace.py.

Also revert earlier changes that turned out to be unrelated to this fix:
the runs-page perf work (sort-selector virtualization, cumulative column-key
reset, controls memoization), the assessment-cleanup refactor in the
SQLAlchemy store, the GatewaySideNav API-keys build fix, and the
DeleteRunModal error-surfacing tweak. Version plumbing is left intact.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Vikranth Tirumuru <v.tirumuru@instadeep.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants